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..6698b2c4bb --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,90 @@ +// @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', + '@typescript-eslint/no-redundant-type-constituents': '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..683e9c5acc 100644 --- a/packages/core/src/guards.ts +++ b/packages/core/src/guards.ts @@ -114,10 +114,7 @@ export function stateIn< TParams, any // TODO: recheck if we could replace this with something better here > { - function stateIn( - args: GuardArgs, - params: TParams - ) { + function stateIn() { if (isDevelopment) { throw new Error(`This isn't supposed to be called`); } @@ -179,7 +176,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 +249,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 +320,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..624d75c194 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -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,11 +61,12 @@ 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 - ? true - : false; +export type Equals = + (() => A extends A2 ? true : false) extends () => A extends A1 + ? true + : false + ? true + : false; export type IsAny = Equals; export type Cast = A extends B ? A : B; // @TODO: Replace with native `NoInfer` when TS issue gets fixed: @@ -73,7 +74,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; @@ -127,44 +128,46 @@ export interface ActionArgs< TEvent extends EventObject > extends UnifiedArg {} -export type InputFrom = T extends StateMachine< - infer _TContext, - infer _TEvent, - infer _TChildren, - infer _TActor, - infer _TAction, - infer _TGuard, - infer _TDelay, - infer _TStateValue, - infer _TTag, - infer TInput, - infer _TOutput, - infer _TEmitted, - infer _TMeta, - infer _TStateSchema -> - ? TInput - : T extends ActorLogic< - infer _TSnapshot, - infer _TEvent, - infer TInput, - infer _TSystem, - infer _TEmitted - > +export type InputFrom = + T extends StateMachine< + infer _TContext, + infer _TEvent, + infer _TChildren, + infer _TActor, + infer _TAction, + infer _TGuard, + infer _TDelay, + infer _TStateValue, + infer _TTag, + infer TInput, + infer _TOutput, + infer _TEmitted, + infer _TMeta, + infer _TStateSchema + > ? TInput - : never; + : T extends ActorLogic< + infer _TSnapshot, + infer _TEvent, + infer TInput, + infer _TSystem, + infer _TEmitted + > + ? TInput + : never; -export type OutputFrom = T extends ActorLogic< - infer TSnapshot, - infer _TEvent, - infer _TInput, - infer _TSystem, - infer _TEmitted -> - ? (TSnapshot & { status: 'done' })['output'] - : T extends ActorRef +export type OutputFrom = + T extends ActorLogic< + infer TSnapshot, + infer _TEvent, + infer _TInput, + infer _TSystem, + infer _TEmitted + > ? (TSnapshot & { status: 'done' })['output'] - : never; + : T extends ActorRef + ? (TSnapshot & { status: 'done' })['output'] + : never; export type ActionFunction< TContext extends MachineContext, @@ -485,7 +488,7 @@ export type StateTypes = | 'parallel' | 'final' | 'history' - | string; // TODO: remove once TS fixes this type-widening issue + | ({} & string); export type SingleOrArray = readonly T[] | T; @@ -753,87 +756,88 @@ export type InvokeConfig< TDelay extends string, TEmitted extends EventObject, TMeta extends MetaObject -> = IsLiteralString extends true - ? DistributeActors< - TContext, - TEvent, - TActor, - TAction, - TGuard, - TDelay, - TEmitted, - TMeta, - TActor - > - : { - /** - * The unique identifier for the invoked machine. If not specified, this - * will be the machine's own `id`, or the URL (from `src`). - */ - id?: string; - - systemId?: string; - /** The source of the machine to be invoked, or the machine itself. */ - src: AnyActorLogic | string; // TODO: fix types - - input?: - | Mapper - | NonReducibleUnknown; - /** - * The transition to take upon the invoked child machine reaching its - * final top-level state. - */ - onDone?: - | string - | SingleOrArray< - TransitionConfigOrTarget< - TContext, - DoneActorEvent, // TODO: consider replacing with `unknown` - TEvent, - TActor, - TAction, - TGuard, - TDelay, - TEmitted, - TMeta - > - >; - /** - * The transition to take upon the invoked child machine sending an error - * event. - */ - onError?: - | string - | SingleOrArray< - TransitionConfigOrTarget< - TContext, - ErrorActorEvent, - TEvent, - TActor, - TAction, - TGuard, - TDelay, - TEmitted, - TMeta - > - >; - - onSnapshot?: - | string - | SingleOrArray< - TransitionConfigOrTarget< - TContext, - SnapshotEvent, - TEvent, - TActor, - TAction, - TGuard, - TDelay, - TEmitted, - TMeta - > - >; - }; +> = + IsLiteralString extends true + ? DistributeActors< + TContext, + TEvent, + TActor, + TAction, + TGuard, + TDelay, + TEmitted, + TMeta, + TActor + > + : { + /** + * The unique identifier for the invoked machine. If not specified, this + * will be the machine's own `id`, or the URL (from `src`). + */ + id?: string; + + systemId?: string; + /** The source of the machine to be invoked, or the machine itself. */ + src: AnyActorLogic | string; // TODO: fix types + + input?: + | Mapper + | NonReducibleUnknown; + /** + * The transition to take upon the invoked child machine reaching its + * final top-level state. + */ + onDone?: + | string + | SingleOrArray< + TransitionConfigOrTarget< + TContext, + DoneActorEvent, // TODO: consider replacing with `unknown` + TEvent, + TActor, + TAction, + TGuard, + TDelay, + TEmitted, + TMeta + > + >; + /** + * The transition to take upon the invoked child machine sending an + * error event. + */ + onError?: + | string + | SingleOrArray< + TransitionConfigOrTarget< + TContext, + ErrorActorEvent, + TEvent, + TActor, + TAction, + TGuard, + TDelay, + TEmitted, + TMeta + > + >; + + onSnapshot?: + | string + | SingleOrArray< + TransitionConfigOrTarget< + TContext, + SnapshotEvent, + TEvent, + TActor, + TAction, + TGuard, + TDelay, + TEmitted, + TMeta + > + >; + }; export type AnyInvokeConfig = InvokeConfig< any, @@ -854,7 +858,7 @@ export interface StateNodeConfig< TGuard extends ParameterizedObject, TDelay extends string, TTag extends string, - TOutput, + _TOutput, TEmitted extends EventObject, TMeta extends MetaObject > { @@ -1974,7 +1978,7 @@ export interface ActorRef< on: ( type: TType, handler: ( - emitted: TEmitted & (TType extends '*' ? {} : { type: TType }) + emitted: TEmitted & (TType extends '*' ? unknown : { type: TType }) ) => void ) => Subscription; } @@ -1988,73 +1992,75 @@ export type ActorRefLike = Pick< export type UnknownActorRef = ActorRef, EventObject>; -export type ActorLogicFrom = ReturnTypeOrValue extends infer R - ? R extends StateMachine< - any, - any, - any, - any, - any, - any, - any, - any, - any, - any, - any, - any, - any, // TMeta - any // TStateSchema - > - ? R - : R extends Promise - ? PromiseActorLogic - : never - : never; +export type ActorLogicFrom = + ReturnTypeOrValue extends infer R + ? R extends StateMachine< + any, + any, + any, + any, + any, + any, + any, + any, + any, + any, + any, + any, + any, // TMeta + any // TStateSchema + > + ? R + : R extends Promise + ? PromiseActorLogic + : never + : never; // TODO: in v6, this should only accept AnyActorLogic, like ActorRefFromLogic -export type ActorRefFrom = ReturnTypeOrValue extends infer R - ? R extends StateMachine< - infer TContext, - infer TEvent, - infer TChildren, - infer _TActor, - infer _TAction, - infer _TGuard, - infer _TDelay, - infer TStateValue, - infer TTag, - infer _TInput, - infer TOutput, - infer TEmitted, - infer TMeta, - infer TStateSchema - > - ? ActorRef< - MachineSnapshot< - TContext, - TEvent, - TChildren, - TStateValue, - TTag, - TOutput, - TMeta, - TStateSchema - >, - TEvent, - TEmitted +export type ActorRefFrom = + ReturnTypeOrValue extends infer R + ? R extends StateMachine< + infer TContext, + infer TEvent, + infer TChildren, + infer _TActor, + infer _TAction, + infer _TGuard, + infer _TDelay, + infer TStateValue, + infer TTag, + infer _TInput, + infer TOutput, + infer TEmitted, + infer TMeta, + infer TStateSchema > - : R extends Promise - ? ActorRefFrom> - : R extends ActorLogic< - infer TSnapshot, - infer TEvent, - infer _TInput, - infer _TSystem, - infer TEmitted - > - ? ActorRef - : never - : never; + ? ActorRef< + MachineSnapshot< + TContext, + TEvent, + TChildren, + TStateValue, + TTag, + TOutput, + TMeta, + TStateSchema + >, + TEvent, + TEmitted + > + : R extends Promise + ? ActorRefFrom> + : R extends ActorLogic< + infer TSnapshot, + infer TEvent, + infer _TInput, + infer _TSystem, + infer TEmitted + > + ? ActorRef + : never + : never; export type ActorRefFromLogic = ActorRef< SnapshotFrom, @@ -2067,73 +2073,75 @@ export type DevToolsAdapter = (service: AnyActor) => void; /** @deprecated Use `Actor` instead. */ export type InterpreterFrom< T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine) -> = ReturnTypeOrValue extends StateMachine< - infer TContext, - infer TEvent, - infer TChildren, - infer _TActor, - infer _TAction, - infer _TGuard, - infer _TDelay, - infer TStateValue, - infer TTag, - infer TInput, - infer TOutput, - infer TEmitted, - infer TMeta, - infer TStateSchema -> - ? Actor< - ActorLogic< - MachineSnapshot< - TContext, +> = + ReturnTypeOrValue extends StateMachine< + infer TContext, + infer TEvent, + infer TChildren, + infer _TActor, + infer _TAction, + infer _TGuard, + infer _TDelay, + infer TStateValue, + infer TTag, + infer TInput, + infer TOutput, + infer TEmitted, + infer TMeta, + infer TStateSchema + > + ? Actor< + ActorLogic< + MachineSnapshot< + TContext, + TEvent, + TChildren, + TStateValue, + TTag, + TOutput, + TMeta, + TStateSchema + >, TEvent, - TChildren, - TStateValue, - TTag, - TOutput, - TMeta, - TStateSchema - >, - TEvent, - TInput, - AnyActorSystem, - TEmitted + TInput, + AnyActorSystem, + TEmitted + > > - > - : never; + : never; export type MachineImplementationsFrom< T extends AnyStateMachine | ((...args: any[]) => AnyStateMachine) -> = ReturnTypeOrValue extends StateMachine< - infer TContext, - infer TEvent, - infer _TChildren, - infer TActor, - infer TAction, - infer TGuard, - infer TDelay, - infer _TStateValue, - infer TTag, - infer _TInput, - infer _TOutput, - infer TEmitted, - infer _TMeta, - infer _TStateSchema -> - ? InternalMachineImplementations< - ResolvedStateMachineTypes< - TContext, - TEvent, - TActor, - TAction, - TGuard, - TDelay, - TTag, - TEmitted +> = + ReturnTypeOrValue extends StateMachine< + infer TContext, + infer TEvent, + infer _TChildren, + infer TActor, + infer TAction, + infer TGuard, + infer TDelay, + infer _TStateValue, + infer TTag, + infer _TInput, + infer _TOutput, + infer TEmitted, + infer _TMeta, + infer _TStateSchema + > + ? InternalMachineImplementations< + ResolvedStateMachineTypes< + TContext, + TEvent, + TActor, + TAction, + TGuard, + TDelay, + TTag, + TEmitted + > > - > - : never; + : never; export interface ActorScope< TSnapshot extends Snapshot, @@ -2276,28 +2284,29 @@ export type UnknownActorLogic = ActorLogic< any // emitted >; -export type SnapshotFrom = ReturnTypeOrValue extends infer R - ? R extends ActorRef - ? TSnapshot - : R extends Actor - ? SnapshotFrom - : R extends ActorLogic< - infer _TSnapshot, - infer _TEvent, - infer _TInput, - infer _TEmitted, - infer _TSystem - > - ? ReturnType - : R extends ActorScope< - infer TSnapshot, +export type SnapshotFrom = + ReturnTypeOrValue extends infer R + ? R extends ActorRef + ? TSnapshot + : R extends Actor + ? SnapshotFrom + : R extends ActorLogic< + infer _TSnapshot, infer _TEvent, + infer _TInput, infer _TEmitted, infer _TSystem > - ? TSnapshot - : never - : never; + ? ReturnType + : R extends ActorScope< + infer TSnapshot, + infer _TEvent, + infer _TEmitted, + infer _TSystem + > + ? TSnapshot + : never + : never; export type EventFromLogic = TLogic extends ActorLogic< @@ -2321,39 +2330,40 @@ export type EmittedFrom = ? TEmitted : never; -type ResolveEventType = ReturnTypeOrValue extends infer R - ? R extends StateMachine< - infer _TContext, - infer TEvent, - infer _TChildren, - infer _TActor, - infer _TAction, - infer _TGuard, - infer _TDelay, - infer _TStateValue, - infer _TTag, - infer _TInput, - infer _TOutput, - infer _TEmitted, - infer _TMeta, - infer _TStateSchema - > - ? TEvent - : R extends MachineSnapshot< - infer _TContext, - infer TEvent, - infer _TChildren, - infer _TStateValue, - infer _TTag, - infer _TOutput, - infer _TMeta, - infer _TStateSchema - > +type ResolveEventType = + ReturnTypeOrValue extends infer R + ? R extends StateMachine< + infer _TContext, + infer TEvent, + infer _TChildren, + infer _TActor, + infer _TAction, + infer _TGuard, + infer _TDelay, + infer _TStateValue, + infer _TTag, + infer _TInput, + infer _TOutput, + infer _TEmitted, + infer _TMeta, + infer _TStateSchema + > ? TEvent - : R extends ActorRef + : R extends MachineSnapshot< + infer _TContext, + infer TEvent, + infer _TChildren, + infer _TStateValue, + infer _TTag, + infer _TOutput, + infer _TMeta, + infer _TStateSchema + > ? TEvent - : never - : never; + : R extends ActorRef + ? TEvent + : never + : never; export type EventFrom< T, @@ -2361,56 +2371,57 @@ export type EventFrom< TEvent extends EventObject = ResolveEventType > = IsNever extends true ? TEvent : ExtractEvent; -export type ContextFrom = ReturnTypeOrValue extends infer R - ? R extends StateMachine< - infer TContext, - infer _TEvent, - infer _TChildren, - infer _TActor, - infer _TAction, - infer _TGuard, - infer _TDelay, - infer _TStateValue, - infer _TTag, - infer _TInput, - infer _TOutput, - infer _TEmitted, - infer _TMeta, - infer _TStateSchema - > - ? TContext - : R extends MachineSnapshot< - infer TContext, - infer _TEvent, - infer _TChildren, - infer _TStateValue, - infer _TTag, - infer _TOutput, - infer _TMeta, - infer _TStateSchema - > +export type ContextFrom = + ReturnTypeOrValue extends infer R + ? R extends StateMachine< + infer TContext, + infer _TEvent, + infer _TChildren, + infer _TActor, + infer _TAction, + infer _TGuard, + infer _TDelay, + infer _TStateValue, + infer _TTag, + infer _TInput, + infer _TOutput, + infer _TEmitted, + infer _TMeta, + infer _TStateSchema + > ? TContext - : R extends Actor - ? TActorLogic extends StateMachine< + : R extends MachineSnapshot< infer TContext, infer _TEvent, infer _TChildren, - infer _TActor, - infer _TAction, - infer _TGuard, - infer _TDelay, infer _TStateValue, infer _TTag, - infer _TInput, infer _TOutput, - infer _TEmitted, infer _TMeta, infer _TStateSchema > - ? TContext + ? TContext + : R extends Actor + ? TActorLogic extends StateMachine< + infer TContext, + infer _TEvent, + infer _TChildren, + infer _TActor, + infer _TAction, + infer _TGuard, + infer _TDelay, + infer _TStateValue, + infer _TTag, + infer _TInput, + infer _TOutput, + infer _TEmitted, + infer _TMeta, + infer _TStateSchema + > + ? TContext + : never : never - : never - : never; + : never; export type InferEvent = { [T in E['type']]: { type: T } & Extract; @@ -2461,7 +2472,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..f8600f4ed3 100644 --- a/packages/xstate-store/src/store.ts +++ b/packages/xstate-store/src/store.ts @@ -1,4 +1,4 @@ -import { EnqueueActionsAction, EventObject } from 'xstate'; +import { EventObject } from 'xstate'; import { Cast, EnqueueObject, @@ -132,7 +132,7 @@ function createStoreCore< return { unsubscribe() { - eventListeners!.delete(wrappedHandler); + eventListeners.delete(wrappedHandler); } }; }, @@ -418,7 +418,7 @@ export function createStoreWithProducer< ) { return createStoreCore( initialContextOrConfig.context, - initialContextOrConfig.on as any, + initialContextOrConfig.on, producer ); } 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..069b1a7a8f 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.11.1(jiti@1.21.6) + globals: + specifier: ^15.8.0 + version: 15.9.0 husky: specifier: ^3.1.0 version: 3.1.0 @@ -115,6 +124,9 @@ importers: typescript: specifier: ^5.6.2 version: 5.6.2 + typescript-eslint: + specifier: ^8.0.1 + version: 8.6.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.6.2) vue: specifier: ^3.0.11 version: 3.4.32(typescript@5.6.2) @@ -1106,6 +1118,52 @@ 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==, tarball: https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz} + 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==, tarball: https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz} + 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==, tarball: https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.6.0': + resolution: {integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==, tarball: https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==, tarball: https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz} + 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/js@9.11.1': + resolution: {integrity: sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==, tarball: https://registry.npmjs.org/@eslint/js/-/js-9.11.1.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==, tarball: https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.0': + resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==, tarball: https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, tarball: https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.0': + resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==, tarball: https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz} + 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'} @@ -1450,6 +1508,9 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==, tarball: https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==, tarball: https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz} + '@types/express-serve-static-core@4.19.5': resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==, tarball: https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz} @@ -1621,6 +1682,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==, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.6.0.tgz} + 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==, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.6.0.tgz} + 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==, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.6.0.tgz} + 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==, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.6.0.tgz} + 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 +1995,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==, tarball: https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz} + 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 +3542,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==, tarball: https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz} + 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 +3978,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==, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz} + 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 +3991,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==, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz} + 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==, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz} + 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==, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.11.1: + resolution: {integrity: sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==, tarball: https://registry.npmjs.org/eslint/-/eslint-9.11.1.tgz} + 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==, tarball: https://registry.npmjs.org/espree/-/espree-10.1.0.tgz} + 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==, tarball: https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz} + 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 +4155,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==, tarball: https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz} + 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 +4193,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==, tarball: https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz} + 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 +4269,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==, tarball: https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz} + engines: {node: '>=16'} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==, tarball: https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz} + 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 +4469,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==, tarball: https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz} + 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 +4507,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==, tarball: https://registry.npmjs.org/globals/-/globals-14.0.0.tgz} + 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 +4552,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 +4871,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==, tarball: https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz} + 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 +5542,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==, tarball: https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz} + 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 +5622,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==, tarball: https://registry.npmjs.org/levn/-/levn-0.4.1.tgz} + 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 +5713,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==, tarball: https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz} + 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 +6378,10 @@ packages: peerDependencies: webpack: ^4.0.0 + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, tarball: https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz} + 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 +6492,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==, tarball: https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz} + 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 +6852,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==, tarball: https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz} + 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'} @@ -6769,7 +6984,6 @@ packages: engines: {node: '>=0.6.0', teleport: '>=0.2.0'} deprecated: |- You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. - (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) qs@2.3.3: @@ -6992,6 +7206,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==, tarball: https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz} + 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 +8050,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 +8074,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==, tarball: https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz} + 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,6 +8124,15 @@ 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==, tarball: https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.6.0.tgz} + 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'} @@ -8329,6 +8566,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==, tarball: https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz} + 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'} @@ -8487,7 +8728,7 @@ snapshots: '@babel/traverse': 7.25.6 '@babel/types': 7.25.6 convert-source-map: 2.0.0 - debug: 4.3.5(supports-color@6.1.0) + debug: 4.3.5 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -8507,7 +8748,7 @@ snapshots: '@babel/traverse': 7.25.6 '@babel/types': 7.25.6 convert-source-map: 2.0.0 - debug: 4.3.7 + debug: 4.3.7(supports-color@6.1.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -8584,7 +8825,7 @@ snapshots: '@babel/core': 7.24.9 '@babel/helper-compilation-targets': 7.24.8 '@babel/helper-plugin-utils': 7.24.8 - debug: 4.3.5(supports-color@6.1.0) + debug: 4.3.5 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -9408,7 +9649,7 @@ snapshots: '@babel/helper-split-export-declaration': 7.24.7 '@babel/parser': 7.24.8 '@babel/types': 7.24.9 - debug: 4.3.5(supports-color@6.1.0) + debug: 4.3.7(supports-color@6.1.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -9420,7 +9661,7 @@ snapshots: '@babel/parser': 7.25.6 '@babel/template': 7.25.0 '@babel/types': 7.25.6 - debug: 4.3.7 + debug: 4.3.7(supports-color@6.1.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -9614,6 +9855,51 @@ snapshots: human-id: 1.0.2 prettier: 2.8.8 + '@eslint-community/eslint-utils@4.4.0(eslint@9.11.1(jiti@1.21.6))': + dependencies: + eslint: 9.11.1(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.7(supports-color@6.1.0) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.6.0': {} + + '@eslint/eslintrc@3.1.0': + dependencies: + ajv: 6.12.6 + debug: 4.3.7(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/js@9.11.1': {} + + '@eslint/object-schema@2.1.4': {} + + '@eslint/plugin-kit@0.2.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 @@ -10175,6 +10461,8 @@ snapshots: '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} + '@types/express-serve-static-core@4.19.5': dependencies: '@types/node': 20.14.13 @@ -10374,6 +10662,87 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 + '@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.1(jiti@1.21.6))(typescript@5.6.2)': + dependencies: + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 8.6.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/scope-manager': 8.6.0 + '@typescript-eslint/type-utils': 8.6.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.6.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.6.0 + eslint: 9.11.1(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.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.6.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.6.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.6.0 + '@typescript-eslint/types': 8.6.0 + '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.6.0 + debug: 4.3.5 + eslint: 9.11.1(jiti@1.21.6) + optionalDependencies: + typescript: 5.6.2 + 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.11.1(jiti@1.21.6))(typescript@5.6.2)': + dependencies: + '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2) + '@typescript-eslint/utils': 8.6.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.6.2) + debug: 4.3.7(supports-color@6.1.0) + ts-api-utils: 1.3.0(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - eslint + - supports-color + + '@typescript-eslint/types@8.6.0': {} + + '@typescript-eslint/typescript-estree@8.6.0(typescript@5.6.2)': + dependencies: + '@typescript-eslint/types': 8.6.0 + '@typescript-eslint/visitor-keys': 8.6.0 + debug: 4.3.7(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.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.6.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.6.2)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(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.6.2) + eslint: 9.11.1(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 +11366,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 @@ -11016,7 +11389,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.5(supports-color@6.1.0) + debug: 4.3.7(supports-color@6.1.0) transitivePeerDependencies: - supports-color @@ -12622,15 +12995,15 @@ snapshots: optionalDependencies: supports-color: 6.1.0 - debug@4.3.5(supports-color@6.1.0): + debug@4.3.5: dependencies: ms: 2.1.2 - optionalDependencies: - supports-color: 6.1.0 - debug@4.3.7: + debug@4.3.7(supports-color@6.1.0): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 6.1.0 decamelize-keys@1.1.1: dependencies: @@ -12691,6 +13064,8 @@ snapshots: deep-extend@0.6.0: {} + deep-is@0.1.4: {} + deepmerge@1.5.2: {} deepmerge@4.3.1: {} @@ -13154,6 +13529,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 +13544,71 @@ 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.11.1(jiti@1.21.6): + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@1.21.6)) + '@eslint-community/regexpp': 4.11.1 + '@eslint/config-array': 0.18.0 + '@eslint/core': 0.6.0 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.11.1 + '@eslint/plugin-kit': 0.2.0 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.0 + '@nodelib/fs.walk': 1.2.8 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.7(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 +13796,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 +13833,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 +13937,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 @@ -13505,9 +13958,9 @@ snapshots: transitivePeerDependencies: - supports-color - follow-redirects@1.15.9(debug@4.3.5(supports-color@6.1.0)): + follow-redirects@1.15.9(debug@4.3.7(supports-color@6.1.0)): optionalDependencies: - debug: 4.3.5(supports-color@6.1.0) + debug: 4.3.7(supports-color@6.1.0) for-each@0.3.3: dependencies: @@ -13697,6 +14150,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 +14208,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 +14294,8 @@ snapshots: graceful-fs@4.2.11: {} + graphemer@1.4.0: {} + graphlib@2.1.8: dependencies: lodash: 4.17.21 @@ -14078,13 +14541,13 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.5(supports-color@6.1.0) + debug: 4.3.7(supports-color@6.1.0) transitivePeerDependencies: - supports-color - http-proxy-middleware@0.19.1(debug@4.3.5(supports-color@6.1.0))(supports-color@6.1.0): + http-proxy-middleware@0.19.1(debug@4.3.7(supports-color@6.1.0))(supports-color@6.1.0): dependencies: - http-proxy: 1.18.1(debug@4.3.5(supports-color@6.1.0)) + http-proxy: 1.18.1(debug@4.3.7(supports-color@6.1.0)) is-glob: 4.0.3 lodash: 4.17.21 micromatch: 3.1.10(supports-color@6.1.0) @@ -14095,17 +14558,17 @@ snapshots: http-proxy-middleware@1.3.1: dependencies: '@types/http-proxy': 1.17.15 - http-proxy: 1.18.1(debug@4.3.5(supports-color@6.1.0)) + http-proxy: 1.18.1(debug@4.3.7(supports-color@6.1.0)) is-glob: 4.0.3 is-plain-obj: 3.0.0 micromatch: 4.0.7 transitivePeerDependencies: - debug - http-proxy@1.18.1(debug@4.3.5(supports-color@6.1.0)): + http-proxy@1.18.1(debug@4.3.7(supports-color@6.1.0)): dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.9(debug@4.3.5(supports-color@6.1.0)) + follow-redirects: 1.15.9(debug@4.3.7(supports-color@6.1.0)) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -14141,7 +14604,7 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.5(supports-color@6.1.0) + debug: 4.3.7(supports-color@6.1.0) transitivePeerDependencies: - supports-color @@ -14204,6 +14667,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 @@ -14572,7 +15040,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.5(supports-color@6.1.0) + debug: 4.3.7(supports-color@6.1.0) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -15011,6 +15479,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 +15566,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 +15716,8 @@ snapshots: lodash.memoize@4.1.2: {} + lodash.merge@4.6.2: {} + lodash.startcase@4.4.0: {} lodash.template@4.5.0: @@ -15580,7 +16057,7 @@ snapshots: micromark@4.0.0: dependencies: '@types/debug': 4.1.12 - debug: 4.3.5(supports-color@6.1.0) + debug: 4.3.7(supports-color@6.1.0) decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.1 @@ -16028,6 +16505,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 +16615,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 +17027,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): @@ -16651,7 +17143,7 @@ snapshots: puppeteer@1.20.0: dependencies: - debug: 4.3.5(supports-color@6.1.0) + debug: 4.3.5 extract-zip: 1.7.0 https-proxy-agent: 2.2.4 mime: 2.6.0 @@ -16924,6 +17416,8 @@ snapshots: resolve-from@3.0.0: {} + resolve-from@4.0.0: {} + resolve-from@5.0.0: {} resolve-pkg@0.1.0: @@ -17208,7 +17702,7 @@ snapshots: simple-git@1.132.0: dependencies: - debug: 4.3.5(supports-color@6.1.0) + debug: 4.3.7(supports-color@6.1.0) transitivePeerDependencies: - supports-color @@ -17351,7 +17845,7 @@ snapshots: spdy-transport@3.0.0(supports-color@6.1.0): dependencies: - debug: 4.3.5(supports-color@6.1.0) + debug: 4.3.7(supports-color@6.1.0) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -17362,7 +17856,7 @@ snapshots: spdy@4.0.2(supports-color@6.1.0): dependencies: - debug: 4.3.5(supports-color@6.1.0) + debug: 4.3.7(supports-color@6.1.0) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -17827,6 +18321,10 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 + ts-api-utils@1.3.0(typescript@5.6.2): + dependencies: + typescript: 5.6.2 + tsconfig@7.0.0: dependencies: '@types/strip-bom': 3.0.0 @@ -17846,6 +18344,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 +18401,17 @@ snapshots: typedarray@0.0.6: {} + typescript-eslint@8.6.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.6.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.6.2))(eslint@9.11.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/parser': 8.6.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.6.2) + '@typescript-eslint/utils': 8.6.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - eslint + - supports-color + typescript@5.6.2: {} uc.micro@1.0.6: {} @@ -18400,11 +18913,11 @@ snapshots: chokidar: 2.1.8(supports-color@6.1.0) compression: 1.7.4(supports-color@6.1.0) connect-history-api-fallback: 1.6.0 - debug: 4.3.5(supports-color@6.1.0) + debug: 4.3.7(supports-color@6.1.0) del: 4.1.1 express: 4.21.0(supports-color@6.1.0) html-entities: 1.4.0 - http-proxy-middleware: 0.19.1(debug@4.3.5(supports-color@6.1.0))(supports-color@6.1.0) + http-proxy-middleware: 0.19.1(debug@4.3.7(supports-color@6.1.0))(supports-color@6.1.0) import-local: 2.0.0 internal-ip: 4.3.0 ip: 1.1.9 @@ -18555,6 +19068,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/"] -}