diff --git a/.eslintrc.js b/.eslintrc.js index 14d27ca1a..5b539133b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -101,6 +101,8 @@ function buildTSOverride({files, tsconfig}) { '@typescript-eslint/no-empty-function': ['off'], // Temporarily disable. 3 problems. '@typescript-eslint/no-empty-interface': ['off'], + // We use this pattern extensively for block (e.g. controls_if) interfaces. + '@typescript-eslint/no-empty-object-type': ['off'], // TsDoc rules (using JsDoc plugin) // Disable built-in jsdoc verifier. diff --git a/core/block.ts b/core/block.ts index 6db948e48..dad2fd6e9 100644 --- a/core/block.ts +++ b/core/block.ts @@ -223,7 +223,7 @@ export class Block implements IASTNodeLocation { /** * String for block help, or function that returns a URL. Null for no help. */ - helpUrl: string | Function | null = null; + helpUrl: string | (() => string) | null = null; /** A bound callback function to use when the parent workspace changes. */ private onchangeWrapper_: ((p1: Abstract) => void) | null = null; @@ -997,7 +997,7 @@ export class Block implements IASTNodeLocation { * @param url URL string for block help, or function that returns a URL. Null * for no help. */ - setHelpUrl(url: string | Function) { + setHelpUrl(url: string | (() => string)) { this.helpUrl = url; } @@ -1864,7 +1864,7 @@ export class Block implements IASTNodeLocation { const rawValue = json['colour']; try { this.setColour(rawValue); - } catch (e) { + } catch { console.warn(warningPrefix + 'Illegal colour value: ', rawValue); } } @@ -1881,7 +1881,7 @@ export class Block implements IASTNodeLocation { const blockStyleName = json['style']; try { this.setStyle(blockStyleName); - } catch (styleError) { + } catch { console.warn(warningPrefix + 'Style does not exist: ', blockStyleName); } } @@ -2461,7 +2461,9 @@ export class Block implements IASTNodeLocation { const event = new (eventUtils.get(eventUtils.BLOCK_MOVE))( this, ) as BlockMove; - reason && event.setReason(reason); + if (reason) { + event.setReason(reason); + } this.xy_.translate(dx, dy); event.recordNew(); eventUtils.fire(event); diff --git a/core/block_svg.ts b/core/block_svg.ts index 14c580574..275451a61 100644 --- a/core/block_svg.ts +++ b/core/block_svg.ts @@ -378,7 +378,9 @@ export class BlockSvg let event: BlockMove | null = null; if (eventsEnabled) { event = new (eventUtils.get(eventUtils.BLOCK_MOVE)!)(this) as BlockMove; - reason && event.setReason(reason); + if (reason) { + event.setReason(reason); + } } const delta = new Coordinate(dx, dy); diff --git a/core/browser_events.ts b/core/browser_events.ts index 54fec307e..8176fe10f 100644 --- a/core/browser_events.ts +++ b/core/browser_events.ts @@ -6,6 +6,10 @@ // Former goog.module ID: Blockly.browserEvents +// Theoretically we could figure out a way to type the event params correctly, +// but it's not high priority. +/* eslint-disable @typescript-eslint/no-unsafe-function-type */ + import * as Touch from './touch.js'; import * as userAgent from './utils/useragent.js'; @@ -47,7 +51,7 @@ const PAGE_MODE_MULTIPLIER = 125; export function conditionalBind( node: EventTarget, name: string, - thisObject: Object | null, + thisObject: object | null, func: Function, opt_noCaptureIdentifier?: boolean, ): Data { @@ -96,7 +100,7 @@ export function conditionalBind( export function bind( node: EventTarget, name: string, - thisObject: Object | null, + thisObject: object | null, func: Function, ): Data { /** diff --git a/core/dragging/bubble_drag_strategy.ts b/core/dragging/bubble_drag_strategy.ts index f388bb94c..05465a804 100644 --- a/core/dragging/bubble_drag_strategy.ts +++ b/core/dragging/bubble_drag_strategy.ts @@ -33,7 +33,9 @@ export class BubbleDragStrategy implements IDragStrategy { this.startLoc = this.bubble.getRelativeToSurfaceXY(); this.workspace.setResizesEnabled(false); this.workspace.getLayerManager()?.moveToDragLayer(this.bubble); - this.bubble.setDragging && this.bubble.setDragging(true); + if (this.bubble.setDragging) { + this.bubble.setDragging(true); + } } drag(newLoc: Coordinate): void { diff --git a/core/dropdowndiv.ts b/core/dropdowndiv.ts index c90661c4e..5b531912a 100644 --- a/core/dropdowndiv.ts +++ b/core/dropdowndiv.ts @@ -53,7 +53,7 @@ export const ANIMATION_TIME = 0.25; let animateOutTimer: ReturnType | null = null; /** Callback for when the drop-down is hidden. */ -let onHide: Function | null = null; +let onHide: (() => void) | null = null; /** A class name representing the current owner's workspace renderer. */ let renderedClassName = ''; @@ -202,7 +202,7 @@ export function setColour(backgroundColour: string, borderColour: string) { export function showPositionedByBlock( field: Field, block: BlockSvg, - opt_onHide?: Function, + opt_onHide?: () => void, opt_secondaryYOffset?: number, ): boolean { return showPositionedByRect( @@ -226,7 +226,7 @@ export function showPositionedByBlock( */ export function showPositionedByField( field: Field, - opt_onHide?: Function, + opt_onHide?: () => void, opt_secondaryYOffset?: number, ): boolean { positionToField = true; @@ -278,7 +278,7 @@ function getScaledBboxOfField(field: Field): Rect { function showPositionedByRect( bBox: Rect, field: Field, - opt_onHide?: Function, + opt_onHide?: () => void, opt_secondaryYOffset?: number, ): boolean { // If we can fit it, render below the block. @@ -334,7 +334,7 @@ export function show( primaryY: number, secondaryX: number, secondaryY: number, - opt_onHide?: Function, + opt_onHide?: () => void, ): boolean { owner = newOwner as Field; onHide = opt_onHide || null; diff --git a/core/events/utils.ts b/core/events/utils.ts index 2d434594b..0bb69980e 100644 --- a/core/events/utils.ts +++ b/core/events/utils.ts @@ -256,7 +256,7 @@ function fireInternal(event: Abstract) { requestAnimationFrame(() => { setTimeout(fireNow, 0); }); - } catch (e) { + } catch { // Otherwise we just want to delay so events can be coallesced. // requestAnimationFrame will error triggering this. setTimeout(fireNow, 0); diff --git a/core/extensions.ts b/core/extensions.ts index aa9a6a186..0957b7f86 100644 --- a/core/extensions.ts +++ b/core/extensions.ts @@ -27,7 +27,10 @@ export const TEST_ONLY = {allExtensions}; * @throws {Error} if the extension name is empty, the extension is already * registered, or extensionFn is not a function. */ -export function register(name: string, initFn: Function) { +export function register( + name: string, + initFn: (this: T) => void, +) { if (typeof name !== 'string' || name.trim() === '') { throw Error('Error: Invalid extension name "' + name + '"'); } diff --git a/core/field.ts b/core/field.ts index 51e006823..777b19f55 100644 --- a/core/field.ts +++ b/core/field.ts @@ -1080,7 +1080,7 @@ export abstract class Field setValue(newValue: AnyDuringMigration, fireChangeEvent = true) { const doLogging = false; if (newValue === null) { - doLogging && console.log('null, return'); + if (doLogging) console.log('null, return'); // Not a valid value to check. return; } @@ -1092,7 +1092,7 @@ export abstract class Field fireChangeEvent, ); if (classValue instanceof Error) { - doLogging && console.log('invalid class validation, return'); + if (doLogging) console.log('invalid class validation, return'); return; } @@ -1103,19 +1103,19 @@ export abstract class Field fireChangeEvent, ); if (localValue instanceof Error) { - doLogging && console.log('invalid local validation, return'); + if (doLogging) console.log('invalid local validation, return'); return; } const source = this.sourceBlock_; if (source && source.disposed) { - doLogging && console.log('source disposed, return'); + if (doLogging) console.log('source disposed, return'); return; } const oldValue = this.getValue(); if (oldValue === localValue) { - doLogging && console.log('same, doValueUpdate_, return'); + if (doLogging) console.log('same, doValueUpdate_, return'); this.doValueUpdate_(localValue); return; } @@ -1135,7 +1135,7 @@ export abstract class Field if (this.isDirty_) { this.forceRerender(); } - doLogging && console.log(this.value_); + if (doLogging) console.log(this.value_); } /** diff --git a/core/flyout_base.ts b/core/flyout_base.ts index 27ad0abf5..e81df4279 100644 --- a/core/flyout_base.ts +++ b/core/flyout_base.ts @@ -1070,7 +1070,7 @@ export abstract class Flyout * @param block The flyout block to copy. * @returns Function to call when block is clicked. */ - private blockMouseDown(block: BlockSvg): Function { + private blockMouseDown(block: BlockSvg) { return (e: PointerEvent) => { const gesture = this.targetWorkspace.getGesture(e); if (gesture) { diff --git a/core/flyout_metrics_manager.ts b/core/flyout_metrics_manager.ts index fadc5deb5..a291f4c3b 100644 --- a/core/flyout_metrics_manager.ts +++ b/core/flyout_metrics_manager.ts @@ -44,7 +44,7 @@ export class FlyoutMetricsManager extends MetricsManager { let blockBoundingBox; try { blockBoundingBox = this.workspace_.getCanvas().getBBox(); - } catch (e) { + } catch { // Firefox has trouble with hidden elements (Bug 528969). // 2021 Update: It looks like this was fixed around Firefox 77 released in // 2020. diff --git a/core/insertion_marker_manager.ts b/core/insertion_marker_manager.ts index 376297f10..6f27eada7 100644 --- a/core/insertion_marker_manager.ts +++ b/core/insertion_marker_manager.ts @@ -529,7 +529,7 @@ export class InsertionMarkerManager { local.getSourceBlock(), local, ); - } catch (e) { + } catch { // It's possible that the number of connections on the local block has // changed since the insertion marker was originally created. Let's // recreate the insertion marker and try again. In theory we could diff --git a/core/interfaces/i_comment_icon.ts b/core/interfaces/i_comment_icon.ts index 09b071110..47c46daaf 100644 --- a/core/interfaces/i_comment_icon.ts +++ b/core/interfaces/i_comment_icon.ts @@ -26,7 +26,7 @@ export interface ICommentIcon extends IIcon, IHasBubble, ISerializable { } /** Checks whether the given object is an ICommentIcon. */ -export function isCommentIcon(obj: Object): obj is ICommentIcon { +export function isCommentIcon(obj: object): obj is ICommentIcon { return ( isIcon(obj) && hasBubble(obj) && diff --git a/core/interfaces/i_legacy_procedure_blocks.ts b/core/interfaces/i_legacy_procedure_blocks.ts index 3bd7e19bf..d74eaec22 100644 --- a/core/interfaces/i_legacy_procedure_blocks.ts +++ b/core/interfaces/i_legacy_procedure_blocks.ts @@ -28,7 +28,7 @@ export interface LegacyProcedureDefBlock { /** @internal */ export function isLegacyProcedureDefBlock( - block: Object, + block: object, ): block is LegacyProcedureDefBlock { return (block as any).getProcedureDef !== undefined; } @@ -41,7 +41,7 @@ export interface LegacyProcedureCallBlock { /** @internal */ export function isLegacyProcedureCallBlock( - block: Object, + block: object, ): block is LegacyProcedureCallBlock { return ( (block as any).getProcedureCall !== undefined && diff --git a/core/interfaces/i_selectable.ts b/core/interfaces/i_selectable.ts index 7cf9ad98c..972b0adb1 100644 --- a/core/interfaces/i_selectable.ts +++ b/core/interfaces/i_selectable.ts @@ -24,7 +24,7 @@ export interface ISelectable { } /** Checks whether the given object is an ISelectable. */ -export function isSelectable(obj: Object): obj is ISelectable { +export function isSelectable(obj: object): obj is ISelectable { return ( typeof (obj as any).id === 'string' && (obj as any).workspace !== undefined && diff --git a/core/interfaces/i_serializer.ts b/core/interfaces/i_serializer.ts index 29c257915..a33e6b225 100644 --- a/core/interfaces/i_serializer.ts +++ b/core/interfaces/i_serializer.ts @@ -31,7 +31,7 @@ export interface ISerializer { * @returns A JS object containing the system's state, or null if there is no * state to record. */ - save(workspace: Workspace): Object | null; + save(workspace: Workspace): object | null; /* eslint-enable valid-jsdoc */ /** @@ -42,7 +42,7 @@ export interface ISerializer { * @param workspace The workspace the system to deserialize is associated * with. */ - load(state: Object, workspace: Workspace): void; + load(state: object, workspace: Workspace): void; /** * Clears the state of the plugin or system. diff --git a/core/menuitem.ts b/core/menuitem.ts index aad914b68..e9e7dc0db 100644 --- a/core/menuitem.ts +++ b/core/menuitem.ts @@ -41,7 +41,7 @@ export class MenuItem { private highlight = false; /** Bound function to call when this menu item is clicked. */ - private actionHandler: Function | null = null; + private actionHandler: ((obj: this) => void) | null = null; /** * @param content Text caption to display as the content of the item, or a diff --git a/core/registry.ts b/core/registry.ts index d46c36f48..39bb83b87 100644 --- a/core/registry.ts +++ b/core/registry.ts @@ -193,7 +193,7 @@ export function register( * @param registryItem A class or object that we are checking for the required * properties. */ -function validate(type: string, registryItem: Function | AnyDuringMigration) { +function validate(type: string, registryItem: AnyDuringMigration) { switch (type) { case String(Type.FIELD): if (typeof registryItem.fromJson !== 'function') { diff --git a/core/rendered_connection.ts b/core/rendered_connection.ts index 5aa6f7f75..27c532839 100644 --- a/core/rendered_connection.ts +++ b/core/rendered_connection.ts @@ -146,7 +146,7 @@ export class RenderedConnection extends Connection { } // Raise it to the top for extra visibility. const selected = common.getSelected() == rootBlock; - selected || rootBlock.addSelect(); + if (!selected) rootBlock.addSelect(); let dx = staticConnection.x + config.snapRadius + @@ -169,7 +169,7 @@ export class RenderedConnection extends Connection { this.x; } rootBlock.moveBy(dx, dy, ['bump']); - selected || rootBlock.removeSelect(); + if (!selected) rootBlock.removeSelect(); } /** @@ -389,9 +389,10 @@ export class RenderedConnection extends Connection { if (block.isCollapsed()) { // This block should only be partially revealed since it is collapsed. connections = []; - block.outputConnection && connections.push(block.outputConnection); - block.nextConnection && connections.push(block.nextConnection); - block.previousConnection && connections.push(block.previousConnection); + if (block.outputConnection) connections.push(block.outputConnection); + if (block.nextConnection) connections.push(block.nextConnection); + if (block.previousConnection) + connections.push(block.previousConnection); } else { // Show all connections of this block. connections = block.getConnections_(true); diff --git a/core/renderers/common/block_rendering.ts b/core/renderers/common/block_rendering.ts index 7c87a8928..741e2367d 100644 --- a/core/renderers/common/block_rendering.ts +++ b/core/renderers/common/block_rendering.ts @@ -45,7 +45,10 @@ import {Renderer} from './renderer.js'; * @param rendererClass The new renderer class to register. * @throws {Error} if a renderer with the same name has already been registered. */ -export function register(name: string, rendererClass: Function) { +export function register( + name: string, + rendererClass: new (name: string) => Renderer, +) { registry.register(registry.Type.RENDERER, name, rendererClass); } diff --git a/core/renderers/common/marker_svg.ts b/core/renderers/common/marker_svg.ts index 995783576..b2005012f 100644 --- a/core/renderers/common/marker_svg.ts +++ b/core/renderers/common/marker_svg.ts @@ -176,9 +176,11 @@ export class MarkerSvg { // Ensures the marker will be visible immediately after the move. const animate = this.currentMarkerSvg!.childNodes[0]; - if (animate !== undefined) { - (animate as SVGAnimationElement).beginElement && - (animate as SVGAnimationElement).beginElement(); + if ( + animate !== undefined && + (animate as SVGAnimationElement).beginElement + ) { + (animate as SVGAnimationElement).beginElement(); } } diff --git a/core/renderers/measurables/types.ts b/core/renderers/measurables/types.ts index a378fc18e..a145b1563 100644 --- a/core/renderers/measurables/types.ts +++ b/core/renderers/measurables/types.ts @@ -13,6 +13,9 @@ import type {Row} from './row.js'; * Types of rendering elements. */ class TypesContainer { + // This class is very non-idiomatic for typescript, so we have to use + // the Function type to make it happy. + // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type [index: string]: number | Function; NONE = 0; // None diff --git a/core/serialization/procedures.ts b/core/serialization/procedures.ts index 55d720604..c51a38c82 100644 --- a/core/serialization/procedures.ts +++ b/core/serialization/procedures.ts @@ -44,7 +44,7 @@ interface ProcedureModelConstructor { * @param workspace The workspace to load the procedure model into. * @returns The constructed procedure model. */ - loadState(state: Object, workspace: Workspace): ProcedureModel; + loadState(state: object, workspace: Workspace): ProcedureModel; } /** @@ -64,7 +64,7 @@ interface ParameterModelConstructor { * @param workspace The workspace to load the parameter model into. * @returns The constructed parameter model. */ - loadState(state: Object, workspace: Workspace): ParameterModel; + loadState(state: object, workspace: Workspace): ParameterModel; } /** diff --git a/core/toolbox/category.ts b/core/toolbox/category.ts index 6ff159b0b..9fc2f8a6f 100644 --- a/core/toolbox/category.ts +++ b/core/toolbox/category.ts @@ -248,9 +248,11 @@ export class ToolboxCategory const nestedPadding = `${ ToolboxCategory.nestedPadding * this.getLevel() }px`; - this.workspace_.RTL - ? (rowDiv.style.paddingRight = nestedPadding) - : (rowDiv.style.paddingLeft = nestedPadding); + if (this.workspace_.RTL) { + rowDiv.style.paddingRight = nestedPadding; + } else { + rowDiv.style.paddingLeft = nestedPadding; + } return rowDiv; } @@ -564,9 +566,11 @@ export class ToolboxCategory setDisabled(isDisabled: boolean) { this.isDisabled_ = isDisabled; this.getDiv()!.setAttribute('disabled', `${isDisabled}`); - isDisabled - ? this.getDiv()!.setAttribute('disabled', 'true') - : this.getDiv()!.removeAttribute('disabled'); + if (isDisabled) { + this.getDiv()!.setAttribute('disabled', 'true'); + } else { + this.getDiv()!.removeAttribute('disabled'); + } } /** diff --git a/core/tooltip.ts b/core/tooltip.ts index 0478b91fd..bf379f291 100644 --- a/core/tooltip.ts +++ b/core/tooltip.ts @@ -19,7 +19,7 @@ import * as blocklyString from './utils/string.js'; export type TipInfo = | string | {tooltip: AnyDuringMigration} - | (() => TipInfo | string | Function); + | (() => TipInfo | string); /** * A function that renders custom tooltip UI. diff --git a/core/utils/dom.ts b/core/utils/dom.ts index e318e7e91..309cd3fae 100644 --- a/core/utils/dom.ts +++ b/core/utils/dom.ts @@ -211,7 +211,7 @@ export function getTextWidth(textElement: SVGTextElement): number { // Attempt to compute fetch the width of the SVG text element. try { width = textElement.getComputedTextLength(); - } catch (e) { + } catch { // In other cases where we fail to get the computed text. Instead, use an // approximation and do not cache the result. At some later point in time // when the block is inserted into the visible DOM, this method will be diff --git a/core/widgetdiv.ts b/core/widgetdiv.ts index 9f58bb1c5..b28ec6367 100644 --- a/core/widgetdiv.ts +++ b/core/widgetdiv.ts @@ -126,7 +126,7 @@ export function hide() { div.style.display = 'none'; div.style.left = ''; div.style.top = ''; - dispose && dispose(); + if (dispose) dispose(); dispose = null; div.textContent = ''; diff --git a/core/workspace.ts b/core/workspace.ts index 16f32611b..d092cbc82 100644 --- a/core/workspace.ts +++ b/core/workspace.ts @@ -102,7 +102,7 @@ export class Workspace implements IASTNodeLocation { private readonly topBlocks: Block[] = []; private readonly topComments: WorkspaceComment[] = []; private readonly commentDB = new Map(); - private readonly listeners: Function[] = []; + private readonly listeners: ((e: Abstract) => void)[] = []; protected undoStack_: Abstract[] = []; protected redoStack_: Abstract[] = []; private readonly blockDB = new Map(); @@ -679,7 +679,7 @@ export class Workspace implements IASTNodeLocation { * @param func Function to call. * @returns Obsolete return value, ignore. */ - addChangeListener(func: (e: Abstract) => void): Function { + addChangeListener(func: (e: Abstract) => void): (e: Abstract) => void { this.listeners.push(func); return func; } @@ -689,7 +689,7 @@ export class Workspace implements IASTNodeLocation { * * @param func Function to stop calling. */ - removeChangeListener(func: Function) { + removeChangeListener(func: (e: Abstract) => void) { arrayUtils.removeElem(this.listeners, func); } diff --git a/core/workspace_audio.ts b/core/workspace_audio.ts index c2ab93222..c8d21080c 100644 --- a/core/workspace_audio.ts +++ b/core/workspace_audio.ts @@ -64,7 +64,7 @@ export class WorkspaceAudio { let audioTest; try { audioTest = new globalThis['Audio'](); - } catch (e) { + } catch { // No browser support for Audio. // IE can throw an error even if the Audio object exists. return; diff --git a/core/workspace_svg.ts b/core/workspace_svg.ts index aad748105..82a08b237 100644 --- a/core/workspace_svg.ts +++ b/core/workspace_svg.ts @@ -817,7 +817,7 @@ export class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg { this.options, ); - CursorClass && this.markerManager.setCursor(new CursorClass()); + if (CursorClass) this.markerManager.setCursor(new CursorClass()); this.renderer.createDom(this.svgGroup_, this.getTheme()); return this.svgGroup_; diff --git a/package-lock.json b/package-lock.json index 02f14699d..227a27031 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,8 +20,8 @@ "@hyperjump/json-schema": "^1.5.0", "@microsoft/api-documenter": "^7.22.4", "@microsoft/api-extractor": "^7.29.5", - "@typescript-eslint/eslint-plugin": "^7.3.1", - "@typescript-eslint/parser": "^7.16.1", + "@typescript-eslint/eslint-plugin": "^8.1.0", + "@typescript-eslint/parser": "^8.1.0", "async-done": "^2.0.0", "chai": "^5.1.1", "concurrently": "^8.0.1", @@ -1301,31 +1301,32 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.17.0.tgz", - "integrity": "sha512-pyiDhEuLM3PuANxH7uNYan1AaFs5XE0zw1hq69JBvGvE7gSuEoQl1ydtEe/XQeoC3GQxLXyOVa5kNOATgM638A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.1.0.tgz", + "integrity": "sha512-LlNBaHFCEBPHyD4pZXb35mzjGkuGKXU5eeCA1SxvHfiRES0E82dOounfVpL4DCqYvJEKab0bZIA0gCRpdLKkCw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.17.0", - "@typescript-eslint/type-utils": "7.17.0", - "@typescript-eslint/utils": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.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", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1333,74 +1334,28 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", - "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", - "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", - "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.17.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.1.0.tgz", + "integrity": "sha512-U7iTAtGgJk6DPX9wIWPPOlt1gO57097G06gIcl0N0EEnNw8RGD62c+2/DiP/zL7KrkqnnqF7gtFGR7YgzPllTA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.17.0", - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/typescript-estree": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", + "@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", "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1408,174 +1363,66 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", - "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", - "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", + "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", "dev": true, + "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", - "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.1.0.tgz", + "integrity": "sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "@typescript-eslint/types": "8.1.0", + "@typescript-eslint/visitor-keys": "8.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", - "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.17.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", + "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.17.0.tgz", - "integrity": "sha512-XD3aaBt+orgkM/7Cei0XNEm1vwUxQ958AOLALzPlbPqb8C1G8PZK85tND7Jpe69Wualri81PLU+Zc48GVKIMMA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.1.0.tgz", + "integrity": "sha512-oLYvTxljVvsMnldfl6jIKxTaU7ok7km0KDrwOt1RHYu6nxlhN3TIx8k5Q52L6wR33nOwDgM7VwW1fT1qMNfFIA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.17.0", - "@typescript-eslint/utils": "7.17.0", + "@typescript-eslint/typescript-estree": "8.1.0", + "@typescript-eslint/utils": "8.1.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", - "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", - "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -1587,59 +1434,6 @@ } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", - "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.17.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/types": { "version": "7.16.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", @@ -1654,66 +1448,15 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/utils": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.17.0.tgz", - "integrity": "sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.1.0.tgz", + "integrity": "sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.17.0", - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/typescript-estree": "7.17.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", - "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", - "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", - "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.17.0", - "@typescript-eslint/visitor-keys": "7.17.0", + "@typescript-eslint/types": "8.1.0", + "@typescript-eslint/visitor-keys": "8.1.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -1722,7 +1465,7 @@ "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -1734,37 +1477,36 @@ } } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", - "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/types": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", + "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.17.0", - "eslint-visitor-keys": "^3.4.3" - }, + "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/utils/node_modules/brace-expansion": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/minimatch": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -1775,11 +1517,12 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -1787,6 +1530,75 @@ "node": ">=10" } }, + "node_modules/@typescript-eslint/utils": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.1.0.tgz", + "integrity": "sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", + "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz", + "integrity": "sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.1.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz", + "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", @@ -2434,6 +2246,7 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3659,6 +3472,7 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -3666,15 +3480,6 @@ "node": ">=8" } }, - "node_modules/dir-glob/node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -4300,6 +4105,7 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -5044,6 +4850,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -6794,6 +6601,7 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -7604,6 +7412,16 @@ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/pathval": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", @@ -8412,6 +8230,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } diff --git a/package.json b/package.json index 38e620200..3fc0a69e1 100644 --- a/package.json +++ b/package.json @@ -107,8 +107,8 @@ "@hyperjump/json-schema": "^1.5.0", "@microsoft/api-documenter": "^7.22.4", "@microsoft/api-extractor": "^7.29.5", - "@typescript-eslint/eslint-plugin": "^7.3.1", - "@typescript-eslint/parser": "^7.16.1", + "@typescript-eslint/eslint-plugin": "^8.1.0", + "@typescript-eslint/parser": "^8.1.0", "async-done": "^2.0.0", "chai": "^5.1.1", "concurrently": "^8.0.1", diff --git a/tests/typescript/src/generators.ts b/tests/typescript/src/generators.ts index fd79a3a00..61506e11a 100644 --- a/tests/typescript/src/generators.ts +++ b/tests/typescript/src/generators.ts @@ -4,6 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ +/* eslint-disable */ + import * as Blockly from 'blockly-test/core'; import {JavascriptGenerator} from 'blockly-test/javascript'; import {PhpGenerator, phpGenerator, Order} from 'blockly-test/php';