diff --git a/eslint.config.mjs b/eslint.config.mjs index 7babc3f..8e619d2 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -4,11 +4,15 @@ import eslintPluginReactHooks from 'eslint-plugin-react-hooks' import eslintPluginReactRefresh from 'eslint-plugin-react-refresh' import eslintPluginUnicorn from 'eslint-plugin-unicorn' import tseslint from 'typescript-eslint' -import globals from 'globals' export default tseslint.config( { - ignores: ['**/dist/**/*'], + ignores: [ + '**/dist/**/*', + 'jest.config.js', + 'eslint.config.mjs', + 'esbuild.mjs', + ], }, { languageOptions: { @@ -63,8 +67,17 @@ export default tseslint.config( }, ], + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unsafe-call': 'off', '@typescript-eslint/no-non-null-assertion': 'off', '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/no-empty-function': 'off', + + 'unicorn/no-null': 'off', + 'unicorn/prefer-spread': 'off', 'unicorn/no-useless-undefined': 'off', 'unicorn/catch-error-name': 'off', 'unicorn/filename-case': 'off', diff --git a/package.json b/package.json index d1f93c3..ebfae09 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "prebuild": "npm run clean", "start": "node esbuild.mjs", "build": "tsc && NODE_ENV=production node esbuild.mjs", - "lint": "eslint --report-unused-disable-directives --max-warnings 0 src/", + "lint": "eslint --report-unused-disable-directives --max-warnings 0", "prepack": "npm run build", "postversion": "git push --follow-tags" }, diff --git a/src/AddHighlightModel/ProteinToGenomeClickHighlight.tsx b/src/AddHighlightModel/ProteinToGenomeClickHighlight.tsx index 1fe23b4..fd3a3b9 100644 --- a/src/AddHighlightModel/ProteinToGenomeClickHighlight.tsx +++ b/src/AddHighlightModel/ProteinToGenomeClickHighlight.tsx @@ -16,19 +16,20 @@ const ProteinToGenomeClickHighlight = observer(function ({ }) { const { assemblyManager, views } = getSession(model) const { assemblyNames } = model - const p = views.find( - f => f.type === 'ProteinView', - ) as JBrowsePluginProteinViewModel - const assembly = assemblyManager.get(assemblyNames[0]) + const p = views.find(f => f.type === 'ProteinView') as + | JBrowsePluginProteinViewModel + | undefined + const assemblyName = assemblyNames[0]! + const assembly = assemblyManager.get(assemblyName) return assembly ? ( <> - {p.clickGenomeHighlights.map((r, idx) => ( + {p?.clickGenomeHighlights.map((r, idx) => ( ))} diff --git a/src/AddHighlightModel/ProteinToGenomeHoverHighlight.tsx b/src/AddHighlightModel/ProteinToGenomeHoverHighlight.tsx index 7137824..f98b61d 100644 --- a/src/AddHighlightModel/ProteinToGenomeHoverHighlight.tsx +++ b/src/AddHighlightModel/ProteinToGenomeHoverHighlight.tsx @@ -16,19 +16,20 @@ const ProteinToGenomeHoverHighlight = observer(function ({ }) { const { assemblyManager, views } = getSession(model) const { assemblyNames } = model - const p = views.find( - f => f.type === 'ProteinView', - ) as JBrowsePluginProteinViewModel - const assembly = assemblyManager.get(assemblyNames[0]) + const p = views.find(f => f.type === 'ProteinView') as + | JBrowsePluginProteinViewModel + | undefined + const assemblyName = assemblyNames[0]! + const assembly = assemblyManager.get(assemblyName) return assembly ? ( <> - {p.hoverGenomeHighlights.map((r, idx) => ( + {p?.hoverGenomeHighlights.map((r, idx) => ( ))} diff --git a/src/LaunchProteinView/components/UserProvidedStructure.tsx b/src/LaunchProteinView/components/UserProvidedStructure.tsx index fb3abaf..05d661f 100644 --- a/src/LaunchProteinView/components/UserProvidedStructure.tsx +++ b/src/LaunchProteinView/components/UserProvidedStructure.tsx @@ -102,9 +102,7 @@ const UserProvidedStructure = observer(function ({ const { seq: structureSequence2, error: error4 } = useRemoteStructureFileSequence({ url: structureURL }) const structureName = - file?.name ?? - structureURL.slice(structureURL.lastIndexOf('/') + 1) ?? - 'structureSequence' + file?.name ?? structureURL.slice(structureURL.lastIndexOf('/') + 1) const structureSequence = structureSequence1 ?? structureSequence2 useEffect(() => { diff --git a/src/LaunchProteinView/components/calculateProteinSequence.ts b/src/LaunchProteinView/components/calculateProteinSequence.ts index 7891dc2..48791bf 100644 --- a/src/LaunchProteinView/components/calculateProteinSequence.ts +++ b/src/LaunchProteinView/components/calculateProteinSequence.ts @@ -30,7 +30,7 @@ export function calculateProteinSequence({ let protein = '' for (let i = 0; i < str.length; i += 3) { // use & symbol for undefined codon, or partial slice - protein += codonTable[str.slice(i, i + 3)] || '&' + protein += codonTable[str.slice(i, i + 3)] ?? '&' } return protein } diff --git a/src/LaunchProteinView/index.ts b/src/LaunchProteinView/index.ts index 3aaae23..ec1a692 100644 --- a/src/LaunchProteinView/index.ts +++ b/src/LaunchProteinView/index.ts @@ -2,45 +2,51 @@ import PluginManager from '@jbrowse/core/PluginManager' import DisplayType from '@jbrowse/core/pluggableElementTypes/DisplayType' import { PluggableElementType } from '@jbrowse/core/pluggableElementTypes' import { IAnyModelType } from 'mobx-state-tree' -import { getSession, getContainingTrack } from '@jbrowse/core/util' +import { getSession, getContainingTrack, Feature } from '@jbrowse/core/util' // icons import AddIcon from '@mui/icons-material/Add' // locals import LaunchProteinViewDialog from './components/LaunchProteinViewDialog' +import { MenuItem } from '@jbrowse/core/ui' function isDisplay(elt: { name: string }): elt is DisplayType { return elt.name === 'LinearBasicDisplay' } function extendStateModel(stateModel: IAnyModelType) { - return stateModel.views(self => { - const superContextMenuItems = self.contextMenuItems - return { - contextMenuItems() { - const feature = self.contextMenuFeature - const track = getContainingTrack(self) - return [ - ...superContextMenuItems(), - ...(feature - ? [ - { - label: 'Launch 3-D protein view', - icon: AddIcon, - onClick: () => { - getSession(track).queueDialog(handleClose => [ - LaunchProteinViewDialog, - { model: track, handleClose, feature }, - ]) + return stateModel.views( + (self: { + contextMenuItems: () => MenuItem[] + contextMenuFeature?: Feature + }) => { + const superContextMenuItems = self.contextMenuItems + return { + contextMenuItems() { + const feature = self.contextMenuFeature + const track = getContainingTrack(self) + return [ + ...superContextMenuItems(), + ...(feature + ? [ + { + label: 'Launch 3-D protein view', + icon: AddIcon, + onClick: () => { + getSession(track).queueDialog(handleClose => [ + LaunchProteinViewDialog, + { model: track, handleClose, feature }, + ]) + }, }, - }, - ] - : []), - ] - }, - } - }) + ] + : []), + ] + }, + } + }, + ) } export default function LaunchProteinViewF(pluginManager: PluginManager) { diff --git a/src/ProteinView/components/ProteinAlignment.tsx b/src/ProteinView/components/ProteinAlignment.tsx index d65fb95..2def2fc 100644 --- a/src/ProteinView/components/ProteinAlignment.tsx +++ b/src/ProteinView/components/ProteinAlignment.tsx @@ -23,9 +23,12 @@ const ProteinAlignment = observer(function ({ alignmentToStructurePosition, showHighlight, } = model - const a0 = alignment!.alns[0].seq as string - const a1 = alignment!.alns[1].seq as string - const con = alignment!.consensus + if (!alignment) { + return
No alignment
+ } + const a0 = alignment.alns[0]!.seq as string + const a1 = alignment.alns[1]!.seq as string + const con = alignment.consensus const set = new Set() // eslint-disable-next-line unicorn/no-for-loop for (let i = 0; i < con.length; i++) { @@ -47,7 +50,7 @@ const ProteinAlignment = observer(function ({ } function onClick(alignmentPos: number) { const structureSeqPos = alignmentToStructurePosition[alignmentPos] - clickProteinToGenome({ model, structureSeqPos }).catch(e => { + clickProteinToGenome({ model, structureSeqPos }).catch((e: unknown) => { console.error(e) }) } diff --git a/src/ProteinView/components/ProteinView.tsx b/src/ProteinView/components/ProteinView.tsx index 2cc373f..e297e76 100644 --- a/src/ProteinView/components/ProteinView.tsx +++ b/src/ProteinView/components/ProteinView.tsx @@ -20,11 +20,9 @@ import clearSelection from '../clearSelection' // css import css from '../css/molstar' -if (document.head) { - const style = document.createElement('style') - style.append(css) - document.head.append(style) -} +const style = document.createElement('style') +style.append(css) +document.head.append(style) const ProteinView = observer(function ({ model, @@ -98,9 +96,10 @@ const ProteinViewContainer = observer(function ({ }, [plugin, structure, showHighlight, structureSeqToTranscriptSeqPosition]) useEffect(() => { - if (!plugin || !structure || structureSeqHoverPos === undefined) { + if (!plugin || !structure) { return } + if (structureSeqHoverPos === undefined) { console.warn('not found') } else { diff --git a/src/ProteinView/launchRemotePairwiseAlignment.ts b/src/ProteinView/launchRemotePairwiseAlignment.ts index ffc7bbd..b6e80fc 100644 --- a/src/ProteinView/launchRemotePairwiseAlignment.ts +++ b/src/ProteinView/launchRemotePairwiseAlignment.ts @@ -78,6 +78,7 @@ async function wait({ algorithm: string onProgress: (arg: string) => void }) { + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition while (true) { for (let i = 0; i < 10; i++) { await timeout(1000) @@ -87,6 +88,8 @@ async function wait({ if (result === 'FINISHED') { break + } else if (result.includes('FAILED')) { + throw new Error('Remote returned FAILED') } } } diff --git a/src/ProteinView/model.ts b/src/ProteinView/model.ts index 5744049..2b33bef 100644 --- a/src/ProteinView/model.ts +++ b/src/ProteinView/model.ts @@ -72,7 +72,7 @@ function stateModelFactory() { /** * #property */ - feature: types.frozen(), + feature: types.frozen(), /** * #property */ diff --git a/src/ProteinView/proteinToGenomeMapping.ts b/src/ProteinView/proteinToGenomeMapping.ts index 872f260..6339fe6 100644 --- a/src/ProteinView/proteinToGenomeMapping.ts +++ b/src/ProteinView/proteinToGenomeMapping.ts @@ -30,7 +30,7 @@ export function proteinToGenomeMapping({ } const start = s0 const end = start + 3 * strand - return [Math.min(start, end), Math.max(start, end)] + return [Math.min(start, end), Math.max(start, end)] as const } export async function clickProteinToGenome({ @@ -64,7 +64,7 @@ export async function clickProteinToGenome({ `${refName}:${s1}-${s2}${strand === -1 ? '[rev]' : ''}`, ) } else { - const assembly = assemblyManager.get(lgv.assemblyNames[0]) + const assembly = assemblyManager.get(lgv.assemblyNames[0]!) const r = assembly?.getCanonicalRefName(refName) ?? refName lgv.centerAt(s1, r) } @@ -80,11 +80,12 @@ export function hoverProteinToGenome({ const session = getSession(model) const result = proteinToGenomeMapping({ structureSeqPos, model }) const { genomeToTranscriptSeqMapping } = model - if (!genomeToTranscriptSeqMapping || !result) { + if (!genomeToTranscriptSeqMapping) { return } if (!result) { session.notify('Genome position not found') + return } const [s1, s2] = result const { refName } = genomeToTranscriptSeqMapping diff --git a/src/ProteinView/useProteinViewClickBehavior.ts b/src/ProteinView/useProteinViewClickBehavior.ts index d59db1c..48d6b86 100644 --- a/src/ProteinView/useProteinViewClickBehavior.ts +++ b/src/ProteinView/useProteinViewClickBehavior.ts @@ -36,10 +36,12 @@ export default function useProteinViewClickActionBehavior({ chain, }) - clickProteinToGenome({ model, structureSeqPos: pos - 1 }).catch(e => { - console.error(e) - setError(e) - }) + clickProteinToGenome({ model, structureSeqPos: pos - 1 }).catch( + (e: unknown) => { + console.error(e) + setError(e) + }, + ) } } }) diff --git a/src/ProteinView/util.ts b/src/ProteinView/util.ts index 9a59c2d..ad693cc 100644 --- a/src/ProteinView/util.ts +++ b/src/ProteinView/util.ts @@ -5,7 +5,10 @@ import { proteinAbbreviationMapping } from './proteinAbbreviationMapping' export function checkHovered(hovered: unknown): hovered is { hoverFeature: Feature - hoverPosition: { coord: number; refName: string } + hoverPosition: { + coord: number + refName: string + } } { return ( !!hovered && @@ -43,7 +46,7 @@ export function toStr(r: { return [ `Position: ${r.structureSeqPos}`, r.code - ? `Letter: ${r.code} (${proteinAbbreviationMapping[r.code].singleLetterCode})` + ? `Letter: ${r.code} (${proteinAbbreviationMapping[r.code]?.singleLetterCode})` : '', r.chain ? `Chain: ${r.chain}` : '', ] @@ -51,6 +54,12 @@ export function toStr(r: { .join(', ') } -export function invertMap(arg: Record) { - return Object.fromEntries(Object.entries(arg).map(([a, b]) => [b, a])) +export function invertMap( + arg: Record, +): Record { + return Object.fromEntries( + Object.entries(arg) + .map(([a, b]) => [b, a]) + .filter(f => !!f[0]), + ) } diff --git a/yarn.lock b/yarn.lock index 8365cc7..c6f39a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1421,62 +1421,62 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@8.1.0", "@typescript-eslint/eslint-plugin@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.1.0.tgz#3c020deeaaba82a6f741d00dacf172c53be4911f" - integrity sha512-LlNBaHFCEBPHyD4pZXb35mzjGkuGKXU5eeCA1SxvHfiRES0E82dOounfVpL4DCqYvJEKab0bZIA0gCRpdLKkCw== +"@typescript-eslint/eslint-plugin@8.2.0", "@typescript-eslint/eslint-plugin@^8.1.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.2.0.tgz#bf50e9c8dac6bdf15dd1b52ca29448550903558e" + integrity sha512-02tJIs655em7fvt9gps/+4k4OsKULYGtLBPJfOsmOq1+3cdClYiF0+d6mHu6qDnTcg88wJBkcPLpQhq7FyDz0A== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.1.0" - "@typescript-eslint/type-utils" "8.1.0" - "@typescript-eslint/utils" "8.1.0" - "@typescript-eslint/visitor-keys" "8.1.0" + "@typescript-eslint/scope-manager" "8.2.0" + "@typescript-eslint/type-utils" "8.2.0" + "@typescript-eslint/utils" "8.2.0" + "@typescript-eslint/visitor-keys" "8.2.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" -"@typescript-eslint/parser@8.1.0", "@typescript-eslint/parser@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.1.0.tgz#b7e77f5fa212df59eba51ecd4986f194bccc2303" - integrity sha512-U7iTAtGgJk6DPX9wIWPPOlt1gO57097G06gIcl0N0EEnNw8RGD62c+2/DiP/zL7KrkqnnqF7gtFGR7YgzPllTA== +"@typescript-eslint/parser@8.2.0", "@typescript-eslint/parser@^8.1.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.2.0.tgz#de3993304feb98576d9ffbf10c83ca1bcb68a5dd" + integrity sha512-j3Di+o0lHgPrb7FxL3fdEy6LJ/j2NE8u+AP/5cQ9SKb+JLH6V6UHDqJ+e0hXBkHP1wn1YDFjYCS9LBQsZDlDEg== dependencies: - "@typescript-eslint/scope-manager" "8.1.0" - "@typescript-eslint/types" "8.1.0" - "@typescript-eslint/typescript-estree" "8.1.0" - "@typescript-eslint/visitor-keys" "8.1.0" + "@typescript-eslint/scope-manager" "8.2.0" + "@typescript-eslint/types" "8.2.0" + "@typescript-eslint/typescript-estree" "8.2.0" + "@typescript-eslint/visitor-keys" "8.2.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.1.0.tgz#dd8987d2efebb71d230a1c71d82e84a7aead5c3d" - integrity sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ== +"@typescript-eslint/scope-manager@8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz#4a4bd7e7df5522acc8795c3b6f21e8c41b951138" + integrity sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw== dependencies: - "@typescript-eslint/types" "8.1.0" - "@typescript-eslint/visitor-keys" "8.1.0" + "@typescript-eslint/types" "8.2.0" + "@typescript-eslint/visitor-keys" "8.2.0" -"@typescript-eslint/type-utils@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.1.0.tgz#dbf5a4308166dfc37a36305390dea04a3a3b5048" - integrity sha512-oLYvTxljVvsMnldfl6jIKxTaU7ok7km0KDrwOt1RHYu6nxlhN3TIx8k5Q52L6wR33nOwDgM7VwW1fT1qMNfFIA== +"@typescript-eslint/type-utils@8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.2.0.tgz#5cd7fef50f492e5a0f508bdd40678861a57c3549" + integrity sha512-g1CfXGFMQdT5S+0PSO0fvGXUaiSkl73U1n9LTK5aRAFnPlJ8dLKkXr4AaLFvPedW8lVDoMgLLE3JN98ZZfsj0w== dependencies: - "@typescript-eslint/typescript-estree" "8.1.0" - "@typescript-eslint/utils" "8.1.0" + "@typescript-eslint/typescript-estree" "8.2.0" + "@typescript-eslint/utils" "8.2.0" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.1.0.tgz#fbf1eaa668a7e444ac507732ca9d3c3468e5db9c" - integrity sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog== +"@typescript-eslint/types@8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.2.0.tgz#dfe9895a2812f7c6bf7af863054c22a67060420c" + integrity sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ== -"@typescript-eslint/typescript-estree@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.1.0.tgz#c44e5667683c0bb5caa43192e27de6a994f4e4c4" - integrity sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg== +"@typescript-eslint/typescript-estree@8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz#fbdb93a1c7ac7f1f96ae2de4fc97cd64c60ae894" + integrity sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA== dependencies: - "@typescript-eslint/types" "8.1.0" - "@typescript-eslint/visitor-keys" "8.1.0" + "@typescript-eslint/types" "8.2.0" + "@typescript-eslint/visitor-keys" "8.2.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -1484,22 +1484,22 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.1.0.tgz#a922985a43d2560ce0d293be79148fa80c1325e0" - integrity sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA== +"@typescript-eslint/utils@8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.2.0.tgz#02d442285925f28d520587185f295f932702e733" + integrity sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.1.0" - "@typescript-eslint/types" "8.1.0" - "@typescript-eslint/typescript-estree" "8.1.0" + "@typescript-eslint/scope-manager" "8.2.0" + "@typescript-eslint/types" "8.2.0" + "@typescript-eslint/typescript-estree" "8.2.0" -"@typescript-eslint/visitor-keys@8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz#ab2b3a9699a8ddebf0c205e133f114c1fed9daad" - integrity sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag== +"@typescript-eslint/visitor-keys@8.2.0": + version "8.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz#f6abb3b6508898a117175ddc11f9b9869cc96834" + integrity sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q== dependencies: - "@typescript-eslint/types" "8.1.0" + "@typescript-eslint/types" "8.2.0" eslint-visitor-keys "^3.4.3" "@ungap/structured-clone@^1.0.0": @@ -6108,13 +6108,13 @@ typed-array-length@^1.0.6: possible-typed-array-names "^1.0.0" typescript-eslint@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.1.0.tgz#c43a3543ab34c37b7f88deb4ff18b9764aed0b60" - integrity sha512-prB2U3jXPJLpo1iVLN338Lvolh6OrcCZO+9Yv6AR+tvegPPptYCDBIHiEEUdqRi8gAv2bXNKfMUrgAd2ejn/ow== + version "8.2.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.2.0.tgz#90d75636b663a9f5e391e9b3a33f3031236a25c8" + integrity sha512-DmnqaPcML0xYwUzgNbM1XaKXpEb7BShYf2P1tkUmmcl8hyeG7Pj08Er7R9bNy6AufabywzJcOybQAtnD/c9DGw== dependencies: - "@typescript-eslint/eslint-plugin" "8.1.0" - "@typescript-eslint/parser" "8.1.0" - "@typescript-eslint/utils" "8.1.0" + "@typescript-eslint/eslint-plugin" "8.2.0" + "@typescript-eslint/parser" "8.2.0" + "@typescript-eslint/utils" "8.2.0" typescript@^5.3.3: version "5.5.4" @@ -6137,9 +6137,9 @@ undici-types@~5.26.4: integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== undici-types@~6.19.2: - version "6.19.6" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.6.tgz#e218c3df0987f4c0e0008ca00d6b6472d9b89b36" - integrity sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org== + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== unified@^11.0.0: version "11.0.5"