diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 79638850d5..f0541587c4 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -2,3 +2,7 @@ 71183da18ae6b0b6b2e8f0c52ea9976232e54f41 94037fe9c429839f0508ddcd287718b659276e3b f51bf4d8907307ace083a0decb34668176c7fad3 + +# lint fixes +8bff3b8ad57516e9816278b77ff5e0fffafd85ca +aeec38a6ef56bb534ff8bc968b95107ff54959cc diff --git a/.github/actions/ci-checks/action.yml b/.github/actions/ci-checks/action.yml index 9629cac607..4f79258554 100644 --- a/.github/actions/ci-checks/action.yml +++ b/.github/actions/ci-checks/action.yml @@ -6,6 +6,10 @@ runs: run: pnpm build shell: bash + - name: ESLint + run: pnpm lint --no-cache + shell: bash + - name: Typecheck run: pnpm typecheck shell: bash diff --git a/.gitignore b/.gitignore index 8032a311c2..119d250408 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# eslint +.eslintcache + # Logs logs *.log diff --git a/babel.config.js b/babel.config.js index e329d14836..6850aae2fb 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,6 +1,3 @@ -const { NODE_ENV } = process.env; -const isTest = NODE_ENV === 'test'; - module.exports = { assumptions: { constantReexports: true, // only matters for tests (since only there we transpile to CJS using Babel), it makes debugging easier diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000000..5ec845d834 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,89 @@ +// @ts-check +import globals from 'globals'; +import js from '@eslint/js'; +import ts from 'typescript-eslint'; + +export default ts.config( + // plugins + js.configs.recommended, + ...ts.configs.recommendedTypeChecked, + + // global ignore + { + ignores: [ + '{docs,examples,templates}/', + '**/dist', + '**/*.test.*', + 'scripts/jest-utils/' + ] + }, + + // global language and linter options + { + languageOptions: { + globals: { ...globals.browser, ...globals.node }, + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname + } + }, + linterOptions: { + reportUnusedDisableDirectives: 'error' + } + }, + + // global rule overrides + { + rules: { + '@typescript-eslint/no-empty-object-type': [ + 'error', + { + allowInterfaces: 'with-single-extends', + allowObjectTypes: 'always' + } + ], + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + args: 'all', + argsIgnorePattern: '^_', + caughtErrors: 'all', + caughtErrorsIgnorePattern: '^_', + destructuredArrayIgnorePattern: '^_', + varsIgnorePattern: '^_', + ignoreRestSiblings: true + } + ], + '@typescript-eslint/unbound-method': 'off', + 'prefer-const': [ + 'error', + { + destructuring: 'all' + } + ] + } + }, + + // disable type-checking for js files + { + files: ['**/*.{js,cjs,mjs}'], + ...ts.configs.disableTypeChecked + }, + + // js-specific config and rules + { + files: ['**/*.{js,cjs}'], + languageOptions: { + sourceType: 'commonjs' + }, + rules: { + '@typescript-eslint/no-require-imports': 'off' + } + } +); diff --git a/package.json b/package.json index a582a93b82..17adc4d2b3 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "postinstall": "manypkg check && preconstruct dev", "build": "preconstruct build", "fix": "manypkg fix", + "lint": "eslint --cache --quiet", "typecheck": "tsc", "test": "jest", "test:core": "jest packages/core", @@ -52,6 +53,7 @@ "@babel/preset-typescript": "^7.23.3", "@changesets/changelog-github": "^0.4.8", "@changesets/cli": "^2.26.2", + "@eslint/js": "^9.7.0", "@jest/types": "^29.6.3", "@manypkg/cli": "^0.21.4", "@preconstruct/cli": "^2.8.1", @@ -62,6 +64,8 @@ "@vue/vue3-jest": "^29.2.6", "babel-jest": "^29.7.0", "babel-preset-solid": "^1.8.4", + "eslint": "^9.7.0", + "globals": "^15.8.0", "husky": "^3.1.0", "jest": "^29.7.0", "jest-config": "^29.7.0", @@ -76,6 +80,7 @@ "svelte-jester": "^2.3.2", "synckit": "^0.8.5", "typescript": "^5.6.2", + "typescript-eslint": "^8.0.1", "vue": "^3.0.11" }, "husky": { diff --git a/packages/core/src/SimulatedClock.ts b/packages/core/src/SimulatedClock.ts index efe864eebf..150dc0358d 100644 --- a/packages/core/src/SimulatedClock.ts +++ b/packages/core/src/SimulatedClock.ts @@ -1,5 +1,6 @@ import { Clock } from './system.ts'; +// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging export interface SimulatedClock extends Clock { start(speed: number): void; increment(ms: number): void; @@ -11,6 +12,7 @@ interface SimulatedTimeout { timeout: number; fn: (...args: any[]) => void; } +// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging export class SimulatedClock implements SimulatedClock { private timeouts: Map = new Map(); private _now: number = 0; diff --git a/packages/core/src/State.ts b/packages/core/src/State.ts index c883a1ab2f..e75b394cc4 100644 --- a/packages/core/src/State.ts +++ b/packages/core/src/State.ts @@ -19,8 +19,7 @@ import type { MetaObject, StateSchema, StateId, - SnapshotStatus, - SnapshotFrom + SnapshotStatus } from './types.ts'; import { matchesState } from './utils.ts'; @@ -37,10 +36,7 @@ type ToTestStateValue = >; }; -export function isMachineSnapshot< - TContext extends MachineContext, - TEvent extends EventObject ->(value: unknown): value is AnyMachineSnapshot { +export function isMachineSnapshot(value: unknown): value is AnyMachineSnapshot { return ( !!value && typeof value === 'object' && diff --git a/packages/core/src/StateMachine.ts b/packages/core/src/StateMachine.ts index 490413207e..c4ce523bfb 100644 --- a/packages/core/src/StateMachine.ts +++ b/packages/core/src/StateMachine.ts @@ -95,7 +95,7 @@ export class StateMachine< public implementations: MachineImplementationsSimplified; /** @internal */ - public __xstatenode: true = true; + public __xstatenode = true as const; /** @internal */ public idMap: Map> = new Map(); @@ -559,8 +559,7 @@ export class StateMachine< > = (snapshot as any).children; Object.keys(snapshotChildren).forEach((actorId) => { - const actorData = - snapshotChildren[actorId as keyof typeof snapshotChildren]; + const actorData = snapshotChildren[actorId]; const childState = actorData.snapshot; const src = actorData.src; @@ -603,7 +602,7 @@ export class StateMachine< TConfig >; - let seen = new Set(); + const seen = new Set(); function reviveContext( contextPart: Record, @@ -613,7 +612,7 @@ export class StateMachine< return; } seen.add(contextPart); - for (let key in contextPart) { + for (const key in contextPart) { const value: unknown = contextPart[key]; if (value && typeof value === 'object') { diff --git a/packages/core/src/StateNode.ts b/packages/core/src/StateNode.ts index 375551fca9..039f32db4e 100644 --- a/packages/core/src/StateNode.ts +++ b/packages/core/src/StateNode.ts @@ -186,7 +186,7 @@ export class StateNode< (stateConfig: AnyStateNodeConfig, key) => { const stateNode = new StateNode(stateConfig, { _parent: this, - _key: key as string, + _key: key, _machine: this.machine }); return stateNode; @@ -247,9 +247,9 @@ export class StateNode< eventType: null as any, reenter: false, toJSON: () => ({ - target: this.initial!.target!.map((t) => `#${t.id}`), + target: this.initial.target.map((t) => `#${t.id}`), source: `#${this.id}`, - actions: this.initial!.actions.map(toSerializableAction), + actions: this.initial.actions.map(toSerializableAction), eventType: null as any }) } diff --git a/packages/core/src/actions/assign.ts b/packages/core/src/actions/assign.ts index 8256bdf916..076237df0c 100644 --- a/packages/core/src/actions/assign.ts +++ b/packages/core/src/actions/assign.ts @@ -166,8 +166,8 @@ export function assign< } function assign( - args: ActionArgs, - params: TParams + _args: ActionArgs, + _params: TParams ) { if (isDevelopment) { throw new Error(`This isn't supposed to be called`); diff --git a/packages/core/src/actions/cancel.ts b/packages/core/src/actions/cancel.ts index 443bef7b9e..96d36993ad 100644 --- a/packages/core/src/actions/cancel.ts +++ b/packages/core/src/actions/cancel.ts @@ -1,7 +1,6 @@ import isDevelopment from '#is-development'; import { AnyActorScope, - AnyActor, AnyMachineSnapshot, EventObject, MachineContext, @@ -89,8 +88,8 @@ export function cancel< sendId: ResolvableSendId ): CancelAction { function cancel( - args: ActionArgs, - params: TParams + _args: ActionArgs, + _params: TParams ) { if (isDevelopment) { throw new Error(`This isn't supposed to be called`); diff --git a/packages/core/src/actions/emit.ts b/packages/core/src/actions/emit.ts index c6de6ab8a8..94d27bf7be 100644 --- a/packages/core/src/actions/emit.ts +++ b/packages/core/src/actions/emit.ts @@ -32,11 +32,6 @@ function resolveEmit( >; } ) { - if (isDevelopment && typeof eventOrExpr === 'string') { - throw new Error( - `Only event objects may be used with emit; use emit({ type: "${eventOrExpr}" }) instead` - ); - } const resolvedEvent = typeof eventOrExpr === 'function' ? eventOrExpr(args, actionParams) @@ -137,8 +132,8 @@ export function emit< } function emit( - args: ActionArgs, - params: TParams + _args: ActionArgs, + _params: TParams ) { if (isDevelopment) { throw new Error(`This isn't supposed to be called`); diff --git a/packages/core/src/actions/enqueueActions.ts b/packages/core/src/actions/enqueueActions.ts index 3ff3b60d75..a1d2c83993 100644 --- a/packages/core/src/actions/enqueueActions.ts +++ b/packages/core/src/actions/enqueueActions.ts @@ -311,8 +311,8 @@ export function enqueueActions< TEmitted > { function enqueueActions( - args: ActionArgs, - params: unknown + _args: ActionArgs, + _params: unknown ) { if (isDevelopment) { throw new Error(`This isn't supposed to be called`); diff --git a/packages/core/src/actions/log.ts b/packages/core/src/actions/log.ts index 2af9492fb9..a4552a2e49 100644 --- a/packages/core/src/actions/log.ts +++ b/packages/core/src/actions/log.ts @@ -81,8 +81,8 @@ export function log< label?: string ): LogAction { function log( - args: ActionArgs, - params: TParams + _args: ActionArgs, + _params: TParams ) { if (isDevelopment) { throw new Error(`This isn't supposed to be called`); diff --git a/packages/core/src/actions/raise.ts b/packages/core/src/actions/raise.ts index e1f964c4d6..0afd349a08 100644 --- a/packages/core/src/actions/raise.ts +++ b/packages/core/src/actions/raise.ts @@ -52,6 +52,7 @@ function resolveRaise( if (typeof eventOrExpr === 'string') { throw new Error( + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions `Only event objects may be used with raise; use raise({ type: "${eventOrExpr}" }) instead` ); } @@ -149,8 +150,8 @@ export function raise< } function raise( - args: ActionArgs, - params: TParams + _args: ActionArgs, + _params: TParams ) { if (isDevelopment) { throw new Error(`This isn't supposed to be called`); diff --git a/packages/core/src/actions/send.ts b/packages/core/src/actions/send.ts index a5adc9e667..433cefeb57 100644 --- a/packages/core/src/actions/send.ts +++ b/packages/core/src/actions/send.ts @@ -68,6 +68,7 @@ function resolveSendTo( if (typeof eventOrExpr === 'string') { throw new Error( + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions `Only event objects may be used with sendTo; use sendTo({ type: "${eventOrExpr}" }) instead` ); } @@ -92,9 +93,12 @@ function resolveSendTo( let targetActorRef: AnyActorRef | string | undefined; if (typeof resolvedTarget === 'string') { + // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison if (resolvedTarget === SpecialTargets.Parent) { targetActorRef = actorScope.self._parent; - } else if (resolvedTarget === SpecialTargets.Internal) { + } + // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison + else if (resolvedTarget === SpecialTargets.Internal) { targetActorRef = actorScope.self; } else if (resolvedTarget.startsWith('#_')) { // SCXML compatibility: https://www.w3.org/TR/scxml/#SCXMLEventProcessor @@ -162,7 +166,7 @@ function executeSendTo( actorScope.self, // at this point, in a deferred task, it should already be mutated by retryResolveSendTo // if it initially started as a string - to as Exclude, + to, event.type === XSTATE_ERROR ? createErrorActorEvent(actorScope.self.id, (event as any).data) : event @@ -242,8 +246,8 @@ export function sendTo< } function sendTo( - args: ActionArgs, - params: TParams + _args: ActionArgs, + _params: TParams ) { if (isDevelopment) { throw new Error(`This isn't supposed to be called`); diff --git a/packages/core/src/actions/spawnChild.ts b/packages/core/src/actions/spawnChild.ts index ad93e2ce3b..d2b7eaf78e 100644 --- a/packages/core/src/actions/spawnChild.ts +++ b/packages/core/src/actions/spawnChild.ts @@ -1,7 +1,6 @@ import isDevelopment from '#is-development'; import { cloneMachineSnapshot } from '../State.ts'; import { ProcessingStatus, createActor } from '../createActor.ts'; -import { executingCustomAction } from '../stateUtils.ts'; import { ActionArgs, ActionFunction, @@ -77,6 +76,7 @@ function resolveSpawn( if (isDevelopment && !actorRef) { console.warn( + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions,@typescript-eslint/no-base-to-string `Actor type '${src}' not found in machine '${actorScope.id}'.` ); } @@ -96,7 +96,7 @@ function resolveSpawn( function executeSpawn( actorScope: AnyActorScope, - { id, actorRef }: { id: string; actorRef: AnyActorRef } + { actorRef }: { id: string; actorRef: AnyActorRef } ) { if (!actorRef) { return; @@ -207,8 +207,8 @@ export function spawnChild< never > { function spawnChild( - args: ActionArgs, - params: TParams + _args: ActionArgs, + _params: TParams ) { if (isDevelopment) { throw new Error(`This isn't supposed to be called`); diff --git a/packages/core/src/actions/stopChild.ts b/packages/core/src/actions/stopChild.ts index cc3c3e7d87..18b7f48c31 100644 --- a/packages/core/src/actions/stopChild.ts +++ b/packages/core/src/actions/stopChild.ts @@ -3,7 +3,6 @@ import { cloneMachineSnapshot } from '../State.ts'; import { ProcessingStatus } from '../createActor.ts'; import { ActionArgs, - ActorRef, AnyActorRef, AnyActorScope, AnyMachineSnapshot, @@ -102,8 +101,8 @@ export function stopChild< actorRef: ResolvableActorRef ): StopAction { function stop( - args: ActionArgs, - params: TParams + _args: ActionArgs, + _params: TParams ) { if (isDevelopment) { throw new Error(`This isn't supposed to be called`); diff --git a/packages/core/src/actors/transition.ts b/packages/core/src/actors/transition.ts index 4c92b2c168..0706aef460 100644 --- a/packages/core/src/actors/transition.ts +++ b/packages/core/src/actors/transition.ts @@ -198,7 +198,7 @@ export function fromTransition< ...snapshot, context: transition( snapshot.context, - event as TEvent, + event, actorScope as any ) }; diff --git a/packages/core/src/createActor.ts b/packages/core/src/createActor.ts index 9ebfb8592c..ebbc9a4ea1 100644 --- a/packages/core/src/createActor.ts +++ b/packages/core/src/createActor.ts @@ -196,6 +196,7 @@ export class Actor // Ensure that the send method is bound to this Actor instance // if destructured this.send = this.send.bind(this); + this.system._sendInspectionEvent({ type: '@xstate.actor', actorRef: this @@ -423,7 +424,8 @@ export class Actor public on['type'] | '*'>( type: TType, handler: ( - emitted: EmittedFrom & (TType extends '*' ? {} : { type: TType }) + emitted: EmittedFrom & + (TType extends '*' ? unknown : { type: TType }) ) => void ): Subscription { let listeners = this.eventListeners.get(type); @@ -436,7 +438,7 @@ export class Actor return { unsubscribe: () => { - listeners!.delete(wrappedHandler); + listeners.delete(wrappedHandler); } }; } diff --git a/packages/core/src/createMachine.ts b/packages/core/src/createMachine.ts index be03e55c8f..cacd45ff5f 100644 --- a/packages/core/src/createMachine.ts +++ b/packages/core/src/createMachine.ts @@ -6,7 +6,6 @@ import { AnyEventObject, Cast, InternalMachineImplementations, - IsNever, MachineConfig, MachineContext, MachineTypes, @@ -30,37 +29,6 @@ type _GroupTestValues = ? [never, never] : [TTestValue, never] : [never, TTestValue]; -type GroupTestValues = { - leafCandidates: _GroupTestValues[0]; - nonLeaf: _GroupTestValues[1]; -}; - -type FilterLeafValues< - TLeafCandidate extends string, - TNonLeaf extends { [k: string]: TestValue | undefined } -> = IsNever extends true - ? TLeafCandidate - : TLeafCandidate extends string - ? TLeafCandidate extends keyof TNonLeaf - ? never - : TLeafCandidate - : never; - -// this is not 100% accurate since we can't make parallel regions required in the result -// `TTestValue` doesn't encode this information anyhow for us to be able to do that -// this is fine for most practical use cases anyway though -type ToStateValue = - | FilterLeafValues< - GroupTestValues['leafCandidates'], - GroupTestValues['nonLeaf'] - > - | (IsNever['nonLeaf']> extends false - ? { - [K in keyof GroupTestValues['nonLeaf']]: ToStateValue< - NonNullable['nonLeaf'][K]> - >; - } - : never); /** * Creates a state machine (statechart) with the given configuration. diff --git a/packages/core/src/dev/index.ts b/packages/core/src/dev/index.ts index 1e06b8bebf..9600b33cd0 100644 --- a/packages/core/src/dev/index.ts +++ b/packages/core/src/dev/index.ts @@ -40,7 +40,7 @@ export function getGlobal(): typeof globalThis | undefined { function getDevTools(): DevInterface | undefined { const w = getGlobal(); - if (!!(w as any).__xstate__) { + if ((w as any).__xstate__) { return (w as any).__xstate__; } diff --git a/packages/core/src/guards.ts b/packages/core/src/guards.ts index 4e0ded4f64..53dee306d9 100644 --- a/packages/core/src/guards.ts +++ b/packages/core/src/guards.ts @@ -115,8 +115,8 @@ export function stateIn< any // TODO: recheck if we could replace this with something better here > { function stateIn( - args: GuardArgs, - params: TParams + _args: GuardArgs, + _params: TParams ) { if (isDevelopment) { throw new Error(`This isn't supposed to be called`); @@ -179,7 +179,7 @@ export function not< unknown, NormalizeGuardArg> > { - function not(args: GuardArgs, params: unknown) { + function not(_args: GuardArgs, _params: unknown) { if (isDevelopment) { throw new Error(`This isn't supposed to be called`); } @@ -252,7 +252,7 @@ export function and< unknown, NormalizeGuardArgArray> > { - function and(args: GuardArgs, params: unknown) { + function and(_args: GuardArgs, _params: unknown) { if (isDevelopment) { throw new Error(`This isn't supposed to be called`); } @@ -323,7 +323,7 @@ export function or< unknown, NormalizeGuardArgArray> > { - function or(args: GuardArgs, params: unknown) { + function or(_args: GuardArgs, _params: unknown) { if (isDevelopment) { throw new Error(`This isn't supposed to be called`); } diff --git a/packages/core/src/scxml.ts b/packages/core/src/scxml.ts index f3216919ec..8fc61ebc77 100644 --- a/packages/core/src/scxml.ts +++ b/packages/core/src/scxml.ts @@ -52,7 +52,7 @@ function getAttribute( return element.attributes ? element.attributes[attribute] : undefined; } -function indexedRecord( +function indexedRecord( items: T[], identifierFn: (item: T) => string ): Record { @@ -106,7 +106,7 @@ function delayToMs(delay?: string | number): number | undefined { if (!hasDecimal) { return parseInt(secondsMatch[3], 10) * 1000; } - const secondsPart = !!secondsMatch[1] + const secondsPart = secondsMatch[1] ? parseInt(secondsMatch[1], 10) * 1000 : 0; const millisecondsPart = parseInt( @@ -147,6 +147,7 @@ with (context) { } `; + // eslint-disable-next-line @typescript-eslint/no-implied-eval const fn = new Function(...args, ...extraArgs, fnBody); return fn(context, { name: event.type, data: event }); @@ -196,7 +197,7 @@ return {'${element.attributes!.location}': ${element.attributes!.expr}}; } case 'cancel': if ('sendid' in element.attributes!) { - return cancel(element.attributes!.sendid! as string); + return cancel(element.attributes.sendid! as string); } return cancel(({ context, event, ...meta }) => { const fnBody = ` @@ -246,11 +247,14 @@ return { type: ${event ? `"${event}"` : eventexpr}, ${params ? params : ''} } } if ('delay' in element.attributes!) { - convertedDelay = delayToMs(element.attributes!.delay); + convertedDelay = delayToMs(element.attributes.delay); } else if (element.attributes!.delayexpr) { convertedDelay = ({ context, event: _ev, ...meta }) => { const fnBody = ` -return (${delayToMs})(${element.attributes!.delayexpr}); +return (${ + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + delayToMs + })(${element.attributes!.delayexpr}); `; return evaluateExecutableContent(context, _ev, meta, fnBody); @@ -313,14 +317,14 @@ return ${element.attributes!.expr}; current = { actions: [] }; break; default: - (current.actions as any[]).push(mapAction(el)); + current.actions.push(mapAction(el)); break; } } branches.push(current); - return enqueueActions(({ context, event, enqueue, check, ...meta }) => { + return enqueueActions(({ enqueue, check }) => { for (const branch of branches) { if (!branch.guard || check(branch.guard)) { branch.actions.forEach(enqueue); @@ -443,7 +447,7 @@ function toConfig(nodeJson: XMLElement, id: string): AnyStateNodeConfig { let guardObject = {}; if (value.attributes?.cond) { - const guard = value.attributes!.cond; + const guard = value.attributes.cond; if ((guard as string).startsWith('In')) { const inMatch = (guard as string).trim().match(/^In\('(.*)'\)/); @@ -462,7 +466,7 @@ function toConfig(nodeJson: XMLElement, id: string): AnyStateNodeConfig { } } else { guardObject = { - guard: createGuard(value.attributes!.cond as string) + guard: createGuard(value.attributes.cond as string) }; } } diff --git a/packages/core/src/stateUtils.ts b/packages/core/src/stateUtils.ts index fce7765ed1..659abbf831 100644 --- a/packages/core/src/stateUtils.ts +++ b/packages/core/src/stateUtils.ts @@ -22,7 +22,6 @@ import { AnyMachineSnapshot, AnyStateNode, AnyTransitionDefinition, - DelayExpr, DelayedTransitionDefinition, EventObject, HistoryValue, @@ -277,7 +276,7 @@ export function getDelayedTransitions( return []; } - const mutateEntryExit = (delay: string | number, i: number) => { + const mutateEntryExit = (delay: string | number) => { const afterEvent = createAfterEvent(delay, stateNode.id); const eventType = afterEvent.type; stateNode.entry.push(raise(afterEvent, { id: eventType, delay })); @@ -285,14 +284,14 @@ export function getDelayedTransitions( return eventType; }; - const delayedTransitions = Object.keys(afterConfig).flatMap((delay, i) => { + const delayedTransitions = Object.keys(afterConfig).flatMap((delay) => { const configTransition = afterConfig[delay]; const resolvedTransition = typeof configTransition === 'string' ? { target: configTransition } : configTransition; const resolvedDelay = Number.isNaN(+delay) ? delay : +delay; - const eventType = mutateEntryExit(resolvedDelay, i); + const eventType = mutateEntryExit(resolvedDelay); return toArray(resolvedTransition).map((transition) => ({ ...transition, event: eventType, @@ -312,10 +311,7 @@ export function getDelayedTransitions( }); } -export function formatTransition< - TContext extends MachineContext, - TEvent extends EventObject ->( +export function formatTransition( stateNode: AnyStateNode, descriptor: string, transitionConfig: AnyTransitionConfig @@ -441,6 +437,7 @@ export function formatInitialTransition< : undefined; if (!resolvedTarget && _target) { throw new Error( + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-base-to-string `Initial state node "${_target}" not found on parent state node #${stateNode.id}` ); } @@ -589,7 +586,7 @@ export function getStateNodeByPath( if (typeof statePath === 'string' && isStateId(statePath)) { try { return stateNode.machine.getStateNodeById(statePath); - } catch (e) { + } catch { // try individual paths // throw e; } @@ -611,10 +608,10 @@ export function getStateNodeByPath( * * @param stateValue The state value or State instance */ -export function getStateNodes< - TContext extends MachineContext, - TEvent extends EventObject ->(stateNode: AnyStateNode, stateValue: StateValue): Array { +export function getStateNodes( + stateNode: AnyStateNode, + stateValue: StateValue +): Array { if (typeof stateValue === 'string') { const childStateNode = stateNode.states[stateValue]; if (!childStateNode) { @@ -805,18 +802,6 @@ function isDescendant( return marker.parent === parentStateNode; } -function getPathFromRootToNode(stateNode: AnyStateNode): Array { - const path: Array = []; - let marker = stateNode.parent; - - while (marker) { - path.unshift(marker); - marker = marker.parent; - } - - return path; -} - function hasIntersection(s1: Iterable, s2: Iterable): boolean { const set1 = new Set(s1); const set2 = new Set(s2); @@ -974,8 +959,8 @@ function computeExitSet( } function areStateNodeCollectionsEqual( - prevStateNodes: StateNode[], - nextStateNodeSet: Set> + prevStateNodes: StateNode[], + nextStateNodeSet: Set ) { if (prevStateNodes.length !== nextStateNodeSet.size) { return false; @@ -989,10 +974,7 @@ function areStateNodeCollectionsEqual( } /** https://www.w3.org/TR/scxml/#microstepProcedure */ -export function microstep< - TContext extends MachineContext, - TEvent extends EventObject ->( +export function microstep( transitions: Array, currentSnapshot: AnyMachineSnapshot, actorScope: AnyActorScope, @@ -1062,6 +1044,7 @@ export function microstep< ); } + // eslint-disable-next-line no-useless-catch try { if ( historyValue === currentSnapshot.historyValue && @@ -1158,7 +1141,7 @@ function enterStates( } if (statesForDefaultEntry.has(stateNodeToEnter)) { - const initialActions = stateNodeToEnter.initial!.actions; + const initialActions = stateNodeToEnter.initial.actions; actions.push(...initialActions); } @@ -1181,7 +1164,7 @@ function enterStates( if (parent?.type === 'compound') { internalQueue.push( createDoneStateEvent( - parent!.id, + parent.id, stateNodeToEnter.output !== undefined ? resolveOutput( stateNodeToEnter.output, @@ -1257,7 +1240,7 @@ function computeEntrySet( for (const s of targetStates) { const ancestors = getProperAncestors(s, domain); if (domain?.type === 'parallel') { - ancestors.push(domain!); + ancestors.push(domain); } addAncestorStatesToEnter( statesToEnter, @@ -1295,7 +1278,7 @@ function addDescendantStatesToEnter< for (const s of historyStateNodes) { addProperAncestorStatesToEnter( s, - stateNode.parent!, + stateNode.parent, statesToEnter, historyValue, statesForDefaultEntry @@ -1324,7 +1307,7 @@ function addDescendantStatesToEnter< for (const s of historyDefaultTransition.target) { addProperAncestorStatesToEnter( s, - stateNode.parent!, + stateNode.parent, statesToEnter, historyValue, statesForDefaultEntry @@ -1840,28 +1823,3 @@ export function resolveStateValue( const allStateNodes = getAllStateNodes(getStateNodes(rootNode, stateValue)); return getStateValue(rootNode, [...allStateNodes]); } - -function stateValuesEqual( - a: StateValue | undefined, - b: StateValue | undefined -): boolean { - if (a === b) { - return true; - } - - if (a === undefined || b === undefined) { - return false; - } - - if (typeof a === 'string' || typeof b === 'string') { - return a === b; - } - - const aKeys = Object.keys(a as StateValueMap); - const bKeys = Object.keys(b as StateValueMap); - - return ( - aKeys.length === bKeys.length && - aKeys.every((key) => stateValuesEqual(a[key], b[key])) - ); -} diff --git a/packages/core/src/system.ts b/packages/core/src/system.ts index 763c5c5e1e..cb0402c768 100644 --- a/packages/core/src/system.ts +++ b/packages/core/src/system.ts @@ -4,10 +4,8 @@ import { ActorSystemInfo, AnyActorRef, Observer, - Snapshot, HomomorphicOmit, EventObject, - AnyTransitionDefinition, Subscription } from './types.ts'; import { toObserver } from './utils.ts'; diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index c84c91281d..18c97738e8 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -41,7 +41,7 @@ export type GetParameterizedParams = * This type can be used to avoid this problem. This union represents the same * value space as `unknown`. */ -export type NonReducibleUnknown = {} | null | undefined; +export type NonReducibleUnknown = NonNullable | null | undefined; export type AnyFunction = (...args: any[]) => any; type ReturnTypeOrValue = T extends AnyFunction ? ReturnType : T; @@ -50,7 +50,7 @@ type ReturnTypeOrValue = T extends AnyFunction ? ReturnType : T; export type IsNever = [T] extends [never] ? true : false; export type IsNotNever = [T] extends [never] ? false : true; -export type Compute = { [K in keyof A]: A[K] } & unknown; +export type Compute = { [K in keyof A]: A[K] } & unknown; export type Prop = K extends keyof T ? T[K] : never; export type Values = T[keyof T]; export type Elements = T[keyof T & `${number}`]; @@ -61,9 +61,9 @@ export type IndexByProp, P extends keyof T> = { export type IndexByType = IndexByProp; -export type Equals = (() => A extends A2 - ? true - : false) extends () => A extends A1 ? true : false +export type Equals = (() => A extends A2 ? true : false) extends < + A +>() => A extends A1 ? true : false ? true : false; export type IsAny = Equals; @@ -73,7 +73,7 @@ export type Cast = A extends B ? A : B; export type DoNotInfer = [T][T extends any ? 0 : any]; /** @deprecated Use the built-in `NoInfer` type instead */ export type NoInfer = DoNotInfer; -export type LowInfer = T & {}; +export type LowInfer = T & NonNullable; export type MetaObject = Record; @@ -485,7 +485,7 @@ export type StateTypes = | 'parallel' | 'final' | 'history' - | string; // TODO: remove once TS fixes this type-widening issue + | ({} & string); export type SingleOrArray = readonly T[] | T; @@ -854,7 +854,7 @@ export interface StateNodeConfig< TGuard extends ParameterizedObject, TDelay extends string, TTag extends string, - TOutput, + _TOutput, TEmitted extends EventObject, TMeta extends MetaObject > { @@ -1974,7 +1974,7 @@ export interface ActorRef< on: ( type: TType, handler: ( - emitted: TEmitted & (TType extends '*' ? {} : { type: TType }) + emitted: TEmitted & (TType extends '*' ? unknown : { type: TType }) ) => void ) => Subscription; } @@ -2461,7 +2461,7 @@ export type ToChildren = ? ActorRefFromLogic | undefined : never; }; - exclude: {}; + exclude: unknown; }[undefined extends TActor['id'] // if not all actors have literal string IDs then we need to create an index signature containing all possible actor types ? 'include' : string extends TActor['id'] diff --git a/packages/core/src/utils.ts b/packages/core/src/utils.ts index eafc3271c3..a7152562dc 100644 --- a/packages/core/src/utils.ts +++ b/packages/core/src/utils.ts @@ -3,7 +3,6 @@ import { isMachineSnapshot } from './State.ts'; import type { StateNode } from './StateNode.ts'; import { TARGETLESS_KEY } from './constants.ts'; import type { - AnyActorLogic, AnyActorRef, AnyEventObject, AnyMachineSnapshot, @@ -56,7 +55,7 @@ export function toStatePath(stateId: string | string[]): string[] { return stateId; } - let result: string[] = []; + const result: string[] = []; let segment = ''; for (let i = 0; i < stateId.length; i++) { @@ -181,7 +180,7 @@ export function resolveOutput< `Dynamically mapping values to individual properties is deprecated. Use a single function that returns the mapped object instead.\nFound object containing properties whose values are possibly mapping functions: ${Object.entries( mapper ) - .filter(([key, value]) => typeof value === 'function') + .filter(([, value]) => typeof value === 'function') .map( ([key, value]) => `\n - ${key}: ${(value as () => any) @@ -205,10 +204,7 @@ export function isErrorActorEvent( return event.type.startsWith('xstate.error.actor'); } -export function toTransitionConfigArray< - TContext extends MachineContext, - TEvent extends EventObject ->( +export function toTransitionConfigArray( configLike: SingleOrArray ): Array { return toArrayStrict(configLike).map((transitionLike) => { diff --git a/packages/core/src/waitFor.ts b/packages/core/src/waitFor.ts index 5c7a7a697f..91ec899d02 100644 --- a/packages/core/src/waitFor.ts +++ b/packages/core/src/waitFor.ts @@ -1,5 +1,5 @@ import isDevelopment from '#is-development'; -import { ActorRef, AnyActorRef, SnapshotFrom, Subscription } from './types.ts'; +import { AnyActorRef, SnapshotFrom, Subscription } from './types.ts'; interface WaitForOptions { /** @@ -51,6 +51,7 @@ export function waitFor( return new Promise((res, rej) => { const { signal } = resolvedOptions; if (signal?.aborted) { + // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors rej(signal.reason); return; } @@ -69,7 +70,7 @@ export function waitFor( }, resolvedOptions.timeout); const dispose = () => { - clearTimeout(handle!); + clearTimeout(handle); done = true; sub?.unsubscribe(); if (abortListener) { @@ -89,6 +90,7 @@ export function waitFor( * `abort` event */ let abortListener: () => void | undefined; + // eslint-disable-next-line prefer-const let sub: Subscription | undefined; // avoid TDZ when disposing synchronously // See if the current snapshot already matches the predicate @@ -102,6 +104,7 @@ export function waitFor( abortListener = () => { dispose(); // XState does not "own" the signal, so we should reject with its reason (if any) + // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors rej(signal.reason); }; signal.addEventListener('abort', abortListener); @@ -111,6 +114,7 @@ export function waitFor( next: checkEmitted, error: (err) => { dispose(); + // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors rej(err); }, complete: () => { diff --git a/packages/xstate-graph/src/TestModel.ts b/packages/xstate-graph/src/TestModel.ts index 1a64cf8900..7d5cba504a 100644 --- a/packages/xstate-graph/src/TestModel.ts +++ b/packages/xstate-graph/src/TestModel.ts @@ -2,7 +2,6 @@ import { getPathsFromEvents, getAdjacencyMap, joinPaths, - AdjacencyValue, serializeSnapshot } from '@xstate/graph'; import type { diff --git a/packages/xstate-graph/src/deduplicatePaths.ts b/packages/xstate-graph/src/deduplicatePaths.ts index 20caf9a018..97b845cd6e 100644 --- a/packages/xstate-graph/src/deduplicatePaths.ts +++ b/packages/xstate-graph/src/deduplicatePaths.ts @@ -37,6 +37,7 @@ export const deduplicatePaths = < pathLoop: for (const pathWithEventSequence of allPathsWithEventSequence) { // Check each existing superpath to see if the path is a subpath of it superpathLoop: for (const superpathWithEventSequence of superpathsWithEventSequence) { + // eslint-disable-next-line @typescript-eslint/no-for-in-array for (const i in pathWithEventSequence.eventSequence) { // Check event sequence to determine if path is subpath, e.g.: // diff --git a/packages/xstate-graph/src/graph.ts b/packages/xstate-graph/src/graph.ts index 0962856b73..d78cfd946c 100644 --- a/packages/xstate-graph/src/graph.ts +++ b/packages/xstate-graph/src/graph.ts @@ -1,12 +1,8 @@ import { EventObject, AnyStateMachine, - AnyMachineSnapshot, - StateFrom, - EventFrom, StateMachine, AnyActorLogic, - SnapshotFrom, EventFromLogic, Snapshot, __unsafe_getAllOwnEventDescriptors, @@ -92,7 +88,7 @@ export function createDefaultMachineOptions( serializeEvent, events: (state) => { const events = - typeof getEvents === 'function' ? getEvents(state) : getEvents ?? []; + typeof getEvents === 'function' ? getEvents(state) : (getEvents ?? []); return __unsafe_getAllOwnEventDescriptors(state).flatMap((type) => { const matchingEvents = events.filter((ev) => (ev as any).type === type); if (matchingEvents.length) { @@ -132,7 +128,7 @@ export function toDirectedGraph( return targets.map((target, targetIndex) => { const edge: DirectedGraphEdge = { id: `${stateNode.id}:${transitionIndex}:${targetIndex}`, - source: stateNode as AnyStateNode, + source: stateNode, target: target as AnyStateNode, transition: t, label: { @@ -152,8 +148,8 @@ export function toDirectedGraph( const graph = { id: stateNode.id, - stateNode: stateNode as AnyStateNode, - children: getChildren(stateNode as AnyStateNode).map(toDirectedGraph), + stateNode: stateNode, + children: getChildren(stateNode).map(toDirectedGraph), edges, toJSON: () => { const { id, children, edges: graphEdges } = graph; diff --git a/packages/xstate-inspect/src/browser.ts b/packages/xstate-inspect/src/browser.ts index 7738dfb2fe..2d93208212 100644 --- a/packages/xstate-inspect/src/browser.ts +++ b/packages/xstate-inspect/src/browser.ts @@ -12,7 +12,6 @@ import { stringifyState } from './serialize.ts'; import type { Inspector, InspectorOptions, - InspectReceiver, ParsedReceiverEvent, ReceiverCommand, ServiceListener, diff --git a/packages/xstate-inspect/src/inspectMachine.ts b/packages/xstate-inspect/src/inspectMachine.ts index be14e7035b..d98ece2c9f 100644 --- a/packages/xstate-inspect/src/inspectMachine.ts +++ b/packages/xstate-inspect/src/inspectMachine.ts @@ -1,4 +1,4 @@ -import { ActorRef, assign, createMachine, Interpreter } from 'xstate'; +import { ActorRef, assign, createMachine } from 'xstate'; import { XStateDevInterface } from 'xstate/dev'; import { stringifyState } from './serialize.ts'; @@ -56,7 +56,9 @@ export function createInspectMachine( const { event } = e; const parsedEvent = JSON.parse(event); // TODO: figure out a different mechanism - const service = serviceMap.get(parsedEvent.origin?.id!); + const service = parsedEvent.origin + ? serviceMap.get(parsedEvent.origin.id) + : undefined; service?.send(parsedEvent); } }, diff --git a/packages/xstate-inspect/src/serialize.ts b/packages/xstate-inspect/src/serialize.ts index ee223136e9..a9a2529836 100644 --- a/packages/xstate-inspect/src/serialize.ts +++ b/packages/xstate-inspect/src/serialize.ts @@ -1,4 +1,4 @@ -import { AnyMachineSnapshot, AnyStateMachine } from 'xstate'; +import { AnyMachineSnapshot } from 'xstate'; import { Replacer } from './types.ts'; import { stringify } from './utils.ts'; diff --git a/packages/xstate-inspect/src/server.ts b/packages/xstate-inspect/src/server.ts index a242f0a3b5..2762f0eb74 100644 --- a/packages/xstate-inspect/src/server.ts +++ b/packages/xstate-inspect/src/server.ts @@ -1,5 +1,5 @@ import { WebSocketServer } from 'ws'; -import { Actor, EventFromLogic, EventObject, createActor } from 'xstate'; +import { Actor, EventObject, createActor } from 'xstate'; import { XStateDevInterface } from 'xstate/dev'; import { InspectMachineEvent, createInspectMachine } from './inspectMachine.ts'; import { Inspector, Replacer } from './types.ts'; @@ -53,7 +53,7 @@ export function inspect(options: ServerInspectorOptions): Inspector { const inspectService = createActor( createInspectMachine(devTools, options) ).start(); - let client = { + const client = { name: '@@xstate/ws-client', send: (event: any) => { server.clients.forEach((wsClient) => { @@ -73,7 +73,7 @@ export function inspect(options: ServerInspectorOptions): Inspector { return; } - const jsonMessage = JSON.parse(data.toString()); + const jsonMessage = JSON.parse(String(data)); inspectService.send({ ...jsonMessage, client diff --git a/packages/xstate-inspect/src/utils.ts b/packages/xstate-inspect/src/utils.ts index 5b6ebef05c..bada0b525c 100644 --- a/packages/xstate-inspect/src/utils.ts +++ b/packages/xstate-inspect/src/utils.ts @@ -12,7 +12,7 @@ export function stringify( ): string { try { return JSON.stringify(value, replacer); - } catch (e) { + } catch { return safeStringify(value, replacer); } } @@ -30,7 +30,7 @@ export function isReceiverEvent(event: any): event is ReceiverEvent { ) { return true; } - } catch (e) { + } catch { return false; } diff --git a/packages/xstate-react/src/useActorRef.ts b/packages/xstate-react/src/useActorRef.ts index 10a5d03873..9ff4d10639 100644 --- a/packages/xstate-react/src/useActorRef.ts +++ b/packages/xstate-react/src/useActorRef.ts @@ -78,7 +78,7 @@ export function useActorRef( if (!observerOrListener) { return; } - let sub = actorRef.subscribe(toObserver(observerOrListener)); + const sub = actorRef.subscribe(toObserver(observerOrListener)); return () => { sub.unsubscribe(); }; diff --git a/packages/xstate-react/src/useSelector.ts b/packages/xstate-react/src/useSelector.ts index da73946f65..c9a631cb65 100644 --- a/packages/xstate-react/src/useSelector.ts +++ b/packages/xstate-react/src/useSelector.ts @@ -1,6 +1,6 @@ import { useCallback } from 'react'; import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector'; -import { AnyActorRef, SnapshotFrom } from 'xstate'; +import { AnyActorRef } from 'xstate'; type SyncExternalStoreSubscribe = Parameters< typeof useSyncExternalStoreWithSelector diff --git a/packages/xstate-solid/src/createImmutable.ts b/packages/xstate-solid/src/createImmutable.ts index 7764371bac..27fb81b73b 100644 --- a/packages/xstate-solid/src/createImmutable.ts +++ b/packages/xstate-solid/src/createImmutable.ts @@ -19,6 +19,7 @@ const updateStore = ( store: Store ) => { const valueRefs = new WeakMap(); + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint const diff = ( next: CompareValue, prev: CompareValue, @@ -72,7 +73,7 @@ const updateStore = ( // Update new values const targetKeys = Object.keys(next) as Array; for (let i = 0, len = targetKeys.length; i < len; i++) { - diff(next[targetKeys[i]!], prev[targetKeys[i]!], [ + diff(next[targetKeys[i]], prev[targetKeys[i]], [ ...path, targetKeys[i] ] as Path); @@ -81,8 +82,8 @@ const updateStore = ( // Remove previous keys that are now undefined const previousKeys = Object.keys(prev) as Array; for (let i = 0, len = previousKeys.length; i < len; i++) { - if (next[previousKeys[i]!] === undefined) { - set(...path, previousKeys[i]!, undefined); + if (next[previousKeys[i]] === undefined) { + set(...path, previousKeys[i], undefined); } } } diff --git a/packages/xstate-solid/src/deepClone.ts b/packages/xstate-solid/src/deepClone.ts index 1eeaa76a2d..bc27127451 100644 --- a/packages/xstate-solid/src/deepClone.ts +++ b/packages/xstate-solid/src/deepClone.ts @@ -17,6 +17,7 @@ export function isWrappable(obj: any): obj is object { * @param valueRefs A WeakMap that stores a reference from the original * object/array to the cloned object/array */ +// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint const clone = ( value: T, valueRefs: WeakMap @@ -50,5 +51,6 @@ const clone = ( return clonedValue; }; +// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint export const deepClone = (value: T): T => clone(value, new WeakMap()); diff --git a/packages/xstate-store/src/react.ts b/packages/xstate-store/src/react.ts index a445c49405..306221bcbb 100644 --- a/packages/xstate-store/src/react.ts +++ b/packages/xstate-store/src/react.ts @@ -1,5 +1,5 @@ import { useCallback, useRef, useSyncExternalStore } from 'react'; -import { Store, SnapshotFromStore, AnyStore } from './types'; +import { SnapshotFromStore, AnyStore } from './types'; function defaultCompare(a: T | undefined, b: T) { return a === b; diff --git a/packages/xstate-store/src/solid.ts b/packages/xstate-store/src/solid.ts index 7e2f779bf0..05bcd65904 100644 --- a/packages/xstate-store/src/solid.ts +++ b/packages/xstate-store/src/solid.ts @@ -1,6 +1,6 @@ /* @jsxImportSource solid-js */ import { createEffect, createSignal, onCleanup } from 'solid-js'; -import type { Store, SnapshotFromStore, AnyStore } from './types'; +import type { SnapshotFromStore, AnyStore } from './types'; function defaultCompare(a: T | undefined, b: T) { return a === b; diff --git a/packages/xstate-store/src/store.ts b/packages/xstate-store/src/store.ts index 26ec4189a6..b8425e239e 100644 --- a/packages/xstate-store/src/store.ts +++ b/packages/xstate-store/src/store.ts @@ -132,7 +132,7 @@ function createStoreCore< return { unsubscribe() { - eventListeners!.delete(wrappedHandler); + eventListeners.delete(wrappedHandler); } }; }, diff --git a/packages/xstate-store/src/types.ts b/packages/xstate-store/src/types.ts index 8952753973..23b90758b8 100644 --- a/packages/xstate-store/src/types.ts +++ b/packages/xstate-store/src/types.ts @@ -109,7 +109,7 @@ export interface Store< export type AnyStore = Store; -export type Compute = { [K in keyof A]: A[K] } & unknown; +export type Compute = { [K in keyof A]: A[K] }; export type SnapshotFromStore> = TStore extends Store diff --git a/packages/xstate-svelte/src/useSelector.ts b/packages/xstate-svelte/src/useSelector.ts index a0c35b5b30..80d8d25a46 100644 --- a/packages/xstate-svelte/src/useSelector.ts +++ b/packages/xstate-svelte/src/useSelector.ts @@ -1,5 +1,5 @@ import { readable } from 'svelte/store'; -import type { ActorRef, AnyActorRef, SnapshotFrom, Subscription } from 'xstate'; +import type { AnyActorRef, SnapshotFrom, Subscription } from 'xstate'; function defaultCompare(a: T, b: T) { return a === b; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0dc087cbfd..215ef9151e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,6 +43,9 @@ importers: '@changesets/cli': specifier: ^2.26.2 version: 2.27.7 + '@eslint/js': + specifier: ^9.7.0 + version: 9.10.0 '@jest/types': specifier: ^29.6.3 version: 29.6.3 @@ -73,6 +76,12 @@ importers: babel-preset-solid: specifier: ^1.8.4 version: 1.8.18(@babel/core@7.24.9) + eslint: + specifier: ^9.7.0 + version: 9.10.0(jiti@1.21.6) + globals: + specifier: ^15.8.0 + version: 15.9.0 husky: specifier: ^3.1.0 version: 3.1.0 @@ -113,8 +122,11 @@ importers: specifier: ^0.8.5 version: 0.8.8 typescript: - specifier: ^5.6.2 - version: 5.6.2 + specifier: ^5.5.4 + version: 5.5.4 + typescript-eslint: + specifier: ^8.0.1 + version: 8.6.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.4) vue: specifier: ^3.0.11 version: 3.4.32(typescript@5.6.2) @@ -1106,6 +1118,44 @@ packages: '@changesets/write@0.3.1': resolution: {integrity: sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw==, tarball: https://registry.npmjs.org/@changesets/write/-/write-0.3.1.tgz} + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.11.1': + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.18.0': + resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.10.0': + resolution: {integrity: sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.1.0': + resolution: {integrity: sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.0': + resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + engines: {node: '>=18.18'} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==, tarball: https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz} engines: {node: '>=12'} @@ -1621,6 +1671,63 @@ packages: '@types/yargs@17.0.32': resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==, tarball: https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz} + '@typescript-eslint/eslint-plugin@8.6.0': + resolution: {integrity: sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@8.6.0': + resolution: {integrity: sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@8.6.0': + resolution: {integrity: sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.6.0': + resolution: {integrity: sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@8.6.0': + resolution: {integrity: sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.6.0': + resolution: {integrity: sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@8.6.0': + resolution: {integrity: sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/visitor-keys@8.6.0': + resolution: {integrity: sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vue/babel-helper-vue-jsx-merge-props@1.4.0': resolution: {integrity: sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==, tarball: https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz} @@ -1877,6 +1984,11 @@ packages: acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==, tarball: https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz} + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-walk@8.3.3: resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==, tarball: https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz} engines: {node: '>=0.4.0'} @@ -3419,6 +3531,9 @@ packages: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==, tarball: https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz} engines: {node: '>=4.0.0'} + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge@1.5.2: resolution: {integrity: sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==, tarball: https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz} engines: {node: '>=0.10.0'} @@ -3852,6 +3967,10 @@ packages: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz} engines: {node: '>=8'} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==, tarball: https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz} engines: {node: '>=6.0'} @@ -3861,11 +3980,41 @@ packages: resolution: {integrity: sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz} engines: {node: '>=4.0.0'} + eslint-scope@8.0.2: + resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.10.0: + resolution: {integrity: sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.1.0: + resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, tarball: https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz} engines: {node: '>=4'} hasBin: true + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, tarball: https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz} engines: {node: '>=4.0'} @@ -3995,6 +4144,9 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, tarball: https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz} + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==, tarball: https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz} @@ -4030,6 +4182,10 @@ packages: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==, tarball: https://registry.npmjs.org/figures/-/figures-3.2.0.tgz} engines: {node: '>=8'} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + file-loader@3.0.1: resolution: {integrity: sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==, tarball: https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz} engines: {node: '>= 6.9.0'} @@ -4102,6 +4258,13 @@ packages: resolution: {integrity: sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==, tarball: https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz} engines: {node: '>= 0.10'} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + flush-write-stream@1.1.1: resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==, tarball: https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz} @@ -4295,6 +4458,10 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, tarball: https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz} engines: {node: '>= 6'} + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + glob-to-regexp@0.3.0: resolution: {integrity: sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==, tarball: https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz} @@ -4329,6 +4496,14 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, tarball: https://registry.npmjs.org/globals/-/globals-11.12.0.tgz} engines: {node: '>=4'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.9.0: + resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==} + engines: {node: '>=18'} + globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==, tarball: https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz} engines: {node: '>= 0.4'} @@ -4366,6 +4541,9 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, tarball: https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz} + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + graphlib@2.1.8: resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==, tarball: https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz} @@ -4682,6 +4860,10 @@ packages: resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==, tarball: https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz} engines: {node: '>=4'} + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + import-from@2.1.0: resolution: {integrity: sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==, tarball: https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz} engines: {node: '>=4'} @@ -5349,6 +5531,9 @@ packages: json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==, tarball: https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz} + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==, tarball: https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz} @@ -5426,6 +5611,10 @@ packages: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, tarball: https://registry.npmjs.org/leven/-/leven-3.1.0.tgz} engines: {node: '>=6'} + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + liftup@3.0.1: resolution: {integrity: sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==, tarball: https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz} engines: {node: '>=10'} @@ -5513,6 +5702,9 @@ packages: lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==, tarball: https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz} + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==, tarball: https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz} @@ -6175,6 +6367,10 @@ packages: peerDependencies: webpack: ^4.0.0 + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + os-browserify@0.3.0: resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==, tarball: https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz} @@ -6285,6 +6481,10 @@ packages: param-case@2.1.1: resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==, tarball: https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz} + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + parse-asn1@5.1.7: resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==, tarball: https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz} engines: {node: '>= 0.10'} @@ -6641,6 +6841,10 @@ packages: resolution: {integrity: sha512-lEHd+yEm22jXdCphDrkvIJQU66EuLojPPtvZkpKIkiD+l0DMThF/niqZKJSoU8Vl7iuvtmzyMhir9LdVy5WMnA==, tarball: https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.1.4.tgz} engines: {node: '>=10'} + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + prepend-http@2.0.0: resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==, tarball: https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz} engines: {node: '>=4'} @@ -6992,6 +7196,10 @@ packages: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==, tarball: https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz} engines: {node: '>=4'} + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, tarball: https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz} engines: {node: '>=8'} @@ -7832,6 +8040,12 @@ packages: resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==, tarball: https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz} engines: {node: '>=0.10.0'} + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + tsconfig@7.0.0: resolution: {integrity: sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==, tarball: https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz} @@ -7850,6 +8064,10 @@ packages: tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==, tarball: https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz} + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, tarball: https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz} engines: {node: '>=4'} @@ -7896,8 +8114,16 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==, tarball: https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz} + typescript-eslint@8.6.0: + resolution: {integrity: sha512-eEhhlxCEpCd4helh3AO1hk0UP2MvbRi9CtIAJTVPQjuSXOOO2jsEacNi4UdcJzZJbeuVg1gMhtZ8UYb+NFYPrA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + typescript@5.6.2: - resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==, tarball: https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz} engines: {node: '>=14.17'} hasBin: true @@ -8329,6 +8555,10 @@ packages: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==, tarball: https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz} engines: {node: '>=8'} + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + wordwrap@0.0.3: resolution: {integrity: sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==, tarball: https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz} engines: {node: '>=0.4.0'} @@ -9614,6 +9844,47 @@ snapshots: human-id: 1.0.2 prettier: 2.8.8 + '@eslint-community/eslint-utils@4.4.0(eslint@9.10.0(jiti@1.21.6))': + dependencies: + eslint: 9.10.0(jiti@1.21.6) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.1': {} + + '@eslint/config-array@0.18.0': + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.5(supports-color@6.1.0) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/eslintrc@3.1.0': + dependencies: + ajv: 6.12.6 + debug: 4.3.5(supports-color@6.1.0) + espree: 10.1.0 + globals: 14.0.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.10.0': {} + + '@eslint/object-schema@2.1.4': {} + + '@eslint/plugin-kit@0.1.0': + dependencies: + levn: 0.4.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.0': {} + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -10374,6 +10645,87 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 + '@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 8.6.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.6.0 + '@typescript-eslint/type-utils': 8.6.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/utils': 8.6.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.6.0 + eslint: 9.10.0(jiti@1.21.6) + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.6.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@typescript-eslint/scope-manager': 8.6.0 + '@typescript-eslint/types': 8.6.0 + '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.6.0 + debug: 4.3.5(supports-color@6.1.0) + eslint: 9.10.0(jiti@1.21.6) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.6.0': + dependencies: + '@typescript-eslint/types': 8.6.0 + '@typescript-eslint/visitor-keys': 8.6.0 + + '@typescript-eslint/type-utils@8.6.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.6.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.4) + debug: 4.3.5(supports-color@6.1.0) + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - eslint + - supports-color + + '@typescript-eslint/types@8.6.0': {} + + '@typescript-eslint/typescript-estree@8.6.0(typescript@5.5.4)': + dependencies: + '@typescript-eslint/types': 8.6.0 + '@typescript-eslint/visitor-keys': 8.6.0 + debug: 4.3.5(supports-color@6.1.0) + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.6.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(jiti@1.21.6)) + '@typescript-eslint/scope-manager': 8.6.0 + '@typescript-eslint/types': 8.6.0 + '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.5.4) + eslint: 9.10.0(jiti@1.21.6) + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@8.6.0': + dependencies: + '@typescript-eslint/types': 8.6.0 + eslint-visitor-keys: 3.4.3 + '@vue/babel-helper-vue-jsx-merge-props@1.4.0': {} '@vue/babel-helper-vue-transform-on@1.2.5': {} @@ -10997,6 +11349,10 @@ snapshots: acorn: 8.12.1 acorn-walk: 8.3.3 + acorn-jsx@5.3.2(acorn@8.12.1): + dependencies: + acorn: 8.12.1 + acorn-walk@8.3.3: dependencies: acorn: 8.12.1 @@ -12691,6 +13047,8 @@ snapshots: deep-extend@0.6.0: {} + deep-is@0.1.4: {} + deepmerge@1.5.2: {} deepmerge@4.3.1: {} @@ -13154,6 +13512,8 @@ snapshots: escape-string-regexp@2.0.0: {} + escape-string-regexp@4.0.0: {} + escodegen@2.1.0: dependencies: esprima: 4.0.1 @@ -13167,8 +13527,68 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 + eslint-scope@8.0.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.0.0: {} + + eslint@9.10.0(jiti@1.21.6): + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(jiti@1.21.6)) + '@eslint-community/regexpp': 4.11.1 + '@eslint/config-array': 0.18.0 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.10.0 + '@eslint/plugin-kit': 0.1.0 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.0 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.5(supports-color@6.1.0) + escape-string-regexp: 4.0.0 + eslint-scope: 8.0.2 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + optionalDependencies: + jiti: 1.21.6 + transitivePeerDependencies: + - supports-color + + espree@10.1.0: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 4.0.0 + esprima@4.0.1: {} + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -13356,6 +13776,8 @@ snapshots: fast-json-stable-stringify@2.1.0: {} + fast-levenshtein@2.0.6: {} + fast-safe-stringify@2.1.1: {} fast-uri@3.0.1: {} @@ -13391,6 +13813,10 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + file-loader@3.0.1(webpack@4.47.0): dependencies: loader-utils: 1.4.2 @@ -13491,6 +13917,13 @@ snapshots: flagged-respawn@1.0.1: {} + flat-cache@4.0.1: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + + flatted@3.3.1: {} + flush-write-stream@1.1.1: dependencies: inherits: 2.0.4 @@ -13697,6 +14130,10 @@ snapshots: dependencies: is-glob: 4.0.3 + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + glob-to-regexp@0.3.0: {} glob@10.4.5: @@ -13751,6 +14188,10 @@ snapshots: globals@11.12.0: {} + globals@14.0.0: {} + + globals@15.9.0: {} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -13833,6 +14274,8 @@ snapshots: graceful-fs@4.2.11: {} + graphemer@1.4.0: {} + graphlib@2.1.8: dependencies: lodash: 4.17.21 @@ -14204,6 +14647,11 @@ snapshots: caller-path: 2.0.0 resolve-from: 3.0.0 + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + import-from@2.1.0: dependencies: resolve-from: 3.0.0 @@ -15011,6 +15459,8 @@ snapshots: json-schema@0.4.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} + json-stringify-safe@5.0.1: {} json5@0.5.1: {} @@ -15096,6 +15546,11 @@ snapshots: leven@3.1.0: {} + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + liftup@3.0.1: dependencies: extend: 3.0.2 @@ -15241,6 +15696,8 @@ snapshots: lodash.memoize@4.1.2: {} + lodash.merge@4.6.2: {} + lodash.startcase@4.4.0: {} lodash.template@4.5.0: @@ -16028,6 +16485,15 @@ snapshots: last-call-webpack-plugin: 3.0.0 webpack: 4.47.0 + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + os-browserify@0.3.0: {} os-homedir@1.0.2: {} @@ -16129,6 +16595,10 @@ snapshots: dependencies: no-case: 2.3.2 + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + parse-asn1@5.1.7: dependencies: asn1.js: 4.10.1 @@ -16537,6 +17007,8 @@ snapshots: path-exists: 4.0.0 which-pm: 2.2.0 + prelude-ls@1.2.1: {} + prepend-http@2.0.0: {} prettier-plugin-jsdoc@1.3.0(prettier@3.3.3): @@ -16924,6 +17396,8 @@ snapshots: resolve-from@3.0.0: {} + resolve-from@4.0.0: {} + resolve-from@5.0.0: {} resolve-pkg@0.1.0: @@ -17827,6 +18301,10 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 + ts-api-utils@1.3.0(typescript@5.5.4): + dependencies: + typescript: 5.5.4 + tsconfig@7.0.0: dependencies: '@types/strip-bom': 3.0.0 @@ -17846,6 +18324,10 @@ snapshots: tweetnacl@0.14.5: {} + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + type-detect@4.0.8: {} type-fest@0.13.1: {} @@ -17899,6 +18381,17 @@ snapshots: typedarray@0.0.6: {} + typescript-eslint@8.6.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.4): + dependencies: + '@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/parser': 8.6.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/utils': 8.6.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - eslint + - supports-color + typescript@5.6.2: {} uc.micro@1.0.6: {} @@ -18555,6 +19048,8 @@ snapshots: dependencies: string-width: 4.2.3 + word-wrap@1.2.5: {} + wordwrap@0.0.3: {} worker-farm@1.7.0: diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 2384a0c197..0000000000 --- a/tslint.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "defaultSeverity": "error", - "extends": ["tslint:recommended"], - "jsRules": {}, - "rules": { - "trailing-comma": [false], - "object-literal-sort-keys": false, - "arrow-parens": false, - "quotemark": ["single"], - "ordered-imports": [false], - "variable-name": false, - "object-literal-key-quotes": false, - "interface-name": false, - "member-ordering": false, - "no-namespace": false, - "no-unused-expression": [true, "allow-fast-null-checks"] - }, - "rulesDirectory": [], - "ignorePaths": ["examples/", "editor/"] -}