diff --git a/apollo.config.cjs b/apollo.config.cjs index 7a2c7fd712..d2ae1e466b 100644 --- a/apollo.config.cjs +++ b/apollo.config.cjs @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2026-present, NDLA. + * + * This source code is licensed under the GPLv3 license found in the + * LICENSE file in the root directory of this source tree. + * + */ + module.exports = { client: { service: { diff --git a/babel.config.cjs b/babel.config.cjs index 8163986fcc..a7486737c7 100644 --- a/babel.config.cjs +++ b/babel.config.cjs @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2026-present, NDLA. + * + * This source code is licensed under the GPLv3 license found in the + * LICENSE file in the root directory of this source tree. + * + */ + module.exports = { plugins: [ [ diff --git a/codegen.local.ts b/codegen.local.ts index ef30b02ed9..e4e86c9296 100644 --- a/codegen.local.ts +++ b/codegen.local.ts @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2026-present, NDLA. + * + * This source code is licensed under the GPLv3 license found in the + * LICENSE file in the root directory of this source tree. + * + */ + import type { CodegenConfig } from "@graphql-codegen/cli"; const config: CodegenConfig = { diff --git a/codegen.server.ts b/codegen.server.ts index 84a95ce7fe..c194203706 100644 --- a/codegen.server.ts +++ b/codegen.server.ts @@ -1,3 +1,11 @@ +/** + * Copyright (c) 2026-present, NDLA. + * + * This source code is licensed under the GPLv3 license found in the + * LICENSE file in the root directory of this source tree. + * + */ + import type { CodegenConfig } from "@graphql-codegen/cli"; const config: CodegenConfig = { diff --git a/e2e/apiMock.ts b/e2e/apiMock.ts index 4ddd975d4f..28e13b6243 100644 --- a/e2e/apiMock.ts +++ b/e2e/apiMock.ts @@ -21,7 +21,7 @@ interface ExtendedTestOptions { */ export const test = Ptest.extend({ harCheckpoint: [ - async ({ context, page }, use) => { + async ({ context, page }, call) => { let checkpointIndex = 0; // Appending the checkpoint index to the request headers @@ -41,21 +41,21 @@ export const test = Ptest.extend({ await page.setExtraHTTPHeaders(createCheckpoint(checkpointIndex)); // Appending the new checkpoint index to the request headers - await use(async () => { + await call(async () => { checkpointIndex += 1; await page.setExtraHTTPHeaders(createCheckpoint(checkpointIndex)); }); }, { auto: true, scope: "test" }, ], - waitGraphql: async ({ page }, use) => { - await use(async () => { + waitGraphql: async ({ page }, call) => { + await call(async () => { if (process.env.RECORD_FIXTURES === "true") { await page.waitForResponse("**/graphql-api/graphql"); } }); }, - page: async ({ page }, use, testInfo) => { + page: async ({ page }, call, testInfo) => { // Creating the API mocking for the wanted API's const mockdataFilename = getMockdataFilename(testInfo); await page.routeFromHAR(mockdataFilename, { @@ -65,12 +65,12 @@ export const test = Ptest.extend({ updateContent: "embed", }); - await use(page); + await call(page); await page.close(); }, - context: async ({ context }, use, testInfo) => { - await use(context); + context: async ({ context }, call, testInfo) => { + await call(context); await context.close(); // Removing sensitive data from the HAR file after saving. Har files are saved on close. diff --git a/eslint.config.mjs b/eslint.config.mjs index 44503daa3d..fdd6b7486a 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -9,22 +9,22 @@ // @ts-check import graphqlPlugin from "@graphql-eslint/eslint-plugin"; -import config from "eslint-config-ndla"; -import tseslint from "typescript-eslint"; +import tsParser from "@typescript-eslint/parser"; -export default tseslint.config( - ...config, +const config = [ { - ignores: ["**/graphqlTypes.ts", "**/schema.graphql"], + ignores: ["src/schema.graphql", "**/graphqlTypes.ts"], }, { - files: ["**/*.graphql"], - rules: { - "header/header": "off", + files: ["src/**/*.{js,mjs,cjs,ts,jsx,tsx,mts,cts,mtsx,ctsx}"], + languageOptions: { + parser: tsParser, + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, }, - }, - { - files: ["**/*.{js,mjs,cjs,ts,jsx,tsx,mts,cts,mtsx,ctsx}"], processor: graphqlPlugin.processor, }, { @@ -47,6 +47,9 @@ export default tseslint.config( // TODO: Consider enabling these later "@graphql-eslint/selection-set-depth": "off", "@graphql-eslint/require-selections": "off", + "@graphql-eslint/naming-convention": "off", }, }, -); +]; + +export default config; diff --git a/oxlint.config.ts b/oxlint.config.ts new file mode 100644 index 0000000000..0790c1c242 --- /dev/null +++ b/oxlint.config.ts @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2026-present, NDLA. + * + * This source code is licensed under the GPLv3 license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { baseConfig } from "@ndla/oxlint-config"; +import { defineConfig } from "oxlint"; + +export default defineConfig({ + extends: [baseConfig], + options: { + typeAware: true, + }, + ignorePatterns: ["**/graphqlTypes.ts", "**/schema.graphql"], + overrides: [ + { + files: ["**/*.graphql"], + rules: { + "notice/notice": "off", + }, + }, + { + files: ["**/*"], + rules: { + "typescript/unbound-method": "off", + }, + }, + ], +}); diff --git a/package.json b/package.json index b7e2ae7705..e99b9cf44f 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "test": "vitest --run", "tdd": "vitest", "lint": "yarn format-check && yarn lint-es", - "lint-es": "eslint --cache --cache-location '.eslintcache/' --max-warnings=0 src e2e", + "lint-es": "oxlint --deny-warnings && eslint --cache --cache-location '.eslintcache/' --max-warnings=0 src", "format": "oxfmt", "format-check": "oxfmt --check", "start": "NODE_OPTIONS='--preserve-symlinks' concurrently 'yarn start:tsc' 'tsx src/server.ts'", @@ -88,6 +88,7 @@ "slate": "^0.123.0", "slate-dom": "^0.123.0", "slate-history": "^0.113.1", + "slate-hyperscript": "^0.100.0", "slate-react": "^0.123.0", "source-map-support": "^0.5.21", "winston": "^3.12.0" @@ -100,6 +101,7 @@ "@graphql-codegen/typescript-operations": "^5.0.9", "@graphql-eslint/eslint-plugin": "^4.4.0", "@juggle/resize-observer": "^3.4.0", + "@ndla/oxlint-config": "^0.1.0", "@ndla/preset-panda": "^0.0.75", "@ndla/types-backend": "^1.0.106", "@ndla/types-embed": "^5.0.21-alpha.0", @@ -115,20 +117,21 @@ "@types/node": "^24.12.0", "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", + "@typescript-eslint/parser": "^8.57.2", "@vitejs/plugin-react": "^5.1.4", "babel-plugin-graphql-tag": "^3.3.0", "concurrently": "^9.2.1", "esbuild": "^0.27.3", "eslint": "^9.39.4", - "eslint-config-ndla": "^6.0.15-alpha.0", "jsdom": "^29.0.1", "nock": "^14.0.11", "oxfmt": "^0.36.0", + "oxlint": "^1.57.0", + "oxlint-tsgolint": "^0.17.3", "postcss": "^8.5.8", "postcss-preset-env": "^11.2.0", "tsx": "^4.21.0", "typescript": "^5.9.3", - "typescript-eslint": "^8.56.1", "vite": "^7.3.1", "vitest": "^4.0.18" }, diff --git a/postcss.config.mjs b/postcss.config.mjs index 9195ab3137..e57ef13c59 100644 --- a/postcss.config.mjs +++ b/postcss.config.mjs @@ -9,6 +9,8 @@ import panda from "@pandacss/dev/postcss"; import postcssPresetEnv from "postcss-preset-env"; -export default { +const config = { plugins: [panda(), postcssPresetEnv()], }; + +export default config; diff --git a/src/components/AlertsContext.tsx b/src/components/AlertsContext.tsx index c0952635ca..4ea33cbcff 100644 --- a/src/components/AlertsContext.tsx +++ b/src/components/AlertsContext.tsx @@ -51,7 +51,7 @@ const AlertsProvider = ({ children }: Props) => { const parsed = JSON.parse(closedAlerts); if (Array.isArray(parsed) && parsed.every((id) => typeof id === "number")) return parsed; return []; - } catch (e) { + } catch (_) { return []; } }, [closedAlerts]); diff --git a/src/components/Learningpath/components/ArticleStep.tsx b/src/components/Learningpath/components/ArticleStep.tsx index 1e3a12e439..a2ba663427 100644 --- a/src/components/Learningpath/components/ArticleStep.tsx +++ b/src/components/Learningpath/components/ArticleStep.tsx @@ -73,7 +73,7 @@ export const ArticleStep = ({ if (window.MathJax && typeof window.MathJax.typesetPromise === "function") { try { window.MathJax.typesetPromise(); - } catch (err) { + } catch (_) { // do nothing } } diff --git a/src/components/Learningpath/components/CopyLearningPath.tsx b/src/components/Learningpath/components/CopyLearningPath.tsx index 9fde77a201..e5a77b0452 100644 --- a/src/components/Learningpath/components/CopyLearningPath.tsx +++ b/src/components/Learningpath/components/CopyLearningPath.tsx @@ -110,7 +110,7 @@ export const CopyLearningPath = ({ learningpath }: Props) => { } else { onError(); } - } catch (err) { + } catch (_) { onError(); } }; diff --git a/src/components/MediaList/MediaList.tsx b/src/components/MediaList/MediaList.tsx index 4238365bd0..b105a3b052 100644 --- a/src/components/MediaList/MediaList.tsx +++ b/src/components/MediaList/MediaList.tsx @@ -198,7 +198,7 @@ const ItemText = ({ item }: { item: ItemType }) => { return ( {`${item.label}: `} - {/* eslint-disable-next-line react/no-unknown-property */} + {/* oxlint-disable-next-line react/no-unknown-property */} {item.description} ); diff --git a/src/components/license/LicenseBox.tsx b/src/components/license/LicenseBox.tsx index 88ea8fd417..0cbbf1f719 100644 --- a/src/components/license/LicenseBox.tsx +++ b/src/components/license/LicenseBox.tsx @@ -29,12 +29,7 @@ const StyledTabsRoot = styled(TabsRoot, { }, }); -function buildLicenseTabList( - article: GQLLicenseBox_ArticleFragment, - t: TFunction, - copyText?: string, - oembed?: string | undefined, -) { +function buildLicenseTabList(article: GQLLicenseBox_ArticleFragment, t: TFunction, copyText?: string, oembed?: string) { const metaData = article.transformedContent?.metaData; const tabs = []; const articleTexts: TextItem[] = [ diff --git a/src/containers/AboutPageV2/AboutPageLeaf.tsx b/src/containers/AboutPageV2/AboutPageLeaf.tsx index 6646d8a6a2..dfc6f4f30b 100644 --- a/src/containers/AboutPageV2/AboutPageLeaf.tsx +++ b/src/containers/AboutPageV2/AboutPageLeaf.tsx @@ -86,7 +86,7 @@ export const AboutPageLeaf = ({ article: _article, crumbs }: Props) => { if (window.MathJax && typeof window.MathJax.typeset === "function") { try { window.MathJax.typeset(); - } catch (err) { + } catch (_) { // do nothing } } diff --git a/src/containers/ArticlePage/ArticlePage.tsx b/src/containers/ArticlePage/ArticlePage.tsx index 89e07ce33d..d2f6c3f328 100644 --- a/src/containers/ArticlePage/ArticlePage.tsx +++ b/src/containers/ArticlePage/ArticlePage.tsx @@ -53,7 +53,7 @@ export const ArticlePage = ({ resource, skipToContentId, loading }: Props) => { if (window.MathJax && typeof window.MathJax.typesetPromise === "function") { try { window.MathJax.typesetPromise(); - } catch (err) { + } catch (_) { // do nothing } } diff --git a/src/containers/Masthead/MastheadSearchForm.tsx b/src/containers/Masthead/MastheadSearchForm.tsx index 137f27ef55..80b68ae7b5 100644 --- a/src/containers/Masthead/MastheadSearchForm.tsx +++ b/src/containers/Masthead/MastheadSearchForm.tsx @@ -34,7 +34,7 @@ import { styled } from "@ndla/styled-system/jsx"; import { linkOverlay } from "@ndla/styled-system/patterns"; import { BadgesContainer, useComboboxTranslations } from "@ndla/ui"; import parse from "html-react-parser"; -import { FormEvent, useEffect, useId, useMemo, useState } from "react"; +import { SubmitEvent, useEffect, useId, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { useLocation, useNavigate } from "react-router"; import { GQLMastheadSearchQuery, GQLMastheadSearchQueryVariables } from "../../graphqlTypes"; @@ -254,7 +254,7 @@ export const MastheadSearchForm = ({ root }: Props) => { }, ); - const onSearch = (evt?: FormEvent) => { + const onSearch = (evt?: SubmitEvent) => { evt?.preventDefault(); const searchString = new URLSearchParams( query?.length ? { query: encodeURIComponent(query) } : undefined, diff --git a/src/containers/MyNdla/Learningpath/EditLearningpathStepsPageContent.tsx b/src/containers/MyNdla/Learningpath/EditLearningpathStepsPageContent.tsx index 4c4ff42904..ca03ffa660 100644 --- a/src/containers/MyNdla/Learningpath/EditLearningpathStepsPageContent.tsx +++ b/src/containers/MyNdla/Learningpath/EditLearningpathStepsPageContent.tsx @@ -107,7 +107,7 @@ export const EditLearningpathStepsPageContent = ({ learningpath }: Props) => { onError(); } } - } catch (err) { + } catch (_) { onError(); } }; diff --git a/src/containers/MyNdla/Learningpath/components/LearningpathStepForm.tsx b/src/containers/MyNdla/Learningpath/components/LearningpathStepForm.tsx index d55c6f69c9..3ad8bd055c 100644 --- a/src/containers/MyNdla/Learningpath/components/LearningpathStepForm.tsx +++ b/src/containers/MyNdla/Learningpath/components/LearningpathStepForm.tsx @@ -21,7 +21,7 @@ import { } from "@ndla/primitives"; import { SafeLinkButton } from "@ndla/safelink"; import { HStack, styled } from "@ndla/styled-system/jsx"; -import { FormEvent, useContext, useEffect, useRef, useState } from "react"; +import { SubmitEvent, useContext, useEffect, useRef, useState } from "react"; import { Controller, FormProvider, useForm, useFormContext } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { useNavigate, useOutletContext, useParams } from "react-router"; @@ -183,7 +183,7 @@ export const LearningpathStepForm = ({ step, language }: Props) => { } }; - const onSubmit = (e: FormEvent) => { + const onSubmit = (e: SubmitEvent) => { e.preventDefault(); handleSubmit(onSave)(); }; diff --git a/src/containers/PlainArticlePage/PlainArticleContainer.tsx b/src/containers/PlainArticlePage/PlainArticleContainer.tsx index 7de54e7a66..7b45bd0bb2 100644 --- a/src/containers/PlainArticlePage/PlainArticleContainer.tsx +++ b/src/containers/PlainArticlePage/PlainArticleContainer.tsx @@ -37,7 +37,7 @@ export const PlainArticleContainer = ({ article: propArticle, skipToContentId }: if (window.MathJax && typeof window.MathJax.typesetPromise === "function") { try { window.MathJax.typesetPromise(); - } catch (err) { + } catch (_) { // do nothing } } diff --git a/src/containers/SearchPage/SearchContainer.tsx b/src/containers/SearchPage/SearchContainer.tsx index a9f1f173ac..5062430474 100644 --- a/src/containers/SearchPage/SearchContainer.tsx +++ b/src/containers/SearchPage/SearchContainer.tsx @@ -28,7 +28,7 @@ import { } from "@ndla/primitives"; import { styled } from "@ndla/styled-system/jsx"; import { HomeBreadcrumb, usePaginationTranslations } from "@ndla/ui"; -import { FormEvent, useCallback, useEffect, useId, useMemo, useRef, useState } from "react"; +import { SubmitEvent, useCallback, useEffect, useId, useMemo, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; import { LanguageSelectorSelect } from "../../components/LanguageSelector/LanguageSelectorSelect"; import { SKIP_TO_CONTENT_ID } from "../../constants"; @@ -311,7 +311,7 @@ export const SearchContainer = ({ resourceTypes, resourceTypesLoading }: Props) const data = searchQuery.data ?? searchQuery.previousData; const handleSubmit = useCallback( - (e: FormEvent) => { + (e: SubmitEvent) => { e.preventDefault(); setSearchParams({ query: encodeURIComponent(query) }); }, diff --git a/src/lti/components/LtiDeepLinking.tsx b/src/lti/components/LtiDeepLinking.tsx index 2db2b18f06..e90af7083f 100644 --- a/src/lti/components/LtiDeepLinking.tsx +++ b/src/lti/components/LtiDeepLinking.tsx @@ -120,7 +120,7 @@ export const LtiDeepLinking = ({ ltiData = {}, item }: Props) => { useEffect(() => { updatePostData(); - }, [ltiData]); // eslint-disable-line react-hooks/exhaustive-deps + }, [ltiData]); // oxlint-disable-line react-hooks/exhaustive-deps const updatePostData = async () => { const data = await getLtiPostData(ltiData, item); diff --git a/src/server/authEndpoints.ts b/src/server/authEndpoints.ts index 311e3ea639..4e49db44cc 100644 --- a/src/server/authEndpoints.ts +++ b/src/server/authEndpoints.ts @@ -77,7 +77,7 @@ const isSafeRedirect = (url: string) => { try { const decodedUrl = decodeURIComponent(url).trim(); return decodedUrl.startsWith("/") && !decodedUrl.startsWith("//"); - } catch (e) { + } catch (_) { return false; } }; diff --git a/src/server/routes/contextRedirectRoute.ts b/src/server/routes/contextRedirectRoute.ts index 1e7c186a0c..3237fee8ba 100644 --- a/src/server/routes/contextRedirectRoute.ts +++ b/src/server/routes/contextRedirectRoute.ts @@ -30,7 +30,7 @@ export async function contextRedirectRoute(req: SplatRequest, res: Response, nex try { const path = await redirectPath(`/subject${req.params.splat?.join("/").replaceAll(",", "/")}`, req.params.lang); res.redirect(301, path); - } catch (e) { + } catch (_) { next(); } } diff --git a/src/server/routes/forwardingRoute.ts b/src/server/routes/forwardingRoute.ts index f0b2e5d181..bb90894f7f 100644 --- a/src/server/routes/forwardingRoute.ts +++ b/src/server/routes/forwardingRoute.ts @@ -71,7 +71,7 @@ export async function forwardingRoute(req: Request, res: Response, next: NextFun log.info("Redirecting old ndla path", { path: req.path }); const path = await forwardPath(req.params.nodeId!, req.params.lang); res.redirect(301, path); - } catch (e) { + } catch (_) { next(); } } diff --git a/src/types/global.ts b/src/types/global.ts index a5953ae329..a31a96f4e7 100644 --- a/src/types/global.ts +++ b/src/types/global.ts @@ -1,5 +1,5 @@ -/*eslint-disable*/ +/*oxlint-disable*/ interface Window { MathJax: any; } -/*eslint-enable*/ +/*oxlint-enable*/ diff --git a/src/util/handleError.ts b/src/util/handleError.ts index 411801e3e2..30a15daf98 100644 --- a/src/util/handleError.ts +++ b/src/util/handleError.ts @@ -210,6 +210,6 @@ export const handleError = async (error: ErrorLike, extraContext: Record { try { const data = localStorage.getItem(key); return data || initialValue; - } catch (e) { + } catch (_) { log.error(`Could not read ${key} from localStorage`); return initialValue; } @@ -43,7 +43,7 @@ export const useLocalStorage = (key: string, initialValue?: string | null) => { try { localStorage.setItem(key, value); window.dispatchEvent(new CustomEvent("local-storage-change", { detail: { key } })); - } catch (e) { + } catch (_) { log.error(`Could not save ${key} to localStorage`); } }, diff --git a/yarn.lock b/yarn.lock index 3024808ee2..20ad96b308 100644 --- a/yarn.lock +++ b/yarn.lock @@ -183,7 +183,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.18.5, @babel/core@npm:^7.24.4, @babel/core@npm:^7.28.6, @babel/core@npm:^7.29.0": +"@babel/core@npm:^7.18.5, @babel/core@npm:^7.28.6, @babel/core@npm:^7.29.0": version: 7.29.0 resolution: "@babel/core@npm:7.29.0" dependencies: @@ -300,14 +300,14 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.1.6, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.26.10, @babel/parser@npm:^7.28.5, @babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0, @babel/parser@npm:^7.3.2": - version: 7.29.0 - resolution: "@babel/parser@npm:7.29.0" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.1.6, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.26.10, @babel/parser@npm:^7.28.5, @babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0, @babel/parser@npm:^7.3.2": + version: 7.29.2 + resolution: "@babel/parser@npm:7.29.2" dependencies: "@babel/types": "npm:^7.29.0" bin: parser: ./bin/babel-parser.js - checksum: 10c0/333b2aa761264b91577a74bee86141ef733f9f9f6d4fc52548e4847dc35dfbf821f58c46832c637bfa761a6d9909d6a68f7d1ed59e17e4ffbb958dc510c17b62 + checksum: 10c0/e5a4e69e3ac7acdde995f37cf299a68458cfe7009dff66bd0962fd04920bef287201169006af365af479c08ff216bfefbb595e331f87f6ae7283858aebbc3317 languageName: node linkType: hard @@ -1552,7 +1552,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.8.0, @eslint-community/eslint-utils@npm:^4.9.1": +"@eslint-community/eslint-utils@npm:^4.8.0": version: 4.9.1 resolution: "@eslint-community/eslint-utils@npm:4.9.1" dependencies: @@ -1563,7 +1563,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.12.1, @eslint-community/regexpp@npm:^4.12.2": +"@eslint-community/regexpp@npm:^4.12.1": version: 4.12.2 resolution: "@eslint-community/regexpp@npm:4.12.2" checksum: 10c0/fddcbc66851b308478d04e302a4d771d6917a0b3740dc351513c0da9ca2eab8a1adf99f5e0aa7ab8b13fa0df005c81adeee7e63a92f3effd7d367a163b721c2d @@ -2837,6 +2837,20 @@ __metadata: languageName: node linkType: hard +"@ndla/oxlint-config@npm:^0.1.0": + version: 0.1.0 + resolution: "@ndla/oxlint-config@npm:0.1.0" + dependencies: + eslint-plugin-import: "npm:^2.32.0" + eslint-plugin-jsx-a11y: "npm:^6.10.2" + eslint-plugin-notice: "npm:^1.0.0" + peerDependencies: + eslint: ">= 9" + oxlint: ">= 1.46.0" + checksum: 10c0/2975ab9616dc94e466883a35218cc7aeb1d27ef86d940f94ae30b48c6d377127336365f8dff839ee950b5fe8cf58731de5d6c5b71920c261c782bbc54a75e86f + languageName: node + linkType: hard + "@ndla/preset-panda@npm:^0.0.75": version: 0.0.75 resolution: "@ndla/preset-panda@npm:0.0.75" @@ -3165,6 +3179,181 @@ __metadata: languageName: node linkType: hard +"@oxlint-tsgolint/darwin-arm64@npm:0.17.3": + version: 0.17.3 + resolution: "@oxlint-tsgolint/darwin-arm64@npm:0.17.3" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint-tsgolint/darwin-x64@npm:0.17.3": + version: 0.17.3 + resolution: "@oxlint-tsgolint/darwin-x64@npm:0.17.3" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@oxlint-tsgolint/linux-arm64@npm:0.17.3": + version: 0.17.3 + resolution: "@oxlint-tsgolint/linux-arm64@npm:0.17.3" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint-tsgolint/linux-x64@npm:0.17.3": + version: 0.17.3 + resolution: "@oxlint-tsgolint/linux-x64@npm:0.17.3" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@oxlint-tsgolint/win32-arm64@npm:0.17.3": + version: 0.17.3 + resolution: "@oxlint-tsgolint/win32-arm64@npm:0.17.3" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint-tsgolint/win32-x64@npm:0.17.3": + version: 0.17.3 + resolution: "@oxlint-tsgolint/win32-x64@npm:0.17.3" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@oxlint/binding-android-arm-eabi@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-android-arm-eabi@npm:1.57.0" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@oxlint/binding-android-arm64@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-android-arm64@npm:1.57.0" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint/binding-darwin-arm64@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-darwin-arm64@npm:1.57.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint/binding-darwin-x64@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-darwin-x64@npm:1.57.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@oxlint/binding-freebsd-x64@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-freebsd-x64@npm:1.57.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@oxlint/binding-linux-arm-gnueabihf@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-arm-gnueabihf@npm:1.57.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@oxlint/binding-linux-arm-musleabihf@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-arm-musleabihf@npm:1.57.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@oxlint/binding-linux-arm64-gnu@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-arm64-gnu@npm:1.57.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@oxlint/binding-linux-arm64-musl@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-arm64-musl@npm:1.57.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@oxlint/binding-linux-ppc64-gnu@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-ppc64-gnu@npm:1.57.0" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@oxlint/binding-linux-riscv64-gnu@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-riscv64-gnu@npm:1.57.0" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@oxlint/binding-linux-riscv64-musl@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-riscv64-musl@npm:1.57.0" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@oxlint/binding-linux-s390x-gnu@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-s390x-gnu@npm:1.57.0" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@oxlint/binding-linux-x64-gnu@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-x64-gnu@npm:1.57.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@oxlint/binding-linux-x64-musl@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-linux-x64-musl@npm:1.57.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@oxlint/binding-openharmony-arm64@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-openharmony-arm64@npm:1.57.0" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint/binding-win32-arm64-msvc@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-win32-arm64-msvc@npm:1.57.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@oxlint/binding-win32-ia32-msvc@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-win32-ia32-msvc@npm:1.57.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@oxlint/binding-win32-x64-msvc@npm:1.57.0": + version: 1.57.0 + resolution: "@oxlint/binding-win32-x64-msvc@npm:1.57.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@pandacss/config@npm:1.7.0, @pandacss/config@npm:^1.7.0": version: 1.7.0 resolution: "@pandacss/config@npm:1.7.0" @@ -4139,105 +4328,69 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:8.56.1": - version: 8.56.1 - resolution: "@typescript-eslint/eslint-plugin@npm:8.56.1" +"@typescript-eslint/parser@npm:^8.57.2": + version: 8.57.2 + resolution: "@typescript-eslint/parser@npm:8.57.2" dependencies: - "@eslint-community/regexpp": "npm:^4.12.2" - "@typescript-eslint/scope-manager": "npm:8.56.1" - "@typescript-eslint/type-utils": "npm:8.56.1" - "@typescript-eslint/utils": "npm:8.56.1" - "@typescript-eslint/visitor-keys": "npm:8.56.1" - ignore: "npm:^7.0.5" - natural-compare: "npm:^1.4.0" - ts-api-utils: "npm:^2.4.0" - peerDependencies: - "@typescript-eslint/parser": ^8.56.1 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/8a97e777792ee3e25078884ba0a04f6732367779c9487abcdc5a2d65b224515fa6a0cf1fac1aafc52fb30f3af97f2e1c9949aadbd6ca74a0165691f95494a721 - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:8.56.1": - version: 8.56.1 - resolution: "@typescript-eslint/parser@npm:8.56.1" - dependencies: - "@typescript-eslint/scope-manager": "npm:8.56.1" - "@typescript-eslint/types": "npm:8.56.1" - "@typescript-eslint/typescript-estree": "npm:8.56.1" - "@typescript-eslint/visitor-keys": "npm:8.56.1" + "@typescript-eslint/scope-manager": "npm:8.57.2" + "@typescript-eslint/types": "npm:8.57.2" + "@typescript-eslint/typescript-estree": "npm:8.57.2" + "@typescript-eslint/visitor-keys": "npm:8.57.2" debug: "npm:^4.4.3" peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/61c9dab481e795b01835c00c9c7c845f1d7ea7faf3b8657fccee0f8658a65390cb5fe2b5230ae8c4241bd6e0c32aa9455a91989a492bd3bd6fec7c7d9339377a + checksum: 10c0/afd8a30bd42ac56b212f3182d1b60e4556542eb22147b5b7a9a606d3c79ee35e596baf0bd7672d7e236472d246efc86e06265a46be26150ac12b05e4c45d16a6 languageName: node linkType: hard -"@typescript-eslint/project-service@npm:8.56.1": - version: 8.56.1 - resolution: "@typescript-eslint/project-service@npm:8.56.1" +"@typescript-eslint/project-service@npm:8.57.2": + version: 8.57.2 + resolution: "@typescript-eslint/project-service@npm:8.57.2" dependencies: - "@typescript-eslint/tsconfig-utils": "npm:^8.56.1" - "@typescript-eslint/types": "npm:^8.56.1" + "@typescript-eslint/tsconfig-utils": "npm:^8.57.2" + "@typescript-eslint/types": "npm:^8.57.2" debug: "npm:^4.4.3" peerDependencies: typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/ca61cde575233bc79046d73ddd330d183fb3cbb941fddc31919336317cda39885c59296e2e5401b03d9325a64a629e842fd66865705ff0d85d83ee3ee40871e8 + checksum: 10c0/f84e3165b0a214318d4bc119018b87c044170d7638945e84bd4cee2d752b62c1797ce722ca1161cd06f48512d0115ef75500e6c8fc01005ad4bb39fb48dd77bf languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:8.56.1": - version: 8.56.1 - resolution: "@typescript-eslint/scope-manager@npm:8.56.1" +"@typescript-eslint/scope-manager@npm:8.57.2": + version: 8.57.2 + resolution: "@typescript-eslint/scope-manager@npm:8.57.2" dependencies: - "@typescript-eslint/types": "npm:8.56.1" - "@typescript-eslint/visitor-keys": "npm:8.56.1" - checksum: 10c0/89cc1af2635eee23f2aa2ff87c08f88f3ad972ebf67eaacdc604a4ef4178535682bad73fd086e6f3c542e4e5d874253349af10d58291d079cc29c6c7e9831de4 + "@typescript-eslint/types": "npm:8.57.2" + "@typescript-eslint/visitor-keys": "npm:8.57.2" + checksum: 10c0/532b1a97a5c2fce51400fa1a94e09615b4df84ce1f2d107206a3f3935074cada396a3e30f155582a698981832868e1afea1641ff779ad9456fdc94169b7def64 languageName: node linkType: hard -"@typescript-eslint/tsconfig-utils@npm:8.56.1, @typescript-eslint/tsconfig-utils@npm:^8.56.1": - version: 8.56.1 - resolution: "@typescript-eslint/tsconfig-utils@npm:8.56.1" +"@typescript-eslint/tsconfig-utils@npm:8.57.2, @typescript-eslint/tsconfig-utils@npm:^8.57.2": + version: 8.57.2 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.57.2" peerDependencies: typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/d03b64d7ff19020beeefa493ae667c2e67a4547d25a3ecb9210a3a52afe980c093d772a91014bae699ee148bfb60cc659479e02bfc2946ea06954a8478ef1fe1 + checksum: 10c0/199dad2d96efc88ce94f5f3e12e97205537bf7a7152e56ef1d84dfbe7bd1babebea9b9f396c01b6c447505a4eb02c1cbbd2c28828c587b51b41b15d017a11d2f languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:8.56.1": - version: 8.56.1 - resolution: "@typescript-eslint/type-utils@npm:8.56.1" - dependencies: - "@typescript-eslint/types": "npm:8.56.1" - "@typescript-eslint/typescript-estree": "npm:8.56.1" - "@typescript-eslint/utils": "npm:8.56.1" - debug: "npm:^4.4.3" - ts-api-utils: "npm:^2.4.0" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/66517aed5059ef4a29605d06a510582f934d5789ae40ad673f1f0421f8aa13ec9ba7b8caab57ae9f270afacbf13ec5359cedfe74f21ae77e9a2364929f7e7cee - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:8.56.1, @typescript-eslint/types@npm:^8.56.1": - version: 8.56.1 - resolution: "@typescript-eslint/types@npm:8.56.1" - checksum: 10c0/e5a0318abddf0c4f98da3039cb10b3c0601c8601f7a9f7043630f0d622dabfe83a4cd833545ad3531fc846e46ca2874377277b392c2490dffec279d9242d827b +"@typescript-eslint/types@npm:8.57.2, @typescript-eslint/types@npm:^8.57.2": + version: 8.57.2 + resolution: "@typescript-eslint/types@npm:8.57.2" + checksum: 10c0/3cd87dd77d28b3ac2fed56a17909b0d11633628d4d733aa148dfd7af72e2cc3ec0e6114b72fac0ff538e8a47e907b4b10dab4095170ae1bd73719ef0b8eaf2e7 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:8.56.1": - version: 8.56.1 - resolution: "@typescript-eslint/typescript-estree@npm:8.56.1" +"@typescript-eslint/typescript-estree@npm:8.57.2": + version: 8.57.2 + resolution: "@typescript-eslint/typescript-estree@npm:8.57.2" dependencies: - "@typescript-eslint/project-service": "npm:8.56.1" - "@typescript-eslint/tsconfig-utils": "npm:8.56.1" - "@typescript-eslint/types": "npm:8.56.1" - "@typescript-eslint/visitor-keys": "npm:8.56.1" + "@typescript-eslint/project-service": "npm:8.57.2" + "@typescript-eslint/tsconfig-utils": "npm:8.57.2" + "@typescript-eslint/types": "npm:8.57.2" + "@typescript-eslint/visitor-keys": "npm:8.57.2" debug: "npm:^4.4.3" minimatch: "npm:^10.2.2" semver: "npm:^7.7.3" @@ -4245,32 +4398,17 @@ __metadata: ts-api-utils: "npm:^2.4.0" peerDependencies: typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/92f4421dac41be289761200dc2ed85974fa451deacb09490ae1870a25b71b97218e609a90d4addba9ded5b2abdebc265c9db7f6e9ce6d29ed20e89b8487e9618 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:8.56.1": - version: 8.56.1 - resolution: "@typescript-eslint/utils@npm:8.56.1" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.9.1" - "@typescript-eslint/scope-manager": "npm:8.56.1" - "@typescript-eslint/types": "npm:8.56.1" - "@typescript-eslint/typescript-estree": "npm:8.56.1" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/d9ffd9b2944a2c425e0532f71dc61e61d0a923d1a17733cf2777c2a4ae638307d12d44f63b33b6b3dc62f02f47db93ec49344ecefe17b76ee3e4fb0833325be3 + checksum: 10c0/2c5d143f0abbafd07a45f0b956aab5d6487b27f74fe93bee93e0a3f8edc8913f1522faf8d7d5215f3809a8d12f5729910ea522156552f2481b66e6d05ab311ae languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:8.56.1": - version: 8.56.1 - resolution: "@typescript-eslint/visitor-keys@npm:8.56.1" +"@typescript-eslint/visitor-keys@npm:8.57.2": + version: 8.57.2 + resolution: "@typescript-eslint/visitor-keys@npm:8.57.2" dependencies: - "@typescript-eslint/types": "npm:8.56.1" + "@typescript-eslint/types": "npm:8.57.2" eslint-visitor-keys: "npm:^5.0.0" - checksum: 10c0/86d97905dec1af964cc177c185933d040449acf6006096497f2e0093c6a53eb92b3ac1db9eb40a5a2e8d91160f558c9734331a9280797f09f284c38978b22190 + checksum: 10c0/8ceb8c228bf97b3e4b343bf6e42a91998d2522f459eb6b53c6bfad4898a9df74295660893dee6b698bdbbda537e968bfc13a3c56fc341089ebfba13db766a574 languageName: node linkType: hard @@ -5616,20 +5754,6 @@ __metadata: languageName: node linkType: hard -"array.prototype.findlast@npm:^1.2.5": - version: 1.2.5 - resolution: "array.prototype.findlast@npm:1.2.5" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.2" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10c0/ddc952b829145ab45411b9d6adcb51a8c17c76bf89c9dd64b52d5dffa65d033da8c076ed2e17091779e83bc892b9848188d7b4b33453c5565e65a92863cb2775 - languageName: node - linkType: hard - "array.prototype.findlastindex@npm:^1.2.6": version: 1.2.6 resolution: "array.prototype.findlastindex@npm:1.2.6" @@ -5669,19 +5793,6 @@ __metadata: languageName: node linkType: hard -"array.prototype.tosorted@npm:^1.1.4": - version: 1.1.4 - resolution: "array.prototype.tosorted@npm:1.1.4" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.3" - es-errors: "npm:^1.3.0" - es-shim-unscopables: "npm:^1.0.2" - checksum: 10c0/eb3c4c4fc0381b0bf6dba2ea4d48d367c2827a0d4236a5718d97caaccc6b78f11f4cadf090736e86301d295a6aa4967ed45568f92ced51be8cbbacd9ca410943 - languageName: node - linkType: hard - "arraybuffer.prototype.slice@npm:^1.0.4": version: 1.0.4 resolution: "arraybuffer.prototype.slice@npm:1.0.4" @@ -6605,7 +6716,7 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.3, define-properties@npm:^1.2.1": +"define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" dependencies: @@ -6853,7 +6964,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.17.5, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6, es-abstract@npm:^1.23.9, es-abstract@npm:^1.24.0": +"es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3, es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.9, es-abstract@npm:^1.24.0": version: 1.24.0 resolution: "es-abstract@npm:1.24.0" dependencies: @@ -6929,30 +7040,6 @@ __metadata: languageName: node linkType: hard -"es-iterator-helpers@npm:^1.2.1": - version: 1.2.1 - resolution: "es-iterator-helpers@npm:1.2.1" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.6" - es-errors: "npm:^1.3.0" - es-set-tostringtag: "npm:^2.0.3" - function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.6" - globalthis: "npm:^1.0.4" - gopd: "npm:^1.2.0" - has-property-descriptors: "npm:^1.0.2" - has-proto: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - internal-slot: "npm:^1.1.0" - iterator.prototype: "npm:^1.1.4" - safe-array-concat: "npm:^1.1.3" - checksum: 10c0/97e3125ca472d82d8aceea11b790397648b52c26d8768ea1c1ee6309ef45a8755bb63225a43f3150c7591cffc17caf5752459f1e70d583b4184370a8f04ebd2f - languageName: node - linkType: hard - "es-module-lexer@npm:^1.7.0": version: 1.7.0 resolution: "es-module-lexer@npm:1.7.0" @@ -6969,7 +7056,7 @@ __metadata: languageName: node linkType: hard -"es-set-tostringtag@npm:^2.0.3, es-set-tostringtag@npm:^2.1.0": +"es-set-tostringtag@npm:^2.1.0": version: 2.1.0 resolution: "es-set-tostringtag@npm:2.1.0" dependencies: @@ -7200,24 +7287,6 @@ __metadata: languageName: node linkType: hard -"eslint-config-ndla@npm:^6.0.15-alpha.0": - version: 6.0.15-alpha.0 - resolution: "eslint-config-ndla@npm:6.0.15-alpha.0" - dependencies: - eslint-plugin-header: "npm:^3.1.1" - eslint-plugin-import: "npm:^2.32.0" - eslint-plugin-jsx-a11y: "npm:^6.10.2" - eslint-plugin-react: "npm:^7.37.5" - eslint-plugin-react-hooks: "npm:^7.0.1" - eslint-plugin-simple-import-sort: "npm:^12.1.1" - globals: "npm:^17.3.0" - peerDependencies: - eslint: ">= 9.0.0" - typescript-eslint: ">= 8.15.0" - checksum: 10c0/75a819a090797daabdcdcefc08a8540f77f7eb3751690259daf102118bcd2385668386cecad3f1ebfd3c3207d20f1c19155183c76e5880cbe8ff67134435ad8b - languageName: node - linkType: hard - "eslint-import-resolver-node@npm:^0.3.9": version: 0.3.9 resolution: "eslint-import-resolver-node@npm:0.3.9" @@ -7241,15 +7310,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-header@npm:^3.1.1": - version: 3.1.1 - resolution: "eslint-plugin-header@npm:3.1.1" - peerDependencies: - eslint: ">=7.7.0" - checksum: 10c0/2eb70acd8efe2b72a7bff3e3958a637871c6d0ed4166effea8b68e79b9ba291b6a33182e7f0e31ca7de717fc5b2cf2e42dcc0a07db1a37ae6941bbb6a8eda731 - languageName: node - linkType: hard - "eslint-plugin-import@npm:^2.32.0": version: 2.32.0 resolution: "eslint-plugin-import@npm:2.32.0" @@ -7304,55 +7364,16 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:^7.0.1": - version: 7.0.1 - resolution: "eslint-plugin-react-hooks@npm:7.0.1" - dependencies: - "@babel/core": "npm:^7.24.4" - "@babel/parser": "npm:^7.24.4" - hermes-parser: "npm:^0.25.1" - zod: "npm:^3.25.0 || ^4.0.0" - zod-validation-error: "npm:^3.5.0 || ^4.0.0" - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - checksum: 10c0/1e711d1a9d1fa9cfc51fa1572500656577201199c70c795c6a27adfc1df39e5c598f69aab6aa91117753d23cc1f11388579a2bed14921cf9a4efe60ae8618496 - languageName: node - linkType: hard - -"eslint-plugin-react@npm:^7.37.5": - version: 7.37.5 - resolution: "eslint-plugin-react@npm:7.37.5" +"eslint-plugin-notice@npm:^1.0.0": + version: 1.0.0 + resolution: "eslint-plugin-notice@npm:1.0.0" dependencies: - array-includes: "npm:^3.1.8" - array.prototype.findlast: "npm:^1.2.5" - array.prototype.flatmap: "npm:^1.3.3" - array.prototype.tosorted: "npm:^1.1.4" - doctrine: "npm:^2.1.0" - es-iterator-helpers: "npm:^1.2.1" - estraverse: "npm:^5.3.0" - hasown: "npm:^2.0.2" - jsx-ast-utils: "npm:^2.4.1 || ^3.0.0" - minimatch: "npm:^3.1.2" - object.entries: "npm:^1.1.9" - object.fromentries: "npm:^2.0.8" - object.values: "npm:^1.2.1" - prop-types: "npm:^15.8.1" - resolve: "npm:^2.0.0-next.5" - semver: "npm:^6.3.1" - string.prototype.matchall: "npm:^4.0.12" - string.prototype.repeat: "npm:^1.0.0" - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - checksum: 10c0/c850bfd556291d4d9234f5ca38db1436924a1013627c8ab1853f77cac73ec19b020e861e6c7b783436a48b6ffcdfba4547598235a37ad4611b6739f65fd8ad57 - languageName: node - linkType: hard - -"eslint-plugin-simple-import-sort@npm:^12.1.1": - version: 12.1.1 - resolution: "eslint-plugin-simple-import-sort@npm:12.1.1" + find-root: "npm:^1.1.0" + lodash: "npm:^4.17.21" + metric-lcs: "npm:^0.1.2" peerDependencies: - eslint: ">=5.0.0" - checksum: 10c0/0ad1907ad9ddbadd1db655db0a9d0b77076e274b793a77b982c8525d808d868e6ecfce24f3a411e8a1fa551077387f9ebb38c00956073970ebd7ee6a029ce2b3 + eslint: ">=3.0.0" + checksum: 10c0/40b162fea014efad8e24c38f58c84729cf0ce0ee7a21fdb79ccfde9c2f5d219e4e74e7729679b6321400b34cc80c51beb00a46ba03a7c13265ceab573262f9ea languageName: node linkType: hard @@ -7465,7 +7486,7 @@ __metadata: languageName: node linkType: hard -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": version: 5.3.0 resolution: "estraverse@npm:5.3.0" checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 @@ -7690,6 +7711,13 @@ __metadata: languageName: node linkType: hard +"find-root@npm:^1.1.0": + version: 1.1.0 + resolution: "find-root@npm:1.1.0" + checksum: 10c0/1abc7f3bf2f8d78ff26d9e00ce9d0f7b32e5ff6d1da2857bcdf4746134c422282b091c672cde0572cac3840713487e0a7a636af9aa1b74cb11894b447a521efa + languageName: node + linkType: hard + "find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" @@ -7888,7 +7916,7 @@ __metadata: languageName: node linkType: hard -"get-proto@npm:^1.0.0, get-proto@npm:^1.0.1": +"get-proto@npm:^1.0.1": version: 1.0.1 resolution: "get-proto@npm:1.0.1" dependencies: @@ -7954,13 +7982,6 @@ __metadata: languageName: node linkType: hard -"globals@npm:^17.3.0": - version: 17.3.0 - resolution: "globals@npm:17.3.0" - checksum: 10c0/7f21443ecaa60c6e9ff56d9fb6f10a9b5f9514e7f22e5392f715472bb220ce31c865ebf414a32695150e733fb3e1013e6322dbce70fddd1e066f372b8d55a4b8 - languageName: node - linkType: hard - "globalthis@npm:^1.0.4": version: 1.0.4 resolution: "globalthis@npm:1.0.4" @@ -8158,22 +8179,6 @@ __metadata: languageName: node linkType: hard -"hermes-estree@npm:0.25.1": - version: 0.25.1 - resolution: "hermes-estree@npm:0.25.1" - checksum: 10c0/48be3b2fa37a0cbc77a112a89096fa212f25d06de92781b163d67853d210a8a5c3784fac23d7d48335058f7ed283115c87b4332c2a2abaaccc76d0ead1a282ac - languageName: node - linkType: hard - -"hermes-parser@npm:^0.25.1": - version: 0.25.1 - resolution: "hermes-parser@npm:0.25.1" - dependencies: - hermes-estree: "npm:0.25.1" - checksum: 10c0/3abaa4c6f1bcc25273f267297a89a4904963ea29af19b8e4f6eabe04f1c2c7e9abd7bfc4730ddb1d58f2ea04b6fee74053d8bddb5656ec6ebf6c79cc8d14202c - languageName: node - linkType: hard - "hookable@npm:5.5.3": version: 5.5.3 resolution: "hookable@npm:5.5.3" @@ -8319,13 +8324,6 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^7.0.5": - version: 7.0.5 - resolution: "ignore@npm:7.0.5" - checksum: 10c0/ae00db89fe873064a093b8999fe4cc284b13ef2a178636211842cceb650b9c3e390d3339191acb145d81ed5379d2074840cf0c33a20bdbd6f32821f79eb4ad5d - languageName: node - linkType: hard - "immutable@npm:^5.1.5": version: 5.1.5 resolution: "immutable@npm:5.1.5" @@ -8815,20 +8813,6 @@ __metadata: languageName: node linkType: hard -"iterator.prototype@npm:^1.1.4": - version: 1.1.5 - resolution: "iterator.prototype@npm:1.1.5" - dependencies: - define-data-property: "npm:^1.1.4" - es-object-atoms: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.6" - get-proto: "npm:^1.0.0" - has-symbols: "npm:^1.1.0" - set-function-name: "npm:^2.0.2" - checksum: 10c0/f7a262808e1b41049ab55f1e9c29af7ec1025a000d243b83edf34ce2416eedd56079b117fa59376bb4a724110690f13aa8427f2ee29a09eec63a7e72367626d0 - languageName: node - linkType: hard - "javascript-stringify@npm:2.1.0": version: 2.1.0 resolution: "javascript-stringify@npm:2.1.0" @@ -9016,7 +9000,7 @@ __metadata: languageName: node linkType: hard -"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5": +"jsx-ast-utils@npm:^3.3.5": version: 3.3.5 resolution: "jsx-ast-utils@npm:3.3.5" dependencies: @@ -9411,7 +9395,7 @@ __metadata: languageName: node linkType: hard -"loose-envify@npm:^1.0.0, loose-envify@npm:^1.4.0": +"loose-envify@npm:^1.0.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" dependencies: @@ -9556,6 +9540,13 @@ __metadata: languageName: node linkType: hard +"metric-lcs@npm:^0.1.2": + version: 0.1.2 + resolution: "metric-lcs@npm:0.1.2" + checksum: 10c0/cf5e8987cb92b3f70ca9f277268f5b525ae02195906de3b5c612d6c58341b8686241dce07cde7867d1442481f3b06f150d1d2c9f5f2a5a8c91c021ae94675edb + languageName: node + linkType: hard + "microdiff@npm:1.5.0": version: 1.5.0 resolution: "microdiff@npm:1.5.0" @@ -9768,6 +9759,7 @@ __metadata: "@ndla/icons": "npm:^8.0.88-alpha.0" "@ndla/image-search": "npm:^11.0.152-alpha.0" "@ndla/licenses": "npm:^10.0.11-alpha.0" + "@ndla/oxlint-config": "npm:^0.1.0" "@ndla/preset-panda": "npm:^0.0.75" "@ndla/primitives": "npm:^1.0.126-alpha.0" "@ndla/safelink": "npm:^7.0.129-alpha.0" @@ -9790,13 +9782,13 @@ __metadata: "@types/node": "npm:^24.12.0" "@types/react": "npm:^19.2.14" "@types/react-dom": "npm:^19.2.3" + "@typescript-eslint/parser": "npm:^8.57.2" "@vitejs/plugin-react": "npm:^5.1.4" babel-plugin-graphql-tag: "npm:^3.3.0" concurrently: "npm:^9.2.1" cross-env: "npm:^10.1.0" esbuild: "npm:^0.27.3" eslint: "npm:^9.39.4" - eslint-config-ndla: "npm:^6.0.15-alpha.0" express: "npm:5.2.1" express-prom-bundle: "npm:^8.0.0" graphql: "npm:^16.13.1" @@ -9811,6 +9803,8 @@ __metadata: nock: "npm:^14.0.11" openid-client: "npm:^6.8.1" oxfmt: "npm:^0.36.0" + oxlint: "npm:^1.57.0" + oxlint-tsgolint: "npm:^0.17.3" picocolors: "npm:^1.1.1" postcss: "npm:^8.5.8" postcss-preset-env: "npm:^11.2.0" @@ -9826,11 +9820,11 @@ __metadata: slate: "npm:^0.123.0" slate-dom: "npm:^0.123.0" slate-history: "npm:^0.113.1" + slate-hyperscript: "npm:^0.100.0" slate-react: "npm:^0.123.0" source-map-support: "npm:^0.5.21" tsx: "npm:^4.21.0" typescript: "npm:^5.9.3" - typescript-eslint: "npm:^8.56.1" vite: "npm:^7.3.1" vitest: "npm:^4.0.18" winston: "npm:^3.12.0" @@ -9960,13 +9954,6 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4.1.1": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 - languageName: node - linkType: hard - "object-inspect@npm:^1.13.3, object-inspect@npm:^1.13.4": version: 1.13.4 resolution: "object-inspect@npm:1.13.4" @@ -10002,18 +9989,6 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.9": - version: 1.1.9 - resolution: "object.entries@npm:1.1.9" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.4" - define-properties: "npm:^1.2.1" - es-object-atoms: "npm:^1.1.1" - checksum: 10c0/d4b8c1e586650407da03370845f029aa14076caca4e4d4afadbc69cfb5b78035fd3ee7be417141abdb0258fa142e59b11923b4c44d8b1255b28f5ffcc50da7db - languageName: node - linkType: hard - "object.fromentries@npm:^2.0.8": version: 2.0.8 resolution: "object.fromentries@npm:2.0.8" @@ -10222,6 +10197,108 @@ __metadata: languageName: node linkType: hard +"oxlint-tsgolint@npm:^0.17.3": + version: 0.17.3 + resolution: "oxlint-tsgolint@npm:0.17.3" + dependencies: + "@oxlint-tsgolint/darwin-arm64": "npm:0.17.3" + "@oxlint-tsgolint/darwin-x64": "npm:0.17.3" + "@oxlint-tsgolint/linux-arm64": "npm:0.17.3" + "@oxlint-tsgolint/linux-x64": "npm:0.17.3" + "@oxlint-tsgolint/win32-arm64": "npm:0.17.3" + "@oxlint-tsgolint/win32-x64": "npm:0.17.3" + dependenciesMeta: + "@oxlint-tsgolint/darwin-arm64": + optional: true + "@oxlint-tsgolint/darwin-x64": + optional: true + "@oxlint-tsgolint/linux-arm64": + optional: true + "@oxlint-tsgolint/linux-x64": + optional: true + "@oxlint-tsgolint/win32-arm64": + optional: true + "@oxlint-tsgolint/win32-x64": + optional: true + bin: + tsgolint: bin/tsgolint.js + checksum: 10c0/42e88275175236c8338b6065dad1f3e90b5c5590ea1d0a3e533833c055f087b361afe648b9f6696fafbee71b269ca38c7e887803ae2b81c92c0a23f009471625 + languageName: node + linkType: hard + +"oxlint@npm:^1.57.0": + version: 1.57.0 + resolution: "oxlint@npm:1.57.0" + dependencies: + "@oxlint/binding-android-arm-eabi": "npm:1.57.0" + "@oxlint/binding-android-arm64": "npm:1.57.0" + "@oxlint/binding-darwin-arm64": "npm:1.57.0" + "@oxlint/binding-darwin-x64": "npm:1.57.0" + "@oxlint/binding-freebsd-x64": "npm:1.57.0" + "@oxlint/binding-linux-arm-gnueabihf": "npm:1.57.0" + "@oxlint/binding-linux-arm-musleabihf": "npm:1.57.0" + "@oxlint/binding-linux-arm64-gnu": "npm:1.57.0" + "@oxlint/binding-linux-arm64-musl": "npm:1.57.0" + "@oxlint/binding-linux-ppc64-gnu": "npm:1.57.0" + "@oxlint/binding-linux-riscv64-gnu": "npm:1.57.0" + "@oxlint/binding-linux-riscv64-musl": "npm:1.57.0" + "@oxlint/binding-linux-s390x-gnu": "npm:1.57.0" + "@oxlint/binding-linux-x64-gnu": "npm:1.57.0" + "@oxlint/binding-linux-x64-musl": "npm:1.57.0" + "@oxlint/binding-openharmony-arm64": "npm:1.57.0" + "@oxlint/binding-win32-arm64-msvc": "npm:1.57.0" + "@oxlint/binding-win32-ia32-msvc": "npm:1.57.0" + "@oxlint/binding-win32-x64-msvc": "npm:1.57.0" + peerDependencies: + oxlint-tsgolint: ">=0.15.0" + dependenciesMeta: + "@oxlint/binding-android-arm-eabi": + optional: true + "@oxlint/binding-android-arm64": + optional: true + "@oxlint/binding-darwin-arm64": + optional: true + "@oxlint/binding-darwin-x64": + optional: true + "@oxlint/binding-freebsd-x64": + optional: true + "@oxlint/binding-linux-arm-gnueabihf": + optional: true + "@oxlint/binding-linux-arm-musleabihf": + optional: true + "@oxlint/binding-linux-arm64-gnu": + optional: true + "@oxlint/binding-linux-arm64-musl": + optional: true + "@oxlint/binding-linux-ppc64-gnu": + optional: true + "@oxlint/binding-linux-riscv64-gnu": + optional: true + "@oxlint/binding-linux-riscv64-musl": + optional: true + "@oxlint/binding-linux-s390x-gnu": + optional: true + "@oxlint/binding-linux-x64-gnu": + optional: true + "@oxlint/binding-linux-x64-musl": + optional: true + "@oxlint/binding-openharmony-arm64": + optional: true + "@oxlint/binding-win32-arm64-msvc": + optional: true + "@oxlint/binding-win32-ia32-msvc": + optional: true + "@oxlint/binding-win32-x64-msvc": + optional: true + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + bin: + oxlint: bin/oxlint + checksum: 10c0/e2ccd23280615068335c603c7fe9d2590812d7b2f16ee55a3fca1260d600795847e94926026a0d4ef46026c97c3868aee070ecca125eeaac68a8abbbe309d4a1 + languageName: node + linkType: hard + "p-limit@npm:3.1.0, p-limit@npm:^3.0.2": version: 3.1.0 resolution: "p-limit@npm:3.1.0" @@ -11027,17 +11104,6 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.8.1": - version: 15.8.1 - resolution: "prop-types@npm:15.8.1" - dependencies: - loose-envify: "npm:^1.4.0" - object-assign: "npm:^4.1.1" - react-is: "npm:^16.13.1" - checksum: 10c0/59ece7ca2fb9838031d73a48d4becb9a7cc1ed10e610517c7d8f19a1e02fa47f7c27d557d8a5702bec3cfeccddc853579832b43f449e54635803f277b1c78077 - languageName: node - linkType: hard - "propagate@npm:^2.0.0": version: 2.0.1 resolution: "propagate@npm:2.0.1" @@ -11162,13 +11228,6 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.13.1": - version: 16.13.1 - resolution: "react-is@npm:16.13.1" - checksum: 10c0/33977da7a5f1a287936a0c85639fec6ca74f4f15ef1e59a6bc20338fc73dc69555381e211f7a3529b8150a1f71e4225525b41b60b52965bda53ce7d47377ada1 - languageName: node - linkType: hard - "react-is@npm:^17.0.1": version: 17.0.2 resolution: "react-is@npm:17.0.2" @@ -11257,7 +11316,7 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.5.3, regexp.prototype.flags@npm:^1.5.4": +"regexp.prototype.flags@npm:^1.5.4": version: 1.5.4 resolution: "regexp.prototype.flags@npm:1.5.4" dependencies: @@ -11340,19 +11399,6 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^2.0.0-next.5": - version: 2.0.0-next.5 - resolution: "resolve@npm:2.0.0-next.5" - dependencies: - is-core-module: "npm:^2.13.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/a6c33555e3482ea2ec4c6e3d3bf0d78128abf69dca99ae468e64f1e30acaa318fd267fb66c8836b04d558d3e2d6ed875fe388067e7d8e0de647d3c21af21c43a - languageName: node - linkType: hard - "resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" @@ -11366,19 +11412,6 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^2.0.0-next.5#optional!builtin": - version: 2.0.0-next.5 - resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=c3c19d" - dependencies: - is-core-module: "npm:^2.13.0" - path-parse: "npm:^1.0.7" - supports-preserve-symlinks-flag: "npm:^1.0.0" - bin: - resolve: bin/resolve - checksum: 10c0/78ad6edb8309a2bfb720c2c1898f7907a37f858866ce11a5974643af1203a6a6e05b2fa9c53d8064a673a447b83d42569260c306d43628bff5bb101969708355 - languageName: node - linkType: hard - "restore-cursor@npm:^5.0.0": version: 5.1.0 resolution: "restore-cursor@npm:5.1.0" @@ -11620,7 +11653,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.5, semver@npm:^7.5.4, semver@npm:^7.7.3": +"semver@npm:^7.3.5, semver@npm:^7.5.4": version: 7.7.3 resolution: "semver@npm:7.7.3" bin: @@ -11629,6 +11662,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.7.3": + version: 7.7.4 + resolution: "semver@npm:7.7.4" + bin: + semver: bin/semver.js + checksum: 10c0/5215ad0234e2845d4ea5bb9d836d42b03499546ddafb12075566899fc617f68794bb6f146076b6881d755de17d6c6cc73372555879ec7dce2c2feee947866ad2 + languageName: node + linkType: hard + "send@npm:^1.1.0, send@npm:^1.2.0": version: 1.2.0 resolution: "send@npm:1.2.0" @@ -12100,37 +12142,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.12": - version: 4.0.12 - resolution: "string.prototype.matchall@npm:4.0.12" - dependencies: - call-bind: "npm:^1.0.8" - call-bound: "npm:^1.0.3" - define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.23.6" - es-errors: "npm:^1.3.0" - es-object-atoms: "npm:^1.0.0" - get-intrinsic: "npm:^1.2.6" - gopd: "npm:^1.2.0" - has-symbols: "npm:^1.1.0" - internal-slot: "npm:^1.1.0" - regexp.prototype.flags: "npm:^1.5.3" - set-function-name: "npm:^2.0.2" - side-channel: "npm:^1.1.0" - checksum: 10c0/1a53328ada73f4a77f1fdf1c79414700cf718d0a8ef6672af5603e709d26a24f2181208144aed7e858b1bcc1a0d08567a570abfb45567db4ae47637ed2c2f85c - languageName: node - linkType: hard - -"string.prototype.repeat@npm:^1.0.0": - version: 1.0.0 - resolution: "string.prototype.repeat@npm:1.0.0" - dependencies: - define-properties: "npm:^1.1.3" - es-abstract: "npm:^1.17.5" - checksum: 10c0/94c7978566cffa1327d470fd924366438af9b04b497c43a9805e476e2e908aa37a1fd34cc0911156c17556dab62159d12c7b92b3cc304c3e1281fe4c8e668f40 - languageName: node - linkType: hard - "string.prototype.trim@npm:^1.2.10": version: 1.2.10 resolution: "string.prototype.trim@npm:1.2.10" @@ -12482,11 +12493,11 @@ __metadata: linkType: hard "ts-api-utils@npm:^2.4.0": - version: 2.4.0 - resolution: "ts-api-utils@npm:2.4.0" + version: 2.5.0 + resolution: "ts-api-utils@npm:2.5.0" peerDependencies: typescript: ">=4.8.4" - checksum: 10c0/ed185861aef4e7124366a3f6561113557a57504267d4d452a51e0ba516a9b6e713b56b4aeaab9fa13de9db9ab755c65c8c13a777dba9133c214632cb7b65c083 + checksum: 10c0/767849383c114e7f1971fa976b20e73ac28fd0c70d8d65c0004790bf4d8f89888c7e4cf6d5949f9c1beae9bc3c64835bef77bbe27fddf45a3c7b60cebcf85c8c languageName: node linkType: hard @@ -12660,21 +12671,6 @@ __metadata: languageName: node linkType: hard -"typescript-eslint@npm:^8.56.1": - version: 8.56.1 - resolution: "typescript-eslint@npm:8.56.1" - dependencies: - "@typescript-eslint/eslint-plugin": "npm:8.56.1" - "@typescript-eslint/parser": "npm:8.56.1" - "@typescript-eslint/typescript-estree": "npm:8.56.1" - "@typescript-eslint/utils": "npm:8.56.1" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: ">=4.8.4 <6.0.0" - checksum: 10c0/c33aeb9a8beab54308412dcd460ab60f845fee30eaed1fdc1083ff53c430a4dcbdfeac862136a21fb3a639538f8712d933fc410680c2a650e67b992720a0d9f6 - languageName: node - linkType: hard - "typescript@npm:5.9.3, typescript@npm:^5.9.3": version: 5.9.3 resolution: "typescript@npm:5.9.3" @@ -13318,19 +13314,3 @@ __metadata: checksum: 10c0/584168ef98eb5d913473a4858dce128803c4a6cd87c0f09e954fa01126a59a33ab9e513b633ad9ab953786ed16efdd8c8700097a51635aafaeed3fef7712fa79 languageName: node linkType: hard - -"zod-validation-error@npm:^3.5.0 || ^4.0.0": - version: 4.0.2 - resolution: "zod-validation-error@npm:4.0.2" - peerDependencies: - zod: ^3.25.0 || ^4.0.0 - checksum: 10c0/0ccfec48c46de1be440b719cd02044d4abb89ed0e14c13e637cd55bf29102f67ccdba373f25def0fc7130e5f15025be4d557a7edcc95d5a3811599aade689e1b - languageName: node - linkType: hard - -"zod@npm:^3.25.0 || ^4.0.0": - version: 4.1.12 - resolution: "zod@npm:4.1.12" - checksum: 10c0/b64c1feb19e99d77075261eaf613e0b2be4dfcd3551eff65ad8b4f2a079b61e379854d066f7d447491fcf193f45babd8095551a9d47973d30b46b6d8e2c46774 - languageName: node - linkType: hard