diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 362f0d57c..000000000 --- a/.eslintignore +++ /dev/null @@ -1,4 +0,0 @@ -# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors -# SPDX-License-Identifier: AGPL-3.0-or-later -dist/ -node_modules/ \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 8a95224bc..000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": [ - "@nextcloud/eslint-config/typescript" - ], - "overrides": [ - { - "files": ["**.spec.*"], - "rules": { - "no-console": "off" - } - } - ] -} diff --git a/__mocks__/@nextcloud/auth.js b/__mocks__/@nextcloud/auth.js index 49a4c6d45..838e7b8cc 100644 --- a/__mocks__/@nextcloud/auth.js +++ b/__mocks__/@nextcloud/auth.js @@ -2,7 +2,7 @@ * SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -export const getCurrentUser = function() { +export function getCurrentUser() { return { uid: 'test', displayName: 'Test', @@ -10,6 +10,6 @@ export const getCurrentUser = function() { } } -export const getRequestToken = function() { +export function getRequestToken() { return 'some-token-string' } diff --git a/__tests__/actions/fileAction.spec.ts b/__tests__/actions/fileAction.spec.ts index a3153b6dd..559b91c64 100644 --- a/__tests__/actions/fileAction.spec.ts +++ b/__tests__/actions/fileAction.spec.ts @@ -3,17 +3,17 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -import type { Folder, Node } from '../../lib/node/index.ts' +import type { FileActionData } from '../../lib/actions/index.ts' import type { View } from '../../lib/navigation/view.ts' +import type { Folder, Node } from '../../lib/node/index.ts' import { beforeEach, describe, expect, test, vi } from 'vitest' -import { getFileActions, registerFileAction, FileAction, DefaultType, FileActionData } from '../../lib/actions/index.ts' +import { DefaultType, FileAction, getFileActions, registerFileAction } from '../../lib/actions/index.ts' import logger from '../../lib/utils/logger.ts' const folder = {} as Folder const view = {} as View describe('FileActions init', () => { - beforeEach(() => { delete window._nc_fileactions }) @@ -101,8 +101,7 @@ describe('Invalid FileAction creation', () => { displayName: () => 'Test', iconSvgInline: () => '', exec: async () => true, - } as unknown as FileAction), - ).toThrowError('Invalid id') + } as unknown as FileAction)).toThrowError('Invalid id') }) test('Invalid displayName', () => { expect(() => new FileAction({ @@ -110,8 +109,7 @@ describe('Invalid FileAction creation', () => { displayName: 'Test', iconSvgInline: () => '', exec: async () => true, - } as unknown as FileAction), - ).toThrowError('Invalid displayName function') + } as unknown as FileAction)).toThrowError('Invalid displayName function') }) test('Invalid title', () => { expect(() => new FileAction({ @@ -120,8 +118,7 @@ describe('Invalid FileAction creation', () => { title: 'Test', iconSvgInline: () => '', exec: async () => true, - } as unknown as FileAction), - ).toThrowError('Invalid title function') + } as unknown as FileAction)).toThrowError('Invalid title function') }) test('Invalid iconSvgInline', () => { expect(() => new FileAction({ @@ -129,8 +126,7 @@ describe('Invalid FileAction creation', () => { displayName: () => 'Test', iconSvgInline: '', exec: async () => true, - } as unknown as FileAction), - ).toThrowError('Invalid iconSvgInline function') + } as unknown as FileAction)).toThrowError('Invalid iconSvgInline function') }) test('Invalid exec', () => { expect(() => new FileAction({ @@ -138,8 +134,7 @@ describe('Invalid FileAction creation', () => { displayName: () => 'Test', iconSvgInline: () => '', exec: false, - } as unknown as FileAction), - ).toThrowError('Invalid exec function') + } as unknown as FileAction)).toThrowError('Invalid exec function') }) test('Invalid enabled', () => { expect(() => new FileAction({ @@ -148,8 +143,7 @@ describe('Invalid FileAction creation', () => { iconSvgInline: () => '', exec: async () => true, enabled: false, - } as unknown as FileAction), - ).toThrowError('Invalid enabled function') + } as unknown as FileAction)).toThrowError('Invalid enabled function') }) test('Invalid execBatch', () => { expect(() => new FileAction({ @@ -158,8 +152,7 @@ describe('Invalid FileAction creation', () => { iconSvgInline: () => '', exec: async () => true, execBatch: false, - } as unknown as FileAction), - ).toThrowError('Invalid execBatch function') + } as unknown as FileAction)).toThrowError('Invalid execBatch function') }) test('Invalid order', () => { expect(() => new FileAction({ @@ -168,8 +161,7 @@ describe('Invalid FileAction creation', () => { iconSvgInline: () => '', exec: async () => true, order: 'invalid', - } as unknown as FileAction), - ).toThrowError('Invalid order') + } as unknown as FileAction)).toThrowError('Invalid order') }) test('Invalid parent', () => { expect(() => new FileAction({ @@ -178,8 +170,7 @@ describe('Invalid FileAction creation', () => { iconSvgInline: () => '', exec: async () => true, parent: true, - } as unknown as FileAction), - ).toThrowError('Invalid parent') + } as unknown as FileAction)).toThrowError('Invalid parent') }) test('Invalid default', () => { expect(() => new FileAction({ @@ -188,8 +179,7 @@ describe('Invalid FileAction creation', () => { iconSvgInline: () => '', exec: async () => true, default: 'invalid', - } as unknown as FileAction), - ).toThrowError('Invalid default') + } as unknown as FileAction)).toThrowError('Invalid default') }) test('Invalid destructives', () => { expect(() => new FileAction({ @@ -198,8 +188,7 @@ describe('Invalid FileAction creation', () => { iconSvgInline: () => '', exec: async () => true, destructive: 'false', - } as unknown as FileActionData), - ).toThrowError('Invalid destructive') + } as unknown as FileActionData)).toThrowError('Invalid destructive') }) test('Invalid inline', () => { expect(() => new FileAction({ @@ -208,8 +197,7 @@ describe('Invalid FileAction creation', () => { iconSvgInline: () => '', exec: async () => true, inline: true, - } as unknown as FileAction), - ).toThrowError('Invalid inline function') + } as unknown as FileAction)).toThrowError('Invalid inline function') expect(() => new FileAction({ id: 'test', @@ -218,8 +206,7 @@ describe('Invalid FileAction creation', () => { exec: async () => true, inline: () => true, renderInline: false, - } as unknown as FileAction), - ).toThrowError('Invalid renderInline function') + } as unknown as FileAction)).toThrowError('Invalid renderInline function') }) }) diff --git a/__tests__/actions/fileListAction.spec.ts b/__tests__/actions/fileListAction.spec.ts index 355ee6568..7ae8ec640 100644 --- a/__tests__/actions/fileListAction.spec.ts +++ b/__tests__/actions/fileListAction.spec.ts @@ -4,23 +4,25 @@ */ import type { View } from '../../lib/navigation/view.ts' +import type { Folder } from '../../lib/node/index.ts' import { beforeEach, describe, expect, test, vi } from 'vitest' -import { getFileListActions, registerFileListAction, FileListAction } from '../../lib/actions/fileListAction.ts' -import { Folder } from '../../lib/node/index.ts' +import { FileListAction, getFileListActions, registerFileListAction } from '../../lib/actions/fileListAction.ts' import logger from '../../lib/utils/logger.ts' const folder = {} as Folder const view = {} as View -const mockAction = (id: string) => new FileListAction({ - id, - displayName: () => 'Test', - iconSvgInline: () => '', - order: 0, - // @ts-expect-error mocking for tests - exec: async () => {}, -}) +function mockAction(id: string) { + return new FileListAction({ + id, + displayName: () => 'Test', + iconSvgInline: () => '', + order: 0, + // @ts-expect-error mocking for tests + exec: async () => {}, + }) +} describe('FileListActions init', () => { beforeEach(() => { @@ -61,9 +63,9 @@ describe('FileListActions init', () => { registerFileListAction(bazAction) expect(actions).toHaveLength(3) - expect(actions.find(action => action.id === 'foo')).toStrictEqual(fooAction) - expect(actions.find(action => action.id === 'bar')).toStrictEqual(barAction) - expect(actions.find(action => action.id === 'baz')).toStrictEqual(bazAction) + expect(actions.find((action) => action.id === 'foo')).toStrictEqual(fooAction) + expect(actions.find((action) => action.id === 'bar')).toStrictEqual(barAction) + expect(actions.find((action) => action.id === 'baz')).toStrictEqual(bazAction) }) test('Register an action with a duplicate id', () => { @@ -91,8 +93,7 @@ describe('Invalid FileListAction creation', () => { iconSvgInline: () => '', order: 0, exec: async () => {}, - } as unknown as FileListAction), - ).toThrowError('Invalid id') + } as unknown as FileListAction)).toThrowError('Invalid id') }) test('Invalid displayName', () => { expect(() => new FileListAction({ @@ -100,8 +101,7 @@ describe('Invalid FileListAction creation', () => { iconSvgInline: () => '', order: 0, exec: async () => {}, - } as unknown as FileListAction), - ).toThrowError('Invalid displayName function') + } as unknown as FileListAction)).toThrowError('Invalid displayName function') }) test('Invalid iconSvgInline', () => { expect(() => new FileListAction({ @@ -110,8 +110,7 @@ describe('Invalid FileListAction creation', () => { displayName: () => 'Test', order: 0, exec: async () => {}, - } as unknown as FileListAction), - ).toThrowError('Invalid iconSvgInline function') + } as unknown as FileListAction)).toThrowError('Invalid iconSvgInline function') }) test('Invalid order', () => { expect(() => new FileListAction({ @@ -120,8 +119,7 @@ describe('Invalid FileListAction creation', () => { iconSvgInline: () => '', order: null, exec: async () => {}, - } as unknown as FileListAction), - ).toThrowError('Invalid order') + } as unknown as FileListAction)).toThrowError('Invalid order') }) test('Invalid enabled', () => { expect(() => new FileListAction({ @@ -131,8 +129,7 @@ describe('Invalid FileListAction creation', () => { order: 0, enabled: null, exec: async () => {}, - } as unknown as FileListAction), - ).toThrowError('Invalid enabled function') + } as unknown as FileListAction)).toThrowError('Invalid enabled function') }) test('Invalid exec', () => { expect(() => new FileListAction({ @@ -140,8 +137,7 @@ describe('Invalid FileListAction creation', () => { displayName: () => 'Test', iconSvgInline: () => '', exec: null, - } as unknown as FileListAction), - ).toThrowError('Invalid exec function') + } as unknown as FileListAction)).toThrowError('Invalid exec function') }) }) diff --git a/__tests__/dav/dav.spec.ts b/__tests__/dav/dav.spec.ts index 07284bf52..962b7561e 100644 --- a/__tests__/dav/dav.spec.ts +++ b/__tests__/dav/dav.spec.ts @@ -2,22 +2,22 @@ * SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' -import { readFile } from 'node:fs/promises' +import type { FileStat, WebDAVClient } from 'webdav' + +import * as auth from '@nextcloud/auth' +import { readFile } from 'node:fs/promises' +// required as default URL will be the DOM URL class which will use the window.location +import { URL as FileURL } from 'node:url' +import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' import { defaultRemoteURL, defaultRootPath, - getFavoritesReport, getFavoriteNodes, + getFavoritesReport, resultToNode, -} from '../../lib/dav/index' -import { File, Folder, NodeStatus } from '../../lib' -import { FileStat, WebDAVClient } from 'webdav' -import * as auth from '@nextcloud/auth' - -// required as default URL will be the DOM URL class which will use the window.location -import { URL as FileURL } from 'node:url' +} from '../../lib/dav/index.ts' +import { File, Folder, NodeStatus } from '../../lib/index.ts' vi.mock('@nextcloud/auth') vi.mock('@nextcloud/router') @@ -185,7 +185,7 @@ describe('DAV requests', () => { // Mock the WebDAV client const client = { - // eslint-disable-next-line @typescript-eslint/no-explicit-any + getDirectoryContents: vi.fn((path: string, options: any) => { if (options?.details) { return { @@ -218,7 +218,7 @@ describe('DAV requests', () => { // Mock the WebDAV client const client = { - // eslint-disable-next-line @typescript-eslint/no-explicit-any + getDirectoryContents: vi.fn((path: string, options: any) => { if (options?.details) { return { diff --git a/__tests__/dav/davPermissions.spec.ts b/__tests__/dav/davPermissions.spec.ts index a48be6e5e..5629abf14 100644 --- a/__tests__/dav/davPermissions.spec.ts +++ b/__tests__/dav/davPermissions.spec.ts @@ -2,10 +2,9 @@ * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -import { describe, it, expect } from 'vitest' - -import { parsePermissions } from '../../lib/dav/davPermissions' -import { Permission } from '../../lib/permissions' +import { describe, expect, it } from 'vitest' +import { parsePermissions } from '../../lib/dav/davPermissions.ts' +import { Permission } from '../../lib/permissions.ts' const dataSet = [ { input: undefined, permissions: Permission.NONE }, @@ -29,7 +28,6 @@ const dataSet = [ describe('davParsePermissions', () => { dataSet.forEach(({ input, permissions }) => { it(`expect ${input} to be ${permissions}`, () => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any expect(parsePermissions(input as any as string)).toBe(permissions) }) }) diff --git a/__tests__/dav/davProperties.spec.ts b/__tests__/dav/davProperties.spec.ts index 0be6449ca..0297ac16d 100644 --- a/__tests__/dav/davProperties.spec.ts +++ b/__tests__/dav/davProperties.spec.ts @@ -2,9 +2,9 @@ * SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -import { beforeEach, describe, expect, test, vi } from 'vitest' -import { XMLValidator } from 'fast-xml-parser' +import { XMLValidator } from 'fast-xml-parser' +import { beforeEach, describe, expect, test, vi } from 'vitest' import { defaultDavNamespaces, defaultDavProperties, @@ -14,19 +14,10 @@ import { getFavoritesReport, getRecentSearch, registerDavProperty, -} from '../../lib/dav/davProperties' - -import logger from '../../lib/utils/logger' - -declare global { - interface Window { - _nc_dav_namespaces?: string[] - _nc_dav_properties?: string[] - } -} +} from '../../lib/dav/davProperties.ts' +import logger from '../../lib/utils/logger.ts' describe('DAV Properties', () => { - beforeEach(() => { delete window._nc_dav_properties delete window._nc_dav_namespaces @@ -39,14 +30,14 @@ describe('DAV Properties', () => { expect(window._nc_dav_namespaces).toBeUndefined() const namespace = getDavNameSpaces() expect(namespace).toBeTruthy() - Object.keys(defaultDavNamespaces).forEach(n => expect(namespace.includes(n) && namespace.includes(defaultDavNamespaces[n])).toBe(true)) + Object.keys(defaultDavNamespaces).forEach((n) => expect(namespace.includes(n) && namespace.includes(defaultDavNamespaces[n])).toBe(true)) }) test('getDavProperties fall back to defaults', () => { expect(window._nc_dav_properties).toBeUndefined() const props = getDavProperties() expect(props).toBeTruthy() - defaultDavProperties.forEach(p => expect(props.includes(p)).toBe(true)) + defaultDavProperties.forEach((p) => expect(props.includes(p)).toBe(true)) }) test('getDefaultPropfind', () => { diff --git a/__tests__/dav/public-shares.spec.ts b/__tests__/dav/public-shares.spec.ts index 959f1afd0..e11a21c9a 100644 --- a/__tests__/dav/public-shares.spec.ts +++ b/__tests__/dav/public-shares.spec.ts @@ -3,9 +3,9 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -import type { ArgumentsType } from 'vitest' import type { FileStat } from 'webdav' -import type { resultToNode as IResultToNode } from '../../lib/dav/dav' +import type { resultToNode as IResultToNode } from '../../lib/dav/dav.ts' + import { beforeEach, describe, expect, test, vi } from 'vitest' const auth = vi.hoisted(() => ({ getCurrentUser: vi.fn() })) @@ -16,19 +16,18 @@ vi.mock('@nextcloud/auth', () => auth) vi.mock('@nextcloud/router', () => router) vi.mock('@nextcloud/sharing/public', () => sharing) -const restoreMocks = () => { +function restoreMocks() { vi.resetAllMocks() router.generateRemoteUrl.mockImplementation((service) => `https://example.com/remote.php/${service}`) } -const mockPublicShare = () => { +function mockPublicShare() { auth.getCurrentUser.mockImplementationOnce(() => null) sharing.isPublicShare.mockImplementation(() => true) sharing.getSharingToken.mockImplementation(() => 'token-1234') } describe('DAV path functions', () => { - beforeEach(() => { vi.resetModules() restoreMocks() @@ -37,14 +36,14 @@ describe('DAV path functions', () => { test('root path is correct on public shares', async () => { mockPublicShare() - const { getRootPath } = await import('../../lib/dav/dav') + const { getRootPath } = await import('../../lib/dav/dav.ts') expect(getRootPath()).toBe('/files/token-1234') }) test('remote URL is correct on public shares', async () => { mockPublicShare() - const { getRemoteURL } = await import('../../lib/dav/dav') + const { getRemoteURL } = await import('../../lib/dav/dav.ts') expect(getRemoteURL()).toBe('https://example.com/public.php/dav') }) }) @@ -56,8 +55,8 @@ describe('on public shares', () => { }) // Wrapper function as we can not static import the function to allow mocking the modules - const resultToNode = async (...rest: ArgumentsType) => { - const { resultToNode } = await import('../../lib/dav/dav') + const resultToNode = async (...rest: Parameters) => { + const { resultToNode } = await import('../../lib/dav/dav.ts') return resultToNode(...rest) } diff --git a/__tests__/fileListFilter.spec.ts b/__tests__/fileListFilter.spec.ts index b16917334..aa3811d43 100644 --- a/__tests__/fileListFilter.spec.ts +++ b/__tests__/fileListFilter.spec.ts @@ -2,12 +2,14 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -import { beforeEach, describe, expect, test, vi } from 'vitest' -import { FileListFilter, getFileListFilters, IFileListFilterChip, registerFileListFilter, unregisterFileListFilter } from '../lib' + +import type { IFileListFilterChip } from '../lib/fileListFilters.ts' + import { subscribe } from '@nextcloud/event-bus' +import { beforeEach, describe, expect, test, vi } from 'vitest' +import { FileListFilter, getFileListFilters, registerFileListFilter, unregisterFileListFilter } from '../lib/fileListFilters.ts' class TestFilter extends FileListFilter { - public testUpdated() { this.filterUpdated() } @@ -15,7 +17,6 @@ class TestFilter extends FileListFilter { public testUpdateChips(chips) { this.updateChips(chips) } - } describe('File list filter class', () => { diff --git a/__tests__/fileListHeaders.spec.ts b/__tests__/fileListHeaders.spec.ts index b946f40ac..5eebb87df 100644 --- a/__tests__/fileListHeaders.spec.ts +++ b/__tests__/fileListHeaders.spec.ts @@ -2,17 +2,14 @@ * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/no-non-null-assertion */ -/* eslint-disable no-new */ -import { describe, expect, test, beforeEach, vi } from 'vitest' -import { Header, getFileListHeaders, registerFileListHeaders } from '../lib/fileListHeaders.ts' -import { Folder } from '../lib/node/index.ts' +import type { Folder } from '../lib/node/index.ts' + +import { beforeEach, describe, expect, test, vi } from 'vitest' +import { getFileListHeaders, Header, registerFileListHeaders } from '../lib/fileListHeaders.ts' import logger from '../lib/utils/logger.ts' describe('FileListHeader init', () => { - beforeEach(() => { delete window._nc_filelistheader }) @@ -164,7 +161,6 @@ describe('FileListHeader validate', () => { }) describe('FileListHeader exec', () => { - test('Initializing FileListHeader', () => { const enabled = vi.fn() const render = vi.fn() diff --git a/__tests__/files/cloning.spec.ts b/__tests__/files/cloning.spec.ts index 14e2f0377..15c669917 100644 --- a/__tests__/files/cloning.spec.ts +++ b/__tests__/files/cloning.spec.ts @@ -3,8 +3,10 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ +import type { NodeData } from '../../lib/node/index.ts' + import { describe, expect, test } from 'vitest' -import { File, NodeData, NodeStatus } from '../../lib/node/index.ts' +import { File, NodeStatus } from '../../lib/node/index.ts' import { Permission } from '../../lib/permissions.ts' describe('File cloning', () => { diff --git a/__tests__/files/file.spec.ts b/__tests__/files/file.spec.ts index 633aeb475..50d6c370d 100644 --- a/__tests__/files/file.spec.ts +++ b/__tests__/files/file.spec.ts @@ -256,7 +256,6 @@ describe('Altering attributes does NOT updates mtime', () => { expect(file.mtime).toBeUndefined() expect(file.permissions).toBe(Permission.ALL) }) - }) describe('Altering top-level properties updates mtime', () => { @@ -295,5 +294,4 @@ describe('Altering top-level properties updates mtime', () => { expect(file.mtime?.getDate()).toBe(new Date().getDate()) expect(file.size).toBe(200) }) - }) diff --git a/__tests__/files/folder.spec.ts b/__tests__/files/folder.spec.ts index df58ea1b9..b8f05f4c1 100644 --- a/__tests__/files/folder.spec.ts +++ b/__tests__/files/folder.spec.ts @@ -4,7 +4,6 @@ */ import { describe, expect, test } from 'vitest' - import { FileType, Folder } from '../../lib/node/index.ts' import { Permission } from '../../lib/permissions.ts' diff --git a/__tests__/files/node.spec.ts b/__tests__/files/node.spec.ts index 136b7ce01..762ce7723 100644 --- a/__tests__/files/node.spec.ts +++ b/__tests__/files/node.spec.ts @@ -4,6 +4,7 @@ */ import type { Attribute, NodeData } from '../../lib/node/index.ts' +import type { TNodeStatus } from '../../lib/node/node.ts' import { describe, expect, test } from 'vitest' import { File, Folder, NodeStatus } from '../../lib/node/index.ts' @@ -150,7 +151,7 @@ describe('Mtime attribute', () => { expect(file.mtime?.toISOString()).toBe(mtime.toISOString()) // Wait for 10ms to ensure mtime is updated - await new Promise(resolve => setTimeout(resolve, 10)) + await new Promise((resolve) => setTimeout(resolve, 10)) // Update mtime file.mtime = new Date() @@ -172,7 +173,7 @@ describe('Mtime attribute', () => { expect(file.mtime?.toISOString()).toBe(mtime.toISOString()) // Wait for 10ms to ensure mtime is updated - await new Promise(resolve => setTimeout(resolve, 10)) + await new Promise((resolve) => setTimeout(resolve, 10)) // Update mtime file.updateMtime() @@ -209,7 +210,7 @@ describe('Size attribute', () => { expect(file.mtime?.toISOString()).toBe(mtime?.toISOString()) // Wait for 10ms to ensure mtime is updated - await new Promise(resolve => setTimeout(resolve, 10)) + await new Promise((resolve) => setTimeout(resolve, 10)) // Update size file.size = 5678 @@ -247,7 +248,7 @@ describe('Permissions attribute', () => { expect(file.mtime?.toISOString()).toBe(mtime?.toISOString()) // Wait for 10ms to ensure mtime is updated - await new Promise(resolve => setTimeout(resolve, 10)) + await new Promise((resolve) => setTimeout(resolve, 10)) // Update permissions file.permissions = Permission.ALL @@ -343,8 +344,10 @@ describe('Sanity checks', () => { displayname: 'test', owner: 'emma', }) - // @ts-expect-error wrong type error check - expect(() => { file.displayname = true }).toThrowError('Invalid displayname') + expect(() => { + // @ts-expect-error wrong type error check + file.displayname = true + }).toThrowError('Invalid displayname') }) test('Invalid mtime', () => { @@ -360,8 +363,10 @@ describe('Sanity checks', () => { root: '/files/emma', owner: 'emma', }) - // @ts-expect-error wrong type error check - expect(() => { file.mtime = 'invalid' }).toThrowError('Invalid mtime type') + expect(() => { + // @ts-expect-error wrong type error check + file.mtime = 'invalid' + }).toThrowError('Invalid mtime type') }) test('Invalid crtime', () => { @@ -388,9 +393,13 @@ describe('Sanity checks', () => { mime: 'image/jpeg', owner: 'emma', }) - // @ts-expect-error wrong type error check - expect(() => { file.mime = 1234 }).toThrowError('Missing or invalid mandatory mime') - expect(() => { file.mime = 'image' }).toThrowError('Missing or invalid mandatory mime') + expect(() => { + // @ts-expect-error wrong type error check + file.mime = 1234 + }).toThrowError('Missing or invalid mandatory mime') + expect(() => { + file.mime = 'image' + }).toThrowError('Missing or invalid mandatory mime') }) test('Invalid attributes', () => { @@ -428,8 +437,10 @@ describe('Sanity checks', () => { mime: 'image/jpeg', owner: 'emma', }) - // @ts-expect-error wrong type error check - expect(() => { file.size = 'test' }).toThrowError('Invalid size type') + expect(() => { + // @ts-expect-error wrong type error check + file.size = 'test' + }).toThrowError('Invalid size type') }) test('Invalid owner', () => { @@ -485,7 +496,7 @@ describe('Sanity checks', () => { root: '/files/emma', mime: 'image/jpeg', owner: 'emma', - status: 'invalid' as unknown as NodeStatus, + status: 'invalid' as unknown as TNodeStatus, })).toThrowError('Status must be a valid NodeStatus') const file = new File({ @@ -495,8 +506,10 @@ describe('Sanity checks', () => { owner: 'emma', status: NodeStatus.LOCKED, }) - // @ts-expect-error wrong type error check - expect(() => { file.status = 'invalid' }).toThrowError('Status must be a valid NodeStatus') + expect(() => { + // @ts-expect-error wrong type error check + file.status = 'invalid' + }).toThrowError('Status must be a valid NodeStatus') }) }) @@ -899,10 +912,11 @@ describe('Attributes update', () => { }) // We can not update the owner - // @ts-expect-error owner is a read-only property - expect(() => { file.owner = 'admin' }).toThrowError() + expect(() => { + // @ts-expect-error owner is a read-only property + file.owner = 'admin' + }).toThrowError() // The owner is still the original one expect(file?.owner).toBe('emma') }) - }) diff --git a/__tests__/index.spec.ts b/__tests__/index.spec.ts index 0ac36dbb6..6a5797ac7 100644 --- a/__tests__/index.spec.ts +++ b/__tests__/index.spec.ts @@ -6,18 +6,18 @@ import type { NewMenuEntry } from '../lib/newMenu/NewMenu.ts' import { describe, expect, test } from 'vitest' +import { FileAction, getFileActions, registerFileAction } from '../lib/actions/fileAction.ts' import { - formatFileSize, addNewFileMenuEntry, - removeNewFileMenuEntry, - getNewFileMenuEntries, - FileType, File, + FileType, Folder, + formatFileSize, + getNewFileMenuEntries, Node, Permission, + removeNewFileMenuEntry, } from '../lib/index.ts' -import { FileAction, registerFileAction, getFileActions } from '../lib/actions/fileAction.ts' import { NewMenu } from '../lib/newMenu/NewMenu.ts' describe('Exports checks', () => { diff --git a/__tests__/navigation.spec.ts b/__tests__/navigation.spec.ts index 1b40eec4c..fe356ccdd 100644 --- a/__tests__/navigation.spec.ts +++ b/__tests__/navigation.spec.ts @@ -3,10 +3,10 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -import { describe, it, expect, vi } from 'vitest' -import { Navigation, getNavigation } from '../lib/navigation/navigation' -import { mockView } from './fixtures/view.ts' +import { describe, expect, it, vi } from 'vitest' import { View } from '../lib/index.ts' +import { getNavigation, Navigation } from '../lib/navigation/navigation.ts' +import { mockView } from './fixtures/view.ts' describe('getNavigation', () => { it('creates a new navigation if needed', () => { diff --git a/__tests__/newFileMenu.spec.ts b/__tests__/newFileMenu.spec.ts index 3e10066a8..294b0d85a 100644 --- a/__tests__/newFileMenu.spec.ts +++ b/__tests__/newFileMenu.spec.ts @@ -5,12 +5,12 @@ import type { NewMenuEntry } from '../lib/newMenu/index.ts' -import { describe, expect, test, vi, afterEach } from 'vitest' +import { afterEach, describe, expect, test, vi } from 'vitest' import { addNewFileMenuEntry, getNewFileMenu, getNewFileMenuEntries } from '../lib/newMenu/index.ts' import { NewMenu, NewMenuEntryCategory } from '../lib/newMenu/NewMenu.ts' import { Folder } from '../lib/node/index.ts' import { Permission } from '../lib/permissions.ts' -import logger from '../lib/utils/logger' +import logger from '../lib/utils/logger.ts' describe('NewFileMenu init', () => { test('Initializing NewFileMenu', () => { @@ -296,7 +296,7 @@ describe('NewMenu getEntries filter', () => { displayName: 'Create empty file', templateName: 'New file', iconSvgInline: '', - enabled: folder => (folder.permissions & Permission.CREATE) !== 0, + enabled: (folder) => (folder.permissions & Permission.CREATE) !== 0, handler: () => {}, } newFileMenu.registerEntry(entry1) @@ -306,7 +306,7 @@ describe('NewMenu getEntries filter', () => { displayName: 'Create new markdown file', templateName: 'New text.md', iconSvgInline: '', - enabled: folder => (folder.permissions & Permission.CREATE) !== 0, + enabled: (folder) => (folder.permissions & Permission.CREATE) !== 0, handler: () => {}, } newFileMenu.registerEntry(entry2) @@ -333,7 +333,7 @@ describe('NewMenu getEntries filter', () => { displayName: 'Create empty file', templateName: 'New file', iconSvgInline: '', - enabled: folder => (folder.permissions & Permission.CREATE) !== 0, + enabled: (folder) => (folder.permissions & Permission.CREATE) !== 0, handler: () => {}, } newFileMenu.registerEntry(entry1) @@ -343,7 +343,7 @@ describe('NewMenu getEntries filter', () => { displayName: 'Create new markdown file', templateName: 'New text.md', iconSvgInline: '', - enabled: folder => (folder.permissions & Permission.CREATE) !== 0, + enabled: (folder) => (folder.permissions & Permission.CREATE) !== 0, handler: () => {}, } newFileMenu.registerEntry(entry2) @@ -377,7 +377,7 @@ describe('NewMenu getEntries filter', () => { displayName: 'Create new markdown file', templateName: 'New text.md', iconSvgInline: '', - enabled: folder => (folder.permissions & Permission.CREATE) !== 0, + enabled: (folder) => (folder.permissions & Permission.CREATE) !== 0, handler: () => {}, } newFileMenu.registerEntry(entry2) diff --git a/__tests__/sidebar/sidebarTab.spec.ts b/__tests__/sidebar/sidebarTab.spec.ts index 2da93b15f..47ed3cbfa 100644 --- a/__tests__/sidebar/sidebarTab.spec.ts +++ b/__tests__/sidebar/sidebarTab.spec.ts @@ -3,13 +3,15 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ +import type { ISidebarTab } from '../../lib/sidebar/SidebarTab.ts' + import { beforeEach, describe, expect, it, vi } from 'vitest' -import { getSidebarTabs, ISidebarTab, registerSidebarTab } from '../../lib/sidebar/SidebarTab.ts' +import { getSidebarTabs, registerSidebarTab } from '../../lib/sidebar/SidebarTab.ts' + // missing in JSDom but supported by every browser! import 'css.escape' describe('Sidebar tabs', () => { - beforeEach(() => { vi.restoreAllMocks() delete window._nc_files_sidebar_tabs @@ -49,30 +51,28 @@ describe('Sidebar tabs', () => { describe('Tab validation', () => { it('fails with an invalid parameter', () => { - expect( + expect(() => { // @ts-expect-error mocking for testing - () => registerSidebarTab(getExampleTab), - ).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tab is not an object]') + registerSidebarTab(getExampleTab) + }).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tab is not an object]') }) it('fails with missing id', () => { - expect( + expect(() => { // @ts-expect-error mocking for testing - () => registerSidebarTab({ ...getExampleTab(), id: undefined }), - ).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have an id conforming to the HTML id attribute specifications]') + registerSidebarTab({ ...getExampleTab(), id: undefined }) + }).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have an id conforming to the HTML id attribute specifications]') }) it('fails with non conforming id', () => { - expect( - () => registerSidebarTab({ ...getExampleTab(), id: 'this is invalid' }), - ).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have an id conforming to the HTML id attribute specifications]') + expect(() => registerSidebarTab({ ...getExampleTab(), id: 'this is invalid' })).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have an id conforming to the HTML id attribute specifications]') }) it('fails with missing tagName name', () => { - expect( + expect(() => { // @ts-expect-error mocking for testing - () => registerSidebarTab({ ...getExampleTab(), tagName: undefined }), - ).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have the tagName name set]') + registerSidebarTab({ ...getExampleTab(), tagName: undefined }) + }).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have the tagName name set]') }) it('fails with invalid tagName name', () => { @@ -81,51 +81,49 @@ describe('Sidebar tabs', () => { }) it('fails with missing name', () => { - expect( + expect(() => { // @ts-expect-error mocking for testing - () => registerSidebarTab({ ...getExampleTab(), displayName: undefined }), - ).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have a name set]') + registerSidebarTab({ ...getExampleTab(), displayName: undefined }) + }).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have a name set]') }) it('fails with invalid name', () => { - expect( + expect(() => { // @ts-expect-error mocking for testing - () => registerSidebarTab({ ...getExampleTab(), displayName: 1234 }), - ).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have a name set]') + registerSidebarTab({ ...getExampleTab(), displayName: 1234 }) + }).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have a name set]') }) it('fails with missing icon', () => { - expect( + expect(() => { // @ts-expect-error mocking for testing - () => registerSidebarTab({ ...getExampleTab(), iconSvgInline: undefined }), - ).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have an valid SVG icon]') + registerSidebarTab({ ...getExampleTab(), iconSvgInline: undefined }) + }).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have an valid SVG icon]') }) it('fails with invalid SVG icon', () => { - expect( - () => registerSidebarTab({ ...getExampleTab(), iconSvgInline: 'icon-group' }), - ).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have an valid SVG icon]') + expect(() => registerSidebarTab({ ...getExampleTab(), iconSvgInline: 'icon-group' })).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have an valid SVG icon]') }) it('fails with missing order', () => { - expect( + expect(() => { // @ts-expect-error mocking for testing - () => registerSidebarTab({ ...getExampleTab(), order: undefined }), - ).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have a numeric order set]') + registerSidebarTab({ ...getExampleTab(), order: undefined }) + }).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have a numeric order set]') }) it('fails with invalid order', () => { - expect( + expect(() => { // @ts-expect-error mocking for testing - () => registerSidebarTab({ ...getExampleTab(), order: '3' }), - ).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have a numeric order set]') + registerSidebarTab({ ...getExampleTab(), order: '3' }) + }).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have a numeric order set]') }) it('fails with missing "enabled" method', () => { - expect( + expect(() => { // @ts-expect-error mocking for testing - () => registerSidebarTab({ ...getExampleTab(), enabled: undefined }), - ).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have an "enabled" method]') + registerSidebarTab({ ...getExampleTab(), enabled: undefined }) + }).toThrowErrorMatchingInlineSnapshot('[Error: Sidebar tabs need to have an "enabled" method]') }) }) }) diff --git a/__tests__/test-global-setup.ts b/__tests__/test-global-setup.ts index d7e7e3f25..e28c43163 100644 --- a/__tests__/test-global-setup.ts +++ b/__tests__/test-global-setup.ts @@ -3,6 +3,6 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -export const setup = () => { +export function setup() { process.env.TZ = 'UTC' } diff --git a/__tests__/utils/fileSize.spec.ts b/__tests__/utils/fileSize.spec.ts index cb802cb54..cc73f221e 100644 --- a/__tests__/utils/fileSize.spec.ts +++ b/__tests__/utils/fileSize.spec.ts @@ -2,10 +2,10 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ -import { beforeEach, describe, expect, it } from 'vitest' -import { formatFileSize, parseFileSize } from '../../lib/index' import { setLocale } from '@nextcloud/l10n' +import { beforeEach, describe, expect, it } from 'vitest' +import { formatFileSize, parseFileSize } from '../../lib/index.ts' describe('humanFileSize', () => { beforeEach(() => setLocale('en')) diff --git a/__tests__/utils/fileSorting.spec.ts b/__tests__/utils/fileSorting.spec.ts index c546384ff..6dc4e9d52 100644 --- a/__tests__/utils/fileSorting.spec.ts +++ b/__tests__/utils/fileSorting.spec.ts @@ -2,37 +2,42 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + import type { Attribute } from '../../lib/node/index.ts' import { describe, expect, test } from 'vitest' -import { File, FilesSortingMode, Folder, sortNodes as originalSortNodes } from '../../lib' - -const file = (name: string, size?: number, modified?: number, favorite = false, attributes: Attribute = {}) => new File({ - source: `https://cloud.domain.com/remote.php/dav/files/emma/${name}`, - root: '/files/emma', - mime: 'text/plain', - owner: 'jdoe', - mtime: new Date(modified ?? Date.now()), - size, - attributes: favorite - ? { - favorite: 1, - } - : attributes, -}) - -const folder = (name: string, size?: number, modified?: number, favorite = false) => new Folder({ - source: `https://cloud.domain.com/remote.php/dav/files/emma/${name}`, - root: '/files/emma', - owner: 'jdoe', - mtime: new Date(modified ?? Date.now()), - size, - attributes: favorite - ? { - favorite: 1, - } - : undefined, -}) +import { File, FilesSortingMode, Folder, sortNodes as originalSortNodes } from '../../lib/index.ts' + +function file(name: string, size?: number, modified?: number, favorite = false, attributes: Attribute = {}) { + return new File({ + source: `https://cloud.domain.com/remote.php/dav/files/emma/${name}`, + root: '/files/emma', + mime: 'text/plain', + owner: 'jdoe', + mtime: new Date(modified ?? Date.now()), + size, + attributes: favorite + ? { + favorite: 1, + } + : attributes, + }) +} + +function folder(name: string, size?: number, modified?: number, favorite = false) { + return new Folder({ + source: `https://cloud.domain.com/remote.php/dav/files/emma/${name}`, + root: '/files/emma', + owner: 'jdoe', + mtime: new Date(modified ?? Date.now()), + size, + attributes: favorite + ? { + favorite: 1, + } + : undefined, + }) +} const sortNodes = (...args: Parameters) => originalSortNodes(...args).map((node) => node.basename) @@ -254,15 +259,13 @@ describe('sortNodes', () => { file('file_2.txt'), ] as const - expect( - sortNodes( - array, - { - sortingMode: FilesSortingMode.Name, - sortingOrder: 'asc', - }, - ), - ).toEqual(['file.txt', 'file_1.txt', 'file_2.txt', 'file_3.txt']) + expect(sortNodes( + array, + { + sortingMode: FilesSortingMode.Name, + sortingOrder: 'asc', + }, + )).toEqual(['file.txt', 'file_1.txt', 'file_2.txt', 'file_3.txt']) }) /** @@ -277,15 +280,13 @@ describe('sortNodes', () => { file('file_2'), ] as const - expect( - sortNodes( - array, - { - sortingMode: FilesSortingMode.Name, - sortingOrder: 'asc', - }, - ), - ).toEqual(['file', 'file_1', 'file_2', 'file_3']) + expect(sortNodes( + array, + { + sortingMode: FilesSortingMode.Name, + sortingOrder: 'asc', + }, + )).toEqual(['file', 'file_1', 'file_2', 'file_3']) }) /** @@ -299,15 +300,13 @@ describe('sortNodes', () => { file('file.d'), ] as const - expect( - sortNodes( - array, - { - sortingMode: FilesSortingMode.Name, - sortingOrder: 'asc', - }, - ), - ).toEqual(['file.a', 'file.b', 'file.c', 'file.d']) + expect(sortNodes( + array, + { + sortingMode: FilesSortingMode.Name, + sortingOrder: 'asc', + }, + )).toEqual(['file.a', 'file.b', 'file.c', 'file.d']) }) test('Can sort by random attribute', () => { diff --git a/__tests__/utils/filename-validation.spec.ts b/__tests__/utils/filename-validation.spec.ts index ca1f5024e..67af802ef 100644 --- a/__tests__/utils/filename-validation.spec.ts +++ b/__tests__/utils/filename-validation.spec.ts @@ -2,8 +2,9 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later or LGPL-3.0-or-later */ -import { describe, it, expect, vi, beforeEach } from 'vitest' -import { InvalidFilenameError, InvalidFilenameErrorReason, isFilenameValid, validateFilename } from '../../lib/index' + +import { beforeEach, describe, expect, it, vi } from 'vitest' +import { InvalidFilenameError, InvalidFilenameErrorReason, isFilenameValid, validateFilename } from '../../lib/index.ts' const nextcloudCapabilities = vi.hoisted(() => ({ getCapabilities: vi.fn(() => ({ files: {} })) })) vi.mock('@nextcloud/capabilities', () => nextcloudCapabilities) @@ -30,7 +31,6 @@ describe('isFilenameValid', () => { }) describe('validateFilename', () => { - beforeEach(() => { vi.resetAllMocks() delete window._oc_config @@ -163,7 +163,6 @@ describe('validateFilename', () => { }) describe('InvalidFilenameError', () => { - it('sets the filename', () => { const error = new InvalidFilenameError({ filename: 'file', segment: 'fi', reason: InvalidFilenameErrorReason.Extension }) expect(error.filename).toBe('file') diff --git a/__tests__/utils/filename.spec.ts b/__tests__/utils/filename.spec.ts index 27cedc775..8fd8f20ac 100644 --- a/__tests__/utils/filename.spec.ts +++ b/__tests__/utils/filename.spec.ts @@ -2,7 +2,7 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later or LGPL-3.0-or-later */ -import { describe, it, expect, vi } from 'vitest' +import { describe, expect, it, vi } from 'vitest' import { getUniqueName } from '../../lib/index.ts' describe('getUniqueName', () => { diff --git a/__tests__/utils/sorting.spec.ts b/__tests__/utils/sorting.spec.ts index 1fe9798f3..51f3d33a2 100644 --- a/__tests__/utils/sorting.spec.ts +++ b/__tests__/utils/sorting.spec.ts @@ -2,8 +2,9 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + import { describe, expect, test } from 'vitest' -import { orderBy } from '../../lib/utils/sorting' +import { orderBy } from '../../lib/utils/sorting.ts' describe('orderBy', () => { test('By default the identify and ascending order is used', () => { @@ -41,13 +42,11 @@ describe('orderBy', () => { { text: 'b', order: 2, secondOrder: 1 }, ] as const - expect( - orderBy( - array, - [(v) => v.order, (v) => v.secondOrder], - ['desc'], - ).map((v) => v.text), - ).toEqual(['b', 'a', 'z']) + expect(orderBy( + array, + [(v) => v.order, (v) => v.secondOrder], + ['desc'], + ).map((v) => v.text)).toEqual(['b', 'a', 'z']) }) test('Can set order array', () => { @@ -57,13 +56,11 @@ describe('orderBy', () => { { text: 'b', order: 2, secondOrder: 1 }, ] as const - expect( - orderBy( - array, - [(v) => v.order, (v) => v.secondOrder], - ['desc', 'desc'], - ).map((v) => v.text), - ).toEqual(['a', 'b', 'z']) + expect(orderBy( + array, + [(v) => v.order, (v) => v.secondOrder], + ['desc', 'desc'], + ).map((v) => v.text)).toEqual(['a', 'b', 'z']) }) test('Numbers are handled correctly', () => { @@ -74,12 +71,10 @@ describe('orderBy', () => { { text: '2.2' }, ] as const - expect( - orderBy( - array, - [(v) => v.text], - ).map((v) => v.text), - ).toEqual(['2.0', '2.2', '2.3', '2.10']) + expect(orderBy( + array, + [(v) => v.text], + ).map((v) => v.text)).toEqual(['2.0', '2.2', '2.3', '2.10']) }) test('Numbers with suffixes are handled correctly', () => { @@ -90,12 +85,10 @@ describe('orderBy', () => { { text: '2024-01-05 Foo' }, ] as const - expect( - orderBy( - array, - [(v) => v.text], - ).map((v) => v.text), - ).toEqual(['2024-01-05', '2024-01-05 Foo', '2024-01-10', '2024-05-01']) + expect(orderBy( + array, + [(v) => v.text], + ).map((v) => v.text)).toEqual(['2024-01-05', '2024-01-05 Foo', '2024-01-10', '2024-05-01']) }) test('Numbers with multiple dots are handled correctly', () => { @@ -105,12 +98,10 @@ describe('orderBy', () => { { text: '2.10.1' }, ] as const - expect( - orderBy( - array, - [(v) => v.text], - ).map((v) => v.text), - ).toEqual(['2.10', '2.10.1', '2.11']) + expect(orderBy( + array, + [(v) => v.text], + ).map((v) => v.text)).toEqual(['2.10', '2.10.1', '2.11']) }) test('Dates are handled correctly', () => { @@ -120,12 +111,10 @@ describe('orderBy', () => { { text: 'tuesday', date: new Date(1716298766 * 1000) }, ] - expect( - orderBy( - array, - [(v) => v.date], - ).map((v) => v.text), - ).toEqual(['monday', 'tuesday', 'wednesday']) + expect(orderBy( + array, + [(v) => v.date], + ).map((v) => v.text)).toEqual(['monday', 'tuesday', 'wednesday']) }) test('sort with equal values', () => { diff --git a/__tests__/view.spec.ts b/__tests__/view.spec.ts index e9be9a50f..465055aa1 100644 --- a/__tests__/view.spec.ts +++ b/__tests__/view.spec.ts @@ -3,9 +3,10 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -import { describe, expect, test } from 'vitest' +import type { IView } from '../lib/navigation/view.ts' -import { IView, View } from '../lib/navigation/view.ts' +import { describe, expect, test } from 'vitest' +import { View } from '../lib/navigation/view.ts' import { mockView } from './fixtures/view.ts' describe('Invalid View creation', () => { @@ -15,8 +16,7 @@ describe('Invalid View creation', () => { order: 1, icon: '', getContents: () => Promise.reject(new Error()), - } as unknown as View), - ).toThrowError('View id is required and must be a string') + } as unknown as View)).toThrowError('View id is required and must be a string') }) test('Invalid name', () => { expect(() => new View({ @@ -24,8 +24,7 @@ describe('Invalid View creation', () => { order: 1, icon: '', getContents: () => Promise.reject(new Error()), - } as unknown as View), - ).toThrowError('View name is required and must be a string') + } as unknown as View)).toThrowError('View name is required and must be a string') }) test('Invalid caption', () => { expect(() => new View({ @@ -35,8 +34,7 @@ describe('Invalid View creation', () => { caption: null, icon: '', getContents: () => Promise.reject(new Error()), - } as unknown as View), - ).toThrowError('View caption must be a string') + } as unknown as View)).toThrowError('View caption must be a string') }) test('Invalid getContents', () => { expect(() => new View({ @@ -45,8 +43,7 @@ describe('Invalid View creation', () => { order: 1, icon: '', getContents: null, - } as unknown as View), - ).toThrowError('View getContents is required and must be a function') + } as unknown as View)).toThrowError('View getContents is required and must be a function') }) test('Invalid icon', () => { expect(() => new View({ @@ -55,8 +52,7 @@ describe('Invalid View creation', () => { order: 1, icon: '', getContents: () => Promise.reject(new Error()), - } as unknown as View), - ).toThrowError('View icon is required and must be a valid svg string') + } as unknown as View)).toThrowError('View icon is required and must be a valid svg string') }) test('Invalid hidden', () => { @@ -66,8 +62,7 @@ describe('Invalid View creation', () => { hidden: 'yes', icon: '', getContents: () => Promise.reject(new Error()), - } as unknown as IView), - ).toThrowError('View hidden must be a boolean') + } as unknown as IView)).toThrowError('View hidden must be a boolean') }) test('Invalid order', () => { @@ -77,8 +72,7 @@ describe('Invalid View creation', () => { order: null, icon: '', getContents: () => Promise.reject(new Error()), - } as unknown as View), - ).toThrowError('View order must be a number') + } as unknown as View)).toThrowError('View order must be a number') }) test('Invalid columns', () => { expect(() => new View({ @@ -88,8 +82,7 @@ describe('Invalid View creation', () => { icon: '', getContents: () => Promise.reject(new Error()), columns: [{}], - } as unknown as View), - ).toThrowError('A column id is required') + } as unknown as View)).toThrowError('A column id is required') }) test('Invalid columns with null', () => { expect(() => new View({ @@ -99,8 +92,7 @@ describe('Invalid View creation', () => { icon: '', getContents: () => Promise.reject(new Error()), columns: [null], - } as unknown as View), - ).toThrowError('View column must be an object') + } as unknown as View)).toThrowError('View column must be an object') }) test('Invalid emptyView', () => { expect(() => new View({ @@ -110,8 +102,7 @@ describe('Invalid View creation', () => { icon: '', getContents: () => Promise.reject(new Error()), emptyView: true, - } as unknown as View), - ).toThrowError('View emptyView must be a function') + } as unknown as View)).toThrowError('View emptyView must be a function') }) test('Invalid parent', () => { expect(() => new View({ @@ -121,8 +112,7 @@ describe('Invalid View creation', () => { icon: '', getContents: () => Promise.reject(new Error()), parent: 1, - } as unknown as View), - ).toThrowError('View parent must be a string') + } as unknown as View)).toThrowError('View parent must be a string') }) test('Invalid sticky', () => { expect(() => new View({ @@ -132,8 +122,7 @@ describe('Invalid View creation', () => { icon: '', getContents: () => Promise.reject(new Error()), sticky: null, - } as unknown as View), - ).toThrowError('View sticky must be a boolean') + } as unknown as View)).toThrowError('View sticky must be a boolean') }) test('Invalid expanded', () => { expect(() => new View({ @@ -143,8 +132,7 @@ describe('Invalid View creation', () => { icon: '', getContents: () => Promise.reject(new Error()), expanded: null, - } as unknown as View), - ).toThrowError('View expanded must be a boolean') + } as unknown as View)).toThrowError('View expanded must be a boolean') }) test('Invalid defaultSortKey', () => { expect(() => new View({ @@ -154,8 +142,7 @@ describe('Invalid View creation', () => { icon: '', getContents: () => Promise.reject(new Error()), defaultSortKey: 1, - } as unknown as View), - ).toThrowError('View defaultSortKey must be a string') + } as unknown as View)).toThrowError('View defaultSortKey must be a string') }) test('Invalid loadChildViews', () => { expect(() => new View({ @@ -165,8 +152,7 @@ describe('Invalid View creation', () => { icon: '', getContents: () => Promise.reject(new Error()), loadChildViews: true, - } as unknown as View), - ).toThrowError('View loadChildViews must be a function') + } as unknown as View)).toThrowError('View loadChildViews must be a function') }) test('Invalid params', () => { expect(() => new View({ @@ -176,8 +162,7 @@ describe('Invalid View creation', () => { icon: '', getContents: () => Promise.reject(new Error()), params: [], - } as unknown as View), - ).toThrowError('View params must be an object') + } as unknown as View)).toThrowError('View params must be an object') }) test('Invalid params with null', () => { expect(() => new View({ @@ -187,8 +172,7 @@ describe('Invalid View creation', () => { icon: '', getContents: () => Promise.reject(new Error()), params: null, - } as unknown as View), - ).toThrowError('View params must be an object') + } as unknown as View)).toThrowError('View params must be an object') }) }) diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 000000000..d69d56fb4 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,11 @@ +/*! + * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: CC0-1.0 + */ + +import { recommendedLibrary } from '@nextcloud/eslint-config' +import { defineConfig } from 'eslint/config' + +export default defineConfig([ + ...recommendedLibrary, +]) diff --git a/lib/actions/fileAction.ts b/lib/actions/fileAction.ts index b2704f1bf..5babbfe06 100644 --- a/lib/actions/fileAction.ts +++ b/lib/actions/fileAction.ts @@ -2,6 +2,7 @@ * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + import type { ActionContext, ActionContextSingle } from '../types.ts' import logger from '../utils/logger.ts' @@ -22,6 +23,7 @@ export interface IHotkeyConfig { /** * The key to be pressed. + * * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key */ key: string @@ -58,18 +60,20 @@ export interface FileActionData { /** * Function executed on single file action + * * @return true if the action was executed successfully, * false otherwise and null if the action is silent/undefined. - * @throws Error if the action failed + * @throws {Error} If the action failed */ - exec: (context: ActionContextSingle) => Promise, + exec: (context: ActionContextSingle) => Promise /** * Function executed on multiple files action + * * @return true if the action was executed successfully, * false otherwise and null if the action is silent/undefined. - * @throws Error if the action failed + * @throws {Error} If the action failed */ - execBatch?: (context: ActionContext) => Promise<(boolean|null)[]> + execBatch?: (context: ActionContext) => Promise<(boolean | null)[]> /** This action order in the list */ order?: number @@ -89,7 +93,7 @@ export interface FileActionData { * This action's parent id in the list. * If none found, will be displayed as a top-level action. */ - parent?: string, + parent?: string /** * Make this action the default. @@ -103,20 +107,19 @@ export interface FileActionData { * * @see DefaultType */ - default?: TDefaultType, + default?: TDefaultType /** * If true, the renderInline function will be called */ - inline?: (context: ActionContextSingle) => boolean, + inline?: (context: ActionContextSingle) => boolean /** * If defined, the returned html element will be * appended before the actions menu. */ - renderInline?: (context: ActionContextSingle) => Promise, + renderInline?: (context: ActionContextSingle) => Promise } export class FileAction { - private _action: FileActionData constructor(action: FileActionData) { @@ -248,17 +251,21 @@ export class FileAction { } } } - } -export const registerFileAction = function(action: FileAction): void { +/** + * Register a new file action. + * + * @param action - The file list action to register + */ +export function registerFileAction(action: FileAction): void { if (typeof window._nc_fileactions === 'undefined') { window._nc_fileactions = [] logger.debug('FileActions initialized') } // Check duplicates - if (window._nc_fileactions.find(search => search.id === action.id)) { + if (window._nc_fileactions.find((search) => search.id === action.id)) { logger.error(`FileAction ${action.id} already registered`, { action }) return } @@ -266,7 +273,10 @@ export const registerFileAction = function(action: FileAction): void { window._nc_fileactions.push(action) } -export const getFileActions = function(): FileAction[] { +/** + * + */ +export function getFileActions(): FileAction[] { if (typeof window._nc_fileactions === 'undefined') { window._nc_fileactions = [] logger.debug('FileActions initialized') diff --git a/lib/actions/fileListAction.ts b/lib/actions/fileListAction.ts index 7a0919f34..1b3e16a2a 100644 --- a/lib/actions/fileListAction.ts +++ b/lib/actions/fileListAction.ts @@ -2,6 +2,7 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + import type { ViewActionContext } from '../types.ts' import logger from '../utils/logger.ts' @@ -26,15 +27,15 @@ interface FileListActionData { /** * Function executed on single file action + * * @return true if the action was executed successfully, * false otherwise and null if the action is silent/undefined. - * @throws Error if the action failed + * @throws {Error} If the action failed */ - exec: (context: ViewActionContext) => Promise, + exec: (context: ViewActionContext) => Promise } export class FileListAction { - private _action: FileListActionData constructor(action: FileListActionData) { @@ -91,15 +92,19 @@ export class FileListAction { throw new Error('Invalid exec function') } } - } -export const registerFileListAction = (action: FileListAction) => { +/** + * Register a new file list action. + * + * @param action - The file list action to register + */ +export function registerFileListAction(action: FileListAction) { if (typeof window._nc_filelistactions === 'undefined') { window._nc_filelistactions = [] } - if (window._nc_filelistactions.find(listAction => listAction.id === action.id)) { + if (window._nc_filelistactions.find((listAction) => listAction.id === action.id)) { logger.error(`FileListAction with id "${action.id}" is already registered`, { action }) return } @@ -107,7 +112,10 @@ export const registerFileListAction = (action: FileListAction) => { window._nc_filelistactions.push(action) } -export const getFileListActions = (): FileListAction[] => { +/** + * Get all currently registered file list actions. + */ +export function getFileListActions(): FileListAction[] { if (typeof window._nc_filelistactions === 'undefined') { window._nc_filelistactions = [] } diff --git a/lib/actions/index.ts b/lib/actions/index.ts index afd067404..0c4e2c54d 100644 --- a/lib/actions/index.ts +++ b/lib/actions/index.ts @@ -5,5 +5,5 @@ export type { FileActionData, IHotkeyConfig } from './fileAction.ts' -export { FileAction, getFileActions, registerFileAction, DefaultType } from './fileAction.ts' -export { getFileListActions, registerFileListAction, FileListAction } from './fileListAction.ts' +export { DefaultType, FileAction, getFileActions, registerFileAction } from './fileAction.ts' +export { FileListAction, getFileListActions, registerFileListAction } from './fileListAction.ts' diff --git a/lib/dav/dav.ts b/lib/dav/dav.ts index b3f664548..90de01536 100644 --- a/lib/dav/dav.ts +++ b/lib/dav/dav.ts @@ -7,12 +7,12 @@ import type { DAVResultResponseProps, FileStat, ResponseDataDetailed, WebDAVClie import type { Node, NodeData } from '../node/index.ts' import { getCurrentUser, getRequestToken, onRequestTokenUpdate } from '@nextcloud/auth' -import { getSharingToken, isPublicShare } from '@nextcloud/sharing/public' import { generateRemoteUrl } from '@nextcloud/router' +import { getSharingToken, isPublicShare } from '@nextcloud/sharing/public' import { createClient, getPatcher } from 'webdav' +import { File, Folder, NodeStatus } from '../node/index.ts' import { parsePermissions } from './davPermissions.ts' import { getFavoritesReport } from './davProperties.ts' -import { File, Folder, NodeStatus } from '../node/index.ts' /** * Nextcloud DAV result response @@ -66,11 +66,12 @@ export const defaultRemoteURL = getRemoteURL() * @param remoteURL The DAV server remote URL * @param headers Optional additional headers to set for every request */ -export const getClient = function(remoteURL = defaultRemoteURL, headers: Record = {}) { +export function getClient(remoteURL = defaultRemoteURL, headers: Record = {}) { const client = createClient(remoteURL, { headers }) /** * Set headers for DAV requests + * * @param token CSRF token */ function setHeaders(token: string | null) { @@ -155,7 +156,7 @@ export async function getFavoriteNodes(options: { client?: WebDAVClient, path?: }) as ResponseDataDetailed return contentsResponse.data - .filter(node => node.filename !== path) // exclude current dir + .filter((node) => node.filename !== path) // exclude current dir .map((result) => resultToNode(result, davRoot)) } @@ -166,7 +167,7 @@ export async function getFavoriteNodes(options: { client?: WebDAVClient, path?: * @param filesRoot The DAV files root path * @param remoteURL The DAV server remote URL (same as on `getClient`) */ -export const resultToNode = function(node: FileStat, filesRoot = defaultRootPath, remoteURL = defaultRemoteURL): Node { +export function resultToNode(node: FileStat, filesRoot = defaultRootPath, remoteURL = defaultRemoteURL): Node { let userId = getCurrentUser()?.uid if (isPublicShare()) { userId = userId ?? 'anonymous' diff --git a/lib/dav/davPermissions.ts b/lib/dav/davPermissions.ts index a8ee95bb4..c59c46879 100644 --- a/lib/dav/davPermissions.ts +++ b/lib/dav/davPermissions.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -import { Permission } from '../permissions' +import { Permission } from '../permissions.ts' /** * Parse the WebDAV permission string to a permission enum diff --git a/lib/dav/davProperties.ts b/lib/dav/davProperties.ts index 6d97e40e0..3434468da 100644 --- a/lib/dav/davProperties.ts +++ b/lib/dav/davProperties.ts @@ -2,8 +2,9 @@ * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + import { getCurrentUser } from '@nextcloud/auth' -import logger from '../utils/logger' +import logger from '../utils/logger.ts' export type DavProperty = { [key: string]: string } @@ -43,7 +44,7 @@ export const defaultDavNamespaces = { * @param prop The property * @param namespace The namespace of the property */ -export const registerDavProperty = function(prop: string, namespace: DavProperty = { nc: 'http://nextcloud.org/ns' }): boolean { +export function registerDavProperty(prop: string, namespace: DavProperty = { nc: 'http://nextcloud.org/ns' }): boolean { if (typeof window._nc_dav_properties === 'undefined') { window._nc_dav_properties = [...defaultDavProperties] window._nc_dav_namespaces = { ...defaultDavNamespaces } @@ -76,7 +77,7 @@ export const registerDavProperty = function(prop: string, namespace: DavProperty /** * Get the registered dav properties */ -export const getDavProperties = function(): string { +export function getDavProperties(): string { if (typeof window._nc_dav_properties === 'undefined') { window._nc_dav_properties = [...defaultDavProperties] } @@ -87,7 +88,7 @@ export const getDavProperties = function(): string { /** * Get the registered dav namespaces */ -export const getDavNameSpaces = function(): string { +export function getDavNameSpaces(): string { if (typeof window._nc_dav_namespaces === 'undefined') { window._nc_dav_namespaces = { ...defaultDavNamespaces } } @@ -100,7 +101,7 @@ export const getDavNameSpaces = function(): string { /** * Get the default PROPFIND request body */ -export const getDefaultPropfind = function(): string { +export function getDefaultPropfind(): string { return ` @@ -112,7 +113,7 @@ export const getDefaultPropfind = function(): string { /** * Get the REPORT body to filter for favorite nodes */ -export const getFavoritesReport = function(): string { +export function getFavoritesReport(): string { return ` @@ -145,7 +146,7 @@ export const getFavoritesReport = function(): string { * }) as ResponseDataDetailed * ``` */ -export const getRecentSearch = function(lastModified: number): string { +export function getRecentSearch(lastModified: number): string { return ` diff --git a/lib/dav/index.ts b/lib/dav/index.ts index 488731949..dfaf6a3ed 100644 --- a/lib/dav/index.ts +++ b/lib/dav/index.ts @@ -1,3 +1,4 @@ +/* eslint-disable jsdoc/check-tag-names */ /*! * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later @@ -7,9 +8,10 @@ * This module provides utils to work with the Nextcloud WebDAV interface. * * The DAV functions are based on the [`webdav`](https://www.npmjs.com/package/webdav) package. + * * @packageDocumentation */ -export * from './dav' -export * from './davPermissions' -export * from './davProperties' +export * from './dav.ts' +export * from './davPermissions.ts' +export * from './davProperties.ts' diff --git a/lib/fileListFilters.ts b/lib/fileListFilters.ts index b0ec84416..a190f1477 100644 --- a/lib/fileListFilters.ts +++ b/lib/fileListFilters.ts @@ -49,9 +49,9 @@ export interface FilterUpdateChipsEvent extends CustomEvent { @@ -78,6 +78,7 @@ export interface IFileListFilter extends TypedEventTarget /** * If the filter needs a visual element for settings it can provide a function to mount it. + * * @param el The DOM element to mount to */ mount?(el: HTMLElement): void @@ -93,7 +94,6 @@ export interface IFileListFilter extends TypedEventTarget } export class FileListFilter extends TypedEventTarget implements IFileListFilter { - public id: string public order: number @@ -116,7 +116,6 @@ export class FileListFilter extends TypedEventTarget impl protected filterUpdated() { this.dispatchTypedEvent('update:filter', new CustomEvent('update:filter') as FilterUpdateEvent) } - } /** @@ -140,6 +139,7 @@ export function registerFileListFilter(filter: IFileListFilter): void { /** * Remove a registered filter from the file list + * * @param filterId The unique ID of the filter to remove */ export function unregisterFileListFilter(filterId: string): void { diff --git a/lib/fileListHeaders.ts b/lib/fileListHeaders.ts index 7cd787958..de81cd614 100644 --- a/lib/fileListHeaders.ts +++ b/lib/fileListHeaders.ts @@ -3,8 +3,8 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -import type { IFolder } from './node/folder.ts' import type { IView } from './navigation/view.ts' +import type { IFolder } from './node/folder.ts' import logger from './utils/logger.ts' @@ -22,7 +22,6 @@ export interface HeaderData { } export class Header { - private _header: HeaderData constructor(header: HeaderData) { @@ -71,17 +70,21 @@ export class Header { throw new Error('Invalid updated property') } } - } -export const registerFileListHeaders = function(header: Header): void { +/** + * Register a new file list header. + * + * @param header - The header to register + */ +export function registerFileListHeaders(header: Header): void { if (typeof window._nc_filelistheader === 'undefined') { window._nc_filelistheader = [] logger.debug('FileListHeaders initialized') } // Check duplicates - if (window._nc_filelistheader.find(search => search.id === header.id)) { + if (window._nc_filelistheader.find((search) => search.id === header.id)) { logger.error(`Header ${header.id} already registered`, { header }) return } @@ -89,7 +92,10 @@ export const registerFileListHeaders = function(header: Header): void { window._nc_filelistheader.push(header) } -export const getFileListHeaders = function(): Header[] { +/** + * Get all currently registered file list headers. + */ +export function getFileListHeaders(): Header[] { if (typeof window._nc_filelistheader === 'undefined') { window._nc_filelistheader = [] logger.debug('FileListHeaders initialized') diff --git a/lib/navigation/column.ts b/lib/navigation/column.ts index 1ae245e34..64a0103c3 100644 --- a/lib/navigation/column.ts +++ b/lib/navigation/column.ts @@ -25,7 +25,6 @@ export interface IColumn { } export class Column implements IColumn { - private _column: IColumn constructor(column: IColumn) { @@ -52,7 +51,6 @@ export class Column implements IColumn { get summary() { return this._column.summary } - } /** diff --git a/lib/navigation/index.ts b/lib/navigation/index.ts index d08cee543..d1aba713c 100644 --- a/lib/navigation/index.ts +++ b/lib/navigation/index.ts @@ -3,6 +3,6 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -export * from './navigation' -export * from './column' -export * from './view' +export * from './navigation.ts' +export * from './column.ts' +export * from './view.ts' diff --git a/lib/navigation/navigation.ts b/lib/navigation/navigation.ts index 722dce741..4b912c0d0 100644 --- a/lib/navigation/navigation.ts +++ b/lib/navigation/navigation.ts @@ -3,11 +3,11 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -import type { IView } from './view' +import type { IView } from './view.ts' -import { validateView } from './view' import { TypedEventTarget } from 'typescript-event-target' -import logger from '../utils/logger' +import logger from '../utils/logger.ts' +import { validateView } from './view.ts' /** * The event is emitted when the navigation view was updated. @@ -29,6 +29,7 @@ interface UpdateViewsEvent extends CustomEvent { * * Custom views for the files app can be registered (examples are the favorites views or the shared-with-you view). * It is also possible to listen on changes of the registered views or when the current active view is changed. + * * @example * ```js * const navigation = getNavigation() @@ -46,18 +47,18 @@ interface UpdateViewsEvent extends CustomEvent { * ``` */ export class Navigation extends TypedEventTarget<{ updateActive: UpdateActiveViewEvent, update: UpdateViewsEvent }> { - private _views: IView[] = [] private _currentView: IView | null = null /** * Register a new view on the navigation + * * @param view The view to register * @throws {Error} if a view with the same id is already registered * @throws {Error} if the registered view is invalid */ register(view: IView): void { - if (this._views.find(search => search.id === view.id)) { + if (this._views.find((search) => search.id === view.id)) { throw new Error(`IView id ${view.id} is already registered`) } @@ -69,10 +70,11 @@ export class Navigation extends TypedEventTarget<{ updateActive: UpdateActiveVie /** * Remove a registered view + * * @param id The id of the view to remove */ remove(id: string): void { - const index = this._views.findIndex(view => view.id === id) + const index = this._views.findIndex((view) => view.id === id) if (index !== -1) { this._views.splice(index, 1) this.dispatchTypedEvent('update', new CustomEvent('update') as UpdateViewsEvent) @@ -114,13 +116,12 @@ export class Navigation extends TypedEventTarget<{ updateActive: UpdateActiveVie get views(): IView[] { return this._views } - } /** * Get the current files navigation */ -export const getNavigation = function(): Navigation { +export function getNavigation(): Navigation { if (typeof window._nc_navigation === 'undefined') { window._nc_navigation = new Navigation() logger.debug('Navigation service initialized') diff --git a/lib/navigation/view.ts b/lib/navigation/view.ts index 5bd9d7f8f..55939c1a5 100644 --- a/lib/navigation/view.ts +++ b/lib/navigation/view.ts @@ -7,11 +7,11 @@ import type { IFolder, INode } from '../node/index.ts' import type { IColumn } from './column.ts' import isSvg from 'is-svg' -import { validateColumn } from './column.ts' import { checkOptionalProperty } from '../utils/objectValidation.ts' +import { validateColumn } from './column.ts' export type ContentsWithRoot = { - folder: IFolder, + folder: IFolder contents: INode[] } @@ -52,9 +52,8 @@ export interface IView { * This method _must_ also return the current directory * information alongside with its content. * - * An abort signal is provided to be able to - * cancel the request if the user change directory - * {@see https://developer.mozilla.org/en-US/docs/Web/API/AbortController }. + * An [abort signal](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) is provided + * to be able to cancel the request if the user change directory. */ getContents(path: string, options: IGetContentsOptions): Promise @@ -109,7 +108,6 @@ export interface IView { } export class View implements IView { - private _view: IView constructor(view: IView) { @@ -200,7 +198,6 @@ export class View implements IView { get loadChildViews() { return this._view.loadChildViews } - } /** diff --git a/lib/newMenu/NewMenu.ts b/lib/newMenu/NewMenu.ts index f3de6d5e2..dd0f13891 100644 --- a/lib/newMenu/NewMenu.ts +++ b/lib/newMenu/NewMenu.ts @@ -45,6 +45,7 @@ export interface NewMenuEntry { /** * Condition wether this entry is shown or not + * * @param context the creation context. Usually the current folder */ enabled?: (context: IFolder) => boolean @@ -60,6 +61,7 @@ export interface NewMenuEntry { /** * Function to be run after creation + * * @param context - The creation context. Usually the current folder * @param content - List of file/folders present in the context folder */ @@ -67,7 +69,6 @@ export interface NewMenuEntry { } export class NewMenu { - private _entries: Array = [] public registerEntry(entry: NewMenuEntry) { @@ -97,13 +98,13 @@ export class NewMenu { public getEntries(context?: IFolder): Array { if (context) { return this._entries - .filter(entry => typeof entry.enabled === 'function' ? entry.enabled(context) : true) + .filter((entry) => typeof entry.enabled === 'function' ? entry.enabled(context) : true) } return this._entries } private getEntryIndex(id: string): number { - return this._entries.findIndex(entry => entry.id === id) + return this._entries.findIndex((entry) => entry.id === id) } private validateEntry(entry: NewMenuEntry) { @@ -136,5 +137,4 @@ export class NewMenu { throw new Error('Duplicate entry') } } - } diff --git a/lib/newMenu/functions.ts b/lib/newMenu/functions.ts index 2a45a7f56..2a7077f2e 100644 --- a/lib/newMenu/functions.ts +++ b/lib/newMenu/functions.ts @@ -6,8 +6,8 @@ import type { IFolder } from '../node/index.ts' import type { NewMenuEntry } from './NewMenu.ts' -import { NewMenu } from './NewMenu.ts' import logger from '../utils/logger.ts' +import { NewMenu } from './NewMenu.ts' /** * Get the NewMenu instance used by the files app. diff --git a/lib/node/file.ts b/lib/node/file.ts index bca295d05..1292c46e0 100644 --- a/lib/node/file.ts +++ b/lib/node/file.ts @@ -3,13 +3,12 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -import type { NodeConstructorData } from './node' +import type { NodeConstructorData } from './node.ts' -import { FileType } from './fileType' -import { Node } from './node' +import { FileType } from './fileType.ts' +import { Node } from './node.ts' export class File extends Node { - public constructor(...[data, davService]: NodeConstructorData) { super(data, davService) } @@ -17,7 +16,6 @@ export class File extends Node { get type(): typeof FileType.File { return FileType.File } - } /** diff --git a/lib/node/folder.ts b/lib/node/folder.ts index f04a765ac..6711ca260 100644 --- a/lib/node/folder.ts +++ b/lib/node/folder.ts @@ -3,13 +3,12 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -import type { NodeConstructorData } from './node' +import type { NodeConstructorData } from './node.ts' -import { FileType } from './fileType' -import { Node } from './node' +import { FileType } from './fileType.ts' +import { Node } from './node.ts' export class Folder extends Node { - constructor(...[data, davService]: NodeConstructorData) { // enforcing mimes super({ @@ -29,7 +28,6 @@ export class Folder extends Node { get mime(): 'httpd/unix-directory' { return 'httpd/unix-directory' } - } /** diff --git a/lib/node/node.ts b/lib/node/node.ts index dbc2cc65a..66a221bf2 100644 --- a/lib/node/node.ts +++ b/lib/node/node.ts @@ -4,10 +4,11 @@ */ import type { TFileType } from './fileType.ts' +import type { Attribute, NodeData } from './nodeData.ts' import { basename, dirname, encodePath, extname } from '@nextcloud/paths' -import { Permission } from '../permissions' -import { Attribute, fixDates, fixRegExp, isDavResource, NodeData, validateData } from './nodeData' +import { Permission } from '../permissions.ts' +import { fixDates, fixRegExp, isDavResource, validateData } from './nodeData.ts' export const NodeStatus = Object.freeze({ /** This is a new node and it doesn't exists on the filesystem yet */ @@ -25,15 +26,14 @@ export type TNodeStatus = typeof NodeStatus[keyof typeof NodeStatus] export type NodeConstructorData = [NodeData, RegExp?] export abstract class Node { - private _attributes: Attribute protected _data: NodeData protected _knownDavService = /(remote|public)\.php\/(web)?dav/i private readonlyAttributes = Object.entries(Object.getOwnPropertyDescriptors(Node.prototype)) - .filter(e => typeof e[1].get === 'function' && e[0] !== '__proto__') - .map(e => e[0]) + .filter((e) => typeof e[1].get === 'function' && e[0] !== '__proto__') + .map((e) => e[0]) private handler = { set: (target: Attribute, prop: string, value: unknown): boolean => { @@ -132,7 +132,7 @@ export abstract class Node { * There is no setter as the source is not meant to be changed manually. * You can use the rename or move method to change the source. */ - get extension(): string|null { + get extension(): string | null { return extname(this.source) } @@ -163,7 +163,7 @@ export abstract class Node { * Set the file mime * Removing the mime type will set it to `application/octet-stream` */ - set mime(mime: string|undefined) { + set mime(mime: string | undefined) { mime ??= 'application/octet-stream' validateData({ ...this._data, mime }, this._knownDavService) @@ -173,14 +173,14 @@ export abstract class Node { /** * Get the file modification time */ - get mtime(): Date|undefined { + get mtime(): Date | undefined { return this._data.mtime } /** * Set the file modification time */ - set mtime(mtime: Date|undefined) { + set mtime(mtime: Date | undefined) { validateData({ ...this._data, mtime }, this._knownDavService) this._data.mtime = mtime } @@ -189,21 +189,21 @@ export abstract class Node { * Get the file creation time * There is no setter as the creation time is not meant to be changed */ - get crtime(): Date|undefined { + get crtime(): Date | undefined { return this._data.crtime } /** * Get the file size */ - get size(): number|undefined { + get size(): number | undefined { return this._data.size } /** * Set the file size */ - set size(size: number|undefined) { + set size(size: number | undefined) { validateData({ ...this._data, size }, this._knownDavService) this.updateMtime() this._data.size = size @@ -245,7 +245,7 @@ export abstract class Node { * Get the file owner * There is no setter as the owner is not meant to be changed */ - get owner(): string|null { + get owner(): string | null { // Remote resources have no owner if (!this.isDavResource) { return null @@ -303,21 +303,21 @@ export abstract class Node { * Get the node id if defined. * There is no setter as the fileid is not meant to be changed */ - get fileid(): number|undefined { + get fileid(): number | undefined { return this._data?.id } /** * Get the node status. */ - get status(): TNodeStatus|undefined { + get status(): TNodeStatus | undefined { return this._data?.status } /** * Set the node status. */ - set status(status: TNodeStatus|undefined) { + set status(status: TNodeStatus | undefined) { validateData({ ...this._data, status }, this._knownDavService) this._data.status = status } @@ -325,7 +325,7 @@ export abstract class Node { /** * Move the node to a new destination * - * @param {string} destination the new source. + * @param destination the new source. * e.g. https://cloud.domain.com/remote.php/dav/files/emma/Photos/picture.jpg */ move(destination: string) { @@ -404,7 +404,6 @@ export abstract class Node { toJSON(): string { return JSON.stringify([structuredClone(this._data), this._knownDavService.toString()]) } - } /** diff --git a/lib/node/nodeData.ts b/lib/node/nodeData.ts index 8b0792e67..7d76d8f03 100644 --- a/lib/node/nodeData.ts +++ b/lib/node/nodeData.ts @@ -3,10 +3,11 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -import { join } from '@nextcloud/paths' +import type { TNodeStatus } from './node.ts' -import { Permission } from '../permissions' -import { NodeStatus, TNodeStatus } from './node' +import { join } from '@nextcloud/paths' +import { Permission } from '../permissions.ts' +import { NodeStatus } from './node.ts' // eslint-disable-next-line @typescript-eslint/no-explicit-any export interface Attribute { [key: string]: any } @@ -45,12 +46,13 @@ export interface NodeData { * The node permissions. * * A binary mask of `Permission` values. + * * @see Permission */ permissions?: number /** The owner UID of this node */ - owner: string|null + owner: string | null /** Optional the displayname of this node */ displayname?: string @@ -68,7 +70,7 @@ export interface NodeData { * @param source The source to check * @param davService Pattern to check if source is DAV resource */ -export const isDavResource = function(source: string, davService: RegExp): boolean { +export function isDavResource(source: string, davService: RegExp): boolean { return source.match(davService) !== null } @@ -88,9 +90,8 @@ export function validateData(data: NodeData, davService: RegExp) { } try { - // eslint-disable-next-line no-new new URL(data.source) - } catch (e) { + } catch { throw new Error('Invalid source format, source must be a valid URL') } @@ -174,7 +175,7 @@ export function validateData(data: NodeData, davService: RegExp) { * * @param data The internal node data */ -export const fixDates = (data: NodeData) => { +export function fixDates(data: NodeData) { if (data.mtime && typeof data.mtime === 'string') { if (!isNaN(Date.parse(data.mtime)) && JSON.stringify(new Date(data.mtime)) === JSON.stringify(data.mtime)) { @@ -195,7 +196,7 @@ export const fixDates = (data: NodeData) => { * * @param pattern The pattern as string or RegExp */ -export const fixRegExp = (pattern: string | RegExp): RegExp => { +export function fixRegExp(pattern: string | RegExp): RegExp { if (pattern instanceof RegExp) { return pattern } diff --git a/lib/sidebar/Sidebar.ts b/lib/sidebar/Sidebar.ts index 27b06e5a6..e5714bde2 100644 --- a/lib/sidebar/Sidebar.ts +++ b/lib/sidebar/Sidebar.ts @@ -98,7 +98,6 @@ export interface ISidebar { * If we decide to do a breaking change we can either add compatibility wrappers in the implementation in the files app. */ class SidebarProxy implements ISidebar { - get #impl(): Omit | undefined { return window.OCA?.Files?._sidebar?.() } @@ -146,7 +145,6 @@ class SidebarProxy implements ISidebar { registerAction(action: ISidebarAction): void { registerSidebarAction(action) } - } /** diff --git a/lib/sidebar/SidebarAction.ts b/lib/sidebar/SidebarAction.ts index fe7bda9cb..2b29c523f 100644 --- a/lib/sidebar/SidebarAction.ts +++ b/lib/sidebar/SidebarAction.ts @@ -56,7 +56,7 @@ export interface ISidebarAction { * Register a new sidebar action. * * @param action - The sidebar action to register - * @throws If the provided action is not a valid sidebar action and thus cannot be registered. + * @throws {Error} If the provided action is not a valid sidebar action and thus cannot be registered. */ export function registerSidebarAction(action: ISidebarAction): void { validateSidebarAction(action) diff --git a/lib/sidebar/SidebarTab.ts b/lib/sidebar/SidebarTab.ts index 2fd81c016..b2d54dc79 100644 --- a/lib/sidebar/SidebarTab.ts +++ b/lib/sidebar/SidebarTab.ts @@ -88,7 +88,7 @@ export interface ISidebarTab { * Register a new sidebar tab for the files app. * * @param tab - The sidebar tab to register - * @throws If the provided tab is not a valid sidebar tab and thus cannot be registered. + * @throws {Error} If the provided tab is not a valid sidebar tab and thus cannot be registered. */ export function registerSidebarTab(tab: ISidebarTab): void { validateSidebarTab(tab) @@ -116,6 +116,7 @@ export function getSidebarTabs(): ISidebarTab[] { * Check if a given sidebar tab objects implements all necessary fields. * * @param tab - The sidebar tab to validate + * @throws {Error} If the provided tab is not valid */ function validateSidebarTab(tab: ISidebarTab): void { if (typeof tab !== 'object') { diff --git a/lib/types.ts b/lib/types.ts index 861c9876e..8315a8c77 100644 --- a/lib/types.ts +++ b/lib/types.ts @@ -3,25 +3,25 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -import type { IFolder, INode } from './node/index.ts' import type { IView } from './navigation/index.ts' +import type { IFolder, INode } from './node/index.ts' export type ActionContextSingle = { - nodes: [INode], - view: IView, - folder: IFolder, - contents: INode[], + nodes: [INode] + view: IView + folder: IFolder + contents: INode[] } export type ActionContext = { - nodes: INode[], - view: IView, - folder: IFolder, - contents: INode[], + nodes: INode[] + view: IView + folder: IFolder + contents: INode[] } export type ViewActionContext = { - view: IView, - folder: IFolder, - contents: INode[], + view: IView + folder: IFolder + contents: INode[] } diff --git a/lib/utils/fileSize.ts b/lib/utils/fileSize.ts index 6bdc441fc..2c7220395 100644 --- a/lib/utils/fileSize.ts +++ b/lib/utils/fileSize.ts @@ -19,7 +19,7 @@ const humanListBinary = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB'] * @param binaryPrefixes True if size binary prefixes like `KiB` should be used as per IEC 80000-13 * @param base1000 Set to true to use base 1000 as per SI or used by Apple (default is base 1024 like Linux or Windows) */ -export function formatFileSize(size: number|string, skipSmallSizes = false, binaryPrefixes = false, base1000 = false): string { +export function formatFileSize(size: number | string, skipSmallSizes = false, binaryPrefixes = false, base1000 = false): string { // Binary prefixes only work with base 1024 binaryPrefixes = binaryPrefixes && !base1000 @@ -53,14 +53,14 @@ export function formatFileSize(size: number|string, skipSmallSizes = false, bina * Returns a file size in bytes from a humanly readable string * Note: `b` and `B` are both parsed as bytes and not as bit or byte. * - * @param {string} value file size in human-readable format - * @param {boolean} forceBinary for backwards compatibility this allows values to be base 2 (so 2KB means 2048 bytes instead of 2000 bytes) - * @return {number} or null if string could not be parsed + * @param value file size in human-readable format + * @param forceBinary for backwards compatibility this allows values to be base 2 (so 2KB means 2048 bytes instead of 2000 bytes) + * @return or null if string could not be parsed */ export function parseFileSize(value: string, forceBinary = false) { try { value = `${value}`.toLocaleLowerCase().replaceAll(/\s+/g, '').replaceAll(',', '.') - } catch (e) { + } catch { return null } diff --git a/lib/utils/fileSorting.ts b/lib/utils/fileSorting.ts index 91bcb566d..ddbb6004e 100644 --- a/lib/utils/fileSorting.ts +++ b/lib/utils/fileSorting.ts @@ -20,6 +20,7 @@ export type TFilesSortingMode = typeof FilesSortingMode[keyof typeof FilesSortin export interface FilesSortingOptions { /** * They key to order the files by + * * @default FilesSortingMode.Name */ sortingMode?: TFilesSortingMode | string @@ -31,12 +32,14 @@ export interface FilesSortingOptions { /** * If set to true nodes marked as favorites are ordered on top of all other nodes + * * @default false */ sortFavoritesFirst?: boolean /** * If set to true folders are ordered on top of files + * * @default false */ sortFoldersFirst?: boolean @@ -44,6 +47,7 @@ export interface FilesSortingOptions { /** * Sort files and folders according to the sorting options + * * @param nodes Nodes to sort * @param options Sorting options */ @@ -97,7 +101,7 @@ export function sortNodes(nodes: readonly INode[], options: FilesSortingOptions sortingOptions.sortingOrder, // for 5: use configured sorting direction sortingOptions.sortingOrder, - ] as ('asc'|'desc')[] + ] as ('asc' | 'desc')[] return orderBy(nodes, identifiers, orders) } diff --git a/lib/utils/filename-validation.ts b/lib/utils/filename-validation.ts index b18554ab4..de4a08730 100644 --- a/lib/utils/filename-validation.ts +++ b/lib/utils/filename-validation.ts @@ -7,12 +7,12 @@ import { getCapabilities } from '@nextcloud/capabilities' interface NextcloudCapabilities extends Record { files: { - 'bigfilechunking': boolean + bigfilechunking: boolean // those are new in Nextcloud 30 - 'forbidden_filenames'?: string[] - 'forbidden_filename_basenames'?: string[] - 'forbidden_filename_characters'?: string[] - 'forbidden_filename_extensions'?: string[] + forbidden_filenames?: string[] + forbidden_filename_basenames?: string[] + forbidden_filename_characters?: string[] + forbidden_filename_extensions?: string[] } } @@ -42,7 +42,6 @@ interface InvalidFilenameErrorOptions { } export class InvalidFilenameError extends Error { - public constructor(options: InvalidFilenameErrorOptions) { super(`Invalid ${options.reason} '${options.segment}' in filename '${options.filename}'`, { cause: options }) } @@ -67,11 +66,11 @@ export class InvalidFilenameError extends Error { public get segment() { return (this.cause as InvalidFilenameErrorOptions).segment } - } /** * Validate a given filename + * * @param filename The filename to check * @throws {InvalidFilenameError} */ @@ -115,6 +114,7 @@ export function validateFilename(filename: string): void { /** * Check the validity of a filename * This is a convenient wrapper for `checkFilenameValidity` to only return a boolean for the valid + * * @param filename Filename to check validity */ export function isFilenameValid(filename: string): boolean { diff --git a/lib/utils/filename.ts b/lib/utils/filename.ts index d33961679..19a1be29b 100644 --- a/lib/utils/filename.ts +++ b/lib/utils/filename.ts @@ -8,6 +8,7 @@ import { basename, extname } from '@nextcloud/paths' interface UniqueNameOptions { /** * A function that takes an index and returns a suffix to add to the file name, defaults to '(index)' + * * @param index The current index to add */ suffix?: (index: number) => string @@ -19,10 +20,11 @@ interface UniqueNameOptions { /** * Create an unique file name + * * @param name The initial name to use * @param otherNames Other names that are already used * @param options Optional parameters for tuning the behavior - * @return {string} Either the initial name, if unique, or the name with the suffix so that the name is unique + * @return Either the initial name, if unique, or the name with the suffix so that the name is unique */ export function getUniqueName( name: string, diff --git a/lib/utils/index.ts b/lib/utils/index.ts index 22bba8f8b..a50cade86 100644 --- a/lib/utils/index.ts +++ b/lib/utils/index.ts @@ -9,5 +9,5 @@ export type { FilesSortingOptions } from './fileSorting.ts' export * from './filename-validation.ts' export { getUniqueName } from './filename.ts' export { formatFileSize, parseFileSize } from './fileSize.ts' -export { sortNodes, FilesSortingMode } from './fileSorting.ts' +export { FilesSortingMode, sortNodes } from './fileSorting.ts' export { orderBy } from './sorting.ts' diff --git a/lib/utils/objectValidation.ts b/lib/utils/objectValidation.ts index 48f44bbb9..004c8d267 100644 --- a/lib/utils/objectValidation.ts +++ b/lib/utils/objectValidation.ts @@ -21,7 +21,6 @@ export function checkOptionalProperty( if (!Array.isArray(obj[property])) { throw new Error(`View ${property} must be an array`) } - // eslint-disable-next-line valid-typeof } else if (typeof obj[property] !== type) { throw new Error(`View ${property} must be a ${type}`) } else if (type === 'object' && (obj[property] === null || Array.isArray(obj[property]))) { diff --git a/lib/utils/sorting.ts b/lib/utils/sorting.ts index 53298e808..e06f83823 100644 --- a/lib/utils/sorting.ts +++ b/lib/utils/sorting.ts @@ -2,13 +2,15 @@ * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later */ + import { getCanonicalLocale, getLanguage } from '@nextcloud/l10n' type IdentifierFn = (v: T) => unknown -export type SortingOrder = 'asc'|'desc' +export type SortingOrder = 'asc' | 'desc' /** * Helper to create string representation + * * @param value Value to stringify */ function stringify(value: unknown) { diff --git a/lib/window.d.ts b/lib/window.d.ts index 4a4bd2c6d..a0abc0dd5 100644 --- a/lib/window.d.ts +++ b/lib/window.d.ts @@ -4,16 +4,15 @@ */ /// +import type { DavProperty } from './dav/index.ts' import type { - IFileListFilter, - Navigation, FileAction, FileListAction, Header, + IFileListFilter, + Navigation, NewMenu, } from './index.ts' - -import type { DavProperty } from './dav/index.ts' import type { ISidebarTab } from './sidebar/index.ts' import type { ISidebarAction } from './sidebar/SidebarAction.ts' diff --git a/package-lock.json b/package-lock.json index 0db183d8a..f8466a01e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ }, "devDependencies": { "@codecov/vite-plugin": "^1.9.1", - "@nextcloud/eslint-config": "^8.4.2", + "@nextcloud/eslint-config": "^9.0.0-rc.5", "@nextcloud/event-bus": "^3.3.3", "@nextcloud/typings": "^1.10.0", "@nextcloud/vite-config": "^2.5.2", @@ -42,16 +42,6 @@ "node": "^24.0.0" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@acemir/cssom": { "version": "0.9.29", "resolved": "https://registry.npmjs.org/@acemir/cssom/-/cssom-0.9.29.tgz", @@ -213,6 +203,7 @@ "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", @@ -238,25 +229,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/eslint-parser": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.9.tgz", - "integrity": "sha512-xdMkt39/nviO/4vpVdrEYPwXCsYIXSSAr6mC7WQsNIlGnuxKyKE7GZjalcnbSWiC4OXGNNN3UQPeHfjSC6sTDA==", - "dev": true, - "peer": true, - "dependencies": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.11.0", - "eslint": "^7.5.0 || ^8.0.0" - } - }, "node_modules/@babel/generator": { "version": "7.26.9", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", @@ -575,6 +547,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -621,23 +594,36 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.39.4", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.39.4.tgz", - "integrity": "sha512-Jvw915fjqQct445+yron7Dufix9A+m9j1fCJYlCo1FWlRvTxa3pjJelxdSTdaLWcTwRU6vbL+NYjO4YuNIS5Qg==", + "version": "0.78.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.78.0.tgz", + "integrity": "sha512-rQkU5u8hNAq2NVRzHnIUUvR6arbO0b6AOlvpTNS48CkiKSn/xtNfOzBK23JE4SiW89DgvU7GtxLVgV4Vn2HBAw==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "comment-parser": "1.3.1", - "esquery": "^1.5.0", - "jsdoc-type-pratt-parser": "~4.0.0" + "@types/estree": "^1.0.8", + "@typescript-eslint/types": "^8.46.4", + "comment-parser": "1.4.1", + "esquery": "^1.6.0", + "jsdoc-type-pratt-parser": "~7.0.0" }, "engines": { - "node": ">=16" + "node": ">=20.11.0" + } + }, + "node_modules/@es-joy/resolve.exports": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@es-joy/resolve.exports/-/resolve.exports-1.2.0.tgz", + "integrity": "sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" } }, "node_modules/@esbuild/aix-ppc64": { @@ -1083,27 +1069,30 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "peer": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -1112,63 +1101,196 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/compat": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.4.1.tgz", + "integrity": "sha512-cfO82V9zxxGBxcQDr1lfaYB7wykTa0b00mGa36FrJl7iTFd0Z2cHfEYuxcBRP/iNijCsWsEkA+jzT8hGYmv33w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^8.40 || 9" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "peer": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "type-fest": "^0.20.2" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/json": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@eslint/json/-/json-0.14.0.tgz", + "integrity": "sha512-rvR/EZtvUG3p9uqrSmcDJPYSH7atmWr0RnFWN6m917MAPx82+zQgPUmDu0whPFG6XTyM0vB/hR6c1Q63OaYtCQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "@eslint/plugin-kit": "^0.4.1", + "@humanwhocodes/momoa": "^3.3.10", + "natural-compare": "^1.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@exodus/bytes": { @@ -1223,19 +1345,28 @@ "@shikijs/vscode-textmate": "^10.0.2" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, - "peer": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -1243,7 +1374,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "peer": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -1252,12 +1383,29 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "node_modules/@humanwhocodes/momoa": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-3.3.10.tgz", + "integrity": "sha512-KWiFQpSAqEIyrTXko3hFNLeQvSK8zXlJQzhhxsyVn58WFRYXST99b3Nqnu+ttOtjds2Pl2grUHGpe2NzhPynuQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, - "peer": true + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/balanced-match": { "version": "4.0.1", @@ -1520,77 +1668,51 @@ } }, "node_modules/@nextcloud/eslint-config": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@nextcloud/eslint-config/-/eslint-config-8.4.2.tgz", - "integrity": "sha512-zsDcBxvp2Vr/BgasK/vNYJ84LOXjl4RseJPrcp93zcnaB2WnygV50Sd0nQ5JN0ngTyPjiIlGd92MMzrMTofjRA==", + "version": "9.0.0-rc.6", + "resolved": "https://registry.npmjs.org/@nextcloud/eslint-config/-/eslint-config-9.0.0-rc.6.tgz", + "integrity": "sha512-XTdW7GQhISQgl10QbGDraYNNnSPdo7kOkewhIb6Bns/QN3ZuYwtbMTBdMuWgh+kzRpTQWd3F4I8nTFo8D2ppXQ==", "dev": true, "license": "AGPL-3.0-or-later", - "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.26.9", - "@babel/eslint-parser": "^7.16.5", - "@nextcloud/eslint-plugin": "^2.2.1", - "@vue/eslint-config-typescript": "^13.0.0", - "eslint": "^8.27.0", - "eslint-config-standard": "^17.1.0", - "eslint-import-resolver-exports": "^1.0.0-beta.5", - "eslint-import-resolver-typescript": "^3.8.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsdoc": "^46.2.6", - "eslint-plugin-n": "^16.0.0", - "eslint-plugin-promise": "^6.6.0", - "eslint-plugin-vue": "^9.7.0", - "typescript": "^5.0.2" - } - }, - "node_modules/@nextcloud/eslint-plugin": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@nextcloud/eslint-plugin/-/eslint-plugin-2.2.1.tgz", - "integrity": "sha512-RX+0FxpL1h2EzjNLeW0VSGTkbyWIq7WgV7QAjtyUmDbSGwf1ds9Zy5OcRkgXRHRIu/W0gB0DhS2iz9qXHphCzA==", - "dev": true, - "peer": true, "dependencies": { - "fast-xml-parser": "^4.2.5", - "requireindex": "^1.2.0", - "semver": "^7.5.3" + "@eslint/json": "^0.14.0", + "@stylistic/eslint-plugin": "^5.5.0", + "eslint-config-flat-gitignore": "^2.1.0", + "eslint-plugin-antfu": "^3.1.1", + "eslint-plugin-jsdoc": "^61.2.1", + "eslint-plugin-perfectionist": "^4.15.1", + "eslint-plugin-vue": "^10.5.1", + "fast-xml-parser": "^5.3.2", + "globals": "^16.5.0", + "semver": "^7.7.3", + "sort-package-json": "^3.4.0", + "typescript-eslint": "^8.46.4" }, "engines": { - "node": "^20.0.0", - "npm": "^10.0.0" + "node": "^20.19 || ^22 || ^24" }, "peerDependencies": { - "eslint": ">=7.0.0" + "eslint": ">=9" } }, - "node_modules/@nextcloud/eslint-plugin/node_modules/fast-xml-parser": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", - "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", + "node_modules/@nextcloud/eslint-config/node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], "license": "MIT", - "peer": true, - "dependencies": { - "strnum": "^1.1.1" + "engines": { + "node": ">=18" }, - "bin": { - "fxparser": "src/cli/cli.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@nextcloud/eslint-plugin/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "node_modules/@nextcloud/eslint-config/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "peer": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -1598,20 +1720,6 @@ "node": ">=10" } }, - "node_modules/@nextcloud/eslint-plugin/node_modules/strnum": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "peer": true - }, "node_modules/@nextcloud/event-bus": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/@nextcloud/event-bus/-/event-bus-3.3.3.tgz", @@ -1818,65 +1926,6 @@ "spdx-license-ids": "^3.0.0" } }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "peer": true, - "dependencies": { - "eslint-scope": "5.1.1" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "peer": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "peer": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12.4.0" - } - }, "node_modules/@octokit/auth-token": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", @@ -1893,6 +1942,7 @@ "integrity": "sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -2057,7 +2107,6 @@ "hasInstallScript": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", @@ -2100,7 +2149,6 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -2122,7 +2170,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -2144,7 +2191,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -2166,7 +2212,6 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -2188,7 +2233,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -2210,7 +2254,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -2232,7 +2275,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -2254,7 +2296,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -2276,7 +2317,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -2298,7 +2338,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -2320,7 +2359,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -2342,7 +2380,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -2364,7 +2401,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">= 10.0.0" }, @@ -2797,6 +2833,7 @@ "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", @@ -2968,6 +3005,19 @@ "dev": true, "license": "MIT" }, + "node_modules/@sindresorhus/base62": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/base62/-/base62-1.0.0.tgz", + "integrity": "sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@standard-schema/spec": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", @@ -2975,6 +3025,40 @@ "dev": true, "license": "MIT" }, + "node_modules/@stylistic/eslint-plugin": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.7.0.tgz", + "integrity": "sha512-PsSugIf9ip1H/mWKj4bi/BlEoerxXAda9ByRFsYuwsmr6af9NxJL0AaiNXs8Le7R21QR5KMiD/KdxZZ71LjAxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/types": "^8.52.0", + "eslint-visitor-keys": "^5.0.0", + "espree": "^11.0.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=9.0.0" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@tokenizer/token": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", @@ -3045,12 +3129,12 @@ "@types/sizzle": "*" } }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, - "peer": true + "license": "MIT" }, "node_modules/@types/node": { "version": "25.0.5", @@ -3058,6 +3142,7 @@ "integrity": "sha512-FuLxeLuSVOqHPxSN1fkcD8DLU21gAP7nCKqGRJ/FglbCUBs0NYN6TpHcdmyLeh8C0KwGIaZQJSv+OYG+KZz+Gw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -3088,122 +3173,160 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz", - "integrity": "sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.52.0.tgz", + "integrity": "sha512-okqtOgqu2qmZJ5iN4TWlgfF171dZmx2FzdOv2K/ixL2LZWDStL8+JgQerI2sa8eAEfoydG9+0V96m7V+P8yE1Q==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/type-utils": "7.9.0", - "@typescript-eslint/utils": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.52.0", + "@typescript-eslint/type-utils": "8.52.0", + "@typescript-eslint/utils": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0", + "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.4.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/parser": "^8.52.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" } }, "node_modules/@typescript-eslint/parser": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.9.0.tgz", - "integrity": "sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.52.0.tgz", + "integrity": "sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/typescript-estree": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.52.0", + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0", + "debug": "^4.4.3" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.52.0.tgz", + "integrity": "sha512-xD0MfdSdEmeFa3OmVqonHi+Cciab96ls1UhIF/qX/O/gPu5KXD0bY9lu33jj04fjzrXHcuvjBcBC+D3SNSadaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.52.0", + "@typescript-eslint/types": "^8.52.0", + "debug": "^4.4.3" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz", - "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.52.0.tgz", + "integrity": "sha512-ixxqmmCcc1Nf8S0mS0TkJ/3LKcC8mruYJPOU6Ia2F/zUUR4pApW7LzrpU3JmtePbRUTes9bEqRc1Gg4iyRnDzA==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0" + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.52.0.tgz", + "integrity": "sha512-jl+8fzr/SdzdxWJznq5nvoI7qn2tNYV/ZBAEcaFMVXf+K6jmXvAFrgo/+5rxgnL152f//pDEAYAhhBAZGrVfwg==", + "dev": true, + "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.9.0.tgz", - "integrity": "sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.52.0.tgz", + "integrity": "sha512-JD3wKBRWglYRQkAtsyGz1AewDu3mTc7NtRjR/ceTyGoPqmdS5oCdx/oZMWD5Zuqmo6/MpsYs0wp6axNt88/2EQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.9.0", - "@typescript-eslint/utils": "7.9.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/utils": "8.52.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz", - "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.52.0.tgz", + "integrity": "sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3211,32 +3334,31 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz", - "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.52.0.tgz", + "integrity": "sha512-XP3LClsCc0FsTK5/frGjolyADTh3QmsLp6nKd476xNI9CsSsLnmn4f0jrzNoAulmxlmNIpeXuHYeEQv61Q6qeQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/visitor-keys": "7.9.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "@typescript-eslint/project-service": "8.52.0", + "@typescript-eslint/tsconfig-utils": "8.52.0", + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { @@ -3245,17 +3367,16 @@ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "peer": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3267,11 +3388,11 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "peer": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3280,40 +3401,41 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.9.0.tgz", - "integrity": "sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.52.0.tgz", + "integrity": "sha512-wYndVMWkweqHpEpwPhwqE2lnD2DxC6WVLupU/DOt/0/v+/+iQbbzO3jOHjmBMnhu0DgLULvOaU4h4pwHYi2oRQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.9.0", - "@typescript-eslint/types": "7.9.0", - "@typescript-eslint/typescript-estree": "7.9.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.52.0", + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz", - "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.52.0.tgz", + "integrity": "sha512-ink3/Zofus34nmBsPjow63FP5M7IGff0RKAgqR6+CFpdk22M7aLwC9gOcLGYqr7MczLPzZVERW9hRog3O4n1sQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.9.0", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.52.0", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3321,25 +3443,18 @@ } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "peer": true, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true, - "peer": true - }, "node_modules/@vitejs/plugin-vue": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.1.tgz", @@ -3564,7 +3679,6 @@ "integrity": "sha512-5aBjvGqsWs+MoxswZPoTB9nSDb3dhd1x30xrrltKujlCxo48j8HGDNj3QPhF4VIS0VQDUrA1xUfp2hEa+FNyXA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/parser": "^7.28.0", "@vue/compiler-core": "3.5.18", @@ -3583,7 +3697,6 @@ "integrity": "sha512-xM16Ak7rSWHkM3m22NlmcdIM+K4BMyFARAfV9hYFl+SFuRzrZ3uGMNW05kA5pmeMa0X9X963Kgou7ufdbpOP9g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.18", "@vue/shared": "3.5.18" @@ -3600,31 +3713,6 @@ "he": "^1.2.0" } }, - "node_modules/@vue/eslint-config-typescript": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-13.0.0.tgz", - "integrity": "sha512-MHh9SncG/sfqjVqjcuFLOLD6Ed4dRAis4HNt0dXASeAuLqIAx4YMB1/m2o4pUKK1vCt8fUvYG8KKX2Ot3BVZTg==", - "dev": true, - "peer": true, - "dependencies": { - "@typescript-eslint/eslint-plugin": "^7.1.1", - "@typescript-eslint/parser": "^7.1.1", - "vue-eslint-parser": "^9.3.1" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "peerDependencies": { - "eslint": "^8.56.0", - "eslint-plugin-vue": "^9.0.0", - "typescript": ">=4.7.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/@vue/language-core": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.0.tgz", @@ -3682,7 +3770,6 @@ "integrity": "sha512-x0vPO5Imw+3sChLM5Y+B6G1zPjwdOri9e8V21NnTnlEvkxatHEH5B5KEAJcjuzQ7BsjGrKtfzuQ5eQwXh8HXBg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vue/shared": "3.5.18" } @@ -3693,7 +3780,6 @@ "integrity": "sha512-DUpHa1HpeOQEt6+3nheUfqVXRog2kivkXHUhoqJiKR33SO4x+a5uNOMkV487WPerQkL0vUuRvq/7JhRgLW3S+w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vue/reactivity": "3.5.18", "@vue/shared": "3.5.18" @@ -3705,7 +3791,6 @@ "integrity": "sha512-YwDj71iV05j4RnzZnZtGaXwPoUWeRsqinblgVJwR8XTXYZ9D5PbahHQgsbmzUvCWNF6x7siQ89HgnX5eWkr3mw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vue/reactivity": "3.5.18", "@vue/runtime-core": "3.5.18", @@ -3719,7 +3804,6 @@ "integrity": "sha512-PvIHLUoWgSbDG7zLHqSqaCoZvHi6NNmfVFOqO+OnwvqMz/tqQr3FuGWS8ufluNddk7ZLBJYMrjcw1c6XzR12mA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vue/compiler-ssr": "3.5.18", "@vue/shared": "3.5.18" @@ -3736,10 +3820,12 @@ "license": "MIT" }, "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, + "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3752,7 +3838,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "peer": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -3771,7 +3857,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3832,16 +3918,6 @@ "dev": true, "license": "MIT" }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -3863,7 +3939,7 @@ "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -3874,20 +3950,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -3898,95 +3960,6 @@ "node": ">=0.10.0" } }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", - "dev": true, - "peer": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/asn1.js": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", @@ -4106,7 +4079,7 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true, - "peer": true + "license": "ISC" }, "node_modules/brace-expansion": { "version": "1.1.12", @@ -4114,7 +4087,6 @@ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4125,7 +4097,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "peer": true, + "optional": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -4302,6 +4274,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", @@ -4365,19 +4338,6 @@ "dev": true, "license": "MIT" }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -4385,52 +4345,6 @@ "dev": true, "license": "MIT" }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "peer": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/builtins/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/builtins/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/builtins/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "peer": true - }, "node_modules/byte-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/byte-length/-/byte-length-1.0.2.tgz", @@ -4491,7 +4405,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4577,7 +4491,6 @@ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "readdirp": "^4.0.1" }, @@ -4624,11 +4537,11 @@ "license": "MIT" }, "node_modules/comment-parser": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", - "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">= 12.0.0" } @@ -4652,7 +4565,7 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, - "peer": true + "license": "MIT" }, "node_modules/confbox": { "version": "0.2.2", @@ -4760,7 +4673,6 @@ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4831,7 +4743,7 @@ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, - "peer": true, + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -4859,8 +4771,7 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", @@ -4921,7 +4832,7 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, - "peer": true + "license": "MIT" }, "node_modules/define-data-property": { "version": "1.1.4", @@ -4975,6 +4886,19 @@ "minimalistic-assert": "^1.0.0" } }, + "node_modules/detect-indent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.2.tgz", + "integrity": "sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", @@ -4982,7 +4906,6 @@ "dev": true, "license": "Apache-2.0", "optional": true, - "peer": true, "bin": { "detect-libc": "bin/detect-libc.js" }, @@ -4990,6 +4913,19 @@ "node": ">=0.10" } }, + "node_modules/detect-newline": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", + "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -5009,32 +4945,6 @@ "dev": true, "license": "MIT" }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "peer": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "peer": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/domain-browser": { "version": "4.22.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.22.0.tgz", @@ -5101,21 +5011,6 @@ "dev": true, "license": "MIT" }, - "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -5128,60 +5023,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/es-abstract": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", - "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", - "dev": true, - "peer": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.1", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.0", - "safe-array-concat": "^1.0.0", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.7", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -5221,49 +5062,6 @@ "node": ">= 0.4" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, - "peer": true, - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "peer": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "peer": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/esbuild": { "version": "0.25.3", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.3.tgz", @@ -5319,462 +5117,218 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-standard": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", - "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "engines": { - "node": ">=12.0.0" + "url": "https://eslint.org/donate" }, "peerDependencies": { - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", - "eslint-plugin-promise": "^6.0.0" + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/eslint-import-resolver-exports": { - "version": "1.0.0-beta.5", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-exports/-/eslint-import-resolver-exports-1.0.0-beta.5.tgz", - "integrity": "sha512-o6t0w7muUpXr7MkUVzD5igQoDfAQvTmcPp8HEAJdNF8eOuAO+yn6I/TTyMxz9ecCwzX7e02vzlkHURoScUuidg==", + "node_modules/eslint-config-flat-gitignore": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-flat-gitignore/-/eslint-config-flat-gitignore-2.1.0.tgz", + "integrity": "sha512-cJzNJ7L+psWp5mXM7jBX+fjHtBvvh06RBlcweMhKD8jWqQw0G78hOW5tpVALGHGFPsBV+ot2H+pdDGJy6CV8pA==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "resolve.exports": "^2.0.0" + "@eslint/compat": "^1.2.5" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" }, "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "eslint": "^9.5.0" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", - "dev": true, - "peer": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/eslint-plugin-antfu": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-antfu/-/eslint-plugin-antfu-3.1.3.tgz", + "integrity": "sha512-Az1QuqQJ/c2efWCxVxF249u3D4AcAu1Y3VCGAlJm+x4cgnn1ybUAnCT5DWVcogeaWduQKeVw07YFydVTOF4xDw==", "dev": true, - "peer": true, - "dependencies": { - "ms": "^2.1.1" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "eslint": "*" } }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.8.3.tgz", - "integrity": "sha512-A0bu4Ks2QqDWNpeEgTQMPTngaMhuDu4yv6xpftBMAf+1ziXnpx+eSR1WRfoPTe2BAiAjHFZ7kSNx1fvr5g5pmQ==", + "node_modules/eslint-plugin-jsdoc": { + "version": "61.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-61.7.1.tgz", + "integrity": "sha512-36DpldF95MlTX//n3/naULFVt8d1cV4jmSkx7ZKrE9ikkKHAgMLesuWp1SmwpVwAs5ndIM6abKd6PeOYZUgdWg==", "dev": true, - "license": "ISC", - "peer": true, + "license": "BSD-3-Clause", "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.3.7", - "enhanced-resolve": "^5.15.0", - "get-tsconfig": "^4.10.0", - "is-bun-module": "^1.0.2", - "stable-hash": "^0.0.4", - "tinyglobby": "^0.2.12" + "@es-joy/jsdoccomment": "~0.78.0", + "@es-joy/resolve.exports": "1.2.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.1", + "debug": "^4.4.3", + "escape-string-regexp": "^4.0.0", + "espree": "^11.0.0", + "esquery": "^1.7.0", + "html-entities": "^2.6.0", + "object-deep-merge": "^2.0.0", + "parse-imports-exports": "^0.2.4", + "semver": "^7.7.3", + "spdx-expression-parse": "^4.0.0", + "to-valid-identifier": "^1.0.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + "node": ">=20.11.0" }, "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*", - "eslint-plugin-import-x": "*" - }, - "peerDependenciesMeta": { - "eslint-plugin-import": { - "optional": true - }, - "eslint-plugin-import-x": { - "optional": true - } + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "node_modules/eslint-plugin-jsdoc/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "peer": true, - "dependencies": { - "debug": "^3.2.7" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "node": ">=10" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/eslint-plugin-jsdoc/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/eslint-plugin-es-x": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.2.0.tgz", - "integrity": "sha512-9dvv5CcvNjSJPqnS5uZkqb3xmbeqRLnvXKK7iI5+oK/yTusyc46zbBZKENGsOfojm/mKfszyZb+wNqNPAPeGXA==", + "node_modules/eslint-plugin-perfectionist": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.15.1.tgz", + "integrity": "sha512-MHF0cBoOG0XyBf7G0EAFCuJJu4I18wy0zAoT1OHfx2o6EOx1EFTIzr2HGeuZa1kDcusoX0xJ9V7oZmaeFd773Q==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.6.0" + "@typescript-eslint/types": "^8.38.0", + "@typescript-eslint/utils": "^8.38.0", + "natural-orderby": "^5.0.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" + "node": "^18.0.0 || >=20.0.0" }, "peerDependencies": { - "eslint": ">=8" + "eslint": ">=8.45.0" } }, - "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "node_modules/eslint-plugin-vue": { + "version": "10.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.6.2.tgz", + "integrity": "sha512-nA5yUs/B1KmKzvC42fyD0+l9Yd+LtEpVhWRbXuDj0e+ZURcTtyRbMDWUeJmTAh2wC6jC83raS63anNM2YT3NPw==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^7.1.0", + "semver": "^7.6.3", + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "peer": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-jsdoc": { - "version": "46.4.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.4.4.tgz", - "integrity": "sha512-D8TGPOkq3bnzmYmA7Q6jdsW+Slx7CunhJk1tlouVq6wJjlP1p6eigZPvxFn7aufud/D66xBsNVMhkDQEuqumMg==", - "dev": true, - "peer": true, - "dependencies": { - "@es-joy/jsdoccomment": "~0.39.4", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.3.1", - "debug": "^4.3.4", - "escape-string-regexp": "^4.0.0", - "esquery": "^1.5.0", - "is-builtin-module": "^3.2.1", - "semver": "^7.5.1", - "spdx-expression-parse": "^3.0.1" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@stylistic/eslint-plugin": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@typescript-eslint/parser": "^7.0.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "vue-eslint-parser": "^10.0.0" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "peer": true - }, - "node_modules/eslint-plugin-n": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.0.1.tgz", - "integrity": "sha512-CDmHegJN0OF3L5cz5tATH84RPQm9kG+Yx39wIqIwPR2C0uhBGMWfbbOtetR83PQjjidA5aXMu+LEFw1jaSwvTA==", - "dev": true, - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "builtins": "^5.0.1", - "eslint-plugin-es-x": "^7.1.0", - "ignore": "^5.2.4", - "is-core-module": "^2.12.1", - "minimatch": "^3.1.2", - "resolve": "^1.22.2", - "semver": "^7.5.3" - }, - "engines": { - "node": ">=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-n/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-n/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-n/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "peer": true - }, - "node_modules/eslint-plugin-promise": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", - "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", - "dev": true, - "license": "ISC", - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-vue": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.26.0.tgz", - "integrity": "sha512-eTvlxXgd4ijE1cdur850G6KalZqk65k1JKoOI2d1kT3hr8sPD07j1q98FRFdNnpxBELGPWxZmInxeHGF/GxtqQ==", - "dev": true, - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "globals": "^13.24.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.15", - "semver": "^7.6.0", - "vue-eslint-parser": "^9.4.2", - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-vue/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "peer": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "@stylistic/eslint-plugin": { + "optional": true + }, + "@typescript-eslint/parser": { + "optional": true + } } }, "node_modules/eslint-plugin-vue/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "peer": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -5783,135 +5337,90 @@ } }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, - "peer": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/eslint-visitor-keys": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.0.tgz", + "integrity": "sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==", "dev": true, - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "peer": true, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "node_modules/eslint/node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, - "peer": true, + "license": "BSD-2-Clause", "dependencies": { - "type-fest": "^0.20.2" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.0.0.tgz", + "integrity": "sha512-+gMeWRrIh/NsG+3NaLeWHuyeyk70p2tbvZIWBYcqQ4/7Xvars6GYTZNhF1sIeLcc6Wb11He5ffz3hsHyXFrw5A==", "dev": true, - "peer": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^5.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, - "peer": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -5919,22 +5428,12 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "peer": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -5942,22 +5441,12 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "peer": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -5983,7 +5472,7 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "peer": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -6032,49 +5521,19 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "peer": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "peer": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, - "peer": true + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, - "peer": true + "license": "MIT" }, "node_modules/fast-uri": { "version": "3.0.6", @@ -6112,16 +5571,6 @@ "fxparser": "src/cli/cli.js" } }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "peer": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, "node_modules/fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", @@ -6145,16 +5594,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { @@ -6162,7 +5611,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, - "peer": true, + "optional": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6187,25 +5636,25 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, - "peer": true + "license": "ISC" }, "node_modules/for-each": { "version": "0.3.5", @@ -6249,13 +5698,6 @@ "node": ">=14.14" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "peer": true - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -6267,43 +5709,14 @@ "darwin" ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6366,56 +5779,14 @@ "node": ">= 0.4" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", - "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "node_modules/git-hooks-list": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.1.1.tgz", + "integrity": "sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/fisker/git-hooks-list?sponsor=1" } }, "node_modules/glob-parent": { @@ -6423,7 +5794,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "peer": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -6441,43 +5812,6 @@ "node": ">=4" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "peer": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "peer": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -6497,13 +5831,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "peer": true - }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -6516,16 +5843,6 @@ "node": ">= 0.4.0" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -6548,19 +5865,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -6667,6 +5971,23 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -6729,11 +6050,11 @@ "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -6743,15 +6064,14 @@ "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -6778,43 +6098,17 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "peer": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, - "peer": true, - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/is-arguments": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", @@ -6832,97 +6126,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "peer": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "peer": true, - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-bun-module": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", - "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "semver": "^7.6.3" - } - }, - "node_modules/is-bun-module/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "license": "ISC", - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -6947,28 +6155,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "peer": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -6998,7 +6189,6 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "peer": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -7023,53 +6213,27 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "peer": true, + "optional": true, "engines": { "node": ">=0.12.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, - "peer": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-potential-custom-element-name": { @@ -7098,35 +6262,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "peer": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-svg": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-6.1.0.tgz", @@ -7139,23 +6274,7 @@ "node": ">=20" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "peer": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-typed-array": { @@ -7174,19 +6293,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -7198,7 +6304,7 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, - "peer": true + "license": "ISC" }, "node_modules/isomorphic-timers-promises": { "version": "1.0.1", @@ -7323,7 +6429,6 @@ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "argparse": "^2.0.1" }, @@ -7332,13 +6437,13 @@ } }, "node_modules/jsdoc-type-pratt-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", - "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-7.0.0.tgz", + "integrity": "sha512-c7YbokssPOSHmqTbSAmTtnVgAVa/7lumWNYqomgd5KOMyPrRve2anx6lonfOsXEQacqF9FKVUj7bLg4vRSvdYA==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=12.0.0" + "node": ">=20.0.0" } }, "node_modules/jsdom": { @@ -7403,19 +6508,26 @@ "node": ">=6" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, - "peer": true + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, - "peer": true + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", @@ -7442,6 +6554,16 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kolorist": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", @@ -7459,7 +6581,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -7521,7 +6643,7 @@ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, - "peer": true + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", @@ -7664,23 +6786,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", - "peer": true, + "optional": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -7729,7 +6841,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "peer": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -7737,16 +6849,6 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/mlly": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", @@ -7826,7 +6928,17 @@ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, - "peer": true + "license": "MIT" + }, + "node_modules/natural-orderby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-5.0.0.tgz", + "integrity": "sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/nested-property": { "version": "4.0.0", @@ -7839,8 +6951,7 @@ "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "dev": true, "license": "MIT", - "optional": true, - "peer": true + "optional": true }, "node_modules/node-domexception": { "version": "1.0.0", @@ -7934,7 +7045,7 @@ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, - "peer": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -7942,6 +7053,13 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/object-deep-merge": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/object-deep-merge/-/object-deep-merge-2.0.0.tgz", + "integrity": "sha512-3DC3UMpeffLTHiuXSy/UG4NOIYTLlY9u3V82+djSCLYClWobZiS4ivYzpIUWrRY/nfsJ8cWsKyG3QfyLePmhvg==", + "dev": true, + "license": "MIT" + }, "node_modules/object-inspect": { "version": "1.13.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", @@ -7999,24 +7117,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/obug": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", @@ -8038,18 +7138,18 @@ } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -8117,7 +7217,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -8142,6 +7242,23 @@ "node": ">= 0.10" } }, + "node_modules/parse-imports-exports": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz", + "integrity": "sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-statements": "1.0.11" + } + }, + "node_modules/parse-statements": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz", + "integrity": "sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==", + "dev": true, + "license": "MIT" + }, "node_modules/parse5": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.0.tgz", @@ -8183,22 +7300,12 @@ "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -8214,16 +7321,6 @@ "resolved": "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz", "integrity": "sha512-1gJ0WpNIiYcQydgg3Ed8KzvIqTsDpNwq+cjBCssvBtuTWjEqY1AW+i+OepiEMqDCzyro9B2sLAe4RBPajMYFiA==" }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", @@ -8260,7 +7357,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "peer": true, + "optional": true, "engines": { "node": ">=8.6" }, @@ -8323,6 +7420,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -8333,11 +7431,11 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", - "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -8351,7 +7449,7 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -8460,27 +7558,6 @@ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -8523,7 +7600,6 @@ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 14.18.0" }, @@ -8532,24 +7608,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", - "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -8560,21 +7618,24 @@ "node": ">=0.10.0" } }, - "node_modules/requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.5" - } - }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, + "node_modules/reserved-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/reserved-identifiers/-/reserved-identifiers-1.2.0.tgz", + "integrity": "sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/resolve": { "version": "1.22.2", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", @@ -8597,57 +7658,9 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, "license": "MIT", - "peer": true, - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "peer": true, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=4" } }, "node_modules/ripemd160": { @@ -8733,6 +7746,7 @@ "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -8865,49 +7879,6 @@ "rollup": "^4.0.0" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", - "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -9046,7 +8017,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -9059,7 +8030,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -9133,28 +8104,60 @@ "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" }, - "engines": { - "node": ">= 0.4" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/sort-object-keys": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.0.1.tgz", + "integrity": "sha512-R89fO+z3x7hiKPXX5P0qim+ge6Y60AjtlW+QQpRozrrNcR1lw9Pkpm5MLB56HoNvdcLHL4wbpq16OcvGpEDJIg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sort-package-json": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.6.0.tgz", + "integrity": "sha512-fyJsPLhWvY7u2KsKPZn1PixbXp+1m7V8NWqU8CvgFRbMEX41Ffw1kD8n0CfJiGoaSfoAvbrqRRl/DcHO8omQOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-indent": "^7.0.2", + "detect-newline": "^4.0.1", + "git-hooks-list": "^4.1.1", + "is-plain-obj": "^4.1.0", + "semver": "^7.7.3", + "sort-object-keys": "^2.0.1", + "tinyglobby": "^0.2.15" + }, + "bin": { + "sort-package-json": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=20" } }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/sort-package-json/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "peer": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/source-map": { @@ -9246,14 +8249,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/stable-hash": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", - "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", @@ -9312,67 +8307,6 @@ "node": ">=0.6.19" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", - "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -9448,24 +8382,6 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "peer": true - }, "node_modules/timers-browserify": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", @@ -9537,6 +8453,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -9594,7 +8511,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "peer": true, + "optional": true, "dependencies": { "is-number": "^7.0.0" }, @@ -9602,6 +8519,23 @@ "node": ">=8.0" } }, + "node_modules/to-valid-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-valid-identifier/-/to-valid-identifier-1.0.0.tgz", + "integrity": "sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/base62": "^1.0.0", + "reserved-identifiers": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/tough-cookie": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz", @@ -9629,52 +8563,16 @@ } }, "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", - "dev": true, - "peer": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "peer": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" + "typescript": ">=4.8.4" } }, "node_modules/tslib": { @@ -9705,7 +8603,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -9713,19 +8611,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", @@ -9741,60 +8626,6 @@ "node": ">= 0.4" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dev": true, - "peer": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/typedoc": { "version": "0.28.15", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.15.tgz", @@ -9860,6 +8691,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -9868,6 +8700,30 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.52.0.tgz", + "integrity": "sha512-atlQQJ2YkO4pfTVQmQ+wvYQwexPDOIgo+RaVcD7gHgzy/IQA+XTyuxNM9M9TVXvttkF7koBHmcwisKdOAf2EcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.52.0", + "@typescript-eslint/parser": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/utils": "8.52.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, "node_modules/typescript-event-target": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/typescript-event-target/-/typescript-event-target-1.1.2.tgz", @@ -9887,22 +8743,6 @@ "dev": true, "license": "MIT" }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/undici": { "version": "5.29.0", "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", @@ -10057,6 +8897,7 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -10670,6 +9511,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -10683,6 +9525,7 @@ "integrity": "sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/expect": "4.0.16", "@vitest/mocker": "4.0.16", @@ -10806,76 +9649,66 @@ } }, "node_modules/vue-eslint-parser": { - "version": "9.4.2", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz", - "integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.2.0.tgz", + "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" + "debug": "^4.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.6.0", + "semver": "^7.6.3" }, "engines": { - "node": "^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { - "eslint": ">=6.0.0" + "eslint": "^8.57.0 || ^9.0.0" } }, - "node_modules/vue-eslint-parser/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, - "peer": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/vue-eslint-parser/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/vue-eslint-parser/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, - "peer": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -11048,7 +9881,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "peer": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -11059,23 +9892,6 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "peer": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/which-typed-array": { "version": "1.1.19", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", @@ -11115,6 +9931,16 @@ "node": ">=8" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -11148,7 +9974,7 @@ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true, - "peer": true, + "license": "Apache-2.0", "engines": { "node": ">=12" } diff --git a/package.json b/package.json index 1faab62f9..bd5fa504a 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ }, "devDependencies": { "@codecov/vite-plugin": "^1.9.1", - "@nextcloud/eslint-config": "^8.4.2", + "@nextcloud/eslint-config": "^9.0.0-rc.5", "@nextcloud/event-bus": "^3.3.3", "@nextcloud/typings": "^1.10.0", "@nextcloud/vite-config": "^2.5.2",