diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 0000000..e7d1604 --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,24 @@ +/* vi:ft=jsonc */ +// NOTE: this file is interpreted as jsonc, but you can't +// use a jsonc file extension or oxlint will ignore it, hence +// the modeline. +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "categories": { + "correctness": "error" + // TODO: un-comment these and fix the issues + // "suspicious": "error", + // "restriction": "error" + }, + "plugins": ["eslint", "import", "oxc", "promise", "react", "typescript", "unicorn"], + "ignorePatterns": ["dist", "src/spicedb-common/protodefs", "public"], + "rules": { + // TODO: fix this and get rid of it + "react/only-export-components": [ + "warn", + { + "allowConstantExport": true + } + ] + } +} diff --git a/api/share.ts b/api/share.ts index 67ab5f7..eca0a78 100644 --- a/api/share.ts +++ b/api/share.ts @@ -1,7 +1,7 @@ import { createHash } from "crypto"; import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3"; -import type { VercelRequest, VercelResponse } from "@vercel/node"; +import type { VercelRequest, VercelRequestBody, VercelResponse } from "@vercel/node"; const encodeURL = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; @@ -31,7 +31,7 @@ function computeShareHash(salt: string, data: string): string { return b64.substring(0, hashLen); } -function validateSharedDataV2(data): data is SharedDataV2 { +function validateSharedDataV2(data: VercelRequestBody): data is SharedDataV2 { if (typeof data !== "object" || data === null) { return false; } diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index a7b64d4..0000000 --- a/eslint.config.js +++ /dev/null @@ -1,25 +0,0 @@ -import js from "@eslint/js"; -import reactHooks from "eslint-plugin-react-hooks"; -import reactRefresh from "eslint-plugin-react-refresh"; -import globals from "globals"; -import tseslint from "typescript-eslint"; - -export default tseslint.config( - { ignores: ["dist", "src/spicedb-common/protodefs"] }, - { - extends: [js.configs.recommended, ...tseslint.configs.recommended], - files: ["**/*.{ts,tsx}"], - languageOptions: { - ecmaVersion: 2020, - globals: globals.browser, - }, - plugins: { - "react-hooks": reactHooks, - "react-refresh": reactRefresh, - }, - rules: { - ...reactHooks.configs.recommended.rules, - "react-refresh/only-export-components": ["warn", { allowConstantExport: true }], - }, - }, -); diff --git a/package.json b/package.json index e8ddf0e..be65111 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,8 @@ "dev": "HTTPS=true vite", "build": "tsc -b && vite build", "test": "vitest", - "lint": "eslint .", - "lint-fix": "eslint --fix .", + "lint": "oxlint --type-aware --type-check", + "lint-fix": "oxlint --type-aware --type-check --fix", "typecheck": "tsc --noEmit", "format": "oxfmt", "format:check": "oxfmt --check", @@ -79,7 +79,6 @@ "zod": "^4.2.1" }, "devDependencies": { - "@eslint/js": "^9.18.0", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.4.3", "@types/d3-scale-chromatic": "^3.0.0", @@ -99,14 +98,12 @@ "@vitejs/plugin-react": "^4.3.4", "cypress": "^12.9.0", "cypress-wait-until": "^1.7.2", - "eslint": "^9.18.0", - "eslint-plugin-react-hooks": "^5.1.0", - "eslint-plugin-react-refresh": "^0.4.18", "globals": "^15.14.0", "oxfmt": "^0.28.0", + "oxlint": "^1.48.0", + "oxlint-tsgolint": "^0.14.0", "tw-animate-css": "^1.2.8", "typescript": "~5.7.3", - "typescript-eslint": "^8.20.0", "vite": "^6.0.7", "vite-plugin-svgr": "^4.3.0", "vitest": "^2.1.8" diff --git a/src/components/CheckDebugTraceView.tsx b/src/components/CheckDebugTraceView.tsx index 77fc81e..ec297a9 100644 --- a/src/components/CheckDebugTraceView.tsx +++ b/src/components/CheckDebugTraceView.tsx @@ -271,7 +271,7 @@ function ContextTreeView(context: JsonObject | undefined) { } return ( - + {isItemValue ? value : undefined} ); @@ -280,13 +280,19 @@ function ContextTreeView(context: JsonObject | undefined) { function ContextTreeValue(value: JsonValue) { if (value === null) { + // NOTE: i'm not sure why this triggers on array literals. + // oxlint-disable-next-line eslint-plugin-react(jsx-key) return [null, false]; } if (typeof value === "boolean") { + // oxlint-disable-next-line eslint-plugin-react(jsx-key) return [{value.toString()}, false]; } if (Array.isArray(value)) { return [ + // NOTE: not sure what the key would be in this case. I think I'd rather get rid + // of this code. + // oxlint-disable-next-line eslint-plugin-react(jsx-key) value.map((v) => { return {ContextTreeValue(v)}; }), @@ -298,5 +304,6 @@ function ContextTreeValue(value: JsonValue) { return [ContextTreeView(value), true]; } // If we've gotten this far, we have a number or a string and we can render it straight out. + // oxlint-disable-next-line eslint-plugin-react(jsx-key) return [{value}, false]; } diff --git a/src/components/EditorDisplay.tsx b/src/components/EditorDisplay.tsx index 5087615..b7f470c 100644 --- a/src/components/EditorDisplay.tsx +++ b/src/components/EditorDisplay.tsx @@ -5,7 +5,7 @@ import Editor, { DiffEditor, useMonaco } from "@monaco-editor/react"; import { useDebouncedCallback } from "@tanstack/react-pacer/debouncer"; import { useNavigate, useLocation } from "@tanstack/react-router"; import lineColumn from "line-column"; -import monaco from "monaco-editor"; +import * as monaco from "monaco-editor"; import { useEffect, useMemo, useRef, useState } from "react"; import { flushSync } from "react-dom"; @@ -163,7 +163,7 @@ export function EditorDisplay(props: EditorDisplayProps) { // TODO: this shouldn't be necessary. Moving to redux may make this less painful. const updated = datastore.update(currentItem!, value || ""); if (updated && updated.pathname !== location.pathname) { - navigate({ to: updated.pathname, replace: true }); + void navigate({ to: updated.pathname, replace: true }); } props.datastoreUpdated(); diff --git a/src/components/ExamplesDropdown.tsx b/src/components/ExamplesDropdown.tsx index b22399f..6025eeb 100644 --- a/src/components/ExamplesDropdown.tsx +++ b/src/components/ExamplesDropdown.tsx @@ -28,12 +28,9 @@ export function ExamplesDropdown({ const posthog = usePostHog(); useEffect(() => { - const fetchExamples = async () => { - if (examples === undefined) { - setExamples(await LoadExamples()); - } - }; - fetchExamples(); + if (examples === undefined) { + setExamples(LoadExamples()); + } }, [examples]); return ( diff --git a/src/components/FullPlayground.tsx b/src/components/FullPlayground.tsx index 816baa0..8715cac 100644 --- a/src/components/FullPlayground.tsx +++ b/src/components/FullPlayground.tsx @@ -374,11 +374,9 @@ export function ThemedAppView(props: { datastore: DataStore }) { // Effect: If the user lands on the `/` route, redirect them to the schema editor. // TODO: this should probably be a redirect at the routing layer. useEffect(() => { - (async () => { - if (currentItem === undefined) { - navigate({ to: DataStorePaths.Schema(), replace: true }); - } - })(); + if (currentItem === undefined) { + void navigate({ to: DataStorePaths.Schema(), replace: true }); + } }, [datastore, currentItem, navigate]); const conductDownload = () => { @@ -389,35 +387,33 @@ export function ThemedAppView(props: { datastore: DataStore }) { saveAs(blob, `authzed-download-${hash}.yaml`); }; - const conductUpload = () => { - (async () => { - const file = await fileDialog({ - multiple: false, - strict: true, - accept: ".yaml", + const conductUpload = async () => { + const file = await fileDialog({ + multiple: false, + strict: true, + accept: ".yaml", + }); + if (file) { + pushEvent("load-yaml", { + filename: file.name, }); - if (file) { - pushEvent("load-yaml", { - filename: file.name, - }); - const contents = await getFileContentsAsText(file); - const uploaded = parseValidationYAML(contents); - if ("message" in uploaded) { - toast.error("Could not load uploaded YAML", { - description: `The uploaded validation YAML is invalid: ${uploaded.message}`, - }); - return; - } + const contents = await file.text(); + const uploaded = parseValidationYAML(contents); + if ("message" in uploaded) { + toast.error("Could not load uploaded YAML", { + description: `The uploaded validation YAML is invalid: ${uploaded.message}`, + }); + return; + } - services.liveCheckService.clear(); + services.liveCheckService.clear(); - datastore.loadFromParsed(uploaded); - datastoreUpdated(); + datastore.loadFromParsed(uploaded); + datastoreUpdated(); - navigate({ to: DataStorePaths.Schema(), replace: true }); - } - })(); + void navigate({ to: DataStorePaths.Schema(), replace: true }); + } }; const formatSchema = () => { @@ -518,7 +514,7 @@ export function ThemedAppView(props: { datastore: DataStore }) { datastoreUpdated(); services.liveCheckService.clear(); - navigate({ to: DataStorePaths.Schema(), replace: true }); + void navigate({ to: DataStorePaths.Schema(), replace: true }); }; const [previousValidationForDiff, setPreviousValidationForDiff] = useState( @@ -593,19 +589,19 @@ export function ThemedAppView(props: { datastore: DataStore }) { selectedTabValue: string, ) => { const item = datastore.getById(selectedTabValue)!; - navigate({ to: item.pathname }); + void navigate({ to: item.pathname }); }; const setDismissTour = () => { setShowTour(false); setCookie("dismiss-tour", true); - navigate({ to: DataStorePaths.Schema() }); + void navigate({ to: DataStorePaths.Schema() }); }; const handleTourBeforeStep = (selector: string) => { // Activate the Assertions tab before the assertions dialogs if (selector.includes(TourElementClass.assert)) { - navigate({ to: DataStorePaths.Assertions() }); + void navigate({ to: DataStorePaths.Assertions() }); } }; @@ -1135,16 +1131,3 @@ function IsolatedEditorDisplay(props: EditorDisplayProps) { return ; } - -const getFileContentsAsText = async (file: File): Promise => { - return new Promise( - (resolve: (value: string | PromiseLike) => void, reject: () => void) => { - const reader = new FileReader(); - reader.onloadend = function (e: ProgressEvent) { - resolve(e.target?.result?.toString() ?? ""); - }; - reader.onerror = reject; - reader.readAsText(file); - }, - ); -}; diff --git a/src/components/ReadOnlyRelationshipsGrid.tsx b/src/components/ReadOnlyRelationshipsGrid.tsx index d9022ac..2ad77a9 100644 --- a/src/components/ReadOnlyRelationshipsGrid.tsx +++ b/src/components/ReadOnlyRelationshipsGrid.tsx @@ -46,9 +46,11 @@ export function ReadOnlyRelationshipsGrid(props: { - {props.relationships.map((relationship: Relationship) => { + {props.relationships.map((relationship, index) => { return ( - + // NOTE: an index is appropriate here because a user could theoretically + // write a duplicate relationship, and the position makes some sense as a key + {relationship.resourceAndRelation?.namespace} diff --git a/src/components/ShareLoader.tsx b/src/components/ShareLoader.tsx index eccd840..5b11477 100644 --- a/src/components/ShareLoader.tsx +++ b/src/components/ShareLoader.tsx @@ -58,7 +58,7 @@ export function ShareLoader(props: { setLoadingStatus(SharedLoadingStatus.LOADING); // Load the shared data. - (async () => { + void (async () => { const apiEndpoint = AppConfig().shareApiEndpoint; if (!apiEndpoint) { return; @@ -67,7 +67,7 @@ export function ShareLoader(props: { // TODO: use routing for this instead of string manipulation const pieces = location.pathname.replace(urlPrefix, "").split("/"); if (pieces.length < 1 && !props.sharedRequired) { - navigate({ to: "/" }); + await navigate({ to: "/" }); return; } @@ -144,7 +144,7 @@ export function ShareLoader(props: { if (!props.sharedRequired) { // TODO: do this with routing as well - navigate({ + await navigate({ to: location.pathname.slice(0, urlPrefix.length + shareReference.length), replace: true, }); diff --git a/src/components/panels/errordisplays.tsx b/src/components/panels/errordisplays.tsx index c853e9b..f373df0 100644 --- a/src/components/panels/errordisplays.tsx +++ b/src/components/panels/errordisplays.tsx @@ -31,7 +31,10 @@ export function DeveloperErrorDisplay({ error }: { error: DeveloperError }) {
    {error.path.map((item) => ( // NOTE: the \2192 here is the → character; tailwind needs it as an escape sequence. -
  • +
  • {item}
  • ))} diff --git a/src/components/panels/problems.tsx b/src/components/panels/problems.tsx index 9f0450b..34c8115 100644 --- a/src/components/panels/problems.tsx +++ b/src/components/panels/problems.tsx @@ -8,7 +8,6 @@ import clsx from "clsx"; import TabLabel from "../../playground-ui/TabLabel"; import { DataStorePaths } from "../../services/datastore"; -import { RelationshipFound } from "../../spicedb-common/parsing"; import { DeveloperError, DeveloperWarning, @@ -94,13 +93,15 @@ export function ProblemsPanel({ services }: PanelProps) {
    {!services.problemService.hasProblems && No problems found} {services.problemService.invalidRelationships.map( - (invalid: RelationshipFound, index: number) => { + // NOTE: an index is appropriate here because a user could theoretically + // write a duplicate relationship, and the position makes some sense as a key + (invalid, index) => { if (!("errorMessage" in invalid.parsed)) { - return
    ; + return
    ; } return ( - +
    In diff --git a/src/components/panels/terminal.tsx b/src/components/panels/terminal.tsx index 2a3e61f..b38268c 100644 --- a/src/components/panels/terminal.tsx +++ b/src/components/panels/terminal.tsx @@ -9,7 +9,7 @@ import { createStyles, makeStyles, Theme } from "@material-ui/core/styles"; import Convert from "ansi-to-html"; import { CircleX, MessageCircleWarning } from "lucide-react"; import { useEffect, useMemo, useRef, useState } from "react"; -import type { MouseEvent, KeyboardEvent, ChangeEvent, ReactNode } from "react"; +import type { MouseEvent, KeyboardEvent, ChangeEvent } from "react"; import useDeepCompareEffect from "use-deep-compare-effect"; import TabLabel from "../../playground-ui/TabLabel"; @@ -170,10 +170,12 @@ export function TerminalPanel(props: PanelProps) { inputRef.current?.focus(); }; - const handleMouseUp = (event: MouseEvent) => { - const hasSelection = !!getSelectedTextWithin(event.target as Element); - if (!hasSelection) { - inputRef.current?.focus(); + const handleMouseUp = (event: MouseEvent) => { + if (event.target instanceof Element) { + const hasSelection = !!getSelectedTextWithin(event.target); + if (!hasSelection) { + inputRef.current?.focus(); + } } }; @@ -261,12 +263,12 @@ function TerminalOutputDisplay({ const convert = new Convert({ escapeXML: true, }); - const children = sections.flatMap((section: TerminalSection): ReactNode => { + const children = sections.flatMap((section, index) => { if ("command" in section) { - return
    $ {section.command}
    ; + return
    $ {section.command}
    ; } else { return ( -
    +
    {section.output .split("\n") .map((o) => convertStringOutput(convert, o, showLogs ?? false))} @@ -274,13 +276,15 @@ function TerminalOutputDisplay({ ); } }); - const handleMouseUp = (event: MouseEvent) => { - const hasSelection = !!getSelectedTextWithin(event.target as Element); - if (onRefocus && !hasSelection) { - onRefocus(); - } - if (hasSelection) { - event.stopPropagation(); + const handleMouseUp = (event: MouseEvent) => { + if (event.target instanceof Element) { + const hasSelection = !!getSelectedTextWithin(event.target); + if (onRefocus && !hasSelection) { + onRefocus(); + } + if (hasSelection) { + event.stopPropagation(); + } } }; diff --git a/src/components/panels/visualizer.tsx b/src/components/panels/visualizer.tsx index f05c7c6..1dd60e6 100644 --- a/src/components/panels/visualizer.tsx +++ b/src/components/panels/visualizer.tsx @@ -1,7 +1,7 @@ import "react-reflex/styles.css"; import { Bubbles } from "lucide-react"; -import monaco from "monaco-editor"; +import type { Position } from "monaco-editor"; // TODO: rename import TenantGraph from "@/components/visualizer/TenantGraph"; @@ -28,7 +28,7 @@ export function VisualizerPanel({ dimensions, }: PanelProps & { dimensions?: { width: number; height: number }; - editorPosition?: monaco.Position; + editorPosition?: Position; currentItem?: DataStoreItem; }) { const relationships = services.localParseService.state.relationships diff --git a/src/components/relationshipeditor/RelationshipEditor.tsx b/src/components/relationshipeditor/RelationshipEditor.tsx index b3c3c15..5dbaa5f 100644 --- a/src/components/relationshipeditor/RelationshipEditor.tsx +++ b/src/components/relationshipeditor/RelationshipEditor.tsx @@ -174,6 +174,7 @@ export function RelationshipEditor({ // NOTE: we do not want to rerun this if the dataUpdated callback has changed (which it should // not, ideally). // TODO: dataUpdated is currently changing on every render because the debouncer isn't memoized. + // oxlint-disable-next-line eslint-plugin-react-hooks(exhaustive-deps) }, [data]); // relationships holds a filtered form of the grid, containing only valid relationships. @@ -418,7 +419,7 @@ export function RelationshipEditor({ baseFontStyle: "13px", fontFamily: "Inter, Roboto, -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Ubuntu, noto, arial, sans-serif", - ...(themeOverrides ?? {}), + ...themeOverrides, }; }, [theme, themeOverrides]); @@ -696,7 +697,7 @@ export function RelationshipEditor({ } }; - const copySelectedRows = () => { + const copySelectedRows = async () => { if (gridSelection?.rows) { const selected = data.filter((annotated: RelationshipDatumAndMetadata) => gridSelection?.rows.hasIndex(annotated.dataRowIndex), @@ -712,7 +713,7 @@ export function RelationshipEditor({ }) .join("\n"); - navigator.clipboard.writeText(data); + await navigator.clipboard.writeText(data); } } }; diff --git a/src/components/relationshipeditor/fieldcell.tsx b/src/components/relationshipeditor/fieldcell.tsx index 02de8db..3e22e93 100644 --- a/src/components/relationshipeditor/fieldcell.tsx +++ b/src/components/relationshipeditor/fieldcell.tsx @@ -268,7 +268,7 @@ type FieldCellEditorProps, Q extends FieldCellProps> = { onChange: (newValue: T) => void; value: T; initialValue: string | undefined; - onFinishedEditing: (newValue?: T | undefined) => void; + onFinishedEditing: (newValue?: T) => void; getAutocompleteOptions: GetAutocompleteOptions; kind: string; }; diff --git a/src/playground-ui/DiscordChatCrate.tsx b/src/playground-ui/DiscordChatCrate.tsx index a1971fd..925f8e6 100644 --- a/src/playground-ui/DiscordChatCrate.tsx +++ b/src/playground-ui/DiscordChatCrate.tsx @@ -80,7 +80,7 @@ export const DiscordChatCrate = ({ serverId, channelId }: DiscordChatCrateProps) if (crate.current !== undefined || injected.current || !serverId || !channelId) { return; } - (async () => { + void (async () => { injected.current = true; const CrateConstructor = await loadFromCDN(); diff --git a/src/spicedb-common/parsing.ts b/src/spicedb-common/parsing.ts index 0108104..251b343 100644 --- a/src/spicedb-common/parsing.ts +++ b/src/spicedb-common/parsing.ts @@ -168,8 +168,9 @@ export const parseRelationshipWithError = ( contextualizedCaveat.context = caveatContext; } catch (e) { + const errorText = e instanceof Error ? e.message : ""; return { - errorMessage: `Invalid caveat context: ${e}`, + errorMessage: `Invalid caveat context: ${parsed.groups["caveatContext"]}: ${errorText}`, }; } } @@ -186,8 +187,9 @@ export const parseRelationshipWithError = ( const milliseconds = Date.parse(dtString); optionalExpirationTime = timestampFromMs(milliseconds); } catch (e) { + const errorText = e instanceof Error ? e.message : ""; return { - errorMessage: `Invalid expiration time: ${e}`, + errorMessage: `Invalid expiration time: ${parsed.groups["expirationDateTime"]}: ${errorText}`, }; } } diff --git a/src/spicedb-common/services/developerservice.ts b/src/spicedb-common/services/developerservice.ts index 7d1e74f..085992b 100644 --- a/src/spicedb-common/services/developerservice.ts +++ b/src/spicedb-common/services/developerservice.ts @@ -330,7 +330,7 @@ export function useDeveloperService(): DeveloperService { return; } - loadWebAssembly(); + void loadWebAssembly(); break; case "ready": diff --git a/src/spicedb-common/services/zedservice.ts b/src/spicedb-common/services/zedservice.ts index 5bcf839..fdc2411 100644 --- a/src/spicedb-common/services/zedservice.ts +++ b/src/spicedb-common/services/zedservice.ts @@ -145,7 +145,7 @@ export function useZedService(): ZedService { return; } - loadWebAssembly(); + void loadWebAssembly(); break; case "ready": diff --git a/src/spicedb-common/validationfileformat.ts b/src/spicedb-common/validationfileformat.ts index 5021d38..c9a4185 100644 --- a/src/spicedb-common/validationfileformat.ts +++ b/src/spicedb-common/validationfileformat.ts @@ -60,7 +60,8 @@ export const parseValidationYAML = (contents: string): ParsedValidation | ParseV try { parsed = yaml.parse(contents); } catch (e) { - return { message: `parse error: ${e}` }; + const errorText = e instanceof Error ? e.message : "unknown"; + return { message: `parse error: ${errorText}` }; } const ajv = new Ajv(); diff --git a/tsconfig.json b/tsconfig.json index 780db03..84471b9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -25,7 +25,6 @@ "noUncheckedSideEffectImports": true, /* Aliasing of imports */ - "baseUrl": ".", "paths": { "@/*": ["./src/*"] } diff --git a/yarn.lock b/yarn.lock index 3918491..f8ca732 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1430,67 +1430,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" - integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== - dependencies: - eslint-visitor-keys "^3.4.3" - -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": - version "4.12.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" - integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== - -"@eslint/config-array@^0.19.0": - version "0.19.1" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.1.tgz#734aaea2c40be22bbb1f2a9dac687c57a6a4c984" - integrity sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA== - dependencies: - "@eslint/object-schema" "^2.1.5" - debug "^4.3.1" - minimatch "^3.1.2" - -"@eslint/core@^0.10.0": - version "0.10.0" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.10.0.tgz#23727063c21b335f752dbb3a16450f6f9cbc9091" - integrity sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw== - dependencies: - "@types/json-schema" "^7.0.15" - -"@eslint/eslintrc@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.2.0.tgz#57470ac4e2e283a6bf76044d63281196e370542c" - integrity sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^10.0.1" - globals "^14.0.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@9.18.0", "@eslint/js@^9.18.0": - version "9.18.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.18.0.tgz#3356f85d18ed3627ab107790b53caf7e1e3d1e84" - integrity sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA== - -"@eslint/object-schema@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.5.tgz#8670a8f6258a2be5b2c620ff314a1d984c23eb2e" - integrity sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ== - -"@eslint/plugin-kit@^0.2.5": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz#ee07372035539e7847ef834e3f5e7b79f09e3a81" - integrity sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A== - dependencies: - "@eslint/core" "^0.10.0" - levn "^0.4.1" - "@fastify/busboy@^2.0.0": version "2.1.1" resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" @@ -1604,34 +1543,6 @@ canvas-hypertxt "^1.0.3" react-number-format "^5.0.0" -"@humanfs/core@^0.19.1": - version "0.19.1" - resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" - integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== - -"@humanfs/node@^0.16.6": - version "0.16.6" - resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" - integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== - dependencies: - "@humanfs/core" "^0.19.1" - "@humanwhocodes/retry" "^0.3.0" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/retry@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" - integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== - -"@humanwhocodes/retry@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b" - integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA== - "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" @@ -1977,6 +1888,131 @@ resolved "https://registry.yarnpkg.com/@oxfmt/win32-x64/-/win32-x64-0.28.0.tgz#9c4feba1ecc139b07d0b8b206c025ec8823c0fa4" integrity sha512-4+S2j4OxOIyo8dz5osm5dZuL0yVmxXvtmNdHB5xyGwAWVvyWNvf7tCaQD7w2fdSsAXQLOvK7KFQrHFe33nJUCA== +"@oxlint-tsgolint/darwin-arm64@0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@oxlint-tsgolint/darwin-arm64/-/darwin-arm64-0.14.0.tgz#f4409ba1c17f101974fe6475a667daab1e0ab5f4" + integrity sha512-9JdNm9dNeCNgRxBzYb+8vJa/aPD4asc3INdRAC4oJ5EucM2yIPfmHEMlwkAe2WkC7QHPVMG3L9MheAnCrXPTyg== + +"@oxlint-tsgolint/darwin-x64@0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@oxlint-tsgolint/darwin-x64/-/darwin-x64-0.14.0.tgz#54a98c68842be1b1768469cfbe3843ab5b7f3451" + integrity sha512-8Z6BkXV7g6BoToCqi/6M7qiDDVHoKzEKRclMXxXiM0JNdk+w4ashNQ101kZh5Xb976vwbo3GuOS8co1UrJ8MQw== + +"@oxlint-tsgolint/linux-arm64@0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@oxlint-tsgolint/linux-arm64/-/linux-arm64-0.14.0.tgz#e9b12c7706a4c0ba1735c1559f794c196295172b" + integrity sha512-OZJ/mZSY15cSk3uoqYaKkw5Ue7duaDHfYoigy9bdASeNn4fHnYqeziqOPBvD3K76BDN/mwPLydawsgfY4VPQJQ== + +"@oxlint-tsgolint/linux-x64@0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@oxlint-tsgolint/linux-x64/-/linux-x64-0.14.0.tgz#61f343ad829fd6e1eb1ea604958f019f6f9e3d90" + integrity sha512-NDEBWwtpmCL8AL5jkX9nj9T69QbmaQ5AMSLnMWSJcL4xwR/yh0zk92/662sE2NWiX+8jACycIOa8CzH98rk5gw== + +"@oxlint-tsgolint/win32-arm64@0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@oxlint-tsgolint/win32-arm64/-/win32-arm64-0.14.0.tgz#ce1d519e855b53456a37897539f8251dc766bc16" + integrity sha512-onUJNTdoi5eh9HRg0Eb7rBvUtZP8RYP5XCJJkwh1cpNfG8p5JQU0MxYujgdk4ZFGKmg81AsaGAWXDkVNlgMELw== + +"@oxlint-tsgolint/win32-x64@0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@oxlint-tsgolint/win32-x64/-/win32-x64-0.14.0.tgz#8e14da6be38ee5fa476901f133c20cd001cfbd50" + integrity sha512-5pV3fznLN3yZAbEbygZzM9QvcNLYjLmrnM7AYTunhDnkIqagTv5XFwHqXcZf7MZ6oNPtkcImhtzhSpxsk23n3A== + +"@oxlint/binding-android-arm-eabi@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.48.0.tgz#9aaccdd80a9be3baf4bcdd4ee11b081d0eec2b4d" + integrity sha512-1Pz/stJvveO9ZO7ll4ZoEY3f6j2FiUgBLBcCRCiW6ylId9L9UKs+gn3X28m3eTnoiFCkhKwmJJ+VO6vwsu7Qtg== + +"@oxlint/binding-android-arm64@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-android-arm64/-/binding-android-arm64-1.48.0.tgz#de550a3c298fb4ea5172037de24596daa9b093d1" + integrity sha512-Zc42RWGE8huo6Ht0lXKjd0NH2lWNmimQHUmD0JFcvShLOuwN+RSEE/kRakc2/0LIgOUuU/R7PaDMCOdQlPgNUQ== + +"@oxlint/binding-darwin-arm64@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.48.0.tgz#01266539e8be97574ae8cdc9dcca512c59110e1a" + integrity sha512-jgZs563/4vaG5jH2RSt2TSh8A2jwsFdmhLXrElMdm3Mmto0HPf85FgInLSNi9HcwzQFvkYV8JofcoUg2GH1HTA== + +"@oxlint/binding-darwin-x64@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.48.0.tgz#f03bc1407570e2c02eed0fd2d2d2761f90dc1b86" + integrity sha512-kvo87BujEUjCJREuWDC4aPh1WoXCRFFWE4C7uF6wuoMw2f6N2hypA/cHHcYn9DdL8R2RrgUZPefC8JExyeIMKA== + +"@oxlint/binding-freebsd-x64@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.48.0.tgz#efc6b35318e51c431d8e6f2da9d1cbe1934ae587" + integrity sha512-eyzzPaHQKn0RIM+ueDfgfJF2RU//Wp4oaKs2JVoVYcM5HjbCL36+O0S3wO5Xe1NWpcZIG3cEHc/SuOCDRqZDSg== + +"@oxlint/binding-linux-arm-gnueabihf@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.48.0.tgz#f53c519dc67fd256b09d4f600f459d039c225411" + integrity sha512-p3kSloztK7GRO7FyO3u38UCjZxQTl92VaLDsMQAq0eGoiNmeeEF1KPeE4+Fr+LSkQhF8WvJKSuls6TwOlurdPA== + +"@oxlint/binding-linux-arm-musleabihf@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.48.0.tgz#3681640699010f914c00b4d088fc86b98e1eb6d7" + integrity sha512-uWM+wiTqLW/V0ZmY/eyTWs8ykhIkzU+K2tz/8m35YepYEzohiUGRbnkpAFXj2ioXpQL+GUe5vmM3SLH6ozlfFw== + +"@oxlint/binding-linux-arm64-gnu@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.48.0.tgz#df33938c6c333bf55e49f22265b4d48bc7d4fb45" + integrity sha512-OhQNPjs/OICaYqxYJjKKMaIY7p3nJ9IirXcFoHKD+CQE1BZFCeUUAknMzUeLclDCfudH9Vb/UgjFm8+ZM5puAg== + +"@oxlint/binding-linux-arm64-musl@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.48.0.tgz#904e18f931d06669f5c2f6b3bc230849552b6ac4" + integrity sha512-adu5txuwGvQ4C4fjYHJD+vnY+OCwCixBzn7J3KF3iWlVHBBImcosSv+Ye+fbMMJui4HGjifNXzonjKm9pXmOiw== + +"@oxlint/binding-linux-ppc64-gnu@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.48.0.tgz#0c9ce45021582041935be7f3e274a9f9df2e8524" + integrity sha512-inlQQRUnHCny/7b7wA6NjEoJSSZPNea4qnDhWyeqBYWx8ukf2kzNDSiamfhOw6bfAYPm/PVlkVRYaNXQbkLeTQ== + +"@oxlint/binding-linux-riscv64-gnu@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.48.0.tgz#f1393fddf9abfe5f6dc2e4f15496249cb86c4525" + integrity sha512-YiJx6sW6bYebQDZRVWLKm/Drswx/hcjIgbLIhULSn0rRcBKc7d9V6mkqPjKDbhcxJgQD5Zi0yVccJiOdF40AWA== + +"@oxlint/binding-linux-riscv64-musl@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.48.0.tgz#b565ad89a267c720edabe4cd7734a0f78c513de2" + integrity sha512-zwSqxMgmb2ITamNfDv9Q9EKBc/4ZhCBP9gkg2hhcgR6sEVGPUDl1AKPC89CBKMxkmPUi3685C38EvqtZn5OtHw== + +"@oxlint/binding-linux-s390x-gnu@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.48.0.tgz#eae8d4b39f55928bfb5d78f41be69396124d1a49" + integrity sha512-c/+2oUWAOsQB5JTem0rW8ODlZllF6pAtGSGXoLSvPTonKI1vAwaKhD9Qw1X36jRbcI3Etkpu/9z/RRjMba8vFQ== + +"@oxlint/binding-linux-x64-gnu@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.48.0.tgz#d20ac94813e0d38a042e5f4f895a2ca33153ad8c" + integrity sha512-PhauDqeFW5DGed6QxCY5lXZYKSlcBdCXJnH03ZNU6QmDZ0BFM/zSy1oPT2MNb1Afx1G6yOOVk8ErjWsQ7c59ng== + +"@oxlint/binding-linux-x64-musl@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.48.0.tgz#d38e79b8001dc6c9574681cb8a647e3bfa3e54c9" + integrity sha512-6d7LIFFZGiavbHndhf1cK9kG9qmy2Dmr37sV9Ep7j3H+ciFdKSuOzdLh85mEUYMih+b+esMDlF5DU0WQRZPQjw== + +"@oxlint/binding-openharmony-arm64@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.48.0.tgz#34a8b73fd56242040efc8853415bb2a148327d34" + integrity sha512-r+0KK9lK6vFp3tXAgDMOW32o12dxvKS3B9La1uYMGdWAMoSeu2RzG34KmzSpXu6MyLDl4aSVyZLFM8KGdEjwaw== + +"@oxlint/binding-win32-arm64-msvc@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.48.0.tgz#2780ca291e5fc2d7ce6d9ceb10cf7db7eb7a9fba" + integrity sha512-Nkw/MocyT3HSp0OJsKPXrcbxZqSPMTYnLLfsqsoiFKoL1ppVNL65MFa7vuTxJehPlBkjy+95gUgacZtuNMECrg== + +"@oxlint/binding-win32-ia32-msvc@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.48.0.tgz#ff218561faa37916a3fac19dabbdbe9b9ab57c26" + integrity sha512-reO1SpefvRmeZSP+WeyWkQd1ArxxDD1MyKgMUKuB8lNuUoxk9QEohYtKnsfsxJuFwMT0JTr7p9wZjouA85GzGQ== + +"@oxlint/binding-win32-x64-msvc@1.48.0": + version "1.48.0" + resolved "https://registry.yarnpkg.com/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.48.0.tgz#38141c098a53f08fd33429bdf459d211a6a465db" + integrity sha512-T6zwhfcsrorqAybkOglZdPkTLlEwipbtdO1qjE+flbawvwOMsISoyiuaa7vM7zEyfq1hmDvMq1ndvkYFioranA== + "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -3921,7 +3957,7 @@ resolved "https://registry.yarnpkg.com/@types/dagre/-/dagre-0.7.53.tgz#4dab441bf31b6fb08af0b3e2a3f5ab0c0217a701" integrity sha512-f4gkWqzPZvYmKhOsDnhq/R8mO4UMcKdxZo+i5SCkOU1wvGeHJeUXGIHeE9pnwGyPMDof1Vx5ZQo4nxpeg2TTVQ== -"@types/estree@1.0.6", "@types/estree@^1.0.0", "@types/estree@^1.0.6": +"@types/estree@1.0.6", "@types/estree@^1.0.0": version "1.0.6" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== @@ -3974,7 +4010,7 @@ expect "^29.0.0" pretty-format "^29.0.0" -"@types/json-schema@^7.0.15", "@types/json-schema@^7.0.6": +"@types/json-schema@^7.0.6": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== @@ -4126,87 +4162,6 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@8.20.0": - version "8.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.20.0.tgz#b47a398e0e551cb008c60190b804394e6852c863" - integrity sha512-naduuphVw5StFfqp4Gq4WhIBE2gN1GEmMUExpJYknZJdRnc+2gDzB8Z3+5+/Kv33hPQRDGzQO/0opHE72lZZ6A== - dependencies: - "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.20.0" - "@typescript-eslint/type-utils" "8.20.0" - "@typescript-eslint/utils" "8.20.0" - "@typescript-eslint/visitor-keys" "8.20.0" - graphemer "^1.4.0" - ignore "^5.3.1" - natural-compare "^1.4.0" - ts-api-utils "^2.0.0" - -"@typescript-eslint/parser@8.20.0": - version "8.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.20.0.tgz#5caf2230a37094dc0e671cf836b96dd39b587ced" - integrity sha512-gKXG7A5HMyjDIedBi6bUrDcun8GIjnI8qOwVLiY3rx6T/sHP/19XLJOnIq/FgQvWLHja5JN/LSE7eklNBr612g== - dependencies: - "@typescript-eslint/scope-manager" "8.20.0" - "@typescript-eslint/types" "8.20.0" - "@typescript-eslint/typescript-estree" "8.20.0" - "@typescript-eslint/visitor-keys" "8.20.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@8.20.0": - version "8.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.20.0.tgz#aaf4198b509fb87a6527c02cfbfaf8901179e75c" - integrity sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw== - dependencies: - "@typescript-eslint/types" "8.20.0" - "@typescript-eslint/visitor-keys" "8.20.0" - -"@typescript-eslint/type-utils@8.20.0": - version "8.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.20.0.tgz#958171d86b213a3f32b5b16b91db267968a4ef19" - integrity sha512-bPC+j71GGvA7rVNAHAtOjbVXbLN5PkwqMvy1cwGeaxUoRQXVuKCebRoLzm+IPW/NtFFpstn1ummSIasD5t60GA== - dependencies: - "@typescript-eslint/typescript-estree" "8.20.0" - "@typescript-eslint/utils" "8.20.0" - debug "^4.3.4" - ts-api-utils "^2.0.0" - -"@typescript-eslint/types@8.20.0": - version "8.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.20.0.tgz#487de5314b5415dee075e95568b87a75a3e730cf" - integrity sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA== - -"@typescript-eslint/typescript-estree@8.20.0": - version "8.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.20.0.tgz#658cea07b7e5981f19bce5cf1662cb70ad59f26b" - integrity sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA== - dependencies: - "@typescript-eslint/types" "8.20.0" - "@typescript-eslint/visitor-keys" "8.20.0" - debug "^4.3.4" - fast-glob "^3.3.2" - is-glob "^4.0.3" - minimatch "^9.0.4" - semver "^7.6.0" - ts-api-utils "^2.0.0" - -"@typescript-eslint/utils@8.20.0": - version "8.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.20.0.tgz#53127ecd314b3b08836b4498b71cdb86f4ef3aa2" - integrity sha512-dq70RUw6UK9ei7vxc4KQtBRk7qkHZv447OUZ6RPQMQl71I3NZxQJX/f32Smr+iqWrB02pHKn2yAdHBb0KNrRMA== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.20.0" - "@typescript-eslint/types" "8.20.0" - "@typescript-eslint/typescript-estree" "8.20.0" - -"@typescript-eslint/visitor-keys@8.20.0": - version "8.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.20.0.tgz#2df6e24bc69084b81f06aaaa48d198b10d382bed" - integrity sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA== - dependencies: - "@typescript-eslint/types" "8.20.0" - eslint-visitor-keys "^4.2.0" - "@vercel/build-utils@10.6.0": version "10.6.0" resolved "https://registry.yarnpkg.com/@vercel/build-utils/-/build-utils-10.6.0.tgz#4ee3cd60e2b00d1d05b47c1404247fa7c9e31425" @@ -4375,11 +4330,6 @@ acorn-import-attributes@^1.9.5: resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - acorn-walk@^8.1.1: version "8.3.4" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" @@ -4392,11 +4342,6 @@ acorn@^8.11.0, acorn@^8.4.1, acorn@^8.6.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== -acorn@^8.14.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" - integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== - agent-base@^7.1.2: version "7.1.3" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" @@ -4410,7 +4355,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@6.12.6, ajv@^6.12.4: +ajv@6.12.6: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -5250,7 +5195,7 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.7: +debug@^4.1.0, debug@^4.3.1, debug@^4.3.4, debug@^4.3.7: version "4.4.0" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== @@ -5298,11 +5243,6 @@ deep-equal@^2.0.5: which-collection "^1.0.1" which-typed-array "^1.1.13" -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - deepmerge@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" @@ -5808,102 +5748,6 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-plugin-react-hooks@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz#3d34e37d5770866c34b87d5b499f5f0b53bf0854" - integrity sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw== - -eslint-plugin-react-refresh@^0.4.18: - version "0.4.18" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.18.tgz#d2ae6dc8d48c87f7722f5304385b0cd8b3a32a54" - integrity sha512-IRGEoFn3OKalm3hjfolEWGqoF/jPqeEYFp+C8B0WMzwGwBMvlRDQd06kghDhF0C61uJ6WfSDhEZE/sAQjduKgw== - -eslint-scope@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.2.0.tgz#377aa6f1cb5dc7592cfd0b7f892fd0cf352ce442" - integrity sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint-visitor-keys@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" - integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== - -eslint@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.18.0.tgz#c95b24de1183e865de19f607fda6518b54827850" - integrity sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.12.1" - "@eslint/config-array" "^0.19.0" - "@eslint/core" "^0.10.0" - "@eslint/eslintrc" "^3.2.0" - "@eslint/js" "9.18.0" - "@eslint/plugin-kit" "^0.2.5" - "@humanfs/node" "^0.16.6" - "@humanwhocodes/module-importer" "^1.0.1" - "@humanwhocodes/retry" "^0.4.1" - "@types/estree" "^1.0.6" - "@types/json-schema" "^7.0.15" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.6" - debug "^4.3.2" - escape-string-regexp "^4.0.0" - eslint-scope "^8.2.0" - eslint-visitor-keys "^4.2.0" - espree "^10.3.0" - esquery "^1.5.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^8.0.0" - find-up "^5.0.0" - glob-parent "^6.0.2" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - json-stable-stringify-without-jsonify "^1.0.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - -espree@^10.0.1, espree@^10.3.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" - integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== - dependencies: - acorn "^8.14.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^4.2.0" - -esquery@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" - integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - estree-walker@2.0.2, estree-walker@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" @@ -5916,11 +5760,6 @@ estree-walker@^3.0.3: dependencies: "@types/estree" "^1.0.0" -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - etag@1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -5995,12 +5834,12 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: +fast-deep-equal@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.7, fast-glob@^3.3.2: +fast-glob@^3.2.7: version "3.3.3" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== @@ -6016,11 +5855,6 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - fast-xml-parser@4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" @@ -6054,13 +5888,6 @@ figures@^3.2.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" - integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== - dependencies: - flat-cache "^4.0.0" - file-saver@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38" @@ -6096,19 +5923,6 @@ find-up@^5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -flat-cache@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" - integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.4" - -flatted@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" - integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== - for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -6251,13 +6065,6 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - glob@^10.4.5: version "10.4.5" resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" @@ -6282,11 +6089,6 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" - integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== - globals@^15.14.0: version "15.14.0" resolved "https://registry.yarnpkg.com/globals/-/globals-15.14.0.tgz#b8fd3a8941ff3b4d38f3319d433b61bbb482e73f" @@ -6320,11 +6122,6 @@ graceful-fs@^4.2.4, graceful-fs@^4.2.9: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - hammerjs@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/hammerjs/-/hammerjs-2.0.8.tgz#04ef77862cff2bb79d30f7692095930222bf60f1" @@ -6427,11 +6224,6 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.2.0, ignore@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - import-fresh@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" @@ -6448,11 +6240,6 @@ import-fresh@^3.3.0: parent-module "^1.0.0" resolve-from "^4.0.0" -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - indent-string@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" @@ -6589,7 +6376,7 @@ is-generator-function@^1.0.10: has-tostringtag "^1.0.2" safe-regex-test "^1.1.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: +is-glob@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -6850,11 +6637,6 @@ jsesc@^3.0.2, jsesc@^3.1.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" @@ -6883,11 +6665,6 @@ json-schema@0.4.0: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -6992,26 +6769,11 @@ keycharm@^0.2.0: resolved "https://registry.yarnpkg.com/keycharm/-/keycharm-0.2.0.tgz#fa6ea2e43b90a68028843d27f2075d35a8c3e6f9" integrity sha512-i/XBRTiLqRConPKioy2oq45vbv04e8x59b0mnsIRQM+7Ec/8BC7UcL5pnC4FMeGb8KwG7q4wOMw7CtNZf5tiIg== -keyv@^4.5.4: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - lazy-ass@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - lightningcss-darwin-arm64@1.29.2: version "1.29.2" resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz#6ceff38b01134af48e859394e1ca21e5d49faae6" @@ -7114,11 +6876,6 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - lodash.once@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" @@ -7270,7 +7027,7 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimatch@^3.0.4, minimatch@^3.1.2: +minimatch@^3.0.4: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -7341,11 +7098,6 @@ nanoid@^3.3.7: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - next-themes@^0.4.6: version "0.4.6" resolved "https://registry.yarnpkg.com/next-themes/-/next-themes-0.4.6.tgz#8d7e92d03b8fea6582892a50a928c9b23502e8b6" @@ -7453,18 +7205,6 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -optionator@^0.9.3: - version "0.9.4" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" - integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.5" - orderedmap@^1.1.0: version "1.1.8" resolved "https://registry.yarnpkg.com/orderedmap/-/orderedmap-1.1.8.tgz#9652b2584f721c1032fa04cb60d442b3d4aa097c" @@ -7505,6 +7245,43 @@ oxfmt@^0.28.0: "@oxfmt/win32-arm64" "0.28.0" "@oxfmt/win32-x64" "0.28.0" +oxlint-tsgolint@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/oxlint-tsgolint/-/oxlint-tsgolint-0.14.0.tgz#8e41691faafb9c0bff49d113bd2ff60d075f4e10" + integrity sha512-BUdiXO0vX7npql4hjLjbZvyM1yDL3U2m1DSZ3jBNl/r+IZaammWN0YmkmlMmYaLnVuTH0+8hO/1rQ6cD+YaEqQ== + optionalDependencies: + "@oxlint-tsgolint/darwin-arm64" "0.14.0" + "@oxlint-tsgolint/darwin-x64" "0.14.0" + "@oxlint-tsgolint/linux-arm64" "0.14.0" + "@oxlint-tsgolint/linux-x64" "0.14.0" + "@oxlint-tsgolint/win32-arm64" "0.14.0" + "@oxlint-tsgolint/win32-x64" "0.14.0" + +oxlint@^1.48.0: + version "1.48.0" + resolved "https://registry.yarnpkg.com/oxlint/-/oxlint-1.48.0.tgz#8e3d51d969bafd47a7b1ab520b06d05854251a9c" + integrity sha512-m5vyVBgPtPhVCJc3xI//8je9lRc8bYuYB4R/1PH3VPGOjA4vjVhkHtyJukdEjYEjwrw4Qf1eIf+pP9xvfhfMow== + optionalDependencies: + "@oxlint/binding-android-arm-eabi" "1.48.0" + "@oxlint/binding-android-arm64" "1.48.0" + "@oxlint/binding-darwin-arm64" "1.48.0" + "@oxlint/binding-darwin-x64" "1.48.0" + "@oxlint/binding-freebsd-x64" "1.48.0" + "@oxlint/binding-linux-arm-gnueabihf" "1.48.0" + "@oxlint/binding-linux-arm-musleabihf" "1.48.0" + "@oxlint/binding-linux-arm64-gnu" "1.48.0" + "@oxlint/binding-linux-arm64-musl" "1.48.0" + "@oxlint/binding-linux-ppc64-gnu" "1.48.0" + "@oxlint/binding-linux-riscv64-gnu" "1.48.0" + "@oxlint/binding-linux-riscv64-musl" "1.48.0" + "@oxlint/binding-linux-s390x-gnu" "1.48.0" + "@oxlint/binding-linux-x64-gnu" "1.48.0" + "@oxlint/binding-linux-x64-musl" "1.48.0" + "@oxlint/binding-openharmony-arm64" "1.48.0" + "@oxlint/binding-win32-arm64-msvc" "1.48.0" + "@oxlint/binding-win32-ia32-msvc" "1.48.0" + "@oxlint/binding-win32-x64-msvc" "1.48.0" + p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -7700,11 +7477,6 @@ preact@^10.19.3: resolved "https://registry.yarnpkg.com/preact/-/preact-10.28.0.tgz#a851300df42842797046545e4172a4128d158755" integrity sha512-rytDAoiXr3+t6OIP3WGlDd0ouCUG1iCWzkcY3++Nreuoi17y6T5i/zRhe6uYfoVcxq6YU+sBtJouuRDsq8vvqA== -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - pretty-bytes@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" @@ -8404,7 +8176,7 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.5.3, semver@^7.6.0: +semver@^7.5.3: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -8750,11 +8522,6 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - strnum@^1.0.5: version "1.1.2" resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.1.2.tgz#57bca4fbaa6f271081715dbc9ed7cee5493e28e4" @@ -8948,11 +8715,6 @@ tree-changes@^0.9.1: "@gilbarbara/deep-equal" "^0.1.1" is-lite "^0.8.2" -ts-api-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.0.0.tgz#b9d7d5f7ec9f736f4d0f09758b8607979044a900" - integrity sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ== - ts-invariant@^0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.10.3.tgz#3e048ff96e91459ffca01304dbc7f61c1f642f6c" @@ -9019,13 +8781,6 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" @@ -9086,15 +8841,6 @@ typeface-roboto-mono@^1.1.13: resolved "https://registry.yarnpkg.com/typeface-roboto-mono/-/typeface-roboto-mono-1.1.13.tgz#2af8662db8f9119c00efd55d6ed8877d2a69ec94" integrity sha512-pnzDc70b7ywJHin/BUFL7HZX8DyOTBLT2qxlJ92eH1UJOFcENIBXa9IZrxsJX/gEKjbEDKhW5vz/TKRBNk/ufQ== -typescript-eslint@^8.20.0: - version "8.20.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.20.0.tgz#76d4ea6a483fd49830a7e8baccaed10f76d1e57b" - integrity sha512-Kxz2QRFsgbWj6Xcftlw3Dd154b3cEPFqQC+qMZrMypSijPd4UanKKvoKDrJ4o8AIfZFKAF+7sMaEIR8mTElozA== - dependencies: - "@typescript-eslint/eslint-plugin" "8.20.0" - "@typescript-eslint/parser" "8.20.0" - "@typescript-eslint/utils" "8.20.0" - typescript@4.9.5: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" @@ -9412,11 +9158,6 @@ why-is-node-running@^2.3.0: siginfo "^2.0.0" stackback "0.0.2" -word-wrap@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"