From a0b95b9c70b783d4f8fb8e2bf00eacac90ecfd2e Mon Sep 17 00:00:00 2001 From: Guy Carmeli Date: Thu, 5 Sep 2024 14:10:06 +0300 Subject: [PATCH] Update to TypeScript 5.5 + ESLint 9.9 (#171) This PR updates TypeScript to v5.5.x and ESLint to 9.9.x. As part of the ESLint upgrade, several ESLing packages were dropped since they don't support the new flat config. This PR is a prerequisite to evaluating if we can drop the requirement of `@babel/plugin-proposal-decorators` since native support for [decorators](https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/#decorators) in TS was advanced to the stage 3 implementation. --- .nvmrc | 2 +- .vscode/settings.json | 2 + packages/eslint-plugin-obsidian/.eslintignore | 2 - .../eslint-plugin-obsidian/.eslintrc.json | 106 - .../eslint-plugin-obsidian/eslint.config.mjs | 154 ++ .../eslint-plugin-obsidian/jest.config.js | 1 + packages/eslint-plugin-obsidian/jest.setup.js | 5 + packages/eslint-plugin-obsidian/package.json | 45 +- .../src/dto/callExpression.ts | 19 +- .../eslint-plugin-obsidian/src/dto/class.ts | 6 +- .../src/dto/classFile.ts | 1 - .../src/dto/componentProps.ts | 8 +- .../eslint-plugin-obsidian/src/dto/context.ts | 6 +- .../src/dto/decorator.ts | 2 +- .../eslint-plugin-obsidian/src/dto/file.ts | 16 +- .../src/dto/functionalComponent.ts | 2 +- .../src/dto/generics.ts | 4 +- .../src/dto/identifier.ts | 2 +- .../eslint-plugin-obsidian/src/dto/import.ts | 4 +- .../eslint-plugin-obsidian/src/dto/method.ts | 3 +- .../src/dto/parameter.ts | 2 +- .../src/dto/property.ts | 2 +- .../src/dto/types/missingType.ts | 6 +- .../src/dto/types/singleType.ts | 4 +- .../src/dto/types/type.ts | 2 +- .../src/dto/types/typeIntersection.ts | 4 +- .../src/dto/types/typeLiteral.ts | 4 +- .../src/dto/types/typeReference.ts | 6 +- .../src/dto/variable.ts | 6 +- .../src/framework/fileReader.ts | 2 +- .../src/framework/pathResolver.ts | 2 +- packages/eslint-plugin-obsidian/src/index.ts | 7 +- .../circularDependenciesDetector.ts | 3 +- .../noCircularDependency/errorReporter.ts | 2 +- .../src/rules/noCircularDependency/index.ts | 7 +- .../stronglyTypedInjectComponent/index.ts | 7 +- .../injectComponentHandler.ts | 6 +- .../result/errorReporter.ts | 2 +- .../result/missingTypeError.ts | 2 +- .../result/redundantTypeError.ts | 2 +- .../result/result.ts | 2 +- .../result/success.ts | 2 +- .../typeValidator.ts | 20 +- .../dependencyResolver.ts | 6 +- .../errorReporter.ts | 4 +- .../unresolvedProviderDependencies/index.ts | 7 +- .../resolvedDependencyChecker.ts | 9 +- .../subgraphResolver.ts | 12 +- .../eslint-plugin-obsidian/src/utils/array.ts | 8 +- .../src/utils/assertions.ts | 2 +- .../eslint-plugin-obsidian/src/utils/ast.ts | 38 +- .../eslint-plugin-obsidian/src/utils/regex.ts | 2 +- .../circularDependencies.test.ts | 2 +- .../code/invalidGraphs.ts | 2 +- .../code/validGraphs.ts | 1 - .../code/invalidGraphs.ts | 2 +- .../stronglyTypedInjectComponent.test.ts | 2 +- .../tests/stubs/PathResolverStub.ts | 5 +- .../fixtures/graphWithSubgraph.ts | 2 +- packages/eslint-plugin-obsidian/tsconfig.json | 3 +- packages/react-obsidian/.eslintignore | 2 - packages/react-obsidian/.eslintrc.json | 117 -- packages/react-obsidian/.vscode/settings.json | 3 + packages/react-obsidian/babel.config.js | 4 +- packages/react-obsidian/eslint.config.mjs | 140 ++ packages/react-obsidian/package.json | 52 +- .../react-obsidian/src/decorators/Memoize.ts | 1 - .../src/decorators/inject/Inject.ts | 2 +- .../decorators/provides/MemoizeDescriptor.ts | 1 - .../react-obsidian/src/graph/ObjectGraph.ts | 6 +- .../src/graph/PropertyRetriever.test.ts | 2 +- .../src/graph/PropertyRetriever.ts | 8 +- .../src/graph/PropertyRetrieverDelegate.ts | 2 +- .../src/graph/ProviderBinder.ts | 3 +- .../src/graph/registry/GraphRegistry.ts | 14 +- .../graph/registry/GraphResolverChain.test.ts | 1 - .../ObtainLifecycleBoundGraphException.ts | 2 +- .../src/injectors/class/ClassInjector.ts | 4 +- .../components/ComponentInjector.test.tsx | 12 +- .../components/ComponentInjector.tsx | 2 +- .../components/InjectComponent.test.tsx | 11 +- .../injectors/components/InjectComponent.ts | 6 +- .../src/injectors/components/PropsInjector.ts | 1 - .../src/injectors/components/useGraph.ts | 3 +- .../src/injectors/hooks/InjectHook.ts | 1 - .../src/observable/Observable.ts | 4 +- .../observable/cold/ColdMediatorObservable.ts | 1 - .../src/observable/cold/useColdObservers.ts | 2 +- .../mediator/MediatorObservable.test.ts | 22 +- .../observable/mediator/MediatorObservable.ts | 2 +- .../src/observable/observable.test.ts | 8 +- .../src/observable/useObserver.ts | 3 +- .../src/observable/useObservers.ts | 7 +- packages/react-obsidian/src/utils/isDev.ts | 3 +- .../test/acceptance/obtain.test.ts | 5 +- .../test/acceptance/testKit.test.tsx | 4 +- .../CircularDependencyFromSubgraph.ts | 2 +- .../test/fixtures/CircularDependencyGraph.ts | 1 + .../test/fixtures/CircularDependencyGraph2.ts | 1 + .../test/fixtures/GraphWithOnBind.ts | 4 +- ...ifecycleBoundWithLifecycleBoundSubgraph.ts | 3 +- .../fixtures/ScopedLifecycleBoundGraph.ts | 2 +- .../SubgraphWithCircularDependency.ts | 1 + .../test/fixtures/UniqueNumberGraph.ts | 1 - ...functionalComponentReactLifecycle.test.tsx | 8 +- .../test/integration/lateInject.test.tsx | 1 + .../integration/lifecyleBoundGraphs.test.tsx | 17 +- .../test/integration/reactStrictMode.test.tsx | 2 +- .../integration/resolvePrecedance.test.tsx | 3 +- .../scopedLifecycleBoundGraphs.test.tsx | 11 +- packages/react-obsidian/testkit/index.ts | 1 - .../__snapshots__/index.test.ts.snap | 58 +- .../babel-plugin-obsidian/helpers/index.ts | 16 +- .../babel-plugin-obsidian/index.test.ts | 2 +- .../babel-plugin-obsidian/index.ts | 1 - .../babel-plugin-obsidian/unmagler/method.ts | 3 +- packages/react-obsidian/tsconfig.base.json | 2 +- yarn.lock | 1785 ++++++++++------- 118 files changed, 1750 insertions(+), 1235 deletions(-) delete mode 100644 packages/eslint-plugin-obsidian/.eslintignore delete mode 100644 packages/eslint-plugin-obsidian/.eslintrc.json create mode 100644 packages/eslint-plugin-obsidian/eslint.config.mjs create mode 100644 packages/eslint-plugin-obsidian/jest.setup.js delete mode 100644 packages/react-obsidian/.eslintignore delete mode 100644 packages/react-obsidian/.eslintrc.json create mode 100644 packages/react-obsidian/.vscode/settings.json create mode 100644 packages/react-obsidian/eslint.config.mjs diff --git a/.nvmrc b/.nvmrc index 3e558c9b..8ce70308 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18.12.0 +20.16.0 diff --git a/.vscode/settings.json b/.vscode/settings.json index f9dab0cd..7e3d9e26 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,8 +4,10 @@ "estree", "Middlewares", "MVVM", + "plusplus", "preconfigured", "TSES", + "tseslint", "unimported", "unmagler", "unsubscribers" diff --git a/packages/eslint-plugin-obsidian/.eslintignore b/packages/eslint-plugin-obsidian/.eslintignore deleted file mode 100644 index b3555380..00000000 --- a/packages/eslint-plugin-obsidian/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -dist/*, -wallaby.js diff --git a/packages/eslint-plugin-obsidian/.eslintrc.json b/packages/eslint-plugin-obsidian/.eslintrc.json deleted file mode 100644 index aedd4c42..00000000 --- a/packages/eslint-plugin-obsidian/.eslintrc.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "env": { - "es2021": true, - "jest": true - }, - "ignorePatterns": ["**/*.config.js"], - "extends": [ - "airbnb-base", - "plugin:import/typescript", - "plugin:@stylistic/disable-legacy", - "plugin:jest-formatting/recommended" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "sourceType": "module", - "project": "tsconfig.json" - }, - "plugins": [ - "@stylistic", - "@typescript-eslint", - "import-newlines", - "unused-imports", - "jest-formatting" - ], - "rules": { - "no-console":"off", - "no-empty-function": ["error", { "allow": ["constructors"] }], - "no-multi-spaces": "error", - "no-multiple-empty-lines": ["error", { "max": 1 }], - "@stylistic/max-len": [ - "error", - { - "code": 115, - "comments": 200, - "ignoreRegExpLiterals": true, - "ignoreStrings": true, - "ignoreTemplateLiterals": true - } - ], - "@stylistic/no-extra-semi": "error", - "@stylistic/lines-between-class-members": ["error", "always", {"exceptAfterSingleLine": true}], - "import/extensions": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "no-useless-constructor": "off", - "@typescript-eslint/member-delimiter-style": "error", - "import/no-unresolved": "off", - "class-methods-use-this": "off", - "no-use-before-define": "off", - "@typescript-eslint/no-use-before-define": ["off"], - "no-restricted-syntax": "off", - "import/no-named-as-default": "off", - "@typescript-eslint/ban-types": ["off"], - "import/no-extraneous-dependencies": ["error", {"devDependencies": true}], - "max-classes-per-file": ["off"], - "curly": ["error", "multi-line"], - "@stylistic/semi": ["error", "always"], - "@stylistic/comma-dangle": ["error", "always-multiline"], - "@stylistic/function-call-argument-newline": ["error", "consistent"], - "@stylistic/function-paren-newline": ["error", "multiline-arguments"], - "@stylistic/object-curly-newline": [ - "error", - { - "ObjectExpression": { - "multiline": true, - "consistent": true - }, - "ObjectPattern": { - "multiline": true, - "consistent": true - } - } - ], - "@stylistic/no-whitespace-before-property": "error", - "import-newlines/enforce": [ - "error", - { - "items": 3, - "max-len": 115, - "semi": false - } - ], - "no-plusplus": "off", - "@stylistic/no-trailing-spaces": "error", - "no-shadow": "off", - "@typescript-eslint/no-shadow": ["error", {"allow": ["Graph"]}], - "arrow-body-style": ["off"], - "@stylistic/quotes": ["error", "single", {"avoidEscape": true, "allowTemplateLiterals": true}], - "@typescript-eslint/lines-between-class-members": "off", - "@typescript-eslint/no-explicit-any": "off", - "import/prefer-default-export": "off", - "@typescript-eslint/no-unused-vars": "off", - "unused-imports/no-unused-imports": "error", - "unused-imports/no-unused-vars": [ - "error", - { "vars": "all", "varsIgnorePattern": "^_", "args": "after-used", "argsIgnorePattern": "^_" } - ], - "@typescript-eslint/ban-ts-comment": "off" - }, - "settings": { - "import/resolver": { - "node": { - "extensions": [".js", ".ts"] - } - } - } -} diff --git a/packages/eslint-plugin-obsidian/eslint.config.mjs b/packages/eslint-plugin-obsidian/eslint.config.mjs new file mode 100644 index 00000000..875344cb --- /dev/null +++ b/packages/eslint-plugin-obsidian/eslint.config.mjs @@ -0,0 +1,154 @@ +import { fixupConfigRules, fixupPluginRules } from "@eslint/compat"; +import stylistic from "@stylistic/eslint-plugin"; +import eslintTs from "typescript-eslint"; +import eslintJs from "@eslint/js"; +import eslintJest from "eslint-plugin-jest"; +import globals from "globals"; +import tsParser from "@typescript-eslint/parser"; + +export default eslintTs.config( + { + ignores: ["**/*.d.ts", "**/*.js"], + }, + { + files: ["**/*.ts", "**/*.tsx"], + name: "EslintPluginObsidian", + languageOptions: { + globals: { + ...globals.jest, + }, + sourceType: "module", + parser: tsParser, + parserOptions: { + project: "tsconfig.json", + tsconfigRootDir: import.meta.dirname, + }, + }, + settings: { + "import/resolver": { + node: { + extensions: [".js", ".jsx", ".ts", ".tsx"], + }, + }, + }, + extends: [ + eslintJs.configs.recommended, + ...eslintTs.configs.recommendedTypeChecked, + eslintJest.configs['flat/recommended'], + stylistic.configs["recommended-flat"], + ], + rules: { + "no-console": "off", + "no-empty-function": ["error", { + allow: ["constructors"], + }], + + "no-multi-spaces": "error", + + "no-multiple-empty-lines": ["error", { + max: 1, + }], + + "@stylistic/max-len": ["error", { + code: 115, + comments: 200, + ignoreRegExpLiterals: true, + ignoreStrings: true, + ignoreTemplateLiterals: true, + }], + + "@stylistic/no-extra-semi": "error", + + "@stylistic/lines-between-class-members": ["error", "always", { + exceptAfterSingleLine: true, + }], + + "import/extensions": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "no-useless-constructor": "off", + "@stylistic/member-delimiter-style": "error", + "import/no-unresolved": "off", + "class-methods-use-this": "off", + "no-use-before-define": "off", + "@typescript-eslint/no-use-before-define": ["off"], + "no-restricted-syntax": "off", + "import/no-named-as-default": "off", + "@typescript-eslint/ban-types": ["off"], + + // "import/no-extraneous-dependencies": ["error", { + // devDependencies: true, + // }], + + "max-classes-per-file": ["off"], + curly: ["error", "multi-line"], + "@stylistic/semi": ["error", "always"], + "@stylistic/comma-dangle": ["error", "always-multiline"], + "@stylistic/function-call-argument-newline": ["error", "consistent"], + "@stylistic/function-paren-newline": ["error", "multiline-arguments"], + + "@stylistic/object-curly-newline": ["error", { + ObjectExpression: { + multiline: true, + consistent: true, + }, + + ObjectPattern: { + multiline: true, + consistent: true, + }, + }], + + "@stylistic/no-whitespace-before-property": "error", + + // "import-newlines/enforce": ["error", { + // items: 3, + // "max-len": 115, + // semi: false, + // }], + + "no-plusplus": "off", + "@stylistic/no-trailing-spaces": "error", + "no-shadow": "off", + + "@typescript-eslint/no-shadow": ["error", { + allow: ["Graph"], + }], + + "arrow-body-style": ["off"], + "@stylistic/member-delimiter-style": ["error", { + "multiline": { + "delimiter": "semi", + "requireLast": true + }, + "singleline": { + "delimiter": "semi", + "requireLast": false + }, + "multilineDetection": "brackets" + }], + "@stylistic/quotes": ["error", "single", { + avoidEscape: true, + allowTemplateLiterals: true, + }], + "@typescript-eslint/no-base-to-string": "off", + + "@typescript-eslint/lines-between-class-members": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-require-imports": ["error", { + allow: ["path"] + }], + "import/prefer-default-export": "off", + "@typescript-eslint/no-unused-vars": "off", + // "unused-imports/no-unused-imports": "error", + + // "unused-imports/no-unused-vars": ["error", { + // vars: "all", + // varsIgnorePattern: "^_", + // args: "after-used", + // argsIgnorePattern: "^_", + // }], + + "@typescript-eslint/ban-ts-comment": "off", + }, + } +); diff --git a/packages/eslint-plugin-obsidian/jest.config.js b/packages/eslint-plugin-obsidian/jest.config.js index 36b2f522..cd5c4fb6 100644 --- a/packages/eslint-plugin-obsidian/jest.config.js +++ b/packages/eslint-plugin-obsidian/jest.config.js @@ -6,6 +6,7 @@ const config = { 'tests' ], testEnvironment: 'jsdom', + setupFiles: ['./jest.setup.js'], }; module.exports = config; diff --git a/packages/eslint-plugin-obsidian/jest.setup.js b/packages/eslint-plugin-obsidian/jest.setup.js new file mode 100644 index 00000000..868aa3fb --- /dev/null +++ b/packages/eslint-plugin-obsidian/jest.setup.js @@ -0,0 +1,5 @@ +// https://github.com/jsdom/jsdom/issues/3363#issuecomment-1221060809 +// https://stackoverflow.com/questions/73607410/referenceerror-structuredclone-is-not-defined-using-jest-with-nodejs-typesc +global.structuredClone = val => { + return JSON.parse(JSON.stringify(val)) +} \ No newline at end of file diff --git a/packages/eslint-plugin-obsidian/package.json b/packages/eslint-plugin-obsidian/package.json index 2fd5f7a8..d8c6f9ce 100644 --- a/packages/eslint-plugin-obsidian/package.json +++ b/packages/eslint-plugin-obsidian/package.json @@ -2,11 +2,11 @@ "name": "eslint-plugin-obsidian", "description": "ESLint rules for Obsidian", "main": "dist/index.js", - "version": "2.10.2", + "version": "2.11.0-alpha.1", "scripts": { "build": "npx tsc --project tsconfig.prod.json", "test": "npx jest", - "lint": "eslint src --ignore-pattern '*.d.ts' --ext .ts,.tsx,.js" + "lint": "eslint" }, "author": "Orly Dadashev", "files": [ @@ -15,13 +15,13 @@ "LICENSE" ], "peerDependencies": { - "eslint": "8.x.x", + "eslint": "^9.9.0", "eslint-plugin-obsidian": "*", "react-obsidian": "2.x.x" }, "dependencies": { - "@typescript-eslint/parser": "6.6.x", - "@typescript-eslint/utils": "6.6.x", + "@typescript-eslint/parser": "8.4.0", + "@typescript-eslint/utils": "8.4.0", "lodash": "^4.17.21" }, "devDependencies": { @@ -33,24 +33,25 @@ "@babel/preset-react": "7.22.x", "@babel/preset-typescript": "7.22.x", "@babel/types": "7.24.x", - "@eslint/eslintrc": "^3.0.2", - "@eslint/js": "8.x.x", - "@stylistic/eslint-plugin": "^1.7.0", - "@types/eslint": "8.4.9", - "@types/node": "18.x.x", - "@typescript-eslint/eslint-plugin": "6.6.x", - "@typescript-eslint/rule-tester": "6.6.x", - "@typescript-eslint/types": "6.6.x", - "@typescript-eslint/typescript-estree": "6.6.x", + "@eslint/compat": "^1.1.1", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.9.0", + "@stylistic/eslint-plugin": "^2.7.2", + "@types/eslint": "^9.6.1", + "@types/node": "20.16.x", + "@typescript-eslint/eslint-plugin": "^8.4.0", + "@typescript-eslint/rule-tester": "^8.4.0", + "@typescript-eslint/types": "^8.4.0", + "@typescript-eslint/typescript-estree": "^8.4.0", "cross-env": "^7.0.3", - "eslint": "8.x.x", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-import-newlines": "^1.1.5", - "eslint-plugin-jest-formatting": "^3.1.0", - "eslint-plugin-unused-imports": "3.1.x", - "jest": "29.5.x", - "jest-extended": "^4.0.0", - "typescript": "^4.5.4" + "eslint": "^9.9.1", + "eslint-plugin-jest": "^28.8.2", + "eslint-plugin-unused-imports": "^4.1.3", + "globals": "^15.9.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jest-extended": "^4.0.2", + "typescript": "^5.5.4" }, "keywords": [ "react-obsidian", diff --git a/packages/eslint-plugin-obsidian/src/dto/callExpression.ts b/packages/eslint-plugin-obsidian/src/dto/callExpression.ts index c3fc0f10..72ab323c 100644 --- a/packages/eslint-plugin-obsidian/src/dto/callExpression.ts +++ b/packages/eslint-plugin-obsidian/src/dto/callExpression.ts @@ -14,20 +14,27 @@ export class CallExpression { } get parent(): TSESTree.Node { - return this.node.parent!; + return this.node.parent; } get arguments(): Identifier[] { - return this.node.arguments.map((arg) => new Identifier(arg)); + return this.node.arguments.map(arg => new Identifier(arg)); } get generics() { - return this.node.typeArguments ? - new Generics(this.node.typeArguments) : - this.node.typeParameters && new Generics(this.node.typeParameters); + if (this.node.typeArguments) { + return new Generics(this.node.typeArguments); + } + // @ts-expect-error - compatibility with typescript-eslint 8 + const typeParametersESLint8 = this.node['typeParameters'] as unknown; + if (typeParametersESLint8) { + return new Generics(typeParametersESLint8 as TSESTree.TSTypeParameterInstantiation); + } + + return Generics.EMPTY; } private get callee(): TSESTree.Identifier { return this.node.callee as TSESTree.Identifier; } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/dto/class.ts b/packages/eslint-plugin-obsidian/src/dto/class.ts index 0c7f75cd..bc4537ee 100644 --- a/packages/eslint-plugin-obsidian/src/dto/class.ts +++ b/packages/eslint-plugin-obsidian/src/dto/class.ts @@ -28,8 +28,8 @@ export class Clazz { public getDecoratedMethods(decoratorName: string): Method[] { return this.body .filter(isMethodDefinition) - .map((node) => new Method(node)) - .filter((method) => method.isDecoratedWith(decoratorName)); + .map(node => new Method(node)) + .filter(method => method.isDecoratedWith(decoratorName)); } public requireDecorator(name: string) { @@ -43,4 +43,4 @@ export class Clazz { private get name() { return this.node.id?.name; } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/dto/classFile.ts b/packages/eslint-plugin-obsidian/src/dto/classFile.ts index 8d13f0e6..ee323fc5 100644 --- a/packages/eslint-plugin-obsidian/src/dto/classFile.ts +++ b/packages/eslint-plugin-obsidian/src/dto/classFile.ts @@ -2,7 +2,6 @@ import type { Clazz } from './class'; import type { Import } from './import'; export class ClassFile { - constructor( public readonly clazz: Clazz, public readonly imports: Import[], diff --git a/packages/eslint-plugin-obsidian/src/dto/componentProps.ts b/packages/eslint-plugin-obsidian/src/dto/componentProps.ts index 43c24bf7..7f7b33d6 100644 --- a/packages/eslint-plugin-obsidian/src/dto/componentProps.ts +++ b/packages/eslint-plugin-obsidian/src/dto/componentProps.ts @@ -1,9 +1,9 @@ import type { TSESTree } from '@typescript-eslint/types'; import { -isAnyType, -isTypeAnnotation, -isTypeIntersection, -isTypeReference, + isAnyType, + isTypeAnnotation, + isTypeIntersection, + isTypeReference, } from '../utils/ast'; import { SingleType } from './types/singleType'; import { TypeIntersection } from './types/typeIntersection'; diff --git a/packages/eslint-plugin-obsidian/src/dto/context.ts b/packages/eslint-plugin-obsidian/src/dto/context.ts index a8d4ae4e..02cc1dbb 100644 --- a/packages/eslint-plugin-obsidian/src/dto/context.ts +++ b/packages/eslint-plugin-obsidian/src/dto/context.ts @@ -8,10 +8,10 @@ export class Context) { this.context.report({ messageId, node, data }); } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/dto/decorator.ts b/packages/eslint-plugin-obsidian/src/dto/decorator.ts index 438c4e4b..80586f9e 100644 --- a/packages/eslint-plugin-obsidian/src/dto/decorator.ts +++ b/packages/eslint-plugin-obsidian/src/dto/decorator.ts @@ -17,4 +17,4 @@ export class Decorator { const property = getDecoratorProperty(this.node, name); return property && new Property(property); } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/dto/file.ts b/packages/eslint-plugin-obsidian/src/dto/file.ts index 1ed6cf20..63717667 100644 --- a/packages/eslint-plugin-obsidian/src/dto/file.ts +++ b/packages/eslint-plugin-obsidian/src/dto/file.ts @@ -1,10 +1,10 @@ import type { TSESTree } from '@typescript-eslint/types'; import { Clazz } from './class'; import { -getClassDeclaration, -isClassLike, -isImportDeclaration, -isVariableDeclaration, + getClassDeclaration, + isClassLike, + isImportDeclaration, + isVariableDeclaration, } from '../utils/ast'; import { Import } from './import'; import { ClassFile } from './classFile'; @@ -13,7 +13,7 @@ import { Variable } from './variable'; export class File { constructor(program: TSESTree.Program, path?: string); - constructor(private program: TSESTree.Program,private path: string) { } + constructor(private program: TSESTree.Program, private path: string) { } public requireGraph(name: string) { const graph = this.classNodes.find((node) => { @@ -42,7 +42,7 @@ export class File { get imports() { return this.body .filter(isImportDeclaration) - .map((node) => new Import(node)); + .map(node => new Import(node)); } get graphs() { @@ -60,8 +60,8 @@ export class File { get variables() { return this.body .filter(isVariableDeclaration) - .map((node) => node.declarations) + .map(node => node.declarations) .flat() - .map((node) => new Variable(node)); + .map(node => new Variable(node)); } } diff --git a/packages/eslint-plugin-obsidian/src/dto/functionalComponent.ts b/packages/eslint-plugin-obsidian/src/dto/functionalComponent.ts index 789ab223..8236522c 100644 --- a/packages/eslint-plugin-obsidian/src/dto/functionalComponent.ts +++ b/packages/eslint-plugin-obsidian/src/dto/functionalComponent.ts @@ -7,4 +7,4 @@ export class FunctionalComponent { get props(): ComponentProps { return new ComponentProps(this.node.params[0]); } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/dto/generics.ts b/packages/eslint-plugin-obsidian/src/dto/generics.ts index 6d80a83b..d41b1330 100644 --- a/packages/eslint-plugin-obsidian/src/dto/generics.ts +++ b/packages/eslint-plugin-obsidian/src/dto/generics.ts @@ -6,6 +6,8 @@ import type { Type } from './types/type'; import { TypeReference } from './types/typeReference'; export class Generics { + static EMPTY = new Generics({ params: [] } as unknown as TSESTree.TSTypeParameterInstantiation); + constructor(node: TSESTree.TSTypeParameterInstantiation | undefined); constructor(readonly node: TSESTree.TSTypeParameterInstantiation) { assertDefined(node); @@ -21,4 +23,4 @@ export class Generics { private get params() { return this.node.params as TSESTree.TSTypeReference[]; } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/dto/identifier.ts b/packages/eslint-plugin-obsidian/src/dto/identifier.ts index aacd4435..9cc3acf1 100644 --- a/packages/eslint-plugin-obsidian/src/dto/identifier.ts +++ b/packages/eslint-plugin-obsidian/src/dto/identifier.ts @@ -7,4 +7,4 @@ export class Identifier { get name(): string { return this.node.name; } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/dto/import.ts b/packages/eslint-plugin-obsidian/src/dto/import.ts index 592eb70c..997fcb2b 100644 --- a/packages/eslint-plugin-obsidian/src/dto/import.ts +++ b/packages/eslint-plugin-obsidian/src/dto/import.ts @@ -9,7 +9,7 @@ export class Import { public includes(name: string) { return this.node.specifiers - .map((specifier) => specifier.local.name) + .map(specifier => specifier.local.name) .includes(name); } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/dto/method.ts b/packages/eslint-plugin-obsidian/src/dto/method.ts index d7477808..c5a0331f 100644 --- a/packages/eslint-plugin-obsidian/src/dto/method.ts +++ b/packages/eslint-plugin-obsidian/src/dto/method.ts @@ -3,7 +3,6 @@ import { Decorator } from './decorator'; import { Parameter } from './parameter'; export class Method { - constructor(public readonly node: TSESTree.MethodDefinition) {} get name() { @@ -11,7 +10,7 @@ export class Method { } get parameters() { - return this.node.value.params.map((param) => new Parameter(param)); + return this.node.value.params.map(param => new Parameter(param)); } isDecoratedWith(decoratorName: string): boolean { diff --git a/packages/eslint-plugin-obsidian/src/dto/parameter.ts b/packages/eslint-plugin-obsidian/src/dto/parameter.ts index e9407d8d..04f3d211 100644 --- a/packages/eslint-plugin-obsidian/src/dto/parameter.ts +++ b/packages/eslint-plugin-obsidian/src/dto/parameter.ts @@ -6,4 +6,4 @@ export class Parameter { get name() { return (this.node as TSESTree.Identifier).name; } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/dto/property.ts b/packages/eslint-plugin-obsidian/src/dto/property.ts index 9bcc57e3..e48404a8 100644 --- a/packages/eslint-plugin-obsidian/src/dto/property.ts +++ b/packages/eslint-plugin-obsidian/src/dto/property.ts @@ -6,4 +6,4 @@ export class Property { getValue() { return this.node.value as T; } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/dto/types/missingType.ts b/packages/eslint-plugin-obsidian/src/dto/types/missingType.ts index 901ad08c..e4c216a1 100644 --- a/packages/eslint-plugin-obsidian/src/dto/types/missingType.ts +++ b/packages/eslint-plugin-obsidian/src/dto/types/missingType.ts @@ -10,14 +10,14 @@ export class MissingType implements Type { } equals(types: Type[]): boolean { - return types.length === 0 || types.length === 1 && types[0].isEmpty(); + return types.length === 0 || (types.length === 1 && types[0].isEmpty()); } includes(): boolean { - return false; + return false; } size(): number { return 0; } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/dto/types/singleType.ts b/packages/eslint-plugin-obsidian/src/dto/types/singleType.ts index 67b678bc..276f267c 100644 --- a/packages/eslint-plugin-obsidian/src/dto/types/singleType.ts +++ b/packages/eslint-plugin-obsidian/src/dto/types/singleType.ts @@ -20,10 +20,10 @@ export class SingleType implements Type { } includes(type: Type[]): boolean { - return type.some((t) => isEqual(t.toString(), this.toString())); + return type.some(t => isEqual(t.toString(), this.toString())); } size(): number { return 1; } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/dto/types/type.ts b/packages/eslint-plugin-obsidian/src/dto/types/type.ts index a4246ac6..a9b6d03a 100644 --- a/packages/eslint-plugin-obsidian/src/dto/types/type.ts +++ b/packages/eslint-plugin-obsidian/src/dto/types/type.ts @@ -4,4 +4,4 @@ export interface Type { equals(types: Type[]): boolean; includes(type: Type[]): boolean; size(): number; -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/dto/types/typeIntersection.ts b/packages/eslint-plugin-obsidian/src/dto/types/typeIntersection.ts index 2abc8486..a1967d28 100644 --- a/packages/eslint-plugin-obsidian/src/dto/types/typeIntersection.ts +++ b/packages/eslint-plugin-obsidian/src/dto/types/typeIntersection.ts @@ -19,11 +19,11 @@ export class TypeIntersection implements Type { } equals(types: Type[]): boolean { - return isEqual(this.toString(),types.map((type) => type.toString()).flat()); + return isEqual(this.toString(), types.map(type => type.toString()).flat()); } includes(type: Type[]): boolean { - return this.types.every((t) => t.includes(type)); + return this.types.every(t => t.includes(type)); } private get types(): Type[] { diff --git a/packages/eslint-plugin-obsidian/src/dto/types/typeLiteral.ts b/packages/eslint-plugin-obsidian/src/dto/types/typeLiteral.ts index 03831bb2..2f5bb01d 100644 --- a/packages/eslint-plugin-obsidian/src/dto/types/typeLiteral.ts +++ b/packages/eslint-plugin-obsidian/src/dto/types/typeLiteral.ts @@ -4,7 +4,7 @@ import type { Type } from './type'; export class TypeLiteral implements Type { private readonly name = uniqueId('TypeLiteral'); - static isTypeLiteral(type: Type): type is TypeLiteral { + static isTypeLiteral(this: void, type: Type): type is TypeLiteral { return type instanceof TypeLiteral; } @@ -21,7 +21,7 @@ export class TypeLiteral implements Type { } includes(type: Type[]): boolean { - return type.every((t) => isEqual(t.toString(), this.toString())); + return type.every(t => isEqual(t.toString(), this.toString())); } size(): number { diff --git a/packages/eslint-plugin-obsidian/src/dto/types/typeReference.ts b/packages/eslint-plugin-obsidian/src/dto/types/typeReference.ts index aad9d543..b3360e43 100644 --- a/packages/eslint-plugin-obsidian/src/dto/types/typeReference.ts +++ b/packages/eslint-plugin-obsidian/src/dto/types/typeReference.ts @@ -15,14 +15,14 @@ export class TypeReference implements Type { } equals(types: Type[]): boolean { - return isEqual(this.toString(), types.map((type) => type.toString()).flat()); + return isEqual(this.toString(), types.map(type => type.toString()).flat()); } includes(type: Type[]): boolean { - return type.some((t) => isEqual(this.toString(), t.toString())); + return type.some(t => isEqual(this.toString(), t.toString())); } size(): number { return 1; } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/dto/variable.ts b/packages/eslint-plugin-obsidian/src/dto/variable.ts index 07ae3052..098c2aee 100644 --- a/packages/eslint-plugin-obsidian/src/dto/variable.ts +++ b/packages/eslint-plugin-obsidian/src/dto/variable.ts @@ -1,4 +1,4 @@ -import type { TSESTree } from '@typescript-eslint/types'; +import { TSESTree } from '@typescript-eslint/types'; import assert from 'assert'; export class Variable { @@ -9,11 +9,11 @@ export class Variable { } get isArrowFunction(): boolean { - return this.node.init?.type === 'ArrowFunctionExpression'; + return this.node.init?.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression; } get arrowFunction(): TSESTree.ArrowFunctionExpression { assert(this.isArrowFunction, 'Variable does not represent an arrow function'); return this.node.init as TSESTree.ArrowFunctionExpression; } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/framework/fileReader.ts b/packages/eslint-plugin-obsidian/src/framework/fileReader.ts index 25cc0af6..69bdc6d3 100644 --- a/packages/eslint-plugin-obsidian/src/framework/fileReader.ts +++ b/packages/eslint-plugin-obsidian/src/framework/fileReader.ts @@ -32,4 +32,4 @@ export class FileReader { }, ); } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/framework/pathResolver.ts b/packages/eslint-plugin-obsidian/src/framework/pathResolver.ts index 3c14d0a7..47d9869a 100644 --- a/packages/eslint-plugin-obsidian/src/framework/pathResolver.ts +++ b/packages/eslint-plugin-obsidian/src/framework/pathResolver.ts @@ -4,4 +4,4 @@ export class PathResolver { public resolve(baseFilePath: string, relativeFilePath: string) { return path.resolve(path.dirname(baseFilePath), `${relativeFilePath}.ts`); } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/index.ts b/packages/eslint-plugin-obsidian/src/index.ts index 5382876d..60554efa 100644 --- a/packages/eslint-plugin-obsidian/src/index.ts +++ b/packages/eslint-plugin-obsidian/src/index.ts @@ -1,6 +1,7 @@ -const { unresolvedProviderDependenciesGenerator } = require('./rules/unresolvedProviderDependencies'); -const { noCircularDependenciesGenerator } = require('./rules/noCircularDependency'); -const { stronglyTypedInjectComponentGenerator } = require('./rules/stronglyTypedInjectComponent'); +/* eslint-disable @typescript-eslint/no-require-imports */ +const { unresolvedProviderDependenciesGenerator } = require('./rules/unresolvedProviderDependencies') as typeof import('./rules/unresolvedProviderDependencies'); +const { noCircularDependenciesGenerator } = require('./rules/noCircularDependency') as typeof import('./rules/noCircularDependency'); +const { stronglyTypedInjectComponentGenerator } = require('./rules/stronglyTypedInjectComponent') as typeof import('./rules/stronglyTypedInjectComponent'); module.exports = { rules: { diff --git a/packages/eslint-plugin-obsidian/src/rules/noCircularDependency/circularDependenciesDetector.ts b/packages/eslint-plugin-obsidian/src/rules/noCircularDependency/circularDependenciesDetector.ts index 25965d82..a05eb60d 100644 --- a/packages/eslint-plugin-obsidian/src/rules/noCircularDependency/circularDependenciesDetector.ts +++ b/packages/eslint-plugin-obsidian/src/rules/noCircularDependency/circularDependenciesDetector.ts @@ -7,7 +7,6 @@ type DetectionResult = { hasCircularDependency: false; path?: never; node?: never }; export class CircularDependenciesDetector { - detect(clazz: Clazz): DetectionResult { const providers = clazz.getDecoratedMethods('Provides'); const visited = new Set(); @@ -50,4 +49,4 @@ export class CircularDependenciesDetector { return { hasCircularDependency: false }; } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/rules/noCircularDependency/errorReporter.ts b/packages/eslint-plugin-obsidian/src/rules/noCircularDependency/errorReporter.ts index a33445c1..ff31e0f8 100644 --- a/packages/eslint-plugin-obsidian/src/rules/noCircularDependency/errorReporter.ts +++ b/packages/eslint-plugin-obsidian/src/rules/noCircularDependency/errorReporter.ts @@ -22,4 +22,4 @@ export class ErrorReporter { ); } } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/rules/noCircularDependency/index.ts b/packages/eslint-plugin-obsidian/src/rules/noCircularDependency/index.ts index 365eb1ec..b701cc2d 100644 --- a/packages/eslint-plugin-obsidian/src/rules/noCircularDependency/index.ts +++ b/packages/eslint-plugin-obsidian/src/rules/noCircularDependency/index.ts @@ -1,12 +1,12 @@ import { ESLintUtils, type TSESLint } from '@typescript-eslint/utils'; import type { RuleContext } from '@typescript-eslint/utils/ts-eslint'; import { create } from './createRule'; -import {Context} from '../../dto/context'; +import { Context } from '../../dto/context'; type Rule = TSESLint.RuleModule<'no-circular-dependencies', []>; const createRule = ESLintUtils.RuleCreator( - (name) => `https://wix-incubator.github.io/obsidian/docs/documentation/meta/eslint#${name}`, + name => `https://wix-incubator.github.io/obsidian/docs/documentation/meta/eslint#${name}`, ); export const noCircularDependenciesGenerator = () => { @@ -18,7 +18,6 @@ export const noCircularDependenciesGenerator = () => { meta: { docs: { description: 'Dependencies must be defined in the graph or its subgraphs.', - recommended: 'strict', }, messages: { 'no-circular-dependencies': 'Circular dependency detected starting from {{firstDependency}}: {{path}}', @@ -28,4 +27,4 @@ export const noCircularDependenciesGenerator = () => { }, defaultOptions: [], }) satisfies Rule; -}; \ No newline at end of file +}; diff --git a/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/index.ts b/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/index.ts index 6c44a46e..da605f7c 100644 --- a/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/index.ts +++ b/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/index.ts @@ -1,7 +1,7 @@ import { ESLintUtils, type TSESLint } from '@typescript-eslint/utils'; import type { RuleContext } from '@typescript-eslint/utils/ts-eslint'; import { create } from './createRule'; -import {Context} from '../../dto/context'; +import { Context } from '../../dto/context'; export type Options = readonly [ { @@ -13,7 +13,7 @@ export type Options = readonly [ type Rule = TSESLint.RuleModule<'strongly-typed-inject-component', Options>; const createRule = ESLintUtils.RuleCreator( - (name) => `https://wix-incubator.github.io/obsidian/docs/documentation/meta/eslint#${name}`, + name => `https://wix-incubator.github.io/obsidian/docs/documentation/meta/eslint#${name}`, ); export const stronglyTypedInjectComponentGenerator = () => { @@ -25,7 +25,6 @@ export const stronglyTypedInjectComponentGenerator = () => { meta: { docs: { description: 'Calling injectComponent without prop types is a bad practice and a common source of bugs.', - recommended: 'strict', }, messages: { 'strongly-typed-inject-component': '{{message}}', @@ -59,4 +58,4 @@ export const stronglyTypedInjectComponentGenerator = () => { }, ], }) satisfies Rule; -}; \ No newline at end of file +}; diff --git a/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/injectComponentHandler.ts b/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/injectComponentHandler.ts index 668201d5..d3c00e15 100644 --- a/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/injectComponentHandler.ts +++ b/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/injectComponentHandler.ts @@ -20,7 +20,7 @@ export class InjectComponentHandler { private getInjectedComponent(node: TSESTree.CallExpression, args: Identifier[]) { return new File(requireProgram(node)) .variables - .filter((variable) => variable.isArrowFunction) - .find((variable) => variable.name === args[0].name); + .filter(variable => variable.isArrowFunction) + .find(variable => variable.name === args[0].name); } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/errorReporter.ts b/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/errorReporter.ts index 67296401..f21cc965 100644 --- a/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/errorReporter.ts +++ b/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/errorReporter.ts @@ -16,4 +16,4 @@ export class ErrorReporter { ); } } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/missingTypeError.ts b/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/missingTypeError.ts index 303c4812..ac36e147 100644 --- a/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/missingTypeError.ts +++ b/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/missingTypeError.ts @@ -14,4 +14,4 @@ export class MissingTypeError implements Result { const injected = this.injected[0]; return own && injected ? `${own}, ${injected}` : own; } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/redundantTypeError.ts b/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/redundantTypeError.ts index 5b67e07f..0445ef88 100644 --- a/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/redundantTypeError.ts +++ b/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/redundantTypeError.ts @@ -10,4 +10,4 @@ export class RedundantTypeError implements Result { getMessage() { return `injectComponent has one or more redundant types: ${toString(this.redundantType)}.`; } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/result.ts b/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/result.ts index 82e4ffb4..5b9a05f6 100644 --- a/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/result.ts +++ b/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/result.ts @@ -1,4 +1,4 @@ export interface Result { readonly isError: boolean; getMessage: () => string; -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/success.ts b/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/success.ts index 56e548bc..ae8a5ec5 100644 --- a/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/success.ts +++ b/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/result/success.ts @@ -6,4 +6,4 @@ export class Success implements Result { getMessage(): string { throw new Error('Success should not have an error message'); } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/typeValidator.ts b/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/typeValidator.ts index 70788f75..fb818f02 100644 --- a/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/typeValidator.ts +++ b/packages/eslint-plugin-obsidian/src/rules/stronglyTypedInjectComponent/typeValidator.ts @@ -22,16 +22,16 @@ export class TypeValidator { } private areTypesValid(componentProps: Type, injectComponentGenerics: Type[]): Result { - if ( this.typesAreEqual(componentProps, injectComponentGenerics) && this.isInjected(componentProps)) { + if (this.typesAreEqual(componentProps, injectComponentGenerics) && this.isInjected(componentProps)) { return new RedundantTypeError(injectComponentGenerics); } if ( - this.hasInlineType(injectComponentGenerics) || - (this.typesAreEqual(componentProps, injectComponentGenerics) && !this.isInjected(componentProps)) || - (isEmpty(injectComponentGenerics) && this.isInjected(componentProps)) || - this.typesAreInCorrectOrder(injectComponentGenerics, componentProps) || - (this.isInjected(componentProps) && injectComponentGenerics.length === 2) + this.hasInlineType(injectComponentGenerics) + || (this.typesAreEqual(componentProps, injectComponentGenerics) && !this.isInjected(componentProps)) + || (isEmpty(injectComponentGenerics) && this.isInjected(componentProps)) + || this.typesAreInCorrectOrder(injectComponentGenerics, componentProps) + || (this.isInjected(componentProps) && injectComponentGenerics.length === 2) ) return new Success(); const injected = this.getInjectedTypes(componentProps); @@ -62,9 +62,9 @@ export class TypeValidator { private typesAreInCorrectOrder(injectComponentGenerics: Type[], componentProps: Type) { const isInjectSecond = !!injectComponentGenerics[1]?.toString()[0].match(stringToRegex(this.injectedPattern)); - return isInjectSecond && - componentProps.size() === injectComponentGenerics.length && - componentProps.includes(injectComponentGenerics); + return isInjectSecond + && componentProps.size() === injectComponentGenerics.length + && componentProps.includes(injectComponentGenerics); } private get injectedPattern() { @@ -74,4 +74,4 @@ export class TypeValidator { private get ownPattern() { return this.options[0].ownPropsPattern; } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/dependencyResolver.ts b/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/dependencyResolver.ts index c5031e47..4f3c231c 100644 --- a/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/dependencyResolver.ts +++ b/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/dependencyResolver.ts @@ -21,9 +21,9 @@ export class DependencyResolver { .flatMap(this.getGraphDependencies); } - private getGraphDependencies({ clazz }: ClassFile) { + private getGraphDependencies(this: void, { clazz }: ClassFile) { return clazz .getDecoratedMethods('Provides') - .map((method) => method.name); + .map(method => method.name); } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/errorReporter.ts b/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/errorReporter.ts index 7a2b9e8a..59e4e765 100644 --- a/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/errorReporter.ts +++ b/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/errorReporter.ts @@ -3,9 +3,9 @@ import type { Context } from '../../dto/context'; export function reportErrorIfDependencyIsUnresolved( context: Context, - {error, param, node}: {error: boolean; param?: string; node?: TSESTree.Node}, + { error, param, node }: { error: boolean; param?: string; node?: TSESTree.Node }, ) { if (error && node) { - context.reportError(node, 'unresolved-provider-dependencies', {dependencyName: param}); + context.reportError(node, 'unresolved-provider-dependencies', { dependencyName: param }); } } diff --git a/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/index.ts b/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/index.ts index 99ab432b..d2764990 100644 --- a/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/index.ts +++ b/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/index.ts @@ -3,12 +3,12 @@ import type { RuleContext } from '@typescript-eslint/utils/ts-eslint'; import { create } from './createRule'; import { PathResolver } from '../../framework/pathResolver'; import { FileReader } from '../../framework/fileReader'; -import {Context} from '../../dto/context'; +import { Context } from '../../dto/context'; type Rule = TSESLint.RuleModule<'unresolved-provider-dependencies', []>; const createRule = ESLintUtils.RuleCreator( - (name) => `https://wix-incubator.github.io/obsidian/docs/documentation/meta/eslint#${name}`, + name => `https://wix-incubator.github.io/obsidian/docs/documentation/meta/eslint#${name}`, ); export const unresolvedProviderDependenciesGenerator = ( @@ -22,7 +22,6 @@ export const unresolvedProviderDependenciesGenerator = ( meta: { docs: { description: 'Dependencies must be defined in the graph or its subgraphs.', - recommended: 'strict', }, messages: { 'unresolved-provider-dependencies': 'Dependency {{ dependencyName }} is unresolved.', @@ -32,4 +31,4 @@ export const unresolvedProviderDependenciesGenerator = ( }, defaultOptions: [], }) satisfies Rule; -}; \ No newline at end of file +}; diff --git a/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/resolvedDependencyChecker.ts b/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/resolvedDependencyChecker.ts index d1157bf6..147374cd 100644 --- a/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/resolvedDependencyChecker.ts +++ b/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/resolvedDependencyChecker.ts @@ -4,13 +4,12 @@ import type { Parameter } from '../../dto/parameter'; type DependencyCheckResult = { error: boolean; param?: string; node?: any }; export class ResolvedDependencyChecker { - public check(clazz: Clazz, dependencies: string[]): DependencyCheckResult { const unresolvedDependency = clazz .getDecoratedMethods('Provides') - .flatMap((method) => method.parameters) - .find((provider) => !dependencies.includes(provider.name)); - return this.getResult(unresolvedDependency); + .flatMap(method => method.parameters) + .find(provider => !dependencies.includes(provider.name)); + return this.getResult(unresolvedDependency); } private getResult(unresolvedDependency: Parameter | undefined): DependencyCheckResult { @@ -19,4 +18,4 @@ export class ResolvedDependencyChecker { } return { error: false }; } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/subgraphResolver.ts b/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/subgraphResolver.ts index 260a37f1..7e3bd9d3 100644 --- a/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/subgraphResolver.ts +++ b/packages/eslint-plugin-obsidian/src/rules/unresolvedProviderDependencies/subgraphResolver.ts @@ -12,7 +12,7 @@ export class SubgraphResolver { return [ ...this.getImportedGraphs(clazz), ...this.getLocalGraphs(clazz), - ].flatMap((g) => [g, ...this.resolve(g)]); + ].flatMap(g => [g, ...this.resolve(g)]); } private getImportedGraphs(clazz: ClassFile) { @@ -39,7 +39,7 @@ export class SubgraphResolver { return this.getLocalSubgraphClasses(subgraphs, clazz); } - private getSubgraphsPropertyFromGraphDecorator({clazz}: ClassFile) { + private getSubgraphsPropertyFromGraphDecorator({ clazz }: ClassFile) { const graphDecorator = clazz.requireDecorator('Graph'); return graphDecorator.getProperty('subgraphs'); } @@ -51,7 +51,7 @@ export class SubgraphResolver { return this.createLocalGraphClasses(clazz, localGraphNames); } - private createLocalGraphClasses({clazz, imports, path}: ClassFile, localGraphNames: string[]) { + private createLocalGraphClasses({ clazz, imports, path }: ClassFile, localGraphNames: string[]) { if (localGraphNames.length === 0) return []; const parent = new File(requireProgram(clazz.node), path); return localGraphNames.map((localGraphName) => { @@ -62,15 +62,15 @@ export class SubgraphResolver { private getSubgraphNamesFromDecoratorProperty(subgraphs: Property) { return mapArrayExpression( subgraphs.getValue(), - (el) => (el as TSESTree.Identifier).name, + el => (el as TSESTree.Identifier).name, ); } - private getLocalGraphNames(subgraphs: string[], {imports}: ClassFile) { + private getLocalGraphNames(subgraphs: string[], { imports }: ClassFile) { return subgraphs.filter((subgraph) => { return imports.some(($import) => { return $import.includes(subgraph); }) === false; }); } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/src/utils/array.ts b/packages/eslint-plugin-obsidian/src/utils/array.ts index 2ba9562a..010d9afd 100644 --- a/packages/eslint-plugin-obsidian/src/utils/array.ts +++ b/packages/eslint-plugin-obsidian/src/utils/array.ts @@ -1,7 +1,7 @@ export function isEmpty(array?: any[]) { - return array === undefined || array.length === 0; + return array === undefined || array.length === 0; } -export function toString(array: any[] = []) { - return `[${array.map((a) => a.toString()).join(', ')}]`; -} \ No newline at end of file +export function toString(array: object[] = []) { + return `[${array.map(a => a.toString()).join(', ')}]`; +} diff --git a/packages/eslint-plugin-obsidian/src/utils/assertions.ts b/packages/eslint-plugin-obsidian/src/utils/assertions.ts index 85db3853..7a418fbb 100644 --- a/packages/eslint-plugin-obsidian/src/utils/assertions.ts +++ b/packages/eslint-plugin-obsidian/src/utils/assertions.ts @@ -1,3 +1,3 @@ -export function assertDefined(obj: T, message?: string): asserts obj is NonNullable{ +export function assertDefined(obj: T, message?: string): asserts obj is NonNullable { if (!obj) throw new Error(message || 'Expected object to exist'); } diff --git a/packages/eslint-plugin-obsidian/src/utils/ast.ts b/packages/eslint-plugin-obsidian/src/utils/ast.ts index b1252039..e2e215b3 100644 --- a/packages/eslint-plugin-obsidian/src/utils/ast.ts +++ b/packages/eslint-plugin-obsidian/src/utils/ast.ts @@ -1,14 +1,14 @@ -import type { TSESTree } from '@typescript-eslint/types'; +import { AST_NODE_TYPES, type TSESTree } from '@typescript-eslint/types'; import type { ArrayExpressionElement } from '../types'; import { assertDefined } from './assertions'; export function isClassLike(node: TSESTree.Node): node is TSESTree.ClassDeclaration { switch (node.type) { - case 'ClassDeclaration': + case AST_NODE_TYPES.ClassDeclaration: return true; - case 'ExportDefaultDeclaration': + case AST_NODE_TYPES.ExportDefaultDeclaration: return isClassLike(node.declaration); - case 'ExportNamedDeclaration': + case AST_NODE_TYPES.ExportNamedDeclaration: return isClassLike(node.declaration!); default: return false; @@ -16,28 +16,28 @@ export function isClassLike(node: TSESTree.Node): node is TSESTree.ClassDeclarat } export function isTypeReference(node?: TSESTree.Node): node is TSESTree.TSTypeReference { - return node?.type === 'TSTypeReference'; + return node?.type === AST_NODE_TYPES.TSTypeReference; } export function isTypeLiteral(node: TSESTree.Node): node is TSESTree.TSTypeLiteral { - return node.type === 'TSTypeLiteral'; + return node.type === AST_NODE_TYPES.TSTypeLiteral; } export function isImportDeclaration(node: TSESTree.Node): node is TSESTree.ImportDeclaration { - return node.type === 'ImportDeclaration'; + return node.type === AST_NODE_TYPES.ImportDeclaration; } export function isMethodDefinition(node: TSESTree.Node): node is TSESTree.MethodDefinition { - return node.type === 'MethodDefinition'; + return node.type === AST_NODE_TYPES.MethodDefinition; } export function getClassDeclaration(node: TSESTree.Node): TSESTree.ClassDeclaration | undefined { switch (node.type) { - case 'ClassDeclaration': + case AST_NODE_TYPES.ClassDeclaration: return node; - case 'ExportDefaultDeclaration': + case AST_NODE_TYPES.ExportDefaultDeclaration: return getClassDeclaration(node.declaration); - case 'ExportNamedDeclaration': + case AST_NODE_TYPES.ExportNamedDeclaration: return getClassDeclaration(node.declaration!); default: return undefined; @@ -47,7 +47,7 @@ export function getClassDeclaration(node: TSESTree.Node): TSESTree.ClassDeclarat export function requireProgram(node: TSESTree.Node | undefined): TSESTree.Program { assertDefined(node); switch (node.type) { - case 'Program': + case AST_NODE_TYPES.Program: return node; default: return requireProgram(node.parent); @@ -64,8 +64,8 @@ export function getDecoratorProperty(decorator: TSESTree.Decorator, propertyName function getObjectProperty(obj: TSESTree.ObjectExpression, propertyName: string) { return obj.properties.find((property) => { - return property.type === 'Property' - && property.key.type === 'Identifier' + return property.type === AST_NODE_TYPES.Property + && property.key.type === AST_NODE_TYPES.Identifier && property.key.name === propertyName; }) as TSESTree.Property | undefined; } @@ -75,17 +75,17 @@ export function mapArrayExpression(array: TSESTree.ArrayExpression, map: (el: } export function isTypeIntersection(node: TSESTree.Node | undefined): node is TSESTree.TSIntersectionType { - return node?.type === 'TSIntersectionType'; + return node?.type === AST_NODE_TYPES.TSIntersectionType; } export function isTypeAnnotation(node: TSESTree.Node | undefined): node is TSESTree.TSTypeAnnotation { - return node?.type === 'TSTypeAnnotation'; + return node?.type === AST_NODE_TYPES.TSTypeAnnotation; } export function isAnyType(node: TSESTree.Node | undefined): node is TSESTree.TSAnyKeyword { - return node?.type === 'TSAnyKeyword'; + return node?.type === AST_NODE_TYPES.TSAnyKeyword; } export function isVariableDeclaration(node: TSESTree.Node): node is TSESTree.VariableDeclaration { - return node.type === 'VariableDeclaration'; -} \ No newline at end of file + return node.type === AST_NODE_TYPES.VariableDeclaration; +} diff --git a/packages/eslint-plugin-obsidian/src/utils/regex.ts b/packages/eslint-plugin-obsidian/src/utils/regex.ts index ee550d91..955d377b 100644 --- a/packages/eslint-plugin-obsidian/src/utils/regex.ts +++ b/packages/eslint-plugin-obsidian/src/utils/regex.ts @@ -2,4 +2,4 @@ export function stringToRegex(str: string) { const main = str.match(/\/(.+)\/.*/)![1]; const options = str.match(/\/.+\/(.*)/)![1]; return new RegExp(main, options); -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/tests/noCircularDependencies/circularDependencies.test.ts b/packages/eslint-plugin-obsidian/tests/noCircularDependencies/circularDependencies.test.ts index bfeff44f..bc562066 100644 --- a/packages/eslint-plugin-obsidian/tests/noCircularDependencies/circularDependencies.test.ts +++ b/packages/eslint-plugin-obsidian/tests/noCircularDependencies/circularDependencies.test.ts @@ -29,4 +29,4 @@ ruleTester.run( }, ], }, -); \ No newline at end of file +); diff --git a/packages/eslint-plugin-obsidian/tests/noCircularDependencies/code/invalidGraphs.ts b/packages/eslint-plugin-obsidian/tests/noCircularDependencies/code/invalidGraphs.ts index 9c9a7a5c..1108cb15 100644 --- a/packages/eslint-plugin-obsidian/tests/noCircularDependencies/code/invalidGraphs.ts +++ b/packages/eslint-plugin-obsidian/tests/noCircularDependencies/code/invalidGraphs.ts @@ -51,4 +51,4 @@ class SimpleGraph extends ObjectGraph { baz(bar: any): string { return 'baz'; } -}`; \ No newline at end of file +}`; diff --git a/packages/eslint-plugin-obsidian/tests/noCircularDependencies/code/validGraphs.ts b/packages/eslint-plugin-obsidian/tests/noCircularDependencies/code/validGraphs.ts index 6abec9f0..2cf05710 100644 --- a/packages/eslint-plugin-obsidian/tests/noCircularDependencies/code/validGraphs.ts +++ b/packages/eslint-plugin-obsidian/tests/noCircularDependencies/code/validGraphs.ts @@ -18,4 +18,3 @@ export default class SimpleGraph extends ObjectGraph { return 'baz'; } }`; - diff --git a/packages/eslint-plugin-obsidian/tests/stronglyTypedInjectComponent/code/invalidGraphs.ts b/packages/eslint-plugin-obsidian/tests/stronglyTypedInjectComponent/code/invalidGraphs.ts index 38c7f207..0fa3f410 100644 --- a/packages/eslint-plugin-obsidian/tests/stronglyTypedInjectComponent/code/invalidGraphs.ts +++ b/packages/eslint-plugin-obsidian/tests/stronglyTypedInjectComponent/code/invalidGraphs.ts @@ -50,4 +50,4 @@ const _Foo = (props: Injected) => { return null; }; -export const Foo = injectComponent(_Foo, SomeGraph);`; \ No newline at end of file +export const Foo = injectComponent(_Foo, SomeGraph);`; diff --git a/packages/eslint-plugin-obsidian/tests/stronglyTypedInjectComponent/stronglyTypedInjectComponent.test.ts b/packages/eslint-plugin-obsidian/tests/stronglyTypedInjectComponent/stronglyTypedInjectComponent.test.ts index 8e2f9560..08466f32 100644 --- a/packages/eslint-plugin-obsidian/tests/stronglyTypedInjectComponent/stronglyTypedInjectComponent.test.ts +++ b/packages/eslint-plugin-obsidian/tests/stronglyTypedInjectComponent/stronglyTypedInjectComponent.test.ts @@ -52,4 +52,4 @@ ruleTester.run( }, ], }, -); \ No newline at end of file +); diff --git a/packages/eslint-plugin-obsidian/tests/stubs/PathResolverStub.ts b/packages/eslint-plugin-obsidian/tests/stubs/PathResolverStub.ts index 2a0e73ab..7bec0bcc 100644 --- a/packages/eslint-plugin-obsidian/tests/stubs/PathResolverStub.ts +++ b/packages/eslint-plugin-obsidian/tests/stubs/PathResolverStub.ts @@ -1,10 +1,9 @@ import { PathResolver } from '../../src/framework/pathResolver'; export class PathResolverStub implements PathResolver { - public resolve(_baseFilePath: string, relativeFilePath: string): string { const cwd = process.cwd(); - switch(relativeFilePath) { + switch (relativeFilePath) { case './subgraph': return `${cwd}/tests/unresolvedProviderDependencies/fixtures/subgraph.ts`; case './graphWithSubgraph': @@ -15,4 +14,4 @@ export class PathResolverStub implements PathResolver { throw new Error(`PathResolverStub: Unhandled relativeFilePath: ${relativeFilePath}`); } } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-obsidian/tests/unresolvedProviderDependencies/fixtures/graphWithSubgraph.ts b/packages/eslint-plugin-obsidian/tests/unresolvedProviderDependencies/fixtures/graphWithSubgraph.ts index c50fa626..b564dcc0 100644 --- a/packages/eslint-plugin-obsidian/tests/unresolvedProviderDependencies/fixtures/graphWithSubgraph.ts +++ b/packages/eslint-plugin-obsidian/tests/unresolvedProviderDependencies/fixtures/graphWithSubgraph.ts @@ -1,7 +1,7 @@ import { Graph, ObjectGraph, Provides } from 'react-obsidian'; import Subgraph from './subgraph'; -@Graph({subgraphs: [Subgraph]}) +@Graph({ subgraphs: [Subgraph] }) export default class GraphWithSubgraph extends ObjectGraph { @Provides() someString(instanceId: string, foo: string): string { diff --git a/packages/eslint-plugin-obsidian/tsconfig.json b/packages/eslint-plugin-obsidian/tsconfig.json index b0e5af10..7913cf8e 100644 --- a/packages/eslint-plugin-obsidian/tsconfig.json +++ b/packages/eslint-plugin-obsidian/tsconfig.json @@ -2,14 +2,13 @@ "include": [ "src/**/*", "tests/**/*", - ".eslintrc.js", ], "exclude": [ "node_modules", "dist" ], "compilerOptions": { - "target": "es2018", + "target": "es2023", "module": "Node16", "lib": [ "ES6", diff --git a/packages/react-obsidian/.eslintignore b/packages/react-obsidian/.eslintignore deleted file mode 100644 index b3555380..00000000 --- a/packages/react-obsidian/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -dist/*, -wallaby.js diff --git a/packages/react-obsidian/.eslintrc.json b/packages/react-obsidian/.eslintrc.json deleted file mode 100644 index b926c9fb..00000000 --- a/packages/react-obsidian/.eslintrc.json +++ /dev/null @@ -1,117 +0,0 @@ -{ - "root": true, - "env": { - "es2021": true, - "jest": true - }, - "ignorePatterns": ["**/*.config.js"], - "extends": [ - "airbnb-base", - "airbnb-typescript", - "plugin:react/recommended", - "plugin:import/typescript", - "plugin:@stylistic/disable-legacy", - "plugin:jest-formatting/recommended" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "sourceType": "module", - "project": "tsconfig.json" - }, - "plugins": [ - "@stylistic", - "react", - "@typescript-eslint", - "import-newlines", - "unused-imports", - "jest-formatting", - "obsidian" - ], - "rules": { - "no-console":"off", - "obsidian/unresolved-provider-dependencies": "error", - "obsidian/no-circular-dependencies": "warn", - "obsidian/strongly-typed-inject-component": ["error", {"injectedPropsPattern": "/\\b(Injected|InjectedProps)\\b/"}], - "@stylistic/max-len": [ - "error", - { - "code": 115, - "comments": 200, - "ignoreRegExpLiterals": true - } - ], - "@stylistic/no-extra-semi": "error", - "@stylistic/lines-between-class-members": ["error", "always", {"exceptAfterSingleLine": true}], - "import/extensions": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "no-useless-constructor": "off", - "@typescript-eslint/member-delimiter-style": "error", - "import/no-unresolved": "off", - "class-methods-use-this": "off", - "react/jsx-filename-extension": ["error", {"extensions": [".js", ".ts", ".jsx", ".tsx"]}], - "react/jsx-props-no-spreading": "off", - "no-use-before-define": "off", - "@typescript-eslint/no-use-before-define": ["off"], - "no-restricted-syntax": "off", - "import/no-named-as-default": "off", - "@typescript-eslint/ban-types": ["off"], - "import/no-extraneous-dependencies": ["error", {"devDependencies": true}], - "max-classes-per-file": ["off"], - "curly": ["error", "multi-line"], - "@stylistic/semi": ["error", "always"], - "@stylistic/comma-dangle": ["error", "always-multiline"], - "@stylistic/function-call-argument-newline": ["error", "consistent"], - "@stylistic/function-paren-newline": ["error", "multiline-arguments"], - "@stylistic/object-curly-newline": [ - "error", - { - "ObjectExpression": { - "multiline": true, - "consistent": true - }, - "ObjectPattern": { - "multiline": true, - "consistent": true - } - } - ], - "@stylistic/no-whitespace-before-property": "error", - "import-newlines/enforce": [ - "error", - { - "items": 3, - "max-len": 115, - "semi": false - } - ], - "react/display-name": "off", - "no-plusplus": "off", - "@stylistic/no-trailing-spaces": "error", - "no-shadow": "off", - "@typescript-eslint/no-shadow": ["error", {"allow": ["Graph"]}], - "react/button-has-type": "off", - "react/jsx-one-expression-per-line": ["off"], - "arrow-body-style": ["off"], - "@stylistic/quotes": ["error", "single", {"avoidEscape": true, "allowTemplateLiterals": true}], - "@typescript-eslint/lines-between-class-members": "off", - "@typescript-eslint/no-explicit-any": "off", - "import/prefer-default-export": "off", - "@typescript-eslint/no-unused-vars": "off", - "unused-imports/no-unused-imports": "error", - "unused-imports/no-unused-vars": [ - "error", - { "vars": "all", "varsIgnorePattern": "^_", "args": "after-used", "argsIgnorePattern": "^_" } - ], - "@typescript-eslint/ban-ts-comment": "off" - }, - "settings": { - "import/resolver": { - "node": { - "extensions": [".js", ".jsx", ".ts", ".tsx"] - } - }, - "react": { - "version": "detect" - } - } -} diff --git a/packages/react-obsidian/.vscode/settings.json b/packages/react-obsidian/.vscode/settings.json new file mode 100644 index 00000000..3dc7d64d --- /dev/null +++ b/packages/react-obsidian/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "eslint.useFlatConfig": true +} \ No newline at end of file diff --git a/packages/react-obsidian/babel.config.js b/packages/react-obsidian/babel.config.js index 0fde13f4..034c18e2 100644 --- a/packages/react-obsidian/babel.config.js +++ b/packages/react-obsidian/babel.config.js @@ -1,7 +1,7 @@ module.exports = { presets: [ - ['@babel/preset-env', { targets: { node: 'current' }}], - ['@babel/preset-typescript', {'onlyRemoveTypeImports': true}], + ['@babel/preset-env', { targets: { node: 'current', 'esmodules': true } }], + ['@babel/preset-typescript', { 'onlyRemoveTypeImports': true }], '@babel/preset-react', ], plugins: [ diff --git a/packages/react-obsidian/eslint.config.mjs b/packages/react-obsidian/eslint.config.mjs new file mode 100644 index 00000000..3c815d75 --- /dev/null +++ b/packages/react-obsidian/eslint.config.mjs @@ -0,0 +1,140 @@ +import stylistic from "@stylistic/eslint-plugin"; +import eslintJest from "eslint-plugin-jest"; +import obsidian from "eslint-plugin-obsidian"; +import globals from "globals"; +import tsParser from "@typescript-eslint/parser"; +import eslintTs from "typescript-eslint"; +import eslintJs from "@eslint/js"; + + +export default eslintTs.config( + { + ignores: ["**/*.d.ts", "**/*.js"], + }, + { + files: ["**/*.ts", "**/*.tsx"], + name: "ReactObsidian", + languageOptions: { + globals: { + ...globals.jest, + }, + sourceType: "module", + parser: tsParser, + parserOptions: { + project: "tsconfig.json", + tsconfigRootDir: import.meta.dirname, + }, + }, + settings: { + "import/resolver": { + node: { + extensions: [".js", ".jsx", ".ts", ".tsx"], + }, + }, + react: { + version: "detect", + }, + }, + extends: [ + eslintJs.configs.recommended, + ...eslintTs.configs.recommendedTypeChecked, + eslintJest.configs['flat/recommended'], + stylistic.configs["recommended-flat"], + ], + plugins: { + obsidian, + }, + rules: { + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-empty-object-type": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-unsafe-return": "off", + "@typescript-eslint/no-unsafe-function-type": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/unbound-method": "off", + "@typescript-eslint/no-unused-vars": [ + "error", + { + "args": "all", + "argsIgnorePattern": "^_", + "caughtErrors": "all", + "caughtErrorsIgnorePattern": "^_", + "destructuredArrayIgnorePattern": "^_", + "varsIgnorePattern": "^_", + "ignoreRestSiblings": true + } + ], + "no-empty-function": ["error", { + allow: ["constructors"], + }], + "no-multiple-empty-lines": ["error", { + max: 1, + }], + "no-multi-spaces": "error", + "@stylistic/brace-style": ["error", "1tbs", { allowSingleLine: true }], + "@stylistic/jsx-one-expression-per-line": ["error", { + "allow": "non-jsx" + }], + "@stylistic/max-len": ["error", { + code: 115, + comments: 200, + ignoreRegExpLiterals: true, + ignoreStrings: true, + ignoreTemplateLiterals: true, + }], + "@stylistic/max-statements-per-line": ["error", { "max": 2 }], + "@stylistic/no-extra-semi": "error", + + "@stylistic/lines-between-class-members": ["error", "always", { + exceptAfterSingleLine: true, + }], + "lines-between-class-members": ["error", { + enforce: [ + { blankLine: "always", prev: "method", next: "method" }, + { blankLine: "never", prev: "field", next: "field" }, + ] + }], + curly: ["error", "multi-line"], + "@stylistic/semi": ["error", "always"], + "@stylistic/comma-dangle": ["error", "always-multiline"], + "@stylistic/function-call-argument-newline": ["error", "consistent"], + "@stylistic/function-paren-newline": ["error", "multiline-arguments"], + + "@stylistic/object-curly-newline": ["error", { + ObjectExpression: { + multiline: true, + consistent: true, + }, + + ObjectPattern: { + multiline: true, + consistent: true, + }, + }], + + "@stylistic/no-whitespace-before-property": "error", + "@stylistic/no-trailing-spaces": "error", + "@stylistic/member-delimiter-style": ["error", { + "multiline": { + "delimiter": "semi", + "requireLast": true + }, + "singleline": { + "delimiter": "semi", + "requireLast": false + }, + "multilineDetection": "brackets" + }], + "@stylistic/quotes": ["error", "single", { + avoidEscape: true, + allowTemplateLiterals: true, + }], + "@typescript-eslint/no-base-to-string": "off", + "obsidian/unresolved-provider-dependencies": "error", + "obsidian/no-circular-dependencies": "error", + "obsidian/strongly-typed-inject-component": "error", + }, + } +); diff --git a/packages/react-obsidian/package.json b/packages/react-obsidian/package.json index 7cf3e9ed..87ccf482 100644 --- a/packages/react-obsidian/package.json +++ b/packages/react-obsidian/package.json @@ -1,10 +1,10 @@ { "name": "react-obsidian", - "version": "2.10.2", + "version": "2.11.0-alpha.1", "description": "Dependency injection framework for React and React Native applications", "scripts": { "prepack": "npm run lint && tsc --project tsconfig.prod.json", - "lint": "npx eslint src transformers test --ignore-pattern '*.d.ts' --ext .ts,.tsx,.js", + "lint": "eslint", "build": "tsc --project tsconfig.json", "pretest": "tsc --project tsconfig.json", "test": "npx jest", @@ -22,15 +22,18 @@ "react": "*" }, "devDependencies": { - "@babel/core": "7.22.x", - "@babel/eslint-parser": "7.22.x", - "@babel/plugin-proposal-decorators": "7.22.x", - "@babel/plugin-transform-class-properties": "7.22.x", - "@babel/preset-env": "7.22.x", - "@babel/preset-react": "7.22.x", - "@babel/preset-typescript": "7.22.x", - "@babel/types": "7.24.x", - "@stylistic/eslint-plugin": "^1.7.0", + "@babel/core": "^7.25.2", + "@babel/eslint-parser": "^7.25.1", + "@babel/plugin-proposal-decorators": "^7.24.7", + "@babel/plugin-transform-class-properties": "^7.25.4", + "@babel/preset-env": "^7.25.4", + "@babel/preset-react": "^7.24.7", + "@babel/preset-typescript": "^7.24.7", + "@babel/types": "^7.25.6", + "@eslint/compat": "^1.1.1", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.9.1", + "@stylistic/eslint-plugin": "^2.7.2", "@testing-library/react": "14.x.x", "@types/hoist-non-react-statics": "^3.3.1", "@types/jest": "29.5.x", @@ -38,21 +41,19 @@ "@types/lodash": "^4.14.176", "@types/react": "18.3.x", "@types/react-dom": "18.3.x", - "@typescript-eslint/eslint-plugin": "6.x.x", - "@typescript-eslint/parser": "6.x.x", + "@typescript-eslint/eslint-plugin": "^8.4.0", + "@typescript-eslint/parser": "^8.4.0", "babel-plugin-parameter-decorator": "1.x.x", "cross-env": "^7.0.3", - "eslint": "8.x.x", - "eslint-config-airbnb-typescript": "17.x.x", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-import-newlines": "^1.1.5", - "eslint-plugin-jest-formatting": "^3.1.0", - "eslint-plugin-obsidian": "2.10.2", - "eslint-plugin-react": "^7.26.1", - "eslint-plugin-react-hooks": "^4.2.0", - "eslint-plugin-unused-imports": "3.1.x", - "jest": "29.5.x", - "jest-environment-jsdom": "^29.5.0", + "eslint": "^9.9.1", + "eslint-plugin-jest": "^28.8.1", + "eslint-plugin-obsidian": "2.11.0-alpha.1", + "eslint-plugin-react": "^7.35.0", + "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-unused-imports": "^4.1.3", + "globals": "^15.9.0", + "jest": "29.7.x", + "jest-environment-jsdom": "^29.7.0", "jest-extended": "^4.0.0", "jest-mock-extended": "3.x.x", "jest-when": "3.x.x", @@ -60,7 +61,8 @@ "react": "18.2.x", "react-dom": "18.2.x", "setimmediate": "^1.0.5", - "typescript": "^4.5.4" + "typescript": "^5.5.4", + "typescript-eslint": "^8.3.0" }, "repository": { "type": "git", diff --git a/packages/react-obsidian/src/decorators/Memoize.ts b/packages/react-obsidian/src/decorators/Memoize.ts index 9d1dce64..d2032e5b 100644 --- a/packages/react-obsidian/src/decorators/Memoize.ts +++ b/packages/react-obsidian/src/decorators/Memoize.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-param-reassign */ import 'reflect-metadata'; export default function Memoize() { diff --git a/packages/react-obsidian/src/decorators/inject/Inject.ts b/packages/react-obsidian/src/decorators/inject/Inject.ts index 85b3c0aa..920cf89d 100644 --- a/packages/react-obsidian/src/decorators/inject/Inject.ts +++ b/packages/react-obsidian/src/decorators/inject/Inject.ts @@ -3,7 +3,7 @@ import InjectionMetadata from '../../injectors/class/InjectionMetadata'; export function Inject(name?: string) { return ( - target: Object | any, + target: any, _propertyKey?: string, indexOrPropertyDescriptor?: number | PropertyDescriptor, ) => { diff --git a/packages/react-obsidian/src/decorators/provides/MemoizeDescriptor.ts b/packages/react-obsidian/src/decorators/provides/MemoizeDescriptor.ts index f64454ee..7bc3266e 100644 --- a/packages/react-obsidian/src/decorators/provides/MemoizeDescriptor.ts +++ b/packages/react-obsidian/src/decorators/provides/MemoizeDescriptor.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-param-reassign */ export function memoizeDescriptor(propertyKey: string, descriptor: PropertyDescriptor): PropertyDescriptor { const originalValue = descriptor.value; descriptor.value = function value(...args: any[]) { diff --git a/packages/react-obsidian/src/graph/ObjectGraph.ts b/packages/react-obsidian/src/graph/ObjectGraph.ts index 0b69603c..07bd46c5 100644 --- a/packages/react-obsidian/src/graph/ObjectGraph.ts +++ b/packages/react-obsidian/src/graph/ObjectGraph.ts @@ -26,13 +26,11 @@ export abstract class ObjectGraph implements Graph { return this.propertyRetriever.retrieve(property, receiver, detector) as Dependency | undefined; } - onBind(_target: any) { - - } + onBind(_target: any) { void 0; } } Reflect.set(ObjectGraph, 'typeDiscriminator', 'ObjectGraph'); -export function isGraph(object: Constructable | any): object is Constructable { +export function isGraph(object: any): object is Constructable { return Reflect.get(object, 'typeDiscriminator') === 'ObjectGraph'; } diff --git a/packages/react-obsidian/src/graph/PropertyRetriever.test.ts b/packages/react-obsidian/src/graph/PropertyRetriever.test.ts index 47cfcfec..270c1421 100644 --- a/packages/react-obsidian/src/graph/PropertyRetriever.test.ts +++ b/packages/react-obsidian/src/graph/PropertyRetriever.test.ts @@ -33,7 +33,7 @@ describe('PropertyRetriever', () => { it('throws on circular dependencies', () => { const uut1 = new PropertyRetriever(new CircularDependencyGraph2()); - expect(() => uut1.retrieve('dep1')).toThrowError( + expect(() => uut1.retrieve('dep1')).toThrow( /Could not resolve dep1 from CircularDependencyGraph2\d because of a circular dependency: dep1 -> dep2 -> dep3 -> dep1/, ); }); diff --git a/packages/react-obsidian/src/graph/PropertyRetriever.ts b/packages/react-obsidian/src/graph/PropertyRetriever.ts index 5bc3cde6..b8c08f17 100644 --- a/packages/react-obsidian/src/graph/PropertyRetriever.ts +++ b/packages/react-obsidian/src/graph/PropertyRetriever.ts @@ -10,7 +10,7 @@ export default class PropertyRetriever { property: string, receiver?: unknown, maybeDetector?: CircularDependenciesDetector, - ): unknown | undefined { + ): unknown { const mangledPropertyKey = providedPropertiesStore.getMangledProperty(this.graph, property); const circularDependenciesDetector = maybeDetector ?? new CircularDependenciesDetector(this.graph.name); @@ -32,8 +32,8 @@ export default class PropertyRetriever { if (circularDependenciesDetector.hasCircularDependencies()) { throw new Error( `Could not resolve ${circularDependenciesDetector.firstDependencyName}` - + ` from ${circularDependenciesDetector.graphName} because of a circular dependency:` - + ` ${circularDependenciesDetector.getDependencies().join(' -> ')}`, + + ` from ${circularDependenciesDetector.graphName} because of a circular dependency:` + + ` ${circularDependenciesDetector.getDependencies().join(' -> ')}`, ); } @@ -56,6 +56,6 @@ export default class PropertyRetriever { const subgraphs = graphRegistry.getSubgraphs(this.graph); return subgraphs .map((subgraph: Graph) => subgraph.retrieve(property, receiver, circularDependenciesDetector)) - .filter((result) => result !== undefined); + .filter(result => result !== undefined); } } diff --git a/packages/react-obsidian/src/graph/PropertyRetrieverDelegate.ts b/packages/react-obsidian/src/graph/PropertyRetrieverDelegate.ts index f457efd3..f04d6fe4 100644 --- a/packages/react-obsidian/src/graph/PropertyRetrieverDelegate.ts +++ b/packages/react-obsidian/src/graph/PropertyRetrieverDelegate.ts @@ -5,7 +5,7 @@ interface PropertyRetrieverDelegate { property: string, receiver?: unknown, circularDependenciesDetector?: CircularDependenciesDetector - ) => unknown | undefined; + ) => unknown; } export default PropertyRetrieverDelegate; diff --git a/packages/react-obsidian/src/graph/ProviderBinder.ts b/packages/react-obsidian/src/graph/ProviderBinder.ts index 25094fdc..2c020bf5 100644 --- a/packages/react-obsidian/src/graph/ProviderBinder.ts +++ b/packages/react-obsidian/src/graph/ProviderBinder.ts @@ -1,10 +1,9 @@ -/* eslint-disable no-param-reassign */ import providedPropertiesStore from '../ProvidedPropertiesStore'; import { Graph } from './Graph'; export function bindProviders(graph: Graph & Record) { providedPropertiesStore.getMangledProperties(graph) - .filter((method) => graph[method]) + .filter(method => graph[method]) .forEach((method) => { graph[method] = graph[method].bind(graph); }); diff --git a/packages/react-obsidian/src/graph/registry/GraphRegistry.ts b/packages/react-obsidian/src/graph/registry/GraphRegistry.ts index 27dbb59e..e9cb39fc 100644 --- a/packages/react-obsidian/src/graph/registry/GraphRegistry.ts +++ b/packages/react-obsidian/src/graph/registry/GraphRegistry.ts @@ -25,7 +25,7 @@ export class GraphRegistry { getSubgraphs(graph: Graph): Graph[] { const Graph = this.instanceToConstructor.get(graph)!; const subgraphs = this.graphToSubgraphs.get(Graph) ?? new Set(); - return Array.from(subgraphs).map((G) => this.resolve(G)); + return Array.from(subgraphs).map(G => this.resolve(G)); } getGraphInstance(name: string): Graph { @@ -39,9 +39,9 @@ export class GraphRegistry { injectionToken?: string, ): T { if ((this.isSingleton(Graph) || this.isBoundToReactLifecycle(Graph)) && this.has(Graph, injectionToken)) { - return this.isComponentScopedLifecycleBound(Graph) ? - this.getByInjectionToken(Graph, injectionToken) : - this.getFirst(Graph); + return this.isComponentScopedLifecycleBound(Graph) + ? this.getByInjectionToken(Graph, injectionToken) + : this.getFirst(Graph); } if (this.isBoundToReactLifecycle(Graph) && source !== 'lifecycleOwner') { throw new ObtainLifecycleBoundGraphException(Graph); @@ -58,7 +58,7 @@ export class GraphRegistry { if (this.isComponentScopedLifecycleBound(Graph)) { return Array .from(instances) - .some((graph) => this.instanceToInjectionToken.get(graph) === injectionToken); + .some(graph => this.instanceToInjectionToken.get(graph) === injectionToken); } return (this.constructorToInstance.get(Graph)?.size ?? 0) > 0; @@ -151,7 +151,7 @@ export class GraphRegistry { } } -// @ts-ignore +// @ts-expect-error - workaround an issue in jest tests where the registry was created multiple times global.graphRegistry = global.graphRegistry || new GraphRegistry(); -// @ts-ignore +// @ts-expect-error - see above export default global.graphRegistry as GraphRegistry; diff --git a/packages/react-obsidian/src/graph/registry/GraphResolverChain.test.ts b/packages/react-obsidian/src/graph/registry/GraphResolverChain.test.ts index f597ba6c..099f7417 100644 --- a/packages/react-obsidian/src/graph/registry/GraphResolverChain.test.ts +++ b/packages/react-obsidian/src/graph/registry/GraphResolverChain.test.ts @@ -6,7 +6,6 @@ import GraphResolversChain from './GraphMiddlewareChain'; import { ObjectGraph } from '../ObjectGraph'; import { GraphMiddleware } from './GraphMiddleware'; - describe('GraphResolverChain', () => { let uut: GraphResolversChain; let defaultGraphResolver: GraphMiddleware; diff --git a/packages/react-obsidian/src/graph/registry/ObtainLifecycleBoundGraphException.ts b/packages/react-obsidian/src/graph/registry/ObtainLifecycleBoundGraphException.ts index 4657505c..af60ffa5 100644 --- a/packages/react-obsidian/src/graph/registry/ObtainLifecycleBoundGraphException.ts +++ b/packages/react-obsidian/src/graph/registry/ObtainLifecycleBoundGraphException.ts @@ -10,6 +10,6 @@ export class ObtainLifecycleBoundGraphException extends Error { private static createMessage(graph: Constructable): string { const graphName = isDev() ? ` ${graph.name}` : ''; return `Tried to obtain a @LifecycleBound graph${graphName}, but it was not created yet. ` - + '@LifecycleBound graphs can only be obtained after they were created by a React component or hook.'; + + '@LifecycleBound graphs can only be obtained after they were created by a React component or hook.'; } } diff --git a/packages/react-obsidian/src/injectors/class/ClassInjector.ts b/packages/react-obsidian/src/injectors/class/ClassInjector.ts index 367859f5..8b2b59ce 100644 --- a/packages/react-obsidian/src/injectors/class/ClassInjector.ts +++ b/packages/react-obsidian/src/injectors/class/ClassInjector.ts @@ -35,10 +35,10 @@ export default class ClassInjector { graph.onBind(target); const createdObject = Reflect.construct(target, argsToInject, newTarget); this.injectProperties(target, createdObject, graph); - const originalComponentWillUnmount = createdObject.componentWillUnmount; + const originalComponentWillUnmount: () => void | undefined = createdObject.componentWillUnmount; createdObject.componentWillUnmount = () => { originalComponentWillUnmount?.(); - referenceCounter.release(graph, (g) => graphRegistry.clear(g)); + referenceCounter.release(graph, g => graphRegistry.clear(g)); }; return createdObject; } diff --git a/packages/react-obsidian/src/injectors/components/ComponentInjector.test.tsx b/packages/react-obsidian/src/injectors/components/ComponentInjector.test.tsx index 29fb1bb9..f8d49099 100644 --- a/packages/react-obsidian/src/injectors/components/ComponentInjector.test.tsx +++ b/packages/react-obsidian/src/injectors/components/ComponentInjector.test.tsx @@ -16,17 +16,17 @@ describe('ComponentInjector', () => { it('Rerenders on props change', () => { const InjectedComponent = injectComponent(Component, MainGraph); - const { container, rerender } = render(); + const { container, rerender } = render(); expect(container.textContent).toBe('0 - Fear kills progress'); - rerender(); + rerender(); expect(container.textContent).toBe('1 - Fear kills progress'); }); it('Injects memoized component', () => { const MemoizedComponent = React.memo(Component); const InjectedComponent = injectComponent(MemoizedComponent, MainGraph); - const { container } = render(); + const { container } = render(); expect(container.textContent).toBe('0 - Fear kills progress'); }); @@ -34,10 +34,10 @@ describe('ComponentInjector', () => { it('Rerenders memoized components on props change', () => { const MemoizedComponent = React.memo(Component); const InjectedComponent = injectComponent(MemoizedComponent, MainGraph); - const { container, rerender } = render(); + const { container, rerender } = render(); expect(container.textContent).toBe('0 - Fear kills progress'); - rerender(); + rerender(); expect(container.textContent).toBe('1 - Fear kills progress'); }); @@ -45,7 +45,7 @@ describe('ComponentInjector', () => { let arePropsEqual = true; const MemoizedComponent = React.memo(Component, () => arePropsEqual); const InjectedComponent = injectComponent(MemoizedComponent, MainGraph); - const { container, rerender } = render(); + const { container, rerender } = render(); expect(container.textContent).toBe('0 - Fear kills progress'); rerender(); diff --git a/packages/react-obsidian/src/injectors/components/ComponentInjector.tsx b/packages/react-obsidian/src/injectors/components/ComponentInjector.tsx index 0476843e..ca0562ba 100644 --- a/packages/react-obsidian/src/injectors/components/ComponentInjector.tsx +++ b/packages/react-obsidian/src/injectors/components/ComponentInjector.tsx @@ -32,7 +32,7 @@ export default class ComponentInjector { const proxiedProps = new PropsInjector(graph).inject(passedProps); return ( - + {Target(proxiedProps as unknown as PropsWithChildren

)} ); diff --git a/packages/react-obsidian/src/injectors/components/InjectComponent.test.tsx b/packages/react-obsidian/src/injectors/components/InjectComponent.test.tsx index 4bc7c80d..89e6a2ef 100644 --- a/packages/react-obsidian/src/injectors/components/InjectComponent.test.tsx +++ b/packages/react-obsidian/src/injectors/components/InjectComponent.test.tsx @@ -16,16 +16,17 @@ describe('injectComponent', () => { it('Both own and injected props are defined', () => { const InjectedComponent = injectComponent(component, MainGraph); const { container } = render( - , + , ); expect(container.textContent).toBe('this prop must be provided - overriding injected string'); }); it('Only own props are defined', () => { const InjectedComponent = injectComponent(component, MainGraph); - const { container } = render(); + const { container } = render(); expect(container.textContent).toBe('this prop must be provided - Fear kills progress'); }); @@ -38,7 +39,7 @@ describe('injectComponent', () => { // it throws an error if the Graph is undefined it('Throws an error if the Graph is undefined', () => { const Graph = undefined as unknown as Constructable; - expect(() => injectComponent(component, Graph)).toThrowError( + expect(() => injectComponent(component, Graph)).toThrow( `injectComponent was called with an undefined Graph.` + `This is probably not an issue with Obsidian.` + `It's typically caused by circular dependencies.` diff --git a/packages/react-obsidian/src/injectors/components/InjectComponent.ts b/packages/react-obsidian/src/injectors/components/InjectComponent.ts index 22b258b5..0a4c921b 100644 --- a/packages/react-obsidian/src/injectors/components/InjectComponent.ts +++ b/packages/react-obsidian/src/injectors/components/InjectComponent.ts @@ -18,9 +18,9 @@ export const injectComponent = : OwnProps : - OwnProps extends InjectedProps ? Partial : OwnProps & Partial + InjectedProps extends Discriminator ? + OwnProps extends Discriminator ? Partial : OwnProps : + OwnProps extends InjectedProps ? Partial : OwnProps & Partial >; }; function assertGraph(Graph: Constructable>, Target: any) { diff --git a/packages/react-obsidian/src/injectors/components/PropsInjector.ts b/packages/react-obsidian/src/injectors/components/PropsInjector.ts index df6af6a9..1f095798 100644 --- a/packages/react-obsidian/src/injectors/components/PropsInjector.ts +++ b/packages/react-obsidian/src/injectors/components/PropsInjector.ts @@ -4,7 +4,6 @@ export default class PropsInjector { constructor(private graph: ObjectGraph) {} inject(passedProps: Props): Partial { - // eslint-disable-next-line prefer-object-spread return new Proxy(Object.assign({}, passedProps), { get: (target: object, p: string, receiver: any): any => { return p in target ? Reflect.get(target, p, receiver) : this.graph.retrieve(p, receiver); diff --git a/packages/react-obsidian/src/injectors/components/useGraph.ts b/packages/react-obsidian/src/injectors/components/useGraph.ts index b7be1cb0..021c1a89 100644 --- a/packages/react-obsidian/src/injectors/components/useGraph.ts +++ b/packages/react-obsidian/src/injectors/components/useGraph.ts @@ -10,7 +10,6 @@ export default

( props?: Partial

, injectionToken?: string, ) => { - const [graph] = useState(() => { const resolvedGraph = graphRegistry.resolve(Graph, 'lifecycleOwner', props, injectionToken); resolvedGraph.onBind(target); @@ -18,7 +17,7 @@ export default

( }); useEffect(() => { referenceCounter.retain(graph); - return () => referenceCounter.release(graph, (g) => graphRegistry.clear(g)); + return () => referenceCounter.release(graph, g => graphRegistry.clear(g)); }, [graph]); return graph; }; diff --git a/packages/react-obsidian/src/injectors/hooks/InjectHook.ts b/packages/react-obsidian/src/injectors/hooks/InjectHook.ts index faaf8008..58a41b15 100644 --- a/packages/react-obsidian/src/injectors/hooks/InjectHook.ts +++ b/packages/react-obsidian/src/injectors/hooks/InjectHook.ts @@ -1,4 +1,3 @@ -/* eslint-disable max-len */ import { ObjectGraph } from '../../graph/ObjectGraph'; import { Constructable } from '../../types'; import HookInjector from './HookInjector'; diff --git a/packages/react-obsidian/src/observable/Observable.ts b/packages/react-obsidian/src/observable/Observable.ts index d472d4e2..22fd992b 100644 --- a/packages/react-obsidian/src/observable/Observable.ts +++ b/packages/react-obsidian/src/observable/Observable.ts @@ -14,7 +14,7 @@ export class Observable implements IObservable { public set value(value: T) { this.currentValue = value; - this.subscribers.forEach((subscriber) => subscriber(value)); + this.subscribers.forEach(subscriber => subscriber(value)); } async first(): Promise { @@ -35,7 +35,7 @@ export class Observable implements IObservable { return () => this.subscribers.delete(onNext); } - public unsubscribe(onNext:OnNext) { + public unsubscribe(onNext: OnNext) { if (!this.subscribers.has(onNext)) { throw new Error(`Can't unsubscribe, subscriber doesn't exist`); } diff --git a/packages/react-obsidian/src/observable/cold/ColdMediatorObservable.ts b/packages/react-obsidian/src/observable/cold/ColdMediatorObservable.ts index b396afd1..3b720b37 100644 --- a/packages/react-obsidian/src/observable/cold/ColdMediatorObservable.ts +++ b/packages/react-obsidian/src/observable/cold/ColdMediatorObservable.ts @@ -1,7 +1,6 @@ import { Observable } from '../Observable'; import { MediatorObservable } from '../mediator/MediatorObservable'; import { OnNext } from '../types'; - export class ColdMediatorObservable extends MediatorObservable { constructor(obj: T, private readonly handler = new PropertyAccessTrackingProxy()) { super(new Proxy(obj, handler)); diff --git a/packages/react-obsidian/src/observable/cold/useColdObservers.ts b/packages/react-obsidian/src/observable/cold/useColdObservers.ts index 18d39aa6..c436a007 100644 --- a/packages/react-obsidian/src/observable/cold/useColdObservers.ts +++ b/packages/react-obsidian/src/observable/cold/useColdObservers.ts @@ -10,7 +10,7 @@ export function useColdObservables>(observables: T const [values, setValues] = useState(() => mediator.value as ObservedValues); useEffect(() => { - Object.keys(observables as {}).forEach((key) => { + Object.keys(observables).forEach((key) => { mediator.addSource(observables[key], (value) => { mediator.setValue(key, value); }); diff --git a/packages/react-obsidian/src/observable/mediator/MediatorObservable.test.ts b/packages/react-obsidian/src/observable/mediator/MediatorObservable.test.ts index 82deb77d..b1e424c3 100644 --- a/packages/react-obsidian/src/observable/mediator/MediatorObservable.test.ts +++ b/packages/react-obsidian/src/observable/mediator/MediatorObservable.test.ts @@ -1,7 +1,7 @@ import { Observable } from '../Observable'; import { MediatorObservable } from './MediatorObservable'; -const NOOP = () => {}; +const NOOP = () => { void 0; }; describe('MediatorObservable', () => { let uut!: MediatorObservable; @@ -83,9 +83,9 @@ describe('MediatorObservable', () => { }); it('should throw an error if a subscriber is already subscribed', () => { - const subscriber = () => {}; + const subscriber = () => { void 0; }; uut.subscribe(subscriber); - expect(() => uut.subscribe(subscriber)).toThrowError( + expect(() => uut.subscribe(subscriber)).toThrow( 'Subscriber already subscribed', ); }); @@ -108,10 +108,20 @@ describe('MediatorObservable', () => { }); it('should support chaining addSource calls', () => { - const a = new Observable(); - const b = new Observable(); + const a = new Observable(0); + const b = new Observable(0); + + uut + .addSource(a, (nextA) => { + uut.value = (uut.value ?? 0) + nextA; + }) + .addSource(b, (nextB) => { + uut.value = (uut.value ?? 0) + nextB * 10; + }); - uut.addSource(a, NOOP).addSource(b, NOOP); + a.value = 2; + b.value = 3; + expect(uut.value).toEqual(32); }); it('supports passing initial value in through the constructor', () => { diff --git a/packages/react-obsidian/src/observable/mediator/MediatorObservable.ts b/packages/react-obsidian/src/observable/mediator/MediatorObservable.ts index a34cd4b8..69cff7e4 100644 --- a/packages/react-obsidian/src/observable/mediator/MediatorObservable.ts +++ b/packages/react-obsidian/src/observable/mediator/MediatorObservable.ts @@ -67,7 +67,7 @@ export class MediatorObservable extends Observable { values[index] = next; } else { values[index] = next; - this.value = mapNext(values, this.value) as T; + this.value = mapNext(values, this.value); } }); }); diff --git a/packages/react-obsidian/src/observable/observable.test.ts b/packages/react-obsidian/src/observable/observable.test.ts index 0f54258b..bc4643b0 100644 --- a/packages/react-obsidian/src/observable/observable.test.ts +++ b/packages/react-obsidian/src/observable/observable.test.ts @@ -46,9 +46,9 @@ describe('makeObservable', () => { it('should subscribe only once', () => { const observable = new Observable({}); - const subscriber = () => {}; + const subscriber = () => { void 0; }; observable.subscribe(subscriber); - expect(() => observable.subscribe(subscriber)).toThrowError('Subscriber already subscribed'); + expect(() => observable.subscribe(subscriber)).toThrow('Subscriber already subscribed'); }); it('should unsubscribe', () => { @@ -70,8 +70,8 @@ describe('makeObservable', () => { it('should throw error because the subscriber is not subscribed', () => { const observable = new Observable({}); - const subscriber = () => { }; - expect(() => observable.unsubscribe(subscriber)).toThrowError(`Can't unsubscribe, subscriber doesn't exist`); + const subscriber = () => { void 0; }; + expect(() => observable.unsubscribe(subscriber)).toThrow(`Can't unsubscribe, subscriber doesn't exist`); }); it('should await the current value', async () => { diff --git a/packages/react-obsidian/src/observable/useObserver.ts b/packages/react-obsidian/src/observable/useObserver.ts index 81269519..7c60f401 100644 --- a/packages/react-obsidian/src/observable/useObserver.ts +++ b/packages/react-obsidian/src/observable/useObserver.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-param-reassign */ import { useCallback, useEffect, @@ -26,6 +25,6 @@ export function useObserver(observableOrGenerator: ObservableOrGenerator): return [value, onNext]; } -function getOrGenerateObservable(observableOrGenerator: ObservableOrGenerator) { +function getOrGenerateObservable(observableOrGenerator: ObservableOrGenerator): Observable { return observableOrGenerator instanceof Observable ? observableOrGenerator : observableOrGenerator(); } diff --git a/packages/react-obsidian/src/observable/useObservers.ts b/packages/react-obsidian/src/observable/useObservers.ts index be32a70b..11cfbfef 100644 --- a/packages/react-obsidian/src/observable/useObservers.ts +++ b/packages/react-obsidian/src/observable/useObservers.ts @@ -2,15 +2,16 @@ import { useEffect, useState } from 'react'; import { MediatorObservable } from './mediator/MediatorObservable'; import { ObservedValues, Unsubscribe } from './types'; import { mapObservablesToValues } from './mapObservablesToValues'; +import type { Observable } from './Observable'; -export function useObservers>(observables: T): ObservedValues { +export function useObservers>>(observables: T): ObservedValues { const [values, setValues] = useState(() => mapObservablesToValues(observables)); useEffect(() => { const mediator = new MediatorObservable(); const unsubscribers: Unsubscribe[] = []; - Object.keys(observables as {}).forEach((key) => { + Object.keys(observables).forEach((key) => { const onNext = (value: any) => setValues({ ...values, [key]: value }); mediator.addSource(observables[key], onNext); @@ -19,7 +20,7 @@ export function useObservers>(observables: T): Obs }); }); - return () => unsubscribers.forEach((unsubscribe) => unsubscribe()); + return () => unsubscribers.forEach(unsubscribe => unsubscribe()); }, []); return values; diff --git a/packages/react-obsidian/src/utils/isDev.ts b/packages/react-obsidian/src/utils/isDev.ts index f0a80cc3..66e75382 100644 --- a/packages/react-obsidian/src/utils/isDev.ts +++ b/packages/react-obsidian/src/utils/isDev.ts @@ -3,11 +3,10 @@ export function isDev(): boolean { } function isNodeDev(): boolean { - // eslint-disable-next-line @typescript-eslint/dot-notation return ['test', 'development'].includes(process.env['NODE_ENV'] ?? ''); } function isReactNativeDev(): boolean { - // @ts-ignore + // @ts-expect-error __DEV__ is a global variable in React Native return __DEV__ as boolean ?? false; } diff --git a/packages/react-obsidian/test/acceptance/obtain.test.ts b/packages/react-obsidian/test/acceptance/obtain.test.ts index c4b70ff5..3f4f065e 100644 --- a/packages/react-obsidian/test/acceptance/obtain.test.ts +++ b/packages/react-obsidian/test/acceptance/obtain.test.ts @@ -17,7 +17,7 @@ describe('obtain', () => { it('Should throw circular dependency error when encountering circular dependencies', () => { expect( () => Obsidian.obtain(CircularDependencyGraph).aString(), - ).toThrowError(/Could not resolve aString from CircularDependencyGraph\d because of a circular dependency: aString -> aString$/); + ).toThrow(/Could not resolve aString from CircularDependencyGraph\d because of a circular dependency: aString -> aString$/); }); it('Should not throw circular dependency error resolving valid dependencies', () => { @@ -27,8 +27,7 @@ describe('obtain', () => { }); it('describes the circular dependency path in the thrown exception', () => { - expect(() => Obsidian.obtain(CircularDependencyFromSubgraph).dep1()).toThrowError( - // eslint-disable-next-line max-len + expect(() => Obsidian.obtain(CircularDependencyFromSubgraph).dep1()).toThrow( /Could not resolve dep1 from CircularDependencyFromSubgraph\d because of a circular dependency: dep1 -> dep2 -> dep3 -> dep2/, ); }); diff --git a/packages/react-obsidian/test/acceptance/testKit.test.tsx b/packages/react-obsidian/test/acceptance/testKit.test.tsx index 08aebff9..42da0a16 100644 --- a/packages/react-obsidian/test/acceptance/testKit.test.tsx +++ b/packages/react-obsidian/test/acceptance/testKit.test.tsx @@ -10,14 +10,14 @@ describe('TestKit', () => { const InjectedComponent = injectComponent(Component, SingletonGraph); it('clears @Singleton graphs between tests - part 1', () => { - const { container } = render(); + const { container } = render(); const instanceName = container.textContent!; expect(injectedValues.has(instanceName)).toBeFalsy(); injectedValues.add(instanceName); }); it('clears @Singleton graphs between tests - part 2', () => { - const { container } = render(); + const { container } = render(); const instanceName = container.textContent!; expect(injectedValues.has(instanceName)).toBeFalsy(); injectedValues.add(instanceName); diff --git a/packages/react-obsidian/test/fixtures/CircularDependencyFromSubgraph.ts b/packages/react-obsidian/test/fixtures/CircularDependencyFromSubgraph.ts index bf24d4e8..b62888c9 100644 --- a/packages/react-obsidian/test/fixtures/CircularDependencyFromSubgraph.ts +++ b/packages/react-obsidian/test/fixtures/CircularDependencyFromSubgraph.ts @@ -4,7 +4,7 @@ import { SubgraphWithCircularDependency } from './SubgraphWithCircularDependency @Graph({ subgraphs: [SubgraphWithCircularDependency] }) export class CircularDependencyFromSubgraph extends ObjectGraph { @Provides() - dep1(dep2: any) { + dep1(dep2: unknown) { return dep2; } } diff --git a/packages/react-obsidian/test/fixtures/CircularDependencyGraph.ts b/packages/react-obsidian/test/fixtures/CircularDependencyGraph.ts index d1fc8fff..792e857b 100644 --- a/packages/react-obsidian/test/fixtures/CircularDependencyGraph.ts +++ b/packages/react-obsidian/test/fixtures/CircularDependencyGraph.ts @@ -1,3 +1,4 @@ +/* eslint-disable obsidian/no-circular-dependencies */ import { Graph, ObjectGraph, Provides } from '../../src'; @Graph() diff --git a/packages/react-obsidian/test/fixtures/CircularDependencyGraph2.ts b/packages/react-obsidian/test/fixtures/CircularDependencyGraph2.ts index 37cf334d..012b273f 100644 --- a/packages/react-obsidian/test/fixtures/CircularDependencyGraph2.ts +++ b/packages/react-obsidian/test/fixtures/CircularDependencyGraph2.ts @@ -1,3 +1,4 @@ +/* eslint-disable obsidian/no-circular-dependencies */ import { Graph, ObjectGraph, Provides } from '../../src'; @Graph() diff --git a/packages/react-obsidian/test/fixtures/GraphWithOnBind.ts b/packages/react-obsidian/test/fixtures/GraphWithOnBind.ts index 1518c849..6826f64c 100644 --- a/packages/react-obsidian/test/fixtures/GraphWithOnBind.ts +++ b/packages/react-obsidian/test/fixtures/GraphWithOnBind.ts @@ -4,12 +4,12 @@ import { Graph, ObjectGraph, Provides } from '../../src'; export class GraphWithOnBind extends ObjectGraph { private target!: any; - override onBind(target: any) { + override onBind(target: unknown) { this.target = target; } @Provides() targetName(): string { - return this.target.name; + return this.target.name as string; } } diff --git a/packages/react-obsidian/test/fixtures/LifecycleBoundWithLifecycleBoundSubgraph.ts b/packages/react-obsidian/test/fixtures/LifecycleBoundWithLifecycleBoundSubgraph.ts index c21a340e..973d301b 100644 --- a/packages/react-obsidian/test/fixtures/LifecycleBoundWithLifecycleBoundSubgraph.ts +++ b/packages/react-obsidian/test/fixtures/LifecycleBoundWithLifecycleBoundSubgraph.ts @@ -4,9 +4,8 @@ import { LifecycleBoundGraph } from './LifecycleBoundGraph'; export type Props = Record & { stringFromProps: string }; -@LifecycleBound() @Graph({subgraphs: [LifecycleBoundGraph]}) +@LifecycleBound() @Graph({ subgraphs: [LifecycleBoundGraph] }) export class LifecycleBoundGraphWithLifecycleBoundSubgraph extends ObjectGraph { - @Provides() aString(computedFromProps: string): string { return `A string that requires props from a lifecycle bound subgraph: ${computedFromProps}`; diff --git a/packages/react-obsidian/test/fixtures/ScopedLifecycleBoundGraph.ts b/packages/react-obsidian/test/fixtures/ScopedLifecycleBoundGraph.ts index 8a147d52..87dbeaa8 100644 --- a/packages/react-obsidian/test/fixtures/ScopedLifecycleBoundGraph.ts +++ b/packages/react-obsidian/test/fixtures/ScopedLifecycleBoundGraph.ts @@ -3,7 +3,7 @@ import { LifecycleBound } from '../../src/decorators/LifecycleBound'; export type Props = Record & { stringFromProps: string }; -@LifecycleBound({scope: 'component'}) @Graph() +@LifecycleBound({ scope: 'component' }) @Graph() export class ScopedLifecycleBoundGraph extends ObjectGraph { } diff --git a/packages/react-obsidian/test/fixtures/SubgraphWithCircularDependency.ts b/packages/react-obsidian/test/fixtures/SubgraphWithCircularDependency.ts index cfdac08c..0e194a00 100644 --- a/packages/react-obsidian/test/fixtures/SubgraphWithCircularDependency.ts +++ b/packages/react-obsidian/test/fixtures/SubgraphWithCircularDependency.ts @@ -1,3 +1,4 @@ +/* eslint-disable obsidian/no-circular-dependencies */ import { Graph, ObjectGraph, diff --git a/packages/react-obsidian/test/fixtures/UniqueNumberGraph.ts b/packages/react-obsidian/test/fixtures/UniqueNumberGraph.ts index 078e6d7a..13ed23be 100644 --- a/packages/react-obsidian/test/fixtures/UniqueNumberGraph.ts +++ b/packages/react-obsidian/test/fixtures/UniqueNumberGraph.ts @@ -7,7 +7,6 @@ import { @Graph() export class UniqueNumberGraph extends ObjectGraph { - // eslint-disable-next-line unused-imports/no-unused-vars, no-unused-vars constructor(private uniqueNumberGenerator: () => number) { super(); } diff --git a/packages/react-obsidian/test/integration/functionalComponentReactLifecycle.test.tsx b/packages/react-obsidian/test/integration/functionalComponentReactLifecycle.test.tsx index 5083b4c3..5cd57865 100644 --- a/packages/react-obsidian/test/integration/functionalComponentReactLifecycle.test.tsx +++ b/packages/react-obsidian/test/integration/functionalComponentReactLifecycle.test.tsx @@ -3,7 +3,8 @@ import { fireEvent, render } from '@testing-library/react'; import { injectComponent } from '../../src'; import MainGraph from '../fixtures/MainGraph'; -enum Lifecycle {Mounted, Unmounted} +enum Lifecycle { Mounted, Unmounted } + const componentLifecycle: Lifecycle[] = []; interface InjectedComponentProps { @@ -13,10 +14,10 @@ interface InjectedComponentProps { const Component: React.FunctionComponent = ({ someString }: InjectedComponentProps) => { useEffect(() => { componentLifecycle.push(Lifecycle.Mounted); - return () => { componentLifecycle.push(Lifecycle.Unmounted); }; + return () => void componentLifecycle.push(Lifecycle.Unmounted); }, []); - const onClick = useCallback(() => { setCounter(counter + 1); }, []); + const onClick = useCallback(() => setCounter(counter + 1), []); const [counter, setCounter] = useState(0); return ( @@ -32,7 +33,6 @@ describe('React lifecycle - functional component', () => { let InjectedComponent: React.FunctionComponent>; beforeEach(() => { - // eslint-disable-next-line obsidian/strongly-typed-inject-component InjectedComponent = injectComponent(Component, MainGraph); }); diff --git a/packages/react-obsidian/test/integration/lateInject.test.tsx b/packages/react-obsidian/test/integration/lateInject.test.tsx index 1e49267a..b936884a 100644 --- a/packages/react-obsidian/test/integration/lateInject.test.tsx +++ b/packages/react-obsidian/test/integration/lateInject.test.tsx @@ -46,6 +46,7 @@ class LateProperty { @Injectable(MainGraph) class LatePropertyConstructorInjection { @LateInject() someString!: string; + constructor() { Obsidian.inject(this); } diff --git a/packages/react-obsidian/test/integration/lifecyleBoundGraphs.test.tsx b/packages/react-obsidian/test/integration/lifecyleBoundGraphs.test.tsx index 3aeda36d..889ded5f 100644 --- a/packages/react-obsidian/test/integration/lifecyleBoundGraphs.test.tsx +++ b/packages/react-obsidian/test/integration/lifecyleBoundGraphs.test.tsx @@ -17,7 +17,7 @@ describe('React lifecycle bound graphs', () => { LifecycleBoundGraph.timesCreated = 0; }); - it('creates a bound graph only once', async () => { + it('creates a bound graph only once', () => { render(); render(); expect(LifecycleBoundGraph.timesCreated).toBe(1); @@ -32,7 +32,7 @@ describe('React lifecycle bound graphs', () => { }); it('clears a bound graph after dependent components are unmounted when it was used for class injection', () => { - const Component2 = createFunctionalComponent({ instantiateInjectableClass: true}); + const Component2 = createFunctionalComponent({ instantiateInjectableClass: true }); const { unmount } = render(); unmount(); render(); @@ -41,7 +41,7 @@ describe('React lifecycle bound graphs', () => { }); it('passes props to the component', () => { - const { container } = render(); + const { container } = render(); expect(container.textContent).toBe('A string passed via props: Obsidian is cool'); }); @@ -56,10 +56,10 @@ describe('React lifecycle bound graphs', () => { expect(() => { @Injectable(LifecycleBoundGraph) class Foo { - // @ts-ignore + // @ts-expect-error - This is used to inject the class @Inject() private computedFromProps!: string; } - // eslint-disable-next-line no-new + new Foo(); }).toThrow(ObtainLifecycleBoundGraphException); }); @@ -79,20 +79,19 @@ describe('React lifecycle bound graphs', () => { }); it('clears a bound graph when all dependent class components are unmounted', () => { - const { unmount } = render(); + const { unmount } = render(); unmount(); render(); expect(LifecycleBoundGraph.timesCreated).toBe(2); }); - type CreateOptions = {instantiateInjectableClass: boolean}; - function createFunctionalComponent({instantiateInjectableClass}: CreateOptions = { + type CreateOptions = { instantiateInjectableClass: boolean }; + function createFunctionalComponent({ instantiateInjectableClass }: CreateOptions = { instantiateInjectableClass: false, }) { const useHook = injectHook(() => { if (instantiateInjectableClass) { - // eslint-disable-next-line no-new new Foo(); } }, LifecycleBoundGraph); diff --git a/packages/react-obsidian/test/integration/reactStrictMode.test.tsx b/packages/react-obsidian/test/integration/reactStrictMode.test.tsx index e7ddd5e8..56cbf435 100644 --- a/packages/react-obsidian/test/integration/reactStrictMode.test.tsx +++ b/packages/react-obsidian/test/integration/reactStrictMode.test.tsx @@ -5,7 +5,7 @@ import { LifecycleBoundGraph } from '../fixtures/LifecycleBoundGraph'; describe('React Strict Mode', () => { it('should render without crashing', () => { - const { container } = render(, { + const { container } = render(, { wrapper: React.StrictMode, }); expect(container.textContent).toBe('A string passed via props: foo'); diff --git a/packages/react-obsidian/test/integration/resolvePrecedance.test.tsx b/packages/react-obsidian/test/integration/resolvePrecedance.test.tsx index 331a2bf6..6a1422df 100644 --- a/packages/react-obsidian/test/integration/resolvePrecedance.test.tsx +++ b/packages/react-obsidian/test/integration/resolvePrecedance.test.tsx @@ -1,4 +1,3 @@ -/* eslint-disable arrow-body-style */ import { render } from '@testing-library/react'; import React from 'react'; import { injectComponent } from '../../src'; @@ -25,7 +24,7 @@ describe('Property resolving precedence', () => { InjectedComponent = injectComponent(Component, MainGraph); }); - it('Injects dependencies from subgraphs', async () => { + it('Injects dependencies from subgraphs', () => { const { container } = render(); expect(container.textContent).toBe(`${injectedValues.fromStringProvider}${injectedValues.fromSubgraph}`); }); diff --git a/packages/react-obsidian/test/integration/scopedLifecycleBoundGraphs.test.tsx b/packages/react-obsidian/test/integration/scopedLifecycleBoundGraphs.test.tsx index e9b3c1b3..14bdd834 100644 --- a/packages/react-obsidian/test/integration/scopedLifecycleBoundGraphs.test.tsx +++ b/packages/react-obsidian/test/integration/scopedLifecycleBoundGraphs.test.tsx @@ -59,23 +59,22 @@ type Props = { renderComponentC?: boolean; }; -const ComponentA = injectComponent(({renderComponentC}: Props) => { +const ComponentA = injectComponent(({ renderComponentC }: Props) => { return ( <> {renderComponentC && } ); - }, ScopedLifecycleBoundGraph); type Injected = DependenciesOf; -type Own = {injectionToken: string}; +type Own = { injectionToken: string }; -const ComponentB = injectComponent(({count, id}: Injected & Own) => { +const ComponentB = injectComponent(({ count, id }: Injected & Own) => { return <>{`count: ${count} id: ${id}`}; }, ScopedLifecycleBoundGraph); -const ComponentC = injectComponent(({count, id}: Injected & Own) => { +const ComponentC = injectComponent(({ count, id }: Injected & Own) => { return <>{` from C: count: ${count} id: ${id}`}; -}, ScopedLifecycleBoundGraph); \ No newline at end of file +}, ScopedLifecycleBoundGraph); diff --git a/packages/react-obsidian/testkit/index.ts b/packages/react-obsidian/testkit/index.ts index fb1a4a76..da3ec8fb 100644 --- a/packages/react-obsidian/testkit/index.ts +++ b/packages/react-obsidian/testkit/index.ts @@ -7,7 +7,6 @@ class TestKit { * @deprecated testKit.mockGraphs is deprecated, use mockGraphs instead */ public mockGraphs(graphNameToGraph: Record | ((props: any) => ObjectGraph)>) { - // eslint-disable-next-line no-console console.warn('testKit.mockGraphs is deprecated, use mockGraphs instead'); return mockGraphs(graphNameToGraph); } diff --git a/packages/react-obsidian/transformers/babel-plugin-obsidian/__snapshots__/index.test.ts.snap b/packages/react-obsidian/transformers/babel-plugin-obsidian/__snapshots__/index.test.ts.snap index ed5eb6f8..d24036c5 100644 --- a/packages/react-obsidian/transformers/babel-plugin-obsidian/__snapshots__/index.test.ts.snap +++ b/packages/react-obsidian/transformers/babel-plugin-obsidian/__snapshots__/index.test.ts.snap @@ -2,99 +2,99 @@ exports[`Provider Arguments Transformer Adds method name to provider arguments (@Provider() -> @Provider({name: "myProvidedDependency"}) 1`] = ` "var _dec, _class; -function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; } +function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; } let MainGraph = (_dec = Provides({ name: "someString" -}), (_class = class MainGraph { +}), _class = class MainGraph { someString({ stringProvider: stringProvider, emptyString: emptyString }) { return stringProvider.theString + emptyString; } -}, (_applyDecoratedDescriptor(_class.prototype, "someString", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "someString"), _class.prototype)), _class));" +}, _applyDecoratedDescriptor(_class.prototype, "someString", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "someString"), _class.prototype), _class);" `; exports[`Provider Arguments Transformer Adds property name to @Inject arguments @Inject -> @Inject("myDependency") 1`] = ` "var _dec, _class, _descriptor; -function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; } -function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'transform-class-properties is enabled and runs after the decorators transform.'); } -let MainGraph = (_dec = Inject("someString"), (_class = class MainGraph { +function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; } +function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); } +let MainGraph = (_dec = Inject("someString"), _class = class MainGraph { someString = _initializerWarningHelper(_descriptor, this); -}, (_descriptor = _applyDecoratedDescriptor(_class.prototype, "someString", [_dec], { +}, _descriptor = _applyDecoratedDescriptor(_class.prototype, "someString", [_dec], { configurable: true, enumerable: true, writable: true, initializer: null -})), _class));" +}), _class);" `; exports[`Provider Arguments Transformer Adds property name to @LateInject arguments @LateInject -> @LateInject("myDependency") 1`] = ` "var _dec, _class, _descriptor; -function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; } -function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'transform-class-properties is enabled and runs after the decorators transform.'); } -let MainGraph = (_dec = LateInject("someString"), (_class = class MainGraph { +function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; } +function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); } +let MainGraph = (_dec = LateInject("someString"), _class = class MainGraph { someString = _initializerWarningHelper(_descriptor, this); -}, (_descriptor = _applyDecoratedDescriptor(_class.prototype, "someString", [_dec], { +}, _descriptor = _applyDecoratedDescriptor(_class.prototype, "someString", [_dec], { configurable: true, enumerable: true, writable: true, initializer: null -})), _class));" +}), _class);" `; exports[`Provider Arguments Transformer Does not add name if name is provided by the user 1`] = ` "var _dec, _class; -function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; } +function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; } let MainGraph = (_dec = Provides({ name: 'myDependency' -}), (_class = class MainGraph { +}), _class = class MainGraph { someString({ stringProvider: stringProvider }) { return stringProvider.theString; } -}, (_applyDecoratedDescriptor(_class.prototype, "someString", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "someString"), _class.prototype)), _class));" +}, _applyDecoratedDescriptor(_class.prototype, "someString", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "someString"), _class.prototype), _class);" `; exports[`Provider Arguments Transformer Does not add property name to @Inject if name is provided by the user 1`] = ` "var _dec, _class, _descriptor; -function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; } -function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'transform-class-properties is enabled and runs after the decorators transform.'); } -let MainGraph = (_dec = Inject("someString"), (_class = class MainGraph { +function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; } +function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); } +let MainGraph = (_dec = Inject("someString"), _class = class MainGraph { someString = _initializerWarningHelper(_descriptor, this); -}, (_descriptor = _applyDecoratedDescriptor(_class.prototype, "someString", [_dec], { +}, _descriptor = _applyDecoratedDescriptor(_class.prototype, "someString", [_dec], { configurable: true, enumerable: true, writable: true, initializer: null -})), _class));" +}), _class);" `; exports[`Provider Arguments Transformer Does not add property name to @LateInject if name is provided by the user 1`] = ` "var _dec, _class, _descriptor; -function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; } -function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'transform-class-properties is enabled and runs after the decorators transform.'); } -let MainGraph = (_dec = LateInject("someString"), (_class = class MainGraph { +function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; } +function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); } +let MainGraph = (_dec = LateInject("someString"), _class = class MainGraph { someString = _initializerWarningHelper(_descriptor, this); -}, (_descriptor = _applyDecoratedDescriptor(_class.prototype, "someString", [_dec], { +}, _descriptor = _applyDecoratedDescriptor(_class.prototype, "someString", [_dec], { configurable: true, enumerable: true, writable: true, initializer: null -})), _class));" +}), _class);" `; exports[`Provider Arguments Transformer handles providers that have no arguments 1`] = ` "var _dec, _class; -function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; } +function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; } let MainGraph = (_dec = Provides({ name: "someString" -}), (_class = class MainGraph { +}), _class = class MainGraph { someString() { return 'someString'; } -}, (_applyDecoratedDescriptor(_class.prototype, "someString", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "someString"), _class.prototype)), _class));" +}, _applyDecoratedDescriptor(_class.prototype, "someString", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "someString"), _class.prototype), _class);" `; exports[`Provider Arguments Transformer saves constructor argument name in Inject - @Inject -> @Inject(arg) 1`] = ` diff --git a/packages/react-obsidian/transformers/babel-plugin-obsidian/helpers/index.ts b/packages/react-obsidian/transformers/babel-plugin-obsidian/helpers/index.ts index 7f7d99a6..76d9b35b 100644 --- a/packages/react-obsidian/transformers/babel-plugin-obsidian/helpers/index.ts +++ b/packages/react-obsidian/transformers/babel-plugin-obsidian/helpers/index.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-param-reassign */ import { types as t } from '@babel/core'; import { CallExpression, @@ -9,6 +8,7 @@ import { ObjectExpression, ObjectPattern, TSParameterProperty, + Node, } from '@babel/types'; const never = ''; @@ -39,7 +39,7 @@ export function addNameToProviderArguments(node: ClassMethod, decorator: Decorat export function getDecoratorArgument(decorator: Decorator): ObjectExpression | undefined { if (t.isCallExpression(decorator.expression)) { - return decorator.expression.arguments.find((a) => t.isObjectExpression(a)) as ObjectExpression; + return decorator.expression.arguments.find(a => t.isObjectExpression(a)) as ObjectExpression; } return undefined; } @@ -53,17 +53,17 @@ export function getDecoratorByName( decorators: Array | undefined | null, decoratorName: string, ): Decorator | undefined { - return decorators?.find((decorator) => get(decorator, 'expression.callee.name') === decoratorName); + return decorators?.find(decorator => get(decorator, 'expression.callee.name') === decoratorName); } export function getDecoratorName(decorator?: Decorator): string | undefined { return get(decorator, 'expression.callee.name'); } -export function paramsToDestructuringAssignment(params: (Identifier | any)[]): ObjectPattern { +export function paramsToDestructuringAssignment(params: Node[]): ObjectPattern { return t.objectPattern(params - .filter((p) => t.isIdentifier(p)) - .map((p) => t.objectProperty(t.identifier(p.name), t.identifier(p.name)))); + .filter(p => t.isIdentifier(p)) + .map(p => t.objectProperty(t.identifier(p.name), t.identifier(p.name)))); } export function passParamNameAsInjectArgument( @@ -93,9 +93,9 @@ function getNodeName(node: AcceptedNodeType): string { return node.name; } -function get(node: any, path: string): any { +function get(node: any, path: string): T | undefined { if (node === undefined || node === null) return undefined; const [key, ...rest] = path.split('.'); - if (rest.length === 0) return node[key]; + if (rest.length === 0) return node[key] as T; return get(node[key], rest.join('.')); } diff --git a/packages/react-obsidian/transformers/babel-plugin-obsidian/index.test.ts b/packages/react-obsidian/transformers/babel-plugin-obsidian/index.test.ts index a8479950..4bc81e84 100644 --- a/packages/react-obsidian/transformers/babel-plugin-obsidian/index.test.ts +++ b/packages/react-obsidian/transformers/babel-plugin-obsidian/index.test.ts @@ -43,7 +43,7 @@ const namedLateInject = `class MainGraph { }`; describe('Provider Arguments Transformer', () => { - const uut: Function = providerArgumentsTransformer; + const uut = providerArgumentsTransformer; it('Adds method name to provider arguments (@Provider() -> @Provider({name: "myProvidedDependency"})', () => { const result = transformSync(unnamedProvider); diff --git a/packages/react-obsidian/transformers/babel-plugin-obsidian/index.ts b/packages/react-obsidian/transformers/babel-plugin-obsidian/index.ts index df257772..72f84414 100644 --- a/packages/react-obsidian/transformers/babel-plugin-obsidian/index.ts +++ b/packages/react-obsidian/transformers/babel-plugin-obsidian/index.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-param-reassign */ import { ClassMethod, ClassProperty, diff --git a/packages/react-obsidian/transformers/babel-plugin-obsidian/unmagler/method.ts b/packages/react-obsidian/transformers/babel-plugin-obsidian/unmagler/method.ts index c1e52444..582344d3 100644 --- a/packages/react-obsidian/transformers/babel-plugin-obsidian/unmagler/method.ts +++ b/packages/react-obsidian/transformers/babel-plugin-obsidian/unmagler/method.ts @@ -16,9 +16,8 @@ function saveMethod(name: string, node: ClassMethod) { } function convertProviderParamsToDestructuringAssignment(node: ClassMethod) { - if (node.params.length === 0) { return; } + if (node.params.length === 0) return; const destructuredParams = paramsToDestructuringAssignment(node.params); - // eslint-disable-next-line no-param-reassign node.params.length = 0; node.params.push(destructuredParams); } diff --git a/packages/react-obsidian/tsconfig.base.json b/packages/react-obsidian/tsconfig.base.json index 0c2d0a6f..f9a12c2e 100644 --- a/packages/react-obsidian/tsconfig.base.json +++ b/packages/react-obsidian/tsconfig.base.json @@ -12,7 +12,7 @@ "dist" ], "compilerOptions": { - "target": "es2018", + "target": "es2023", "module": "commonjs", "lib": [ "ES6", diff --git a/yarn.lock b/yarn.lock index 3d49f09f..44f43987 100644 --- a/yarn.lock +++ b/yarn.lock @@ -250,6 +250,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.25.2, @babel/compat-data@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/compat-data@npm:7.25.4" + checksum: b12a91d27c3731a4b0bdc9312a50b1911f41f7f728aaf0d4b32486e2257fd2cb2d3ea1a295e98449600c48f2c7883a3196ca77cda1cef7d97a10c2e83d037974 + languageName: node + linkType: hard + "@babel/core@npm:7.22.x": version: 7.22.20 resolution: "@babel/core@npm:7.22.20" @@ -319,6 +326,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/core@npm:7.25.2" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.24.7 + "@babel/generator": ^7.25.0 + "@babel/helper-compilation-targets": ^7.25.2 + "@babel/helper-module-transforms": ^7.25.2 + "@babel/helpers": ^7.25.0 + "@babel/parser": ^7.25.0 + "@babel/template": ^7.25.0 + "@babel/traverse": ^7.25.2 + "@babel/types": ^7.25.2 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: 9a1ef604a7eb62195f70f9370cec45472a08114e3934e3eaaedee8fd754edf0730e62347c7b4b5e67d743ce57b5bb8cf3b92459482ca94d06e06246ef021390a + languageName: node + linkType: hard + "@babel/eslint-parser@npm:7.22.x": version: 7.22.15 resolution: "@babel/eslint-parser@npm:7.22.15" @@ -333,6 +363,20 @@ __metadata: languageName: node linkType: hard +"@babel/eslint-parser@npm:^7.25.1": + version: 7.25.1 + resolution: "@babel/eslint-parser@npm:7.25.1" + dependencies: + "@nicolo-ribaudo/eslint-scope-5-internals": 5.1.1-v1 + eslint-visitor-keys: ^2.1.0 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + checksum: 73207b7e84a58bd6560d29f11cf5c6f9d64a01b9299d4d0a145423a028ea4c402be2fd09228647fdbec14b65a07d4138e751468fd33d9a9363c9698582fa80b5 + languageName: node + linkType: hard + "@babel/generator@npm:^7.22.15, @babel/generator@npm:^7.24.5, @babel/generator@npm:^7.7.2": version: 7.24.5 resolution: "@babel/generator@npm:7.24.5" @@ -357,6 +401,18 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.25.0, @babel/generator@npm:^7.25.6": + version: 7.25.6 + resolution: "@babel/generator@npm:7.25.6" + dependencies: + "@babel/types": ^7.25.6 + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.25 + jsesc: ^2.5.1 + checksum: b55975cd664f5602304d868bb34f4ee3bed6f5c7ce8132cd92ff27a46a53a119def28a182d91992e86f75db904f63094a81247703c4dc96e4db0c03fd04bcd68 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" @@ -420,6 +476,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.24.8, @babel/helper-compilation-targets@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/helper-compilation-targets@npm:7.25.2" + dependencies: + "@babel/compat-data": ^7.25.2 + "@babel/helper-validator-option": ^7.24.8 + browserslist: ^4.23.1 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: aed33c5496cb9db4b5e2d44e26bf8bc474074cc7f7bb5ebe1d4a20fdeb362cb3ba9e1596ca18c7484bcd6e5c3a155ab975e420d520c0ae60df81f9de04d0fd16 + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.22.15, @babel/helper-create-class-features-plugin@npm:^7.22.5, @babel/helper-create-class-features-plugin@npm:^7.24.1, @babel/helper-create-class-features-plugin@npm:^7.24.4, @babel/helper-create-class-features-plugin@npm:^7.24.5": version: 7.24.5 resolution: "@babel/helper-create-class-features-plugin@npm:7.24.5" @@ -458,6 +527,23 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.4" + dependencies: + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-member-expression-to-functions": ^7.24.8 + "@babel/helper-optimise-call-expression": ^7.24.7 + "@babel/helper-replace-supers": ^7.25.0 + "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 + "@babel/traverse": ^7.25.4 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 4544ebda4516eb25efdebd47ca024bd7bdb1eb6e7cc3ad89688c8ef8e889734c2f4411ed78981899c641394f013f246f2af63d92a0e9270f6c453309b4cb89ba + languageName: node + linkType: hard + "@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.15, @babel/helper-create-regexp-features-plugin@npm:^7.22.5": version: 7.22.15 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15" @@ -484,6 +570,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-regexp-features-plugin@npm:^7.25.0, @babel/helper-create-regexp-features-plugin@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.2" + dependencies: + "@babel/helper-annotate-as-pure": ^7.24.7 + regexpu-core: ^5.3.1 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: df55fdc6a1f3090dd37d91347df52d9322d52affa239543808dc142f8fe35e6787e67d8612337668198fac85826fafa9e6772e6c28b7d249ec94e6fafae5da6e + languageName: node + linkType: hard + "@babel/helper-define-polyfill-provider@npm:^0.4.4": version: 0.4.4 resolution: "@babel/helper-define-polyfill-provider@npm:0.4.4" @@ -602,6 +701,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-member-expression-to-functions@npm:7.24.8" + dependencies: + "@babel/traverse": ^7.24.8 + "@babel/types": ^7.24.8 + checksum: bf923d05d81b06857f4ca4fe9c528c9c447a58db5ea39595bb559eae2fce01a8266173db0fd6a2ec129d7bbbb9bb22f4e90008252f7c66b422c76630a878a4bc + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.24.1, @babel/helper-module-imports@npm:^7.24.3": version: 7.24.3 resolution: "@babel/helper-module-imports@npm:7.24.3" @@ -651,6 +760,20 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.24.8, @babel/helper-module-transforms@npm:^7.25.0, @babel/helper-module-transforms@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/helper-module-transforms@npm:7.25.2" + dependencies: + "@babel/helper-module-imports": ^7.24.7 + "@babel/helper-simple-access": ^7.24.7 + "@babel/helper-validator-identifier": ^7.24.7 + "@babel/traverse": ^7.25.2 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 282d4e3308df6746289e46e9c39a0870819630af5f84d632559171e4fae6045684d771a65f62df3d569e88ccf81dc2def78b8338a449ae3a94bb421aa14fc367 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-optimise-call-expression@npm:7.22.5" @@ -683,6 +806,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-plugin-utils@npm:7.24.8" + checksum: 73b1a83ba8bcee21dc94de2eb7323207391715e4369fd55844bb15cf13e3df6f3d13a40786d990e6370bf0f571d94fc31f70dec96c1d1002058258c35ca3767a + languageName: node + linkType: hard + "@babel/helper-remap-async-to-generator@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-remap-async-to-generator@npm:7.22.20" @@ -709,6 +839,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-remap-async-to-generator@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/helper-remap-async-to-generator@npm:7.25.0" + dependencies: + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-wrap-function": ^7.25.0 + "@babel/traverse": ^7.25.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 47f3065e43fe9d6128ddb4291ffb9cf031935379265fd13de972b5f241943121f7583efb69cd2e1ecf39e3d0f76f047547d56c3fcc2c853b326fad5465da0bd7 + languageName: node + linkType: hard + "@babel/helper-replace-supers@npm:^7.22.9, @babel/helper-replace-supers@npm:^7.24.1": version: 7.24.1 resolution: "@babel/helper-replace-supers@npm:7.24.1" @@ -735,6 +878,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-replace-supers@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/helper-replace-supers@npm:7.25.0" + dependencies: + "@babel/helper-member-expression-to-functions": ^7.24.8 + "@babel/helper-optimise-call-expression": ^7.24.7 + "@babel/traverse": ^7.25.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: f669fc2487c22d40b808f94b9c3ee41129484d5ef0ba689bdd70f216ff91e10b6b021d2f8cd37e7bdd700235a2a6ae6622526344f064528190383bf661ac65f8 + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.22.5, @babel/helper-simple-access@npm:^7.24.5": version: 7.24.5 resolution: "@babel/helper-simple-access@npm:7.24.5" @@ -805,6 +961,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-string-parser@npm:7.24.8" + checksum: 39b03c5119216883878655b149148dc4d2e284791e969b19467a9411fccaa33f7a713add98f4db5ed519535f70ad273cdadfd2eb54d47ebbdeac5083351328ce + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.22.20, @babel/helper-validator-identifier@npm:^7.24.5": version: 7.24.5 resolution: "@babel/helper-validator-identifier@npm:7.24.5" @@ -833,6 +996,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/helper-validator-option@npm:7.24.8" + checksum: a52442dfa74be6719c0608fee3225bd0493c4057459f3014681ea1a4643cd38b68ff477fe867c4b356da7330d085f247f0724d300582fa4ab9a02efaf34d107c + languageName: node + linkType: hard + "@babel/helper-wrap-function@npm:^7.22.20": version: 7.24.5 resolution: "@babel/helper-wrap-function@npm:7.24.5" @@ -856,6 +1026,17 @@ __metadata: languageName: node linkType: hard +"@babel/helper-wrap-function@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/helper-wrap-function@npm:7.25.0" + dependencies: + "@babel/template": ^7.25.0 + "@babel/traverse": ^7.25.0 + "@babel/types": ^7.25.0 + checksum: 0095b4741704066d1687f9bbd5370bb88c733919e4275e49615f70c180208148ff5f24ab58d186ce92f8f5d28eab034ec6617e9264590cc4744c75302857629c + languageName: node + linkType: hard + "@babel/helpers@npm:^7.22.15, @babel/helpers@npm:^7.24.5": version: 7.24.5 resolution: "@babel/helpers@npm:7.24.5" @@ -877,6 +1058,16 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.25.0": + version: 7.25.6 + resolution: "@babel/helpers@npm:7.25.6" + dependencies: + "@babel/template": ^7.25.0 + "@babel/types": ^7.25.6 + checksum: 5a548999db82049a5f7ac6de57576b4ed0d386ce07d058151698836ed411eae6230db12535487caeebb68a2ffc964491e8aead62364a5132ab0ae20e8b68e19f + languageName: node + linkType: hard + "@babel/highlight@npm:^7.24.2": version: 7.24.5 resolution: "@babel/highlight@npm:7.24.5" @@ -919,6 +1110,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.6": + version: 7.25.6 + resolution: "@babel/parser@npm:7.25.6" + dependencies: + "@babel/types": ^7.25.6 + bin: + parser: ./bin/babel-parser.js + checksum: 85b237ded09ee43cc984493c35f3b1ff8a83e8dbbb8026b8132e692db6567acc5a1659ec928e4baa25499ddd840d7dae9dee3062be7108fe23ec5f94a8066b1e + languageName: node + linkType: hard + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.24.7": version: 7.24.7 resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.24.7" @@ -931,6 +1133,29 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.3": + version: 7.25.3 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.3" + dependencies: + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/traverse": ^7.25.3 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: d3dba60f360defe70eb43e35a1b17ea9dd4a99e734249e15be3d5c288019644f96f88d7ff51990118fda0845b4ad50f6d869e0382232b1d8b054d113d4eea7e2 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.0" + dependencies: + "@babel/helper-plugin-utils": ^7.24.8 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: fd56d1e6435f2c008ca9050ea906ff7eedcbec43f532f2bf2e7e905d8bf75bf5e4295ea9593f060394e2c8e45737266ccbf718050bad2dd7be4e7613c60d1b5b + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.22.15": version: 7.24.1 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.24.1" @@ -953,6 +1178,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.0" + dependencies: + "@babel/helper-plugin-utils": ^7.24.8 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 13ed301b108d85867d64226bbc4032b07dd1a23aab68e9e32452c4fe3930f2198bb65bdae9c262c4104bd5e45647bc1830d25d43d356ee9a137edd8d5fab8350 + languageName: node + linkType: hard + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.15": version: 7.24.1 resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.1" @@ -991,6 +1227,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.0" + dependencies: + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/traverse": ^7.25.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: c8d08b8d6cc71451ad2a50cf7db72ab5b41c1e5e2e4d56cf6837a25a61270abd682c6b8881ab025f11a552d2024b3780519bb051459ebb71c27aed13d9917663 + languageName: node + linkType: hard + "@babel/plugin-proposal-decorators@npm:7.22.x": version: 7.22.15 resolution: "@babel/plugin-proposal-decorators@npm:7.22.15" @@ -1006,6 +1254,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-decorators@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-proposal-decorators@npm:7.24.7" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.24.7 + "@babel/helper-plugin-utils": ^7.24.7 + "@babel/plugin-syntax-decorators": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 75aa5ff5537d5ff77f0e52eb161a2f67c7d2bfd8f2000be710dedb1dd238b43ce53d2f734f84bda95b3f013b69de126403f84167f4eddb1d35e8f26257ee07c8 + languageName: node + linkType: hard + "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": version: 7.21.0-placeholder-for-preset-env.2 resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" @@ -1070,6 +1331,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-decorators@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/plugin-syntax-decorators@npm:7.24.7" + dependencies: + "@babel/helper-plugin-utils": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: dc303bcc1f5df61638f1eddc69dd55e65574bd43d8a4a098d3589f5a742e93a4ca3a173967b34eb95e4eaa994799b4c72bfed8688036e43c634be7f24db01ac5 + languageName: node + linkType: hard + "@babel/plugin-syntax-dynamic-import@npm:^7.8.3": version: 7.8.3 resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" @@ -1352,6 +1624,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-async-generator-functions@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.4" + dependencies: + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-remap-async-to-generator": ^7.25.0 + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/traverse": ^7.25.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4235444735a1946f8766fe56564a8134c2c36c73e6cf83b3f2ed5624ebc84ff5979506a6a5b39acdb23aa09d442a6af471710ed408ccce533a2c4d2990b9df6a + languageName: node + linkType: hard + "@babel/plugin-transform-async-to-generator@npm:^7.22.5": version: 7.24.1 resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.1" @@ -1422,6 +1708,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-block-scoping@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-transform-block-scoping@npm:7.25.0" + dependencies: + "@babel/helper-plugin-utils": ^7.24.8 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b1a8f932f69ad2a47ae3e02b4cedd2a876bfc2ac9cf72a503fd706cdc87272646fe9eed81e068c0fc639647033de29f7fa0c21cddd1da0026f83dbaac97316a8 + languageName: node + linkType: hard + "@babel/plugin-transform-class-properties@npm:7.22.x": version: 7.22.5 resolution: "@babel/plugin-transform-class-properties@npm:7.22.5" @@ -1458,6 +1755,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-class-properties@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-class-properties@npm:7.25.4" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.25.4 + "@babel/helper-plugin-utils": ^7.24.8 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b73f7d968639c6c2dfc13f4c5a8fe45cefd260f0faa7890ae12e65d41211072544ff5e128c8b61a86887b29ffd3df8422dbdfbf61648488e71d4bb599c41f4a5 + languageName: node + linkType: hard + "@babel/plugin-transform-class-static-block@npm:^7.22.11": version: 7.24.4 resolution: "@babel/plugin-transform-class-static-block@npm:7.24.4" @@ -1520,6 +1829,22 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-classes@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-classes@npm:7.25.4" + dependencies: + "@babel/helper-annotate-as-pure": ^7.24.7 + "@babel/helper-compilation-targets": ^7.25.2 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-replace-supers": ^7.25.0 + "@babel/traverse": ^7.25.4 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0bf20e46eeb691bd60cee5d1b01950fc37accec88018ecace25099f7c8d8509c1ac54d11b8caf9f2157c6945969520642a3bc421159c1a14e80224dc9a7611de + languageName: node + linkType: hard + "@babel/plugin-transform-computed-properties@npm:^7.22.5": version: 7.24.1 resolution: "@babel/plugin-transform-computed-properties@npm:7.24.1" @@ -1566,6 +1891,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-destructuring@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/plugin-transform-destructuring@npm:7.24.8" + dependencies: + "@babel/helper-plugin-utils": ^7.24.8 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0b4bd3d608979a1e5bd97d9d42acd5ad405c7fffa61efac4c7afd8e86ea6c2d91ab2d94b6a98d63919571363fe76e0b03c4ff161f0f60241b895842596e4a999 + languageName: node + linkType: hard + "@babel/plugin-transform-dotall-regex@npm:^7.22.5": version: 7.24.1 resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.1" @@ -1612,6 +1948,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.0" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.25.0 + "@babel/helper-plugin-utils": ^7.24.8 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 608d6b0e77341189508880fd1a9f605a38d0803dd6f678ea3920ab181b17b377f6d5221ae8cf0104c7a044d30d4ddb0366bd064447695671d78457a656bb264f + languageName: node + linkType: hard + "@babel/plugin-transform-dynamic-import@npm:^7.22.11": version: 7.24.1 resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.1" @@ -1734,6 +2082,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-function-name@npm:^7.25.1": + version: 7.25.1 + resolution: "@babel/plugin-transform-function-name@npm:7.25.1" + dependencies: + "@babel/helper-compilation-targets": ^7.24.8 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/traverse": ^7.25.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 743f3ea03bbc5a90944849d5a880b6bd9243dddbde581a46952da76e53a0b74c1e2424133fe8129d7a152c1f8c872bcd27e0b6728d7caadabd1afa7bb892e1e0 + languageName: node + linkType: hard + "@babel/plugin-transform-json-strings@npm:^7.22.11": version: 7.24.1 resolution: "@babel/plugin-transform-json-strings@npm:7.24.1" @@ -1780,6 +2141,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-literals@npm:^7.25.2": + version: 7.25.2 + resolution: "@babel/plugin-transform-literals@npm:7.25.2" + dependencies: + "@babel/helper-plugin-utils": ^7.24.8 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 70c9bb40e377a306bd8f500899fb72127e527517914466e95dc6bb53fa7a0f51479db244a54a771b5780fc1eab488fedd706669bf11097b81a23c81ab7423eb1 + languageName: node + linkType: hard + "@babel/plugin-transform-logical-assignment-operators@npm:^7.22.11": version: 7.24.1 resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.1" @@ -1876,6 +2248,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-commonjs@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.8" + dependencies: + "@babel/helper-module-transforms": ^7.24.8 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-simple-access": ^7.24.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a4cf95b1639c33382064b44558f73ee5fac023f2a94d16e549d2bb55ceebd5cbc10fcddd505d08cd5bc97f5a64af9fd155512358b7dcf7b1a0082e8945cf21c5 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-systemjs@npm:^7.22.11": version: 7.24.1 resolution: "@babel/plugin-transform-modules-systemjs@npm:7.24.1" @@ -1904,6 +2289,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-systemjs@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.0" + dependencies: + "@babel/helper-module-transforms": ^7.25.0 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-validator-identifier": ^7.24.7 + "@babel/traverse": ^7.25.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fe673bec08564e491847324bb80a1e6edfb229f5c37e58a094d51e95306e7b098e1d130fc43e992d22debd93b9beac74441ffc3f6ea5d78f6b2535896efa0728 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-umd@npm:^7.22.5": version: 7.24.1 resolution: "@babel/plugin-transform-modules-umd@npm:7.24.1" @@ -2124,6 +2523,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-optional-chaining@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.8" + dependencies: + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-skip-transparent-expression-wrappers": ^7.24.7 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 45e55e3a2fffb89002d3f89aef59c141610f23b60eee41e047380bffc40290b59f64fc649aa7ec5281f73d41b2065410d788acc6afaad2a9f44cad6e8af04442 + languageName: node + linkType: hard + "@babel/plugin-transform-parameters@npm:^7.22.15, @babel/plugin-transform-parameters@npm:^7.24.5": version: 7.24.5 resolution: "@babel/plugin-transform-parameters@npm:7.24.5" @@ -2170,6 +2582,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-private-methods@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-private-methods@npm:7.25.4" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.25.4 + "@babel/helper-plugin-utils": ^7.24.8 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cb1dabfc03e2977990263d65bc8f43a9037dffbb5d9a5f825c00d05447ff68015099408c1531d9dd88f18a41a90f5062dc48f3a1d52b415d2d2ee4827dedff09 + languageName: node + linkType: hard + "@babel/plugin-transform-private-property-in-object@npm:^7.22.11": version: 7.24.5 resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.5" @@ -2503,6 +2927,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-typeof-symbol@npm:^7.24.8": + version: 7.24.8 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.8" + dependencies: + "@babel/helper-plugin-utils": ^7.24.8 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8663a8e7347cedf181001d99c88cf794b6598c3d82f324098510fe8fb8bd22113995526a77aa35a3cc5d70ffd0617a59dd0d10311a9bf0e1a3a7d3e59b900c00 + languageName: node + linkType: hard + "@babel/plugin-transform-typescript@npm:^7.22.15": version: 7.24.5 resolution: "@babel/plugin-transform-typescript@npm:7.24.5" @@ -2625,6 +3060,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.4" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.25.2 + "@babel/helper-plugin-utils": ^7.24.8 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 6d1a7e9fdde4ffc9a81c0e3f261b96a9a0dfe65da282ec96fe63b36c597a7389feac638f1df2a8a4f8c9128337bba8e984f934e9f19077930f33abf1926759ea + languageName: node + linkType: hard + "@babel/preset-env@npm:7.22.x": version: 7.22.20 resolution: "@babel/preset-env@npm:7.22.20" @@ -2806,6 +3253,99 @@ __metadata: languageName: node linkType: hard +"@babel/preset-env@npm:^7.25.4": + version: 7.25.4 + resolution: "@babel/preset-env@npm:7.25.4" + dependencies: + "@babel/compat-data": ^7.25.4 + "@babel/helper-compilation-targets": ^7.25.2 + "@babel/helper-plugin-utils": ^7.24.8 + "@babel/helper-validator-option": ^7.24.8 + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ^7.25.3 + "@babel/plugin-bugfix-safari-class-field-initializer-scope": ^7.25.0 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.25.0 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.24.7 + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.25.0 + "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2 + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-class-properties": ^7.12.13 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + "@babel/plugin-syntax-import-assertions": ^7.24.7 + "@babel/plugin-syntax-import-attributes": ^7.24.7 + "@babel/plugin-syntax-import-meta": ^7.10.4 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.14.5 + "@babel/plugin-syntax-unicode-sets-regex": ^7.18.6 + "@babel/plugin-transform-arrow-functions": ^7.24.7 + "@babel/plugin-transform-async-generator-functions": ^7.25.4 + "@babel/plugin-transform-async-to-generator": ^7.24.7 + "@babel/plugin-transform-block-scoped-functions": ^7.24.7 + "@babel/plugin-transform-block-scoping": ^7.25.0 + "@babel/plugin-transform-class-properties": ^7.25.4 + "@babel/plugin-transform-class-static-block": ^7.24.7 + "@babel/plugin-transform-classes": ^7.25.4 + "@babel/plugin-transform-computed-properties": ^7.24.7 + "@babel/plugin-transform-destructuring": ^7.24.8 + "@babel/plugin-transform-dotall-regex": ^7.24.7 + "@babel/plugin-transform-duplicate-keys": ^7.24.7 + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": ^7.25.0 + "@babel/plugin-transform-dynamic-import": ^7.24.7 + "@babel/plugin-transform-exponentiation-operator": ^7.24.7 + "@babel/plugin-transform-export-namespace-from": ^7.24.7 + "@babel/plugin-transform-for-of": ^7.24.7 + "@babel/plugin-transform-function-name": ^7.25.1 + "@babel/plugin-transform-json-strings": ^7.24.7 + "@babel/plugin-transform-literals": ^7.25.2 + "@babel/plugin-transform-logical-assignment-operators": ^7.24.7 + "@babel/plugin-transform-member-expression-literals": ^7.24.7 + "@babel/plugin-transform-modules-amd": ^7.24.7 + "@babel/plugin-transform-modules-commonjs": ^7.24.8 + "@babel/plugin-transform-modules-systemjs": ^7.25.0 + "@babel/plugin-transform-modules-umd": ^7.24.7 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.24.7 + "@babel/plugin-transform-new-target": ^7.24.7 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.7 + "@babel/plugin-transform-numeric-separator": ^7.24.7 + "@babel/plugin-transform-object-rest-spread": ^7.24.7 + "@babel/plugin-transform-object-super": ^7.24.7 + "@babel/plugin-transform-optional-catch-binding": ^7.24.7 + "@babel/plugin-transform-optional-chaining": ^7.24.8 + "@babel/plugin-transform-parameters": ^7.24.7 + "@babel/plugin-transform-private-methods": ^7.25.4 + "@babel/plugin-transform-private-property-in-object": ^7.24.7 + "@babel/plugin-transform-property-literals": ^7.24.7 + "@babel/plugin-transform-regenerator": ^7.24.7 + "@babel/plugin-transform-reserved-words": ^7.24.7 + "@babel/plugin-transform-shorthand-properties": ^7.24.7 + "@babel/plugin-transform-spread": ^7.24.7 + "@babel/plugin-transform-sticky-regex": ^7.24.7 + "@babel/plugin-transform-template-literals": ^7.24.7 + "@babel/plugin-transform-typeof-symbol": ^7.24.8 + "@babel/plugin-transform-unicode-escapes": ^7.24.7 + "@babel/plugin-transform-unicode-property-regex": ^7.24.7 + "@babel/plugin-transform-unicode-regex": ^7.24.7 + "@babel/plugin-transform-unicode-sets-regex": ^7.25.4 + "@babel/preset-modules": 0.1.6-no-external-plugins + babel-plugin-polyfill-corejs2: ^0.4.10 + babel-plugin-polyfill-corejs3: ^0.10.6 + babel-plugin-polyfill-regenerator: ^0.6.1 + core-js-compat: ^3.37.1 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 752be43f0b78a2eefe5007076aed3d21b505e1c09d134b61e7de8838f1bbb1e7af81023d39adb14b6eae23727fb5a9fd23f8115a44df043319be22319be17913 + languageName: node + linkType: hard + "@babel/preset-modules@npm:0.1.6-no-external-plugins": version: 0.1.6-no-external-plugins resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" @@ -2835,7 +3375,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-react@npm:^7.18.6, @babel/preset-react@npm:^7.22.5": +"@babel/preset-react@npm:^7.18.6, @babel/preset-react@npm:^7.22.5, @babel/preset-react@npm:^7.24.7": version: 7.24.7 resolution: "@babel/preset-react@npm:7.24.7" dependencies: @@ -2866,7 +3406,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.21.0, @babel/preset-typescript@npm:^7.22.5": +"@babel/preset-typescript@npm:^7.21.0, @babel/preset-typescript@npm:^7.22.5, @babel/preset-typescript@npm:^7.24.7": version: 7.24.7 resolution: "@babel/preset-typescript@npm:7.24.7" dependencies: @@ -2938,6 +3478,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.25.0": + version: 7.25.0 + resolution: "@babel/template@npm:7.25.0" + dependencies: + "@babel/code-frame": ^7.24.7 + "@babel/parser": ^7.25.0 + "@babel/types": ^7.25.0 + checksum: 3f2db568718756d0daf2a16927b78f00c425046b654cd30b450006f2e84bdccaf0cbe6dc04994aa1f5f6a4398da2f11f3640a4d3ee31722e43539c4c919c817b + languageName: node + linkType: hard + "@babel/traverse@npm:^7.22.20, @babel/traverse@npm:^7.24.5": version: 7.24.5 resolution: "@babel/traverse@npm:7.24.5" @@ -2974,6 +3525,21 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.25.4": + version: 7.25.6 + resolution: "@babel/traverse@npm:7.25.6" + dependencies: + "@babel/code-frame": ^7.24.7 + "@babel/generator": ^7.25.6 + "@babel/parser": ^7.25.6 + "@babel/template": ^7.25.0 + "@babel/types": ^7.25.6 + debug: ^4.3.1 + globals: ^11.1.0 + checksum: 11ee47269aa4356f2d6633a05b9af73405b5ed72c09378daf644289b686ef852035a6ac9aa410f601991993c6bbf72006795b5478283b78eb1ca77874ada7737 + languageName: node + linkType: hard + "@babel/types@npm:7.24.x, @babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.4, @babel/types@npm:^7.24.0, @babel/types@npm:^7.24.5, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.24.5 resolution: "@babel/types@npm:7.24.5" @@ -2996,6 +3562,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.6": + version: 7.25.6 + resolution: "@babel/types@npm:7.25.6" + dependencies: + "@babel/helper-string-parser": ^7.24.8 + "@babel/helper-validator-identifier": ^7.24.7 + to-fast-properties: ^2.0.0 + checksum: 9b2f84ff3f874ad05b0b9bf06862c56f478b65781801f82296b4cc01bee39e79c20a7c0a06959fed0ee582c8267e1cb21638318655c5e070b0287242a844d1c9 + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -3587,31 +4164,32 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.5.1, @eslint-community/regexpp@npm:^4.6.1": - version: 4.10.0 - resolution: "@eslint-community/regexpp@npm:4.10.0" - checksum: 2a6e345429ea8382aaaf3a61f865cae16ed44d31ca917910033c02dc00d505d939f10b81e079fa14d43b51499c640138e153b7e40743c4c094d9df97d4e56f7b +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.11.0": + version: 4.11.0 + resolution: "@eslint-community/regexpp@npm:4.11.0" + checksum: 97d2fe46690b69417a551bd19a3dc53b6d9590d2295c43cc4c4e44e64131af541e2f4a44d5c12e87de990403654d3dae9d33600081f3a2f0386b368abc9111ec languageName: node linkType: hard -"@eslint/eslintrc@npm:^2.1.4": - version: 2.1.4 - resolution: "@eslint/eslintrc@npm:2.1.4" +"@eslint/compat@npm:^1.1.1": + version: 1.1.1 + resolution: "@eslint/compat@npm:1.1.1" + checksum: c9146b139e52ee4f79e25b97f22d2936c50b876cef8e9c5789600f12d8fabae689d75571a8429e5aae0d5e8067b0628fd87b7e849cee391b485db9557b40b6a4 + languageName: node + linkType: hard + +"@eslint/config-array@npm:^0.18.0": + version: 0.18.0 + resolution: "@eslint/config-array@npm:0.18.0" dependencies: - ajv: ^6.12.4 - debug: ^4.3.2 - espree: ^9.6.0 - globals: ^13.19.0 - ignore: ^5.2.0 - import-fresh: ^3.2.1 - js-yaml: ^4.1.0 + "@eslint/object-schema": ^2.1.4 + debug: ^4.3.1 minimatch: ^3.1.2 - strip-json-comments: ^3.1.1 - checksum: 10957c7592b20ca0089262d8c2a8accbad14b4f6507e35416c32ee6b4dbf9cad67dfb77096bbd405405e9ada2b107f3797fe94362e1c55e0b09d6e90dd149127 + checksum: 5ff748e1788745bfb3160c3b3151d62a7c054e336e9fe8069e86cfa6106f3abbd59b24f1253122268295f98c66803e9a7b23d7f947a8c00f62d2060cc44bc7fc languageName: node linkType: hard -"@eslint/eslintrc@npm:^3.0.2": +"@eslint/eslintrc@npm:^3.1.0": version: 3.1.0 resolution: "@eslint/eslintrc@npm:3.1.0" dependencies: @@ -3628,10 +4206,24 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.57.0, @eslint/js@npm:8.x.x": - version: 8.57.0 - resolution: "@eslint/js@npm:8.57.0" - checksum: 315dc65b0e9893e2bff139bddace7ea601ad77ed47b4550e73da8c9c2d2766c7a575c3cddf17ef85b8fd6a36ff34f91729d0dcca56e73ca887c10df91a41b0bb +"@eslint/js@npm:9.9.1, @eslint/js@npm:^9.9.1": + version: 9.9.1 + resolution: "@eslint/js@npm:9.9.1" + checksum: 24436d7a1023dbc6c63fd199e45afa9eab8537f7bd808872d9d17dd70c5237f599fe3d08f519d55b40e33bfde02a460861df1c96aa07674090c3f98c83b0c178 + languageName: node + linkType: hard + +"@eslint/js@npm:^9.9.0": + version: 9.9.0 + resolution: "@eslint/js@npm:9.9.0" + checksum: 33f0c8988e4e6f6c1499d05e2e91ef3df1c0b221a46c41ed1d27cf1265809451fba5b7a9452ece70e98bfd2f745c0f0df3c9cc1fdcfdcaacbcae45ddc415b5d6 + languageName: node + linkType: hard + +"@eslint/object-schema@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/object-schema@npm:2.1.4" + checksum: 5a03094115bcdab7991dbbc5d17a9713f394cebb4b44d3eaf990d7487b9b8e1877b817997334ab40be52e299a0384595c6f6ba91b389901e5e1d21efda779271 languageName: node linkType: hard @@ -3651,17 +4243,6 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.14": - version: 0.11.14 - resolution: "@humanwhocodes/config-array@npm:0.11.14" - dependencies: - "@humanwhocodes/object-schema": ^2.0.2 - debug: ^4.3.1 - minimatch: ^3.0.5 - checksum: 861ccce9eaea5de19546653bccf75bf09fe878bc39c3aab00aeee2d2a0e654516adad38dd1098aab5e3af0145bbcbf3f309bdf4d964f8dab9dcd5834ae4c02f2 - languageName: node - linkType: hard - "@humanwhocodes/module-importer@npm:^1.0.1": version: 1.0.1 resolution: "@humanwhocodes/module-importer@npm:1.0.1" @@ -3669,10 +4250,10 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.2": - version: 2.0.3 - resolution: "@humanwhocodes/object-schema@npm:2.0.3" - checksum: d3b78f6c5831888c6ecc899df0d03bcc25d46f3ad26a11d7ea52944dc36a35ef543fad965322174238d677a43d5c694434f6607532cff7077062513ad7022631 +"@humanwhocodes/retry@npm:^0.3.0": + version: 0.3.0 + resolution: "@humanwhocodes/retry@npm:0.3.0" + checksum: 4349cb8b60466a000e945fde8f8551cefb01ebba22ead4a92ac7b145f67f5da6b52e5a1e0c53185d732d0a49958ac29327934a4a5ac1d0bc20efb4429a4f7bf7 languageName: node linkType: hard @@ -3724,7 +4305,7 @@ __metadata: languageName: node linkType: hard -"@jest/core@npm:^29.5.0, @jest/core@npm:^29.7.0": +"@jest/core@npm:^29.7.0": version: 29.7.0 resolution: "@jest/core@npm:29.7.0" dependencies: @@ -3926,7 +4507,7 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.5.0, @jest/types@npm:^29.6.3": +"@jest/types@npm:^29.6.3": version: 29.6.3 resolution: "@jest/types@npm:29.6.3" dependencies: @@ -4214,72 +4795,19 @@ __metadata: languageName: node linkType: hard -"@stylistic/eslint-plugin-js@npm:1.8.1, @stylistic/eslint-plugin-js@npm:^1.8.1": - version: 1.8.1 - resolution: "@stylistic/eslint-plugin-js@npm:1.8.1" +"@stylistic/eslint-plugin@npm:^2.7.2": + version: 2.7.2 + resolution: "@stylistic/eslint-plugin@npm:2.7.2" dependencies: - "@types/eslint": ^8.56.10 - acorn: ^8.11.3 - escape-string-regexp: ^4.0.0 - eslint-visitor-keys: ^3.4.3 - espree: ^9.6.1 - peerDependencies: - eslint: ">=8.40.0" - checksum: b0f71b2194ca9a525029615ef7c981d9457d266d7fd93d5a194b1f10d1a87f3bd99b46319f73058504c9706a2c79f747a2876693296077d875b72a40368fd4b4 - languageName: node - linkType: hard - -"@stylistic/eslint-plugin-jsx@npm:1.8.1": - version: 1.8.1 - resolution: "@stylistic/eslint-plugin-jsx@npm:1.8.1" - dependencies: - "@stylistic/eslint-plugin-js": ^1.8.1 - "@types/eslint": ^8.56.10 + "@types/eslint": ^9.6.1 + "@typescript-eslint/utils": ^8.3.0 + eslint-visitor-keys: ^4.0.0 + espree: ^10.1.0 estraverse: ^5.3.0 picomatch: ^4.0.2 peerDependencies: eslint: ">=8.40.0" - checksum: 41b5ab07aec9b4dfb646a1d0ee448ccc820bdc2e8a47e32c3affc1ef6586e0cf825c757a9445ff1c8eb69bed4698bd76826bd5eebcd6969b78326573c3097373 - languageName: node - linkType: hard - -"@stylistic/eslint-plugin-plus@npm:1.8.1": - version: 1.8.1 - resolution: "@stylistic/eslint-plugin-plus@npm:1.8.1" - dependencies: - "@types/eslint": ^8.56.10 - "@typescript-eslint/utils": ^6.21.0 - peerDependencies: - eslint: "*" - checksum: 034d37d8af531e6b2e260fe91cc4703e4461a8b9a74e799e3ca9bcdeb3d5bda55a5ce0a0c48a98d863612ef5affbe950b77869de83eab94ebd90451d06526cac - languageName: node - linkType: hard - -"@stylistic/eslint-plugin-ts@npm:1.8.1": - version: 1.8.1 - resolution: "@stylistic/eslint-plugin-ts@npm:1.8.1" - dependencies: - "@stylistic/eslint-plugin-js": 1.8.1 - "@types/eslint": ^8.56.10 - "@typescript-eslint/utils": ^6.21.0 - peerDependencies: - eslint: ">=8.40.0" - checksum: 851e9c028d2146cf8ed0ee3a60bddbff413cd6a5594aac1921e845f560cd2808c25aee456a4862facae419c896e2b1c43a58720ebd72b60b25190a9a56e39af5 - languageName: node - linkType: hard - -"@stylistic/eslint-plugin@npm:^1.7.0": - version: 1.8.1 - resolution: "@stylistic/eslint-plugin@npm:1.8.1" - dependencies: - "@stylistic/eslint-plugin-js": 1.8.1 - "@stylistic/eslint-plugin-jsx": 1.8.1 - "@stylistic/eslint-plugin-plus": 1.8.1 - "@stylistic/eslint-plugin-ts": 1.8.1 - "@types/eslint": ^8.56.10 - peerDependencies: - eslint: ">=8.40.0" - checksum: 32e6648f873a0c4fcaa7b76d50b35bf5eb5e3763a2a0ad007f5d6637f061566dcfcd05eed6d22b7991f0c2aa290c5d4bd1c3d7c57cd5c9f71f64481894f7e683 + checksum: 3cade3ab96f761d4c8b10e2903745ccccb7a3349fb06975f85ae777da3c9f73ca53d8784c90800d3999f4313b2e3c8df36159b5c3e823aa304219aec0a4f6023 languageName: node linkType: hard @@ -4606,7 +5134,7 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:*, @types/eslint@npm:^8.56.10": +"@types/eslint@npm:*": version: 8.56.10 resolution: "@types/eslint@npm:8.56.10" dependencies: @@ -4616,13 +5144,13 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:8.4.9": - version: 8.4.9 - resolution: "@types/eslint@npm:8.4.9" +"@types/eslint@npm:^9.6.1": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" dependencies: "@types/estree": "*" "@types/json-schema": "*" - checksum: 9eda34e000f1e09850f447d8d65b671f59153aa5b580aca5b95185cf42b047b9cfda86eea83a6295aa883931b769a79236ce439601be7ab4485be88ce77b69ad + checksum: c286e79707ab604b577cf8ce51d9bbb9780e3d6a68b38a83febe13fa05b8012c92de17c28532fac2b03d3c460123f5055d603a579685325246ca1c86828223e0 languageName: node linkType: hard @@ -4793,20 +5321,13 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.12, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 languageName: node linkType: hard -"@types/json5@npm:^0.0.29": - version: 0.0.29 - resolution: "@types/json5@npm:0.0.29" - checksum: e60b153664572116dfea673c5bda7778dbff150498f44f998e34b5886d8afc47f16799280e4b6e241c0472aef1bc36add771c569c68fc5125fc2ae519a3eb9ac - languageName: node - linkType: hard - "@types/lodash@npm:^4.14.176": version: 4.17.4 resolution: "@types/lodash@npm:4.17.4" @@ -4862,12 +5383,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:18.x.x": - version: 18.19.33 - resolution: "@types/node@npm:18.19.33" +"@types/node@npm:20.16.x": + version: 20.16.1 + resolution: "@types/node@npm:20.16.1" dependencies: - undici-types: ~5.26.4 - checksum: b6db87d095bc541d64a410fa323a35c22c6113220b71b608bbe810b2397932d0f0a51c3c0f3ef90c20d8180a1502d950a7c5314b907e182d9cc10b36efd2a44e + undici-types: ~6.19.2 + checksum: 2b8f30f416f5c1851ffa8a13ef6c464a5e355edfd763713c22813a7839f6419a64e27925f9e89c972513d78432263179332f0bffb273d16498233bfdf495d096 languageName: node linkType: hard @@ -4980,13 +5501,6 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^7.5.0": - version: 7.5.8 - resolution: "@types/semver@npm:7.5.8" - checksum: ea6f5276f5b84c55921785a3a27a3cd37afee0111dfe2bcb3e03c31819c197c782598f17f0b150a69d453c9584cd14c4c4d7b9a55d2c5e6cacd4d66fdb3b3663 - languageName: node - linkType: hard - "@types/send@npm:*": version: 0.17.4 resolution: "@types/send@npm:0.17.4" @@ -5079,268 +5593,255 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:6.6.x": - version: 6.6.0 - resolution: "@typescript-eslint/eslint-plugin@npm:6.6.0" +"@typescript-eslint/eslint-plugin@npm:8.3.0": + version: 8.3.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.3.0" dependencies: - "@eslint-community/regexpp": ^4.5.1 - "@typescript-eslint/scope-manager": 6.6.0 - "@typescript-eslint/type-utils": 6.6.0 - "@typescript-eslint/utils": 6.6.0 - "@typescript-eslint/visitor-keys": 6.6.0 - debug: ^4.3.4 + "@eslint-community/regexpp": ^4.10.0 + "@typescript-eslint/scope-manager": 8.3.0 + "@typescript-eslint/type-utils": 8.3.0 + "@typescript-eslint/utils": 8.3.0 + "@typescript-eslint/visitor-keys": 8.3.0 graphemer: ^1.4.0 - ignore: ^5.2.4 + ignore: ^5.3.1 natural-compare: ^1.4.0 - semver: ^7.5.4 - ts-api-utils: ^1.0.1 + ts-api-utils: ^1.3.0 peerDependencies: - "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 + "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 peerDependenciesMeta: typescript: optional: true - checksum: ed41c6df87096706777e9c1f53adabd998fd840691b57f5b68b18903e567f16c0a8354ff0ad29229c249f29440ba4a017c9fe966da182a455dde9769232a4344 + checksum: edef62ba07cf457bfb4364976000cf18e6123e6a27a591cd7586e950e0ede14c6ec418904ffdd4256192c48f6ce80c3fc18b057210d5c9e7c4e722fec2ce85e4 languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:6.x.x": - version: 6.21.0 - resolution: "@typescript-eslint/eslint-plugin@npm:6.21.0" +"@typescript-eslint/eslint-plugin@npm:^8.4.0": + version: 8.4.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.4.0" dependencies: - "@eslint-community/regexpp": ^4.5.1 - "@typescript-eslint/scope-manager": 6.21.0 - "@typescript-eslint/type-utils": 6.21.0 - "@typescript-eslint/utils": 6.21.0 - "@typescript-eslint/visitor-keys": 6.21.0 - debug: ^4.3.4 + "@eslint-community/regexpp": ^4.10.0 + "@typescript-eslint/scope-manager": 8.4.0 + "@typescript-eslint/type-utils": 8.4.0 + "@typescript-eslint/utils": 8.4.0 + "@typescript-eslint/visitor-keys": 8.4.0 graphemer: ^1.4.0 - ignore: ^5.2.4 + ignore: ^5.3.1 natural-compare: ^1.4.0 - semver: ^7.5.4 - ts-api-utils: ^1.0.1 + ts-api-utils: ^1.3.0 peerDependencies: - "@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 + "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 5ef2c502255e643e98051e87eb682c2a257e87afd8ec3b9f6274277615e1c2caf3131b352244cfb1987b8b2c415645eeacb9113fa841fc4c9b2ac46e8aed6efd + checksum: 62009bfd28d489cd78a59997b16c6b0d2ea4ac3e485ac3c5f1afb4934a5396e439241778441a753a2a96b07aaa7bd200fb8989368febf749fc669d8c8f7e5f0c languageName: node linkType: hard -"@typescript-eslint/parser@npm:6.6.x": - version: 6.6.0 - resolution: "@typescript-eslint/parser@npm:6.6.0" +"@typescript-eslint/parser@npm:8.3.0": + version: 8.3.0 + resolution: "@typescript-eslint/parser@npm:8.3.0" dependencies: - "@typescript-eslint/scope-manager": 6.6.0 - "@typescript-eslint/types": 6.6.0 - "@typescript-eslint/typescript-estree": 6.6.0 - "@typescript-eslint/visitor-keys": 6.6.0 + "@typescript-eslint/scope-manager": 8.3.0 + "@typescript-eslint/types": 8.3.0 + "@typescript-eslint/typescript-estree": 8.3.0 + "@typescript-eslint/visitor-keys": 8.3.0 debug: ^4.3.4 peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 peerDependenciesMeta: typescript: optional: true - checksum: b2d0082b6acc1a85997ebbb60fc73a43f3fe5e5028cb4130938a2cffddc94872c8e0d00a1742be8f8b755bc1994d43b55b7e4660dc88946744094ff2aca4ffd3 + checksum: cac61afb1d4e0732a0b4e7a8af7a5d167894453907f9a173c8f25aab7d4d04e9b497f759eaacf6e445dccef1dbce76260a2b295994b774f7ae5363fbfc092a59 languageName: node linkType: hard -"@typescript-eslint/parser@npm:6.x.x": - version: 6.21.0 - resolution: "@typescript-eslint/parser@npm:6.21.0" +"@typescript-eslint/parser@npm:8.4.0, @typescript-eslint/parser@npm:^8.4.0": + version: 8.4.0 + resolution: "@typescript-eslint/parser@npm:8.4.0" dependencies: - "@typescript-eslint/scope-manager": 6.21.0 - "@typescript-eslint/types": 6.21.0 - "@typescript-eslint/typescript-estree": 6.21.0 - "@typescript-eslint/visitor-keys": 6.21.0 + "@typescript-eslint/scope-manager": 8.4.0 + "@typescript-eslint/types": 8.4.0 + "@typescript-eslint/typescript-estree": 8.4.0 + "@typescript-eslint/visitor-keys": 8.4.0 debug: ^4.3.4 peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 162fe3a867eeeffda7328bce32dae45b52283c68c8cb23258fb9f44971f761991af61f71b8c9fe1aa389e93dfe6386f8509c1273d870736c507d76dd40647b68 + checksum: 4c91ac5e7e276a8e216971dfc525c9864250e2cc37f7a476290fc09ff7e646d332dedf52481dc69f7a78611f3709f032f8d64550a88cd1febfa9f009f3b3e564 languageName: node linkType: hard -"@typescript-eslint/rule-tester@npm:6.6.x": - version: 6.6.0 - resolution: "@typescript-eslint/rule-tester@npm:6.6.0" +"@typescript-eslint/rule-tester@npm:^8.4.0": + version: 8.4.0 + resolution: "@typescript-eslint/rule-tester@npm:8.4.0" dependencies: - "@typescript-eslint/typescript-estree": 6.6.0 - "@typescript-eslint/utils": 6.6.0 - ajv: ^6.10.0 + "@typescript-eslint/typescript-estree": 8.4.0 + "@typescript-eslint/utils": 8.4.0 + ajv: ^6.12.6 + json-stable-stringify-without-jsonify: ^1.0.1 lodash.merge: 4.6.2 - semver: ^7.5.4 + semver: ^7.6.0 peerDependencies: - "@eslint/eslintrc": ">=2" - eslint: ">=8" - checksum: 6d0690b43527ea8324f6f528e467de2a019782228187c9d752e3903b0d796ef819a8388a043ef1b84db9227dda6934719814ad789c3c4484c58dc4be60fe2294 + eslint: ^8.57.0 || ^9.0.0 + checksum: b81f215abe8fec67d01a157e090d1b770b07137770a287b03427053b89f315a3b6c542b7ee996132dc988d5b4833555ce50a3b05bc646fb1838aa7312aa5064b languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/scope-manager@npm:6.21.0" +"@typescript-eslint/scope-manager@npm:8.3.0": + version: 8.3.0 + resolution: "@typescript-eslint/scope-manager@npm:8.3.0" dependencies: - "@typescript-eslint/types": 6.21.0 - "@typescript-eslint/visitor-keys": 6.21.0 - checksum: 71028b757da9694528c4c3294a96cc80bc7d396e383a405eab3bc224cda7341b88e0fc292120b35d3f31f47beac69f7083196c70616434072fbcd3d3e62d3376 + "@typescript-eslint/types": 8.3.0 + "@typescript-eslint/visitor-keys": 8.3.0 + checksum: 2ccf0d965c0e812f21a156bdb551029d2777bf1e6528275ccb9b79f9a36e4c6803c94f4e98519095396d3e416a62dc2356fda7286a6feeec8af6b63154f158d9 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.6.0": - version: 6.6.0 - resolution: "@typescript-eslint/scope-manager@npm:6.6.0" +"@typescript-eslint/scope-manager@npm:8.4.0": + version: 8.4.0 + resolution: "@typescript-eslint/scope-manager@npm:8.4.0" dependencies: - "@typescript-eslint/types": 6.6.0 - "@typescript-eslint/visitor-keys": 6.6.0 - checksum: 18b552fee98894c4f35e9f3d71a276f266ad4e2d7c6b9bb32a9b25caa36cc3768928676972b4e78308098ad53fa8dc6626a82810f17d51c667ce959da3ac11bc + "@typescript-eslint/types": 8.4.0 + "@typescript-eslint/visitor-keys": 8.4.0 + checksum: 0a513bcaf35dbee789bff6ca9cbc8f237b2efa85347bda17de3c66a35e913790b8e69b7ad824eeebd6bb9e218cd8b696da8901f10bf0e9107a8ed19072f86152 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/type-utils@npm:6.21.0" +"@typescript-eslint/type-utils@npm:8.3.0": + version: 8.3.0 + resolution: "@typescript-eslint/type-utils@npm:8.3.0" dependencies: - "@typescript-eslint/typescript-estree": 6.21.0 - "@typescript-eslint/utils": 6.21.0 + "@typescript-eslint/typescript-estree": 8.3.0 + "@typescript-eslint/utils": 8.3.0 debug: ^4.3.4 - ts-api-utils: ^1.0.1 - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + ts-api-utils: ^1.3.0 peerDependenciesMeta: typescript: optional: true - checksum: 77025473f4d80acf1fafcce99c5c283e557686a61861febeba9c9913331f8a41e930bf5cd8b7a54db502a57b6eb8ea6d155cbd4f41349ed00e3d7aeb1f477ddc + checksum: 386e37da49cda7282034c16dd9a3ed88ce735ee1e4b141bef6d12350c9be547788c5498a414eb6312401107ebb3004bbcc1b9dfce4747f2adfa6d1af4bedb6e5 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:6.6.0": - version: 6.6.0 - resolution: "@typescript-eslint/type-utils@npm:6.6.0" +"@typescript-eslint/type-utils@npm:8.4.0": + version: 8.4.0 + resolution: "@typescript-eslint/type-utils@npm:8.4.0" dependencies: - "@typescript-eslint/typescript-estree": 6.6.0 - "@typescript-eslint/utils": 6.6.0 + "@typescript-eslint/typescript-estree": 8.4.0 + "@typescript-eslint/utils": 8.4.0 debug: ^4.3.4 - ts-api-utils: ^1.0.1 - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + ts-api-utils: ^1.3.0 peerDependenciesMeta: typescript: optional: true - checksum: be68ebc1d8da9d4db48933cfd5c8f22382fdf1faf4116b0eb929c65eaeaf00ef224f38b03e7f6ea2de4496d046380876dd5db514c65d078ebc7a25e771a61265 + checksum: 5fec2aa96d1d5dcad1cbaea967d0aae978d872b9659d943f21a857bedce8ac9385e1e30f051c34154990a7d9da611cf84107d4ec5c23924c8db4337d93e79d14 languageName: node linkType: hard -"@typescript-eslint/types@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/types@npm:6.21.0" - checksum: 9501b47d7403417af95fc1fb72b2038c5ac46feac0e1598a46bcb43e56a606c387e9dcd8a2a0abe174c91b509f2d2a8078b093786219eb9a01ab2fbf9ee7b684 +"@typescript-eslint/types@npm:8.3.0": + version: 8.3.0 + resolution: "@typescript-eslint/types@npm:8.3.0" + checksum: 6fa6be32dbb32899b0ccb6a5cf78bf85892efa87048e0d3939f706743d3c2ad4afab8228d588883ac314d4934a01bafc5e4043b6608ebb82290edf3bfc17f442 languageName: node linkType: hard -"@typescript-eslint/types@npm:6.6.0, @typescript-eslint/types@npm:6.6.x": - version: 6.6.0 - resolution: "@typescript-eslint/types@npm:6.6.0" - checksum: d0642ad52e904062a4ac75ac4e6cc51d81ec6030f8830e230df476e69786d3232d45ca0c9ce011add9ede13f0eba4ab7f1eaf679954c6602cf4f43e1ba002be9 +"@typescript-eslint/types@npm:8.4.0, @typescript-eslint/types@npm:^8.4.0": + version: 8.4.0 + resolution: "@typescript-eslint/types@npm:8.4.0" + checksum: d1d486503e10e98bf124931e83d83e82cba1690d846190a8d196137d6c00ccbe47e7b84cc0b86cb3daffaaca22d32df5694ac0bcb28812139855b427857751f4 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.21.0" +"@typescript-eslint/typescript-estree@npm:8.3.0": + version: 8.3.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.3.0" dependencies: - "@typescript-eslint/types": 6.21.0 - "@typescript-eslint/visitor-keys": 6.21.0 + "@typescript-eslint/types": 8.3.0 + "@typescript-eslint/visitor-keys": 8.3.0 debug: ^4.3.4 - globby: ^11.1.0 + fast-glob: ^3.3.2 is-glob: ^4.0.3 - minimatch: 9.0.3 - semver: ^7.5.4 - ts-api-utils: ^1.0.1 + minimatch: ^9.0.4 + semver: ^7.6.0 + ts-api-utils: ^1.3.0 peerDependenciesMeta: typescript: optional: true - checksum: dec02dc107c4a541e14fb0c96148f3764b92117c3b635db3a577b5a56fc48df7a556fa853fb82b07c0663b4bf2c484c9f245c28ba3e17e5cb0918ea4cab2ea21 + checksum: edfddfa895201be7cc6c83e8d4d72ce3e0877693bf109ced94dcd1496fc45ea9cceae08e1b8a451bee7df7f23748f79b80797ddf49d5e6c96d8f2053ce28e966 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.6.0, @typescript-eslint/typescript-estree@npm:6.6.x": - version: 6.6.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.6.0" +"@typescript-eslint/typescript-estree@npm:8.4.0, @typescript-eslint/typescript-estree@npm:^8.4.0": + version: 8.4.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.4.0" dependencies: - "@typescript-eslint/types": 6.6.0 - "@typescript-eslint/visitor-keys": 6.6.0 + "@typescript-eslint/types": 8.4.0 + "@typescript-eslint/visitor-keys": 8.4.0 debug: ^4.3.4 - globby: ^11.1.0 + fast-glob: ^3.3.2 is-glob: ^4.0.3 - semver: ^7.5.4 - ts-api-utils: ^1.0.1 + minimatch: ^9.0.4 + semver: ^7.6.0 + ts-api-utils: ^1.3.0 peerDependenciesMeta: typescript: optional: true - checksum: 100620bc5865dc9d2551c6be520a34b931bc70eca144c5ab0e275b81e57aa92f24a9d3a57f332d98b96e4581cf7e87211c3196d964f4951c7a2508105e3bd3f5 + checksum: 6ae4a2fb8c6066c9a893e4bd6b741e8ff45a4f17178d5e13dea41c414fa0f141f93f1b412c0a683aeb209c4e5781d4380bba51c513d439c6432136ab8823c83c languageName: node linkType: hard -"@typescript-eslint/utils@npm:6.21.0, @typescript-eslint/utils@npm:^6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/utils@npm:6.21.0" +"@typescript-eslint/utils@npm:8.3.0, @typescript-eslint/utils@npm:^6.0.0 || ^7.0.0 || ^8.0.0, @typescript-eslint/utils@npm:^8.3.0": + version: 8.3.0 + resolution: "@typescript-eslint/utils@npm:8.3.0" dependencies: "@eslint-community/eslint-utils": ^4.4.0 - "@types/json-schema": ^7.0.12 - "@types/semver": ^7.5.0 - "@typescript-eslint/scope-manager": 6.21.0 - "@typescript-eslint/types": 6.21.0 - "@typescript-eslint/typescript-estree": 6.21.0 - semver: ^7.5.4 + "@typescript-eslint/scope-manager": 8.3.0 + "@typescript-eslint/types": 8.3.0 + "@typescript-eslint/typescript-estree": 8.3.0 peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - checksum: b129b3a4aebec8468259f4589985cb59ea808afbfdb9c54f02fad11e17d185e2bf72bb332f7c36ec3c09b31f18fc41368678b076323e6e019d06f74ee93f7bf2 + eslint: ^8.57.0 || ^9.0.0 + checksum: 041cd2cef3d89d0b45c99a5226aadfa0b25fdd517842cf6dd864ae57fa28afb5f613f5589fe5138662025903de9df8e24ed7fe55486da46e971751405b5ed9fb languageName: node linkType: hard -"@typescript-eslint/utils@npm:6.6.0, @typescript-eslint/utils@npm:6.6.x": - version: 6.6.0 - resolution: "@typescript-eslint/utils@npm:6.6.0" +"@typescript-eslint/utils@npm:8.4.0": + version: 8.4.0 + resolution: "@typescript-eslint/utils@npm:8.4.0" dependencies: "@eslint-community/eslint-utils": ^4.4.0 - "@types/json-schema": ^7.0.12 - "@types/semver": ^7.5.0 - "@typescript-eslint/scope-manager": 6.6.0 - "@typescript-eslint/types": 6.6.0 - "@typescript-eslint/typescript-estree": 6.6.0 - semver: ^7.5.4 + "@typescript-eslint/scope-manager": 8.4.0 + "@typescript-eslint/types": 8.4.0 + "@typescript-eslint/typescript-estree": 8.4.0 peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - checksum: da02305703569549eb7deebb7512940cd40426eccec684680087a5b8c8e08052e2ff0ff6951a2ca64740e86e4b5b390903d0b13ad51efc374d9ae54f70c6a046 + eslint: ^8.57.0 || ^9.0.0 + checksum: dc4975611815e8da8b54ed5fb4faa7a47a2f1d06c7df509c08b8d5603baf5eda3d56a02193955fce33f2ca7dafbb053610e9c7bd889799a1f6077b7d99a08cde languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:6.21.0": - version: 6.21.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.21.0" +"@typescript-eslint/visitor-keys@npm:8.3.0": + version: 8.3.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.3.0" dependencies: - "@typescript-eslint/types": 6.21.0 - eslint-visitor-keys: ^3.4.1 - checksum: 67c7e6003d5af042d8703d11538fca9d76899f0119130b373402819ae43f0bc90d18656aa7add25a24427ccf1a0efd0804157ba83b0d4e145f06107d7d1b7433 + "@typescript-eslint/types": 8.3.0 + eslint-visitor-keys: ^3.4.3 + checksum: 23a85ae0a3d693be1c9db92457727ab3f16cac3d1fb4950e29bfe2b0f4d186a755a71b2a347063cc94cf03b8dd1367502e0a60386eed71425f74c18fb686b0e8 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:6.6.0": - version: 6.6.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.6.0" +"@typescript-eslint/visitor-keys@npm:8.4.0": + version: 8.4.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.4.0" dependencies: - "@typescript-eslint/types": 6.6.0 - eslint-visitor-keys: ^3.4.1 - checksum: 28171124c5c7d5d10c04c204530508f1488214f2af5eb7e64a5f1cc410c64f02676c04be087adcfd0deb5566f5bb7337b208afcb249719614634c38bcc3da897 + "@typescript-eslint/types": 8.4.0 + eslint-visitor-keys: ^3.4.3 + checksum: 000f375aaad20343d74cb71e3cf9295f60a0f9f5bc07bd15883bffcc3f7e25b69bb48b21f0cbb2805588a1bc309b9b9fd1162028872ee79c553c843bece6c9ac languageName: node linkType: hard -"@ungap/structured-clone@npm:^1.0.0, @ungap/structured-clone@npm:^1.2.0": +"@ungap/structured-clone@npm:^1.0.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524 @@ -5564,7 +6065,7 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.0.0": +"acorn-walk@npm:^8.0.0, acorn-walk@npm:^8.0.2": version: 8.3.3 resolution: "acorn-walk@npm:8.3.3" dependencies: @@ -5573,13 +6074,6 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.0.2": - version: 8.3.2 - resolution: "acorn-walk@npm:8.3.2" - checksum: 3626b9d26a37b1b427796feaa5261faf712307a8920392c8dce9a5739fb31077667f4ad2ec71c7ac6aaf9f61f04a9d3d67ff56f459587206fc04aa31c27ef392 - languageName: node - linkType: hard - "acorn@npm:^8.0.0, acorn@npm:^8.0.4, acorn@npm:^8.11.0, acorn@npm:^8.7.1, acorn@npm:^8.8.2": version: 8.12.0 resolution: "acorn@npm:8.12.0" @@ -5589,7 +6083,16 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.1.0, acorn@npm:^8.11.3, acorn@npm:^8.8.1, acorn@npm:^8.9.0": +"acorn@npm:^8.1.0, acorn@npm:^8.12.0, acorn@npm:^8.8.1": + version: 8.12.1 + resolution: "acorn@npm:8.12.1" + bin: + acorn: bin/acorn + checksum: 677880034aee5bdf7434cc2d25b641d7bedb0b5ef47868a78dadabedccf58e1c5457526d9d8249cd253f2df087e081c3fe7d903b448d8e19e5131a3065b83c07 + languageName: node + linkType: hard + +"acorn@npm:^8.11.3": version: 8.11.3 resolution: "acorn@npm:8.11.3" bin: @@ -5667,7 +6170,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.10.0, ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5": +"ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -5857,7 +6360,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.6, array-includes@npm:^3.1.7": +"array-includes@npm:^3.1.6, array-includes@npm:^3.1.8": version: 3.1.8 resolution: "array-includes@npm:3.1.8" dependencies: @@ -5878,7 +6381,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlast@npm:^1.2.4": +"array.prototype.findlast@npm:^1.2.5": version: 1.2.5 resolution: "array.prototype.findlast@npm:1.2.5" dependencies: @@ -5892,21 +6395,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlastindex@npm:^1.2.3": - version: 1.2.5 - resolution: "array.prototype.findlastindex@npm:1.2.5" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-errors: ^1.3.0 - es-object-atoms: ^1.0.0 - es-shim-unscopables: ^1.0.2 - checksum: 2c81cff2a75deb95bf1ed89b6f5f2bfbfb882211e3b7cc59c3d6b87df774cd9d6b36949a8ae39ac476e092c1d4a4905f5ee11a86a456abb10f35f8211ae4e710 - languageName: node - linkType: hard - -"array.prototype.flat@npm:^1.3.1, array.prototype.flat@npm:^1.3.2": +"array.prototype.flat@npm:^1.3.1": version: 1.3.2 resolution: "array.prototype.flat@npm:1.3.2" dependencies: @@ -5930,28 +6419,16 @@ __metadata: languageName: node linkType: hard -"array.prototype.toreversed@npm:^1.1.2": - version: 1.1.2 - resolution: "array.prototype.toreversed@npm:1.1.2" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.2.0 - es-abstract: ^1.22.1 - es-shim-unscopables: ^1.0.0 - checksum: 58598193426282155297bedf950dc8d464624a0d81659822fb73124286688644cb7e0e4927a07f3ab2daaeb6617b647736cc3a5e6ca7ade5bb8e573b284e6240 - languageName: node - linkType: hard - -"array.prototype.tosorted@npm:^1.1.3": - version: 1.1.3 - resolution: "array.prototype.tosorted@npm:1.1.3" +"array.prototype.tosorted@npm:^1.1.4": + version: 1.1.4 + resolution: "array.prototype.tosorted@npm:1.1.4" dependencies: - call-bind: ^1.0.5 + call-bind: ^1.0.7 define-properties: ^1.2.1 - es-abstract: ^1.22.3 - es-errors: ^1.1.0 + es-abstract: ^1.23.3 + es-errors: ^1.3.0 es-shim-unscopables: ^1.0.2 - checksum: 555e8808086bbde9e634c5dc5a8c0a2f1773075447b43b2fa76ab4f94f4e90f416d2a4f881024e1ce1a2931614caf76cd6b408af901c9d7cd13061d0d268f5af + checksum: e4142d6f556bcbb4f393c02e7dbaea9af8f620c040450c2be137c9cbbd1a17f216b9c688c5f2c08fbb038ab83f55993fa6efdd9a05881d84693c7bcb5422127a languageName: node linkType: hard @@ -6117,6 +6594,18 @@ __metadata: languageName: node linkType: hard +"babel-plugin-polyfill-corejs3@npm:^0.10.6": + version: 0.10.6 + resolution: "babel-plugin-polyfill-corejs3@npm:0.10.6" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.6.2 + core-js-compat: ^3.38.0 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: f762f29f7acca576897c63149c850f0a72babd3fb9ea436a2e36f0c339161c4b912a77828541d8188ce8a91e50965c6687120cf36071eabb1b7aa92f279e2164 + languageName: node + linkType: hard + "babel-plugin-polyfill-corejs3@npm:^0.8.3": version: 0.8.7 resolution: "babel-plugin-polyfill-corejs3@npm:0.8.7" @@ -6345,6 +6834,20 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.23.1, browserslist@npm:^4.23.3": + version: 4.23.3 + resolution: "browserslist@npm:4.23.3" + dependencies: + caniuse-lite: ^1.0.30001646 + electron-to-chromium: ^1.5.4 + node-releases: ^2.0.18 + update-browserslist-db: ^1.1.0 + bin: + browserslist: cli.js + checksum: 7906064f9970aeb941310b2fcb8b4ace4a1b50aa657c986677c6f1553a8cabcc94ee9c5922f715baffbedaa0e6cf0831b6fed7b059dde6873a4bfadcbe069c7e + languageName: node + linkType: hard + "bser@npm:2.1.1": version: 2.1.1 resolution: "bser@npm:2.1.1" @@ -6494,6 +6997,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001646": + version: 1.0.30001655 + resolution: "caniuse-lite@npm:1.0.30001655" + checksum: 3739c8f6d0fb55cff3c631d28c4fdafc81ab28756ce17a373428042c06f84a5877288d89fbe41be5ac494dd5092dca38ab91c9304e81935b9f2938419d2c23b3 + languageName: node + linkType: hard + "ccount@npm:^2.0.0": version: 2.0.1 resolution: "ccount@npm:2.0.1" @@ -6898,13 +7408,6 @@ __metadata: languageName: node linkType: hard -"confusing-browser-globals@npm:^1.0.10": - version: 1.0.11 - resolution: "confusing-browser-globals@npm:1.0.11" - checksum: 3afc635abd37e566477f610e7978b15753f0e84025c25d49236f1f14d480117185516bdd40d2a2167e6bed8048641a9854964b9c067e3dcdfa6b5d0ad3c3a5ef - languageName: node - linkType: hard - "connect-history-api-fallback@npm:^2.0.0": version: 2.0.0 resolution: "connect-history-api-fallback@npm:2.0.0" @@ -7002,6 +7505,15 @@ __metadata: languageName: node linkType: hard +"core-js-compat@npm:^3.37.1, core-js-compat@npm:^3.38.0": + version: 3.38.1 + resolution: "core-js-compat@npm:3.38.1" + dependencies: + browserslist: ^4.23.3 + checksum: a0a5673bcd59f588f0cd0b59cdacd4712b82909738a87406d334dd412eb3d273ae72b275bdd8e8fef63fca9ef12b42ed651be139c7c44c8a1acb423c8906992e + languageName: node + linkType: hard + "core-js-pure@npm:^3.30.2": version: 3.37.1 resolution: "core-js-pure@npm:3.37.1" @@ -7415,15 +7927,6 @@ __metadata: languageName: node linkType: hard -"debug@npm:^3.2.7": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: ^2.1.1 - checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c - languageName: node - linkType: hard - "debug@npm:^4.0.0": version: 4.3.5 resolution: "debug@npm:4.3.5" @@ -7554,7 +8057,7 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": +"define-properties@npm:^1.1.3, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" dependencies: @@ -7699,15 +8202,6 @@ __metadata: languageName: node linkType: hard -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: ^2.0.2 - checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce - languageName: node - linkType: hard - "documentation@workspace:packages/documentation": version: 0.0.0-use.local resolution: "documentation@workspace:packages/documentation" @@ -7873,6 +8367,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.5.4": + version: 1.5.13 + resolution: "electron-to-chromium@npm:1.5.13" + checksum: f18ac84dd3bf9a200654a6a9292b9ec4bced0cf9bd26cec9941b775f4470c581c9d043e70b37a124d9752dcc0f47fc96613d52b2defd8e59632852730cb418b9 + languageName: node + linkType: hard + "emittery@npm:^0.13.1": version: 0.13.1 resolution: "emittery@npm:0.13.1" @@ -7978,7 +8479,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3": +"es-abstract@npm:^1.17.5, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3": version: 1.23.3 resolution: "es-abstract@npm:1.23.3" dependencies: @@ -8041,7 +8542,7 @@ __metadata: languageName: node linkType: hard -"es-errors@npm:^1.1.0, es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": +"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": version: 1.3.0 resolution: "es-errors@npm:1.3.0" checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 @@ -8065,7 +8566,7 @@ __metadata: languageName: node linkType: hard -"es-iterator-helpers@npm:^1.0.17": +"es-iterator-helpers@npm:^1.0.19": version: 1.0.19 resolution: "es-iterator-helpers@npm:1.0.19" dependencies: @@ -8201,106 +8702,43 @@ __metadata: languageName: node linkType: hard -"eslint-config-airbnb-base@npm:^15.0.0": - version: 15.0.0 - resolution: "eslint-config-airbnb-base@npm:15.0.0" +"eslint-plugin-jest@npm:^28.8.1": + version: 28.8.1 + resolution: "eslint-plugin-jest@npm:28.8.1" dependencies: - confusing-browser-globals: ^1.0.10 - object.assign: ^4.1.2 - object.entries: ^1.1.5 - semver: ^6.3.0 - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.2 - checksum: 38626bad2ce2859fccac86b30cd2b86c9b7d8d71d458331860861dc05290a5b198bded2f4fb89efcb9046ec48f8ab4c4fb00365ba8916f27b172671da28b93ea - languageName: node - linkType: hard - -"eslint-config-airbnb-typescript@npm:17.x.x": - version: 17.1.0 - resolution: "eslint-config-airbnb-typescript@npm:17.1.0" - dependencies: - eslint-config-airbnb-base: ^15.0.0 + "@typescript-eslint/utils": ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependencies: - "@typescript-eslint/eslint-plugin": ^5.13.0 || ^6.0.0 - "@typescript-eslint/parser": ^5.0.0 || ^6.0.0 - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.3 - checksum: cfd26a2782e322ebfdfbf9a64262332c7653f297c4a32d7b951079eb18bb9502a83d67b3f7ef2cc1c5374ae06098eb454ed010784b3416e7274839083022a08c - languageName: node - linkType: hard - -"eslint-import-resolver-node@npm:^0.3.9": - version: 0.3.9 - resolution: "eslint-import-resolver-node@npm:0.3.9" - dependencies: - debug: ^3.2.7 - is-core-module: ^2.13.0 - resolve: ^1.22.4 - checksum: 439b91271236b452d478d0522a44482e8c8540bf9df9bd744062ebb89ab45727a3acd03366a6ba2bdbcde8f9f718bab7fe8db64688aca75acf37e04eafd25e22 - languageName: node - linkType: hard - -"eslint-module-utils@npm:^2.8.0": - version: 2.8.1 - resolution: "eslint-module-utils@npm:2.8.1" - dependencies: - debug: ^3.2.7 + "@typescript-eslint/eslint-plugin": ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + jest: "*" peerDependenciesMeta: - eslint: + "@typescript-eslint/eslint-plugin": optional: true - checksum: 3cecd99b6baf45ffc269167da0f95dcb75e5aa67b93d73a3bab63e2a7eedd9cdd6f188eed048e2f57c1b77db82c9cbf2adac20b512fa70e597d863dd3720170d - languageName: node - linkType: hard - -"eslint-plugin-import-newlines@npm:^1.1.5": - version: 1.4.0 - resolution: "eslint-plugin-import-newlines@npm:1.4.0" - peerDependencies: - eslint: ">=6.0.0" - bin: - import-linter: lib/index.js - checksum: fe1fb8812f862870aa89bd2f7323daaf81cf52dccb0c3a8d75a926cc628fdfb8b75379e5d0a3e1153205556cd21c430db884dea4dddacd847a06192de90206d9 + jest: + optional: true + checksum: 3c738ea275991f2d15d8096cecdba15533bb48d124ef2c32e3ed7406c2cadf074d96c92085baf81b38ec164956fda388a7faff72d508005e49fc875e0a38ddb2 languageName: node linkType: hard -"eslint-plugin-import@npm:^2.25.2": - version: 2.29.1 - resolution: "eslint-plugin-import@npm:2.29.1" +"eslint-plugin-jest@npm:^28.8.2": + version: 28.8.2 + resolution: "eslint-plugin-jest@npm:28.8.2" dependencies: - array-includes: ^3.1.7 - array.prototype.findlastindex: ^1.2.3 - array.prototype.flat: ^1.3.2 - array.prototype.flatmap: ^1.3.2 - debug: ^3.2.7 - doctrine: ^2.1.0 - eslint-import-resolver-node: ^0.3.9 - eslint-module-utils: ^2.8.0 - hasown: ^2.0.0 - is-core-module: ^2.13.1 - is-glob: ^4.0.3 - minimatch: ^3.1.2 - object.fromentries: ^2.0.7 - object.groupby: ^1.0.1 - object.values: ^1.1.7 - semver: ^6.3.1 - tsconfig-paths: ^3.15.0 - peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: e65159aef808136d26d029b71c8c6e4cb5c628e65e5de77f1eb4c13a379315ae55c9c3afa847f43f4ff9df7e54515c77ffc6489c6a6f81f7dd7359267577468c - languageName: node - linkType: hard - -"eslint-plugin-jest-formatting@npm:^3.1.0": - version: 3.1.0 - resolution: "eslint-plugin-jest-formatting@npm:3.1.0" + "@typescript-eslint/utils": ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependencies: - eslint: ">=0.8.0" - checksum: 350f6f3f46eefcbc3df003049e35776786829977a4da077f1793885664dfd0f34b5e8814dd29e52b2f44384df03e688454a3b905586c3cdbede83860a80cba89 + "@typescript-eslint/eslint-plugin": ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + jest: "*" + peerDependenciesMeta: + "@typescript-eslint/eslint-plugin": + optional: true + jest: + optional: true + checksum: ffb7cf1a537b91447a5914704018d0018456d83240b3982cd81d1c8e351bcacd5d71a36e3a92c50da7399b1b3b38370fb16c095bbdf6a282d6c232f665b7ea0e languageName: node linkType: hard -"eslint-plugin-obsidian@2.10.2, eslint-plugin-obsidian@workspace:packages/eslint-plugin-obsidian": +"eslint-plugin-obsidian@2.11.0-alpha.1, eslint-plugin-obsidian@workspace:packages/eslint-plugin-obsidian": version: 0.0.0-use.local resolution: "eslint-plugin-obsidian@workspace:packages/eslint-plugin-obsidian" dependencies: @@ -8312,35 +8750,36 @@ __metadata: "@babel/preset-react": 7.22.x "@babel/preset-typescript": 7.22.x "@babel/types": 7.24.x - "@eslint/eslintrc": ^3.0.2 - "@eslint/js": 8.x.x - "@stylistic/eslint-plugin": ^1.7.0 - "@types/eslint": 8.4.9 - "@types/node": 18.x.x - "@typescript-eslint/eslint-plugin": 6.6.x - "@typescript-eslint/parser": 6.6.x - "@typescript-eslint/rule-tester": 6.6.x - "@typescript-eslint/types": 6.6.x - "@typescript-eslint/typescript-estree": 6.6.x - "@typescript-eslint/utils": 6.6.x + "@eslint/compat": ^1.1.1 + "@eslint/eslintrc": ^3.1.0 + "@eslint/js": ^9.9.0 + "@stylistic/eslint-plugin": ^2.7.2 + "@types/eslint": ^9.6.1 + "@types/node": 20.16.x + "@typescript-eslint/eslint-plugin": ^8.4.0 + "@typescript-eslint/parser": 8.4.0 + "@typescript-eslint/rule-tester": ^8.4.0 + "@typescript-eslint/types": ^8.4.0 + "@typescript-eslint/typescript-estree": ^8.4.0 + "@typescript-eslint/utils": 8.4.0 cross-env: ^7.0.3 - eslint: 8.x.x - eslint-plugin-import: ^2.25.2 - eslint-plugin-import-newlines: ^1.1.5 - eslint-plugin-jest-formatting: ^3.1.0 - eslint-plugin-unused-imports: 3.1.x - jest: 29.5.x - jest-extended: ^4.0.0 + eslint: ^9.9.1 + eslint-plugin-jest: ^28.8.2 + eslint-plugin-unused-imports: ^4.1.3 + globals: ^15.9.0 + jest: ^29.7.0 + jest-environment-jsdom: ^29.7.0 + jest-extended: ^4.0.2 lodash: ^4.17.21 - typescript: ^4.5.4 + typescript: ^5.5.4 peerDependencies: - eslint: 8.x.x + eslint: ^9.9.0 eslint-plugin-obsidian: "*" react-obsidian: 2.x.x languageName: unknown linkType: soft -"eslint-plugin-react-hooks@npm:^4.2.0": +"eslint-plugin-react-hooks@npm:^4.6.2": version: 4.6.2 resolution: "eslint-plugin-react-hooks@npm:4.6.2" peerDependencies: @@ -8349,53 +8788,44 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:^7.26.1": - version: 7.34.1 - resolution: "eslint-plugin-react@npm:7.34.1" +"eslint-plugin-react@npm:^7.35.0": + version: 7.35.0 + resolution: "eslint-plugin-react@npm:7.35.0" dependencies: - array-includes: ^3.1.7 - array.prototype.findlast: ^1.2.4 + array-includes: ^3.1.8 + array.prototype.findlast: ^1.2.5 array.prototype.flatmap: ^1.3.2 - array.prototype.toreversed: ^1.1.2 - array.prototype.tosorted: ^1.1.3 + array.prototype.tosorted: ^1.1.4 doctrine: ^2.1.0 - es-iterator-helpers: ^1.0.17 + es-iterator-helpers: ^1.0.19 estraverse: ^5.3.0 + hasown: ^2.0.2 jsx-ast-utils: ^2.4.1 || ^3.0.0 minimatch: ^3.1.2 - object.entries: ^1.1.7 - object.fromentries: ^2.0.7 - object.hasown: ^1.1.3 - object.values: ^1.1.7 + object.entries: ^1.1.8 + object.fromentries: ^2.0.8 + object.values: ^1.2.0 prop-types: ^15.8.1 resolve: ^2.0.0-next.5 semver: ^6.3.1 - string.prototype.matchall: ^4.0.10 + string.prototype.matchall: ^4.0.11 + string.prototype.repeat: ^1.0.0 peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 82f391c5a093235c3bc2f664c54e009c49460778ee7d1b86c1536df9ac4d2a80d1dedc9241ac797df4a9dced936e955d9c89042fb3ac8d017b5359d1320d3c0f + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + checksum: cd4d3c0567e947964643dda5fc80147e058d75f06bac47c3f086ff0cd6156286c669d98e685e3834997c4043f3922b90e6374b6c3658f22abd025dbd41acc23f languageName: node linkType: hard -"eslint-plugin-unused-imports@npm:3.1.x": - version: 3.1.0 - resolution: "eslint-plugin-unused-imports@npm:3.1.0" - dependencies: - eslint-rule-composer: ^0.3.0 +"eslint-plugin-unused-imports@npm:^4.1.3": + version: 4.1.3 + resolution: "eslint-plugin-unused-imports@npm:4.1.3" peerDependencies: - "@typescript-eslint/eslint-plugin": 6 - 7 - eslint: 8 + "@typescript-eslint/eslint-plugin": ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 + eslint: ^9.0.0 || ^8.0.0 peerDependenciesMeta: "@typescript-eslint/eslint-plugin": optional: true - checksum: c41da339ea8faf40b8b4081f0d52a4c75d24f121c5b95b19b777d12abfbc23505e4aab2422918b2517dd239a749a38912fb3405b42a9aa6b50c32cf5f3d6ecf0 - languageName: node - linkType: hard - -"eslint-rule-composer@npm:^0.3.0": - version: 0.3.0 - resolution: "eslint-rule-composer@npm:0.3.0" - checksum: c2f57cded8d1c8f82483e0ce28861214347e24fd79fd4144667974cd334d718f4ba05080aaef2399e3bbe36f7d6632865110227e6b176ed6daa2d676df9281b1 + checksum: 3a2d51e84db5b55af3ec8540fa48943c218f32496bcec9f390edb49322999069c1aac09ec7e43fd5aa05ec0156484d4684ebb85cc8ab07e94ccba38079689ee0 languageName: node linkType: hard @@ -8409,13 +8839,13 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^7.2.2": - version: 7.2.2 - resolution: "eslint-scope@npm:7.2.2" +"eslint-scope@npm:^8.0.2": + version: 8.0.2 + resolution: "eslint-scope@npm:8.0.2" dependencies: esrecurse: ^4.3.0 estraverse: ^5.2.0 - checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e + checksum: bd1e7a0597ec605cf3bc9b35c9e13d7ea6c11fee031b0cada9e8993b0ecf16d81d6f40f1dcd463424af439abf53cd62302ea25707c1599689eb2750d6aa29688 languageName: node linkType: hard @@ -8426,7 +8856,7 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.3": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 @@ -8440,40 +8870,36 @@ __metadata: languageName: node linkType: hard -"eslint@npm:8.x.x": - version: 8.57.0 - resolution: "eslint@npm:8.57.0" +"eslint@npm:^9.9.1": + version: 9.9.1 + resolution: "eslint@npm:9.9.1" dependencies: "@eslint-community/eslint-utils": ^4.2.0 - "@eslint-community/regexpp": ^4.6.1 - "@eslint/eslintrc": ^2.1.4 - "@eslint/js": 8.57.0 - "@humanwhocodes/config-array": ^0.11.14 + "@eslint-community/regexpp": ^4.11.0 + "@eslint/config-array": ^0.18.0 + "@eslint/eslintrc": ^3.1.0 + "@eslint/js": 9.9.1 "@humanwhocodes/module-importer": ^1.0.1 + "@humanwhocodes/retry": ^0.3.0 "@nodelib/fs.walk": ^1.2.8 - "@ungap/structured-clone": ^1.2.0 ajv: ^6.12.4 chalk: ^4.0.0 cross-spawn: ^7.0.2 debug: ^4.3.2 - doctrine: ^3.0.0 escape-string-regexp: ^4.0.0 - eslint-scope: ^7.2.2 - eslint-visitor-keys: ^3.4.3 - espree: ^9.6.1 - esquery: ^1.4.2 + eslint-scope: ^8.0.2 + eslint-visitor-keys: ^4.0.0 + espree: ^10.1.0 + esquery: ^1.5.0 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 - file-entry-cache: ^6.0.1 + file-entry-cache: ^8.0.0 find-up: ^5.0.0 glob-parent: ^6.0.2 - globals: ^13.19.0 - graphemer: ^1.4.0 ignore: ^5.2.0 imurmurhash: ^0.1.4 is-glob: ^4.0.0 is-path-inside: ^3.0.3 - js-yaml: ^4.1.0 json-stable-stringify-without-jsonify: ^1.0.1 levn: ^0.4.1 lodash.merge: ^4.6.2 @@ -8482,9 +8908,14 @@ __metadata: optionator: ^0.9.3 strip-ansi: ^6.0.1 text-table: ^0.2.0 + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true bin: eslint: bin/eslint.js - checksum: 3a48d7ff85ab420a8447e9810d8087aea5b1df9ef68c9151732b478de698389ee656fd895635b5f2871c89ee5a2652b3f343d11e9db6f8486880374ebc74a2d9 + checksum: a1ff85cd26a6f138e0f52e17668b7794371c81fd0ac66634c4d554dc2d878dcfbe6047a025e63e85168c897c83dfa453501a10395cbefda7debd79fe6ea00eab languageName: node linkType: hard @@ -8499,14 +8930,14 @@ __metadata: languageName: node linkType: hard -"espree@npm:^9.6.0, espree@npm:^9.6.1": - version: 9.6.1 - resolution: "espree@npm:9.6.1" +"espree@npm:^10.1.0": + version: 10.1.0 + resolution: "espree@npm:10.1.0" dependencies: - acorn: ^8.9.0 + acorn: ^8.12.0 acorn-jsx: ^5.3.2 - eslint-visitor-keys: ^3.4.1 - checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 + eslint-visitor-keys: ^4.0.0 + checksum: a4708ab987f6c03734b8738b1588e9f31b2e305e869ca4677c60d82294eb05f7099b6687eb39eeb0913bb2d49bdf0bd0f31c511599ea7ee171281f871a9c897e languageName: node linkType: hard @@ -8520,12 +8951,12 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.4.2": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" +"esquery@npm:^1.5.0": + version: 1.6.0 + resolution: "esquery@npm:1.6.0" dependencies: estraverse: ^5.1.0 - checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + checksum: 08ec4fe446d9ab27186da274d979558557fbdbbd10968fa9758552482720c54152a5640e08b9009e5a30706b66aba510692054d4129d32d0e12e05bbc0b96fb2 languageName: node linkType: hard @@ -8770,7 +9201,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0": +"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0, fast-glob@npm:^3.3.2": version: 3.3.2 resolution: "fast-glob@npm:3.3.2" dependencies: @@ -8851,12 +9282,12 @@ __metadata: languageName: node linkType: hard -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" +"file-entry-cache@npm:^8.0.0": + version: 8.0.0 + resolution: "file-entry-cache@npm:8.0.0" dependencies: - flat-cache: ^3.0.4 - checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 + flat-cache: ^4.0.0 + checksum: f67802d3334809048c69b3d458f672e1b6d26daefda701761c81f203b80149c35dea04d78ea4238969dd617678e530876722a0634c43031a0957f10cc3ed190f languageName: node linkType: hard @@ -8952,14 +9383,13 @@ __metadata: languageName: node linkType: hard -"flat-cache@npm:^3.0.4": - version: 3.2.0 - resolution: "flat-cache@npm:3.2.0" +"flat-cache@npm:^4.0.0": + version: 4.0.1 + resolution: "flat-cache@npm:4.0.1" dependencies: flatted: ^3.2.9 - keyv: ^4.5.3 - rimraf: ^3.0.2 - checksum: e7e0f59801e288b54bee5cb9681e9ee21ee28ef309f886b312c9d08415b79fc0f24ac842f84356ce80f47d6a53de62197ce0e6e148dc42d5db005992e2a756ec + keyv: ^4.5.4 + checksum: 899fc86bf6df093547d76e7bfaeb900824b869d7d457d02e9b8aae24836f0a99fbad79328cfd6415ee8908f180699bf259dc7614f793447cb14f707caf5996f6 languageName: node linkType: hard @@ -9341,15 +9771,6 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.19.0": - version: 13.24.0 - resolution: "globals@npm:13.24.0" - dependencies: - type-fest: ^0.20.2 - checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c - languageName: node - linkType: hard - "globals@npm:^14.0.0": version: 14.0.0 resolution: "globals@npm:14.0.0" @@ -9357,6 +9778,13 @@ __metadata: languageName: node linkType: hard +"globals@npm:^15.9.0": + version: 15.9.0 + resolution: "globals@npm:15.9.0" + checksum: 32c4470ffcc26db3ddbc579ddf968b74c26462d1a268039980c2fa2e107090fd442a7a7445d953dc4ee874f68846e713066c5a8e63d146fd9349cd1fc5a6f63d + languageName: node + linkType: hard + "globalthis@npm:^1.0.3": version: 1.0.4 resolution: "globalthis@npm:1.0.4" @@ -9997,6 +10425,13 @@ __metadata: languageName: node linkType: hard +"ignore@npm:^5.3.1": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 2acfd32a573260ea522ea0bfeff880af426d68f6831f973129e2ba7363f422923cf53aab62f8369cbf4667c7b25b6f8a3761b34ecdb284ea18e87a5262a865be + languageName: node + linkType: hard + "image-size@npm:^1.0.2": version: 1.1.1 resolution: "image-size@npm:1.1.1" @@ -10267,7 +10702,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": +"is-core-module@npm:^2.13.0": version: 2.13.1 resolution: "is-core-module@npm:2.13.1" dependencies: @@ -10788,7 +11223,7 @@ __metadata: languageName: node linkType: hard -"jest-cli@npm:^29.5.0": +"jest-cli@npm:^29.7.0": version: 29.7.0 resolution: "jest-cli@npm:29.7.0" dependencies: @@ -10886,7 +11321,7 @@ __metadata: languageName: node linkType: hard -"jest-environment-jsdom@npm:^29.5.0": +"jest-environment-jsdom@npm:^29.7.0": version: 29.7.0 resolution: "jest-environment-jsdom@npm:29.7.0" dependencies: @@ -10921,7 +11356,7 @@ __metadata: languageName: node linkType: hard -"jest-extended@npm:^4.0.0": +"jest-extended@npm:^4.0.0, jest-extended@npm:^4.0.2": version: 4.0.2 resolution: "jest-extended@npm:4.0.2" dependencies: @@ -11237,14 +11672,14 @@ __metadata: languageName: node linkType: hard -"jest@npm:29.5.x": - version: 29.5.0 - resolution: "jest@npm:29.5.0" +"jest@npm:29.7.x, jest@npm:^29.7.0": + version: 29.7.0 + resolution: "jest@npm:29.7.0" dependencies: - "@jest/core": ^29.5.0 - "@jest/types": ^29.5.0 + "@jest/core": ^29.7.0 + "@jest/types": ^29.6.3 import-local: ^3.0.2 - jest-cli: ^29.5.0 + jest-cli: ^29.7.0 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -11252,7 +11687,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: a8ff2eb0f421623412236e23cbe67c638127fffde466cba9606bc0c0553b4c1e5cb116d7e0ef990b5d1712851652c8ee461373b578df50857fe635b94ff455d5 + checksum: 17ca8d67504a7dbb1998cf3c3077ec9031ba3eb512da8d71cb91bcabb2b8995c4e4b292b740cb9bf1cbff5ce3e110b3f7c777b0cefb6f41ab05445f248d0ee0b languageName: node linkType: hard @@ -11407,17 +11842,6 @@ __metadata: languageName: node linkType: hard -"json5@npm:^1.0.2": - version: 1.0.2 - resolution: "json5@npm:1.0.2" - dependencies: - minimist: ^1.2.0 - bin: - json5: lib/cli.js - checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 - languageName: node - linkType: hard - "json5@npm:^2.1.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" @@ -11452,7 +11876,7 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^4.5.3": +"keyv@npm:^4.5.3, keyv@npm:^4.5.4": version: 4.5.4 resolution: "keyv@npm:4.5.4" dependencies: @@ -12652,25 +13076,25 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:9.0.3": - version: 9.0.3 - resolution: "minimatch@npm:9.0.3" +"minimatch@npm:^9.0.1": + version: 9.0.4 + resolution: "minimatch@npm:9.0.4" dependencies: brace-expansion: ^2.0.1 - checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + checksum: cf717f597ec3eed7dabc33153482a2e8d49f4fd3c26e58fd9c71a94c5029a0838728841b93f46bf1263b65a8010e2ee800d0dc9b004ab8ba8b6d1ec07cc115b5 languageName: node linkType: hard -"minimatch@npm:^9.0.1": - version: 9.0.4 - resolution: "minimatch@npm:9.0.4" +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" dependencies: brace-expansion: ^2.0.1 - checksum: cf717f597ec3eed7dabc33153482a2e8d49f4fd3c26e58fd9c71a94c5029a0838728841b93f46bf1263b65a8010e2ee800d0dc9b004ab8ba8b6d1ec07cc115b5 + checksum: 2c035575eda1e50623c731ec6c14f65a85296268f749b9337005210bb2b34e2705f8ef1a358b188f69892286ab99dc42c8fb98a57bde55c8d81b3023c19cea28 languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.6": +"minimist@npm:^1.2.0": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 @@ -12791,7 +13215,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.1.1": +"ms@npm:2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -12903,6 +13327,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.18": + version: 2.0.18 + resolution: "node-releases@npm:2.0.18" + checksum: ef55a3d853e1269a6d6279b7692cd6ff3e40bc74947945101138745bfdc9a5edabfe72cb19a31a8e45752e1910c4c65c77d931866af6357f242b172b7283f5b3 + languageName: node + linkType: hard + "nopt@npm:^7.0.0": version: 7.2.1 resolution: "nopt@npm:7.2.1" @@ -12961,9 +13392,9 @@ __metadata: linkType: hard "nwsapi@npm:^2.2.2": - version: 2.2.10 - resolution: "nwsapi@npm:2.2.10" - checksum: 5f1d361b38c47ab49727d5ea8bbfeb5867ae6de0e538eec9a8b77c88005ddde36d8b930e0730b50ee5e5dda949112c0f9ffed1bf15e7e1b3cd9cfa319f5a9b6f + version: 2.2.12 + resolution: "nwsapi@npm:2.2.12" + checksum: 4dbce7ecbcf336eef1edcbb5161cbceea95863e63a16d9bcec8e81cbb260bdab3d07e6c7b58354d465dc803eef6d0ea4fb20220a80fa148ae65f18d56df81799 languageName: node linkType: hard @@ -12998,7 +13429,7 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.0, object.assign@npm:^4.1.2, object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": +"object.assign@npm:^4.1.0, object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": version: 4.1.5 resolution: "object.assign@npm:4.1.5" dependencies: @@ -13010,7 +13441,7 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.5, object.entries@npm:^1.1.7": +"object.entries@npm:^1.1.8": version: 1.1.8 resolution: "object.entries@npm:1.1.8" dependencies: @@ -13021,7 +13452,7 @@ __metadata: languageName: node linkType: hard -"object.fromentries@npm:^2.0.7": +"object.fromentries@npm:^2.0.8": version: 2.0.8 resolution: "object.fromentries@npm:2.0.8" dependencies: @@ -13033,29 +13464,7 @@ __metadata: languageName: node linkType: hard -"object.groupby@npm:^1.0.1": - version: 1.0.3 - resolution: "object.groupby@npm:1.0.3" - dependencies: - call-bind: ^1.0.7 - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - checksum: 0d30693ca3ace29720bffd20b3130451dca7a56c612e1926c0a1a15e4306061d84410bdb1456be2656c5aca53c81b7a3661eceaa362db1bba6669c2c9b6d1982 - languageName: node - linkType: hard - -"object.hasown@npm:^1.1.3": - version: 1.1.4 - resolution: "object.hasown@npm:1.1.4" - dependencies: - define-properties: ^1.2.1 - es-abstract: ^1.23.2 - es-object-atoms: ^1.0.0 - checksum: bc46eb5ca22106fcd07aab1411508c2c68b7565fe8fb272f166fb9bf203972e8b5c86a5a4b2c86204beead0626a7a4119d32cefbaf7c5dd57b400bf9e6363cb6 - languageName: node - linkType: hard - -"object.values@npm:^1.1.6, object.values@npm:^1.1.7": +"object.values@npm:^1.1.6, object.values@npm:^1.2.0": version: 1.2.0 resolution: "object.values@npm:1.2.0" dependencies: @@ -14378,15 +14787,18 @@ __metadata: version: 0.0.0-use.local resolution: "react-obsidian@workspace:packages/react-obsidian" dependencies: - "@babel/core": 7.22.x - "@babel/eslint-parser": 7.22.x - "@babel/plugin-proposal-decorators": 7.22.x - "@babel/plugin-transform-class-properties": 7.22.x - "@babel/preset-env": 7.22.x - "@babel/preset-react": 7.22.x - "@babel/preset-typescript": 7.22.x - "@babel/types": 7.24.x - "@stylistic/eslint-plugin": ^1.7.0 + "@babel/core": ^7.25.2 + "@babel/eslint-parser": ^7.25.1 + "@babel/plugin-proposal-decorators": ^7.24.7 + "@babel/plugin-transform-class-properties": ^7.25.4 + "@babel/preset-env": ^7.25.4 + "@babel/preset-react": ^7.24.7 + "@babel/preset-typescript": ^7.24.7 + "@babel/types": ^7.25.6 + "@eslint/compat": ^1.1.1 + "@eslint/eslintrc": ^3.1.0 + "@eslint/js": ^9.9.1 + "@stylistic/eslint-plugin": ^2.7.2 "@testing-library/react": 14.x.x "@types/hoist-non-react-statics": ^3.3.1 "@types/jest": 29.5.x @@ -14394,22 +14806,20 @@ __metadata: "@types/lodash": ^4.14.176 "@types/react": 18.3.x "@types/react-dom": 18.3.x - "@typescript-eslint/eslint-plugin": 6.x.x - "@typescript-eslint/parser": 6.x.x + "@typescript-eslint/eslint-plugin": ^8.4.0 + "@typescript-eslint/parser": ^8.4.0 babel-plugin-parameter-decorator: 1.x.x cross-env: ^7.0.3 - eslint: 8.x.x - eslint-config-airbnb-typescript: 17.x.x - eslint-plugin-import: ^2.25.2 - eslint-plugin-import-newlines: ^1.1.5 - eslint-plugin-jest-formatting: ^3.1.0 - eslint-plugin-obsidian: 2.10.2 - eslint-plugin-react: ^7.26.1 - eslint-plugin-react-hooks: ^4.2.0 - eslint-plugin-unused-imports: 3.1.x + eslint: ^9.9.1 + eslint-plugin-jest: ^28.8.1 + eslint-plugin-obsidian: 2.11.0-alpha.1 + eslint-plugin-react: ^7.35.0 + eslint-plugin-react-hooks: ^4.6.2 + eslint-plugin-unused-imports: ^4.1.3 + globals: ^15.9.0 hoist-non-react-statics: 3.x.x - jest: 29.5.x - jest-environment-jsdom: ^29.5.0 + jest: 29.7.x + jest-environment-jsdom: ^29.7.0 jest-extended: ^4.0.0 jest-mock-extended: 3.x.x jest-when: 3.x.x @@ -14418,7 +14828,8 @@ __metadata: react-dom: 18.2.x reflect-metadata: ~0.1.13 setimmediate: ^1.0.5 - typescript: ^4.5.4 + typescript: ^5.5.4 + typescript-eslint: ^8.3.0 peerDependencies: react: "*" languageName: unknown @@ -14859,7 +15270,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.4": +"resolve@npm:^1.1.6, resolve@npm:^1.14.2, resolve@npm:^1.20.0": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -14885,7 +15296,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.4#~builtin": +"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.20.0#~builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -15145,6 +15556,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.6.0": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8 + languageName: node + linkType: hard + "send@npm:0.18.0": version: 0.18.0 resolution: "send@npm:0.18.0" @@ -15630,7 +16050,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.10": +"string.prototype.matchall@npm:^4.0.11": version: 4.0.11 resolution: "string.prototype.matchall@npm:4.0.11" dependencies: @@ -15650,6 +16070,16 @@ __metadata: languageName: node linkType: hard +"string.prototype.repeat@npm:^1.0.0": + version: 1.0.0 + resolution: "string.prototype.repeat@npm:1.0.0" + dependencies: + define-properties: ^1.1.3 + es-abstract: ^1.17.5 + checksum: 95dfc514ed7f328d80a066dabbfbbb1615c3e51490351085409db2eb7cbfed7ea29fdadaf277647fbf9f4a1e10e6dd9e95e78c0fd2c4e6bb6723ea6e59401004 + languageName: node + linkType: hard + "string.prototype.trim@npm:^1.2.9": version: 1.2.9 resolution: "string.prototype.trim@npm:1.2.9" @@ -15748,13 +16178,6 @@ __metadata: languageName: node linkType: hard -"strip-bom@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-bom@npm:3.0.0" - checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b - languageName: node - linkType: hard - "strip-bom@npm:^4.0.0": version: 4.0.0 resolution: "strip-bom@npm:4.0.0" @@ -16053,7 +16476,7 @@ __metadata: languageName: node linkType: hard -"ts-api-utils@npm:^1.0.1": +"ts-api-utils@npm:^1.3.0": version: 1.3.0 resolution: "ts-api-utils@npm:1.3.0" peerDependencies: @@ -16074,18 +16497,6 @@ __metadata: languageName: node linkType: hard -"tsconfig-paths@npm:^3.15.0": - version: 3.15.0 - resolution: "tsconfig-paths@npm:3.15.0" - dependencies: - "@types/json5": ^0.0.29 - json5: ^1.0.2 - minimist: ^1.2.6 - strip-bom: ^3.0.0 - checksum: 59f35407a390d9482b320451f52a411a256a130ff0e7543d18c6f20afab29ac19fbe55c360a93d6476213cc335a4d76ce90f67df54c4e9037f7d240920832201 - languageName: node - linkType: hard - "tslib@npm:^2.0.3, tslib@npm:^2.6.0": version: 2.6.3 resolution: "tslib@npm:2.6.3" @@ -16109,13 +16520,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.20.2": - version: 0.20.2 - resolution: "type-fest@npm:0.20.2" - checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 - languageName: node - linkType: hard - "type-fest@npm:^0.21.3": version: 0.21.3 resolution: "type-fest@npm:0.21.3" @@ -16208,13 +16612,17 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^4.5.4": - version: 4.9.5 - resolution: "typescript@npm:4.9.5" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db +"typescript-eslint@npm:^8.3.0": + version: 8.3.0 + resolution: "typescript-eslint@npm:8.3.0" + dependencies: + "@typescript-eslint/eslint-plugin": 8.3.0 + "@typescript-eslint/parser": 8.3.0 + "@typescript-eslint/utils": 8.3.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 54710d27aad6f05c0b5c53f944099a8f08a483ef6cdaf098bf4d953928db4fbde5b0651eff36b143a99ec88021fc18dc4e4fa6b13e83495c9ff3465f9a6889e6 languageName: node linkType: hard @@ -16228,13 +16636,13 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@^4.5.4#~builtin": - version: 4.9.5 - resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=289587" +"typescript@npm:^5.5.4": + version: 5.5.4 + resolution: "typescript@npm:5.5.4" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 1f8f3b6aaea19f0f67cba79057674ba580438a7db55057eb89cc06950483c5d632115c14077f6663ea76fd09fce3c190e6414bb98582ec80aa5a4eaf345d5b68 + checksum: b309040f3a1cd91c68a5a58af6b9fdd4e849b8c42d837b2c2e73f9a4f96a98c4f1ed398a9aab576ee0a4748f5690cf594e6b99dbe61de7839da748c41e6d6ca8 languageName: node linkType: hard @@ -16248,6 +16656,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@^5.5.4#~builtin": + version: 5.5.4 + resolution: "typescript@patch:typescript@npm%3A5.5.4#~builtin::version=5.5.4&hash=5adc0c" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: fc52962f31a5bcb716d4213bef516885e4f01f30cea797a831205fc9ef12b405a40561c40eae3127ab85ba1548e7df49df2bcdee6b84a94bfbe3a0d7eff16b14 + languageName: node + linkType: hard + "unbox-primitive@npm:^1.0.2": version: 1.0.2 resolution: "unbox-primitive@npm:1.0.2" @@ -16267,6 +16685,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~6.19.2": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: de51f1b447d22571cf155dfe14ff6d12c5bdaec237c765085b439c38ca8518fc360e88c70f99469162bf2e14188a7b0bcb06e1ed2dc031042b984b0bb9544017 + languageName: node + linkType: hard + "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" @@ -16449,6 +16874,20 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.1.0": + version: 1.1.0 + resolution: "update-browserslist-db@npm:1.1.0" + dependencies: + escalade: ^3.1.2 + picocolors: ^1.0.1 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 7b74694d96f0c360f01b702e72353dc5a49df4fe6663d3ee4e5c628f061576cddf56af35a3a886238c01dd3d8f231b7a86a8ceaa31e7a9220ae31c1c1238e562 + languageName: node + linkType: hard + "update-notifier@npm:^6.0.2": version: 6.0.2 resolution: "update-notifier@npm:6.0.2" @@ -17029,8 +17468,8 @@ __metadata: linkType: hard "ws@npm:^8.11.0": - version: 8.17.0 - resolution: "ws@npm:8.17.0" + version: 8.18.0 + resolution: "ws@npm:8.18.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -17039,7 +17478,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 147ef9eab0251364e1d2c55338ad0efb15e6913923ccbfdf20f7a8a6cb8f88432bcd7f4d8f66977135bfad35575644f9983201c1a361019594a4e53977bf6d4e + checksum: 91d4d35bc99ff6df483bdf029b9ea4bfd7af1f16fc91231a96777a63d263e1eabf486e13a2353970efc534f9faa43bdbf9ee76525af22f4752cbc5ebda333975 languageName: node linkType: hard