From 90b9d70c2d3ab2c4b78275f5492bf837e0841a15 Mon Sep 17 00:00:00 2001 From: me-it-is <188520719+me-it-is@users.noreply.github.com> Date: Sat, 13 Jun 2026 10:25:49 -0700 Subject: [PATCH 1/6] explicitly specify that things are types to get rid of unused import errors --- src/lib/components/form/ValidatedInput.svelte | 2 +- src/lib/components/form/ValidatedInputGroup.svelte | 2 +- src/lib/components/form/ValidatedSelect.svelte | 2 +- src/lib/components/form/ValidatedTextarea.svelte | 2 +- src/lib/models/basicModels.ts | 2 +- src/lib/models/sessionModel.ts | 2 +- src/routes/api/v2/contact/validator.ts | 2 +- src/routes/api/v2/page_data/announcement/validator.ts | 2 +- src/routes/api/v2/page_data/bellSchedule/validator.ts | 2 +- src/routes/api/v2/page_data/bulletinBoard/validator.ts | 2 +- src/routes/api/v2/page_data/clubs/validator.ts | 2 +- src/routes/api/v2/page_data/usefulLinks/validator.ts | 2 +- src/routes/api/v2/short_link/validator.ts | 2 +- src/routes/api/v2/users/validator.ts | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/lib/components/form/ValidatedInput.svelte b/src/lib/components/form/ValidatedInput.svelte index 3bd9e31..5158af6 100644 --- a/src/lib/components/form/ValidatedInput.svelte +++ b/src/lib/components/form/ValidatedInput.svelte @@ -4,7 +4,7 @@ import type { LabelProps } from 'flowbite-svelte/Label.svelte'; import ValidatedLabel from './util/ValidatedLabel.svelte'; import ValidatedHelper from './util/ValidatedHelper.svelte'; - import { ObjectSchema, type StringSchema, ValidationError } from 'yup'; + import { type ObjectSchema, type StringSchema, ValidationError } from 'yup'; interface Props { /** diff --git a/src/lib/components/form/ValidatedInputGroup.svelte b/src/lib/components/form/ValidatedInputGroup.svelte index 548c5c2..3d847ca 100644 --- a/src/lib/components/form/ValidatedInputGroup.svelte +++ b/src/lib/components/form/ValidatedInputGroup.svelte @@ -5,7 +5,7 @@ import ValidatedLabel from './util/ValidatedLabel.svelte'; import ValidatedHelper from './util/ValidatedHelper.svelte'; import type { ButtonGroupProps } from 'flowbite-svelte/ButtonGroup.svelte'; - import { ObjectSchema, type StringSchema, ValidationError } from 'yup'; + import { type ObjectSchema, type StringSchema, ValidationError } from 'yup'; interface Props { /** diff --git a/src/lib/components/form/ValidatedSelect.svelte b/src/lib/components/form/ValidatedSelect.svelte index 7db61bc..872758b 100644 --- a/src/lib/components/form/ValidatedSelect.svelte +++ b/src/lib/components/form/ValidatedSelect.svelte @@ -4,7 +4,7 @@ import type { SelectProps } from 'flowbite-svelte/Select.svelte'; import ValidatedLabel from './util/ValidatedLabel.svelte'; import ValidatedHelper from './util/ValidatedHelper.svelte'; - import { ObjectSchema, type StringSchema, ValidationError } from 'yup'; + import { type ObjectSchema, type StringSchema, ValidationError } from 'yup'; interface Props { /** diff --git a/src/lib/components/form/ValidatedTextarea.svelte b/src/lib/components/form/ValidatedTextarea.svelte index 37929fe..6c13f2b 100644 --- a/src/lib/components/form/ValidatedTextarea.svelte +++ b/src/lib/components/form/ValidatedTextarea.svelte @@ -4,7 +4,7 @@ import type { TextareaProps } from 'flowbite-svelte/Textarea.svelte'; import ValidatedLabel from './util/ValidatedLabel.svelte'; import ValidatedHelper from './util/ValidatedHelper.svelte'; - import { ObjectSchema, type StringSchema, ValidationError } from 'yup'; + import { type ObjectSchema, type StringSchema, ValidationError } from 'yup'; interface Props { /** diff --git a/src/lib/models/basicModels.ts b/src/lib/models/basicModels.ts index 475fa93..8e3097d 100644 --- a/src/lib/models/basicModels.ts +++ b/src/lib/models/basicModels.ts @@ -1,5 +1,5 @@ import type { ISingleValue } from '$lib/types/basicTypes'; -import mongoose, { Model } from 'mongoose'; +import mongoose, { type Model } from 'mongoose'; export const singleValueSchema = new mongoose.Schema( {}, diff --git a/src/lib/models/sessionModel.ts b/src/lib/models/sessionModel.ts index 6c97a14..e26fb69 100644 --- a/src/lib/models/sessionModel.ts +++ b/src/lib/models/sessionModel.ts @@ -1,6 +1,6 @@ import { User } from '$api/users/model'; import type { ISession } from '$lib/types/session'; -import mongoose, { Model, Types } from 'mongoose'; +import mongoose, { type Model, Types } from 'mongoose'; const sessionSchema = new mongoose.Schema({ _id: { type: Buffer, required: true }, diff --git a/src/routes/api/v2/contact/validator.ts b/src/routes/api/v2/contact/validator.ts index 8890e88..8d26218 100644 --- a/src/routes/api/v2/contact/validator.ts +++ b/src/routes/api/v2/contact/validator.ts @@ -1,4 +1,4 @@ -import { object, ObjectSchema, string } from 'yup'; +import { object, type ObjectSchema, string } from 'yup'; import type { IContactUsMessage } from './types'; export const contactUsValidator: ObjectSchema = object({ diff --git a/src/routes/api/v2/page_data/announcement/validator.ts b/src/routes/api/v2/page_data/announcement/validator.ts index d76b616..d121146 100644 --- a/src/routes/api/v2/page_data/announcement/validator.ts +++ b/src/routes/api/v2/page_data/announcement/validator.ts @@ -1,4 +1,4 @@ -import { object, ObjectSchema, string } from 'yup'; +import { object, type ObjectSchema, string } from 'yup'; import type { IAnnouncement } from './types'; import type { WithoutID } from '$lib/types/basicTypes'; diff --git a/src/routes/api/v2/page_data/bellSchedule/validator.ts b/src/routes/api/v2/page_data/bellSchedule/validator.ts index 1a168dd..2b08a62 100644 --- a/src/routes/api/v2/page_data/bellSchedule/validator.ts +++ b/src/routes/api/v2/page_data/bellSchedule/validator.ts @@ -1,5 +1,5 @@ import type { WithoutID } from '$lib/types/basicTypes'; -import { string, object, boolean, array, number, ObjectSchema } from 'yup'; +import { string, object, boolean, array, number, type ObjectSchema } from 'yup'; import type { IBellSchedule, IBellScheduleDefaults, IBellScheduleOverride } from './types'; import { idArrayValidator, idValidator } from '$lib/validation/objectId'; diff --git a/src/routes/api/v2/page_data/bulletinBoard/validator.ts b/src/routes/api/v2/page_data/bulletinBoard/validator.ts index 4df21f7..9df4c7a 100644 --- a/src/routes/api/v2/page_data/bulletinBoard/validator.ts +++ b/src/routes/api/v2/page_data/bulletinBoard/validator.ts @@ -1,5 +1,5 @@ import type { WithoutID } from '$lib/types/basicTypes'; -import { object, ObjectSchema, string } from 'yup'; +import { object, type ObjectSchema, string } from 'yup'; import type { IBulletinBoardNote } from './types'; import urlRegex from '$lib/validation/url'; diff --git a/src/routes/api/v2/page_data/clubs/validator.ts b/src/routes/api/v2/page_data/clubs/validator.ts index c48fd3d..d6653c5 100644 --- a/src/routes/api/v2/page_data/clubs/validator.ts +++ b/src/routes/api/v2/page_data/clubs/validator.ts @@ -1,5 +1,5 @@ import type { WithoutID } from '$lib/types/basicTypes'; -import { object, ObjectSchema, string } from 'yup'; +import { object, type ObjectSchema, string } from 'yup'; import type { IClub } from './types'; export const INSTAGRAM_REGEX = /^[a-zA-Z0-9._]*$/; diff --git a/src/routes/api/v2/page_data/usefulLinks/validator.ts b/src/routes/api/v2/page_data/usefulLinks/validator.ts index 6410772..6dce734 100644 --- a/src/routes/api/v2/page_data/usefulLinks/validator.ts +++ b/src/routes/api/v2/page_data/usefulLinks/validator.ts @@ -1,5 +1,5 @@ import type { WithoutID } from '$lib/types/basicTypes'; -import { string, object, array, ObjectSchema } from 'yup'; +import { string, object, array, type ObjectSchema } from 'yup'; import type { ILinkCard } from './types'; export const linkCardLinkNameValidator = string().required().max(64).label('Name'); diff --git a/src/routes/api/v2/short_link/validator.ts b/src/routes/api/v2/short_link/validator.ts index 8434e91..bc1bcf7 100644 --- a/src/routes/api/v2/short_link/validator.ts +++ b/src/routes/api/v2/short_link/validator.ts @@ -1,4 +1,4 @@ -import { object, ObjectSchema, string } from 'yup'; +import { object, type ObjectSchema, string } from 'yup'; import type { IShortLinkAdminUpdate, IShortLinkCreate, diff --git a/src/routes/api/v2/users/validator.ts b/src/routes/api/v2/users/validator.ts index 9277bde..556a2ba 100644 --- a/src/routes/api/v2/users/validator.ts +++ b/src/routes/api/v2/users/validator.ts @@ -1,4 +1,4 @@ -import { object, number, ObjectSchema } from 'yup'; +import { object, number, type ObjectSchema } from 'yup'; import type { IAdminUserUpdate } from './types'; import { Permission } from '$lib/auth/permissions'; From 8e4bf38bc741f26972a2f9cac248e439939795b5 Mon Sep 17 00:00:00 2001 From: me-it-is <188520719+me-it-is@users.noreply.github.com> Date: Sat, 13 Jun 2026 10:38:32 -0700 Subject: [PATCH 2/6] enable more errors in the type script compiler --- tsconfig.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tsconfig.json b/tsconfig.json index 2605e32..4029e2e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,6 +10,13 @@ "skipLibCheck": true, "sourceMap": true, "strict": true, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + // TODO: see if https://www.typescriptlang.org/tsconfig/#exactOptionalPropertyTypes would be good to enable + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noUnusedLocals": true, + "noUnusedParameters": true, "moduleResolution": "bundler" } // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias From f1aa6d03a0f175a4e7ce08086f2c1decf336c072 Mon Sep 17 00:00:00 2001 From: me-it-is <188520719+me-it-is@users.noreply.github.com> Date: Sat, 13 Jun 2026 10:53:56 -0700 Subject: [PATCH 3/6] add eslint --- eslint.config.js | 43 +++ package.json | 9 +- pnpm-lock.yaml | 874 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 925 insertions(+), 1 deletion(-) create mode 100644 eslint.config.js diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..9962e9b --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,43 @@ +import prettier from 'eslint-config-prettier'; +import path from 'node:path'; +import js from '@eslint/js'; +import svelte from 'eslint-plugin-svelte'; +import { defineConfig, includeIgnoreFile } from 'eslint/config'; +import globals from 'globals'; +import ts from 'typescript-eslint'; +import svelteConfig from './svelte.config.js'; + +const gitignorePath = path.resolve(import.meta.dirname, '.gitignore'); + +export default defineConfig( + includeIgnoreFile(gitignorePath), + js.configs.recommended, + ts.configs.recommended, + svelte.configs.recommended, + prettier, + svelte.configs.prettier, + { + languageOptions: { globals: { ...globals.browser, ...globals.node } }, + rules: { + // typescript-eslint strongly recommend that you do not use the no-undef lint rule on TypeScript projects. + // see: https://typescript-eslint.io/troubleshooting/faqs/eslint/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors + 'no-undef': 'off', + }, + }, + { + files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'], + languageOptions: { + parserOptions: { + projectService: true, + extraFileExtensions: ['.svelte'], + parser: ts.parser, + svelteConfig, + }, + }, + }, + { + // Override or add rule settings here, such as: + // 'svelte/button-has-type': 'error' + rules: {}, + } +); diff --git a/package.json b/package.json index a423d08..39f003f 100644 --- a/package.json +++ b/package.json @@ -8,12 +8,13 @@ "preview": "vite preview", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", - "lint": "prettier --check .", + "lint": "prettier --check . && eslint .", "format": "prettier --write ." }, "devDependencies": { "@aws-sdk/client-s3": "^3.837.0", "@aws-sdk/s3-request-presigner": "^3.837.0", + "@eslint/js": "^10.0.1", "@oslojs/crypto": "^1.0.1", "@oslojs/encoding": "^1.1.0", "@popperjs/core": "^2.11.8", @@ -24,15 +25,20 @@ "@sveltejs/vite-plugin-svelte": "^5.1.0", "@types/bcryptjs": "^2.4.6", "@types/luxon": "^3.6.2", + "@types/node": "^24", "@types/papaparse": "^5.3.16", "arctic": "^2.3.4", "autoprefixer": "^10.4.21", "bcryptjs": "^2.4.3", "dayjs": "^1.11.13", + "eslint": "^10.4.1", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-svelte": "^3.19.0", "flowbite": "^2.5.2", "flowbite-svelte": "^0.47.4", "flowbite-svelte-icons": "^2.2.1", "fuse.js": "^7.1.0", + "globals": "^17.6.0", "mongoose": "^8.16.0", "nanoid": "^5.1.5", "papaparse": "^5.5.3", @@ -48,6 +54,7 @@ "tailwindcss": "^3.4.17", "tslib": "^2.8.1", "typescript": "^5.8.3", + "typescript-eslint": "^8.60.1", "vite": "^6.3.5", "yup": "^1.6.1" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b258fa3..7db6d34 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,9 @@ importers: '@aws-sdk/s3-request-presigner': specifier: ^3.837.0 version: 3.837.0 + '@eslint/js': + specifier: ^10.0.1 + version: 10.0.1(eslint@10.5.0(jiti@1.21.7)) '@oslojs/crypto': specifier: ^1.0.1 version: 1.0.1 @@ -44,6 +47,9 @@ importers: '@types/luxon': specifier: ^3.6.2 version: 3.6.2 + '@types/node': + specifier: ^24 + version: 24.0.3 '@types/papaparse': specifier: ^5.3.16 version: 5.3.16 @@ -59,6 +65,15 @@ importers: dayjs: specifier: ^1.11.13 version: 1.11.13 + eslint: + specifier: ^10.4.1 + version: 10.5.0(jiti@1.21.7) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.5.0(jiti@1.21.7)) + eslint-plugin-svelte: + specifier: ^3.19.0 + version: 3.19.0(eslint@10.5.0(jiti@1.21.7))(svelte@5.34.7) flowbite: specifier: ^2.5.2 version: 2.5.2(rollup@4.44.0) @@ -71,6 +86,9 @@ importers: fuse.js: specifier: ^7.1.0 version: 7.1.0 + globals: + specifier: ^17.6.0 + version: 17.6.0 mongoose: specifier: ^8.16.0 version: 8.16.0 @@ -116,6 +134,9 @@ importers: typescript: specifier: ^5.8.3 version: 5.8.3 + typescript-eslint: + specifier: ^8.60.1 + version: 8.61.0(eslint@10.5.0(jiti@1.21.7))(typescript@5.8.3) vite: specifier: ^6.3.5 version: 6.3.5(@types/node@24.0.3)(jiti@1.21.7)(yaml@2.8.0) @@ -445,6 +466,45 @@ packages: cpu: [x64] os: [win32] + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.23.5': + resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/config-helpers@0.6.0': + resolution: {integrity: sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/core@1.2.1': + resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/js@10.0.1': + resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true + + '@eslint/object-schema@3.0.5': + resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + '@eslint/plugin-kit@0.7.2': + resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + '@floating-ui/core@1.7.1': resolution: {integrity: sha512-azI0DrjMMfIug/ExbBaeDVJXcY0a7EPvPjb2xAJPa4HeimBX+Z18HK8QQR3jb6356SnDDdxx+hinMLcJEDdOjw==} @@ -454,6 +514,26 @@ packages: '@floating-ui/utils@0.2.9': resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + '@humanfs/core@0.19.2': + resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.8': + resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==} + engines: {node: '>=18.18.0'} + + '@humanfs/types@0.15.0': + resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} @@ -1023,12 +1103,18 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/luxon@3.6.2': resolution: {integrity: sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==} @@ -1059,17 +1145,89 @@ packages: '@types/whatwg-url@11.0.5': resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} + '@typescript-eslint/eslint-plugin@8.61.0': + resolution: {integrity: sha512-bFNvl9ZczlVb+wR2Akszf3gHfKVj/8WanXaGJ3UstTA7brNKg0cNdk6X1Psu5V7MZ2oQtzZKOEzIUehaoxbDGw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.61.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/parser@8.61.0': + resolution: {integrity: sha512-5B7PfA2e1NQGCnDHd/0lW7W3gvp3d59Ryw54FYO8Uswxo9f6ikw3AZV+Xj/TvpImmpsiYyUqAfhC6kJID1jF6w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/project-service@8.61.0': + resolution: {integrity: sha512-DV42F7MLJO6Rax7SK1yg43tcnEfGUrurSpSxKuVX+a3RCTzBlH3fuxprrOJXKCJGAaw82xXocikJ0uQaqwXgGA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/scope-manager@8.61.0': + resolution: {integrity: sha512-IWdXFHFSb6mlC3HPc7QsLDm5zYEbUla6trDEHf32D3/dnuUyXd87plScSNXSbm0/RxMvObpI17sv/EDTGrGZkA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.61.0': + resolution: {integrity: sha512-O5Amvdv9ztMpxpf+vmFULGG78IE6Qwdr3bCGvqwG4nwc9H2qXkOYJJnRbRHyMkQTjv1d03olqwwwzHLMqpFePQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/type-utils@8.61.0': + resolution: {integrity: sha512-TuBiQYIkd97yBfInHCTKVYMbX4kvEmpOEuixIuzCU9p8BGT1SfyyO0d0IfDMbPIHcjn/hWnusUX5e8v5Xg+X8A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/types@8.61.0': + resolution: {integrity: sha512-9QTQpZ5Iin4CdIodfbDQFSeiSJKidgYJYug1P9CC2xWgUTvlmixViqDZNciMjwLBZyJnG4tGmPl97rVAFb1AJg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.61.0': + resolution: {integrity: sha512-42zatd5qSvvcV1JdDBCLxYRznvP4eIHpPoZXdkPFnAmanA4FuZ5dibSnCBggY8hQnqajPpoGjXFdZ7fIJKQnlA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/utils@8.61.0': + resolution: {integrity: sha512-3bzFt7ImFMW/jVYwJamDoe/dMOdFLSC6pom6rRjdh4SZJEYupyMzem8e7vKZLclLfpHjlwSAXOUxtKxGXUiLqA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + + '@typescript-eslint/visitor-keys@8.61.0': + resolution: {integrity: sha512-QVLZu3ZPQEE+HICQyAMZ2yLQhxf0meY/wx6Hx14YcTNj13JB3qHlX3lJ02L3fLGHgERRH71kvYDwiXIguT3AjQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} '@yr/monotone-cubic-spline@1.0.3': resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} hasBin: true + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.15.0: + resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1123,6 +1281,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + bcryptjs@2.4.3: resolution: {integrity: sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==} @@ -1136,6 +1298,10 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} + engines: {node: 18 || 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -1217,9 +1383,21 @@ packages: supports-color: optional: true + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decode-named-character-reference@1.2.0: resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -1265,26 +1443,109 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-svelte@3.19.0: + resolution: {integrity: sha512-t3rNaZeXz4d2gG4uJyMEYfJCFKf22+SWbSizIIXIWKu4wM+XPLiMWuSSr/C5821JmFeN9ogK+eExbG+z+twyxw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.1 || ^9.0.0 || ^10.0.0 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.5.0: + resolution: {integrity: sha512-1y+7C+vi12bUK1IpZeaV3gsH9fHLBmPvYmPx42pvT/E9yG0IC8g3PUZZgp0+JLJl7ZDK0flc2gc+Aw9dpCvIsQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + esm-env@1.2.2: resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} + engines: {node: '>=0.10'} + esrap@1.4.9: resolution: {integrity: sha512-3OMlcd0a03UGuZpPeUC1HxR3nA23l+HEyCiZw3b3FumJIN9KphoGzDJKMXI1S72jVS1dsenDyQC0kJlO1U9E1g==} + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-xml-parser@4.4.1: resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} hasBin: true @@ -1300,10 +1561,34 @@ packages: picomatch: optional: true + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + flowbite-datepicker@1.3.2: resolution: {integrity: sha512-6Nfm0MCVX3mpaR7YSCjmEO2GO8CDt6CX8ZpQnGdeu03WUCWtEPQ/uy0PUiNtIJjJZWnX0Cm3H55MOhbD1g+E/g==} @@ -1351,14 +1636,34 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} + engines: {node: '>=18'} + + globals@17.6.0: + resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==} + engines: {node: '>=18'} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + imagetools-core@7.1.0: resolution: {integrity: sha512-8Aa4NecBBGmTkaAUjcuRYgTPKHCsBEWYmCnvKCL6/bxedehtVVFyZPdXe8DD0Nevd6UWBq85ifUaJ8498lgqNQ==} engines: {node: '>=18.0.0'} + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} @@ -1406,14 +1711,37 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + kareem@2.6.3: resolution: {integrity: sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==} engines: {node: '>=12.0.0'} + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} + known-css-properties@0.37.0: + resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -1424,6 +1752,10 @@ packages: locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -1571,6 +1903,10 @@ packages: resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} hasBin: true + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -1645,6 +1981,9 @@ packages: engines: {node: ^18 || >=20} hasBin: true + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} @@ -1664,12 +2003,28 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} papaparse@5.5.3: resolution: {integrity: sha512-5QvjGxYVjxO59MGU2lHVYpRWBBtKHnlIAcSe1uNFCkkptUh63NFRj0FJQm7nR67puEruUci/ZkjmEFrjCAyP4A==} + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -1692,6 +2047,10 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} + engines: {node: '>=12'} + pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -1712,6 +2071,18 @@ packages: peerDependencies: postcss: ^8.4.21 + postcss-load-config@3.1.4: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + postcss-load-config@4.0.2: resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} @@ -1730,10 +2101,26 @@ packages: peerDependencies: postcss: ^8.2.14 + postcss-safe-parser@7.0.1: + resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.4.31 + + postcss-scss@4.0.9: + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + postcss-selector-parser@6.1.2: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} + postcss-selector-parser@7.1.4: + resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==} + engines: {node: '>=4'} + postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -1741,6 +2128,10 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + prettier-plugin-svelte@3.4.0: resolution: {integrity: sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==} peerDependencies: @@ -1869,6 +2260,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.4: + resolution: {integrity: sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==} + engines: {node: '>=10'} + hasBin: true + set-cookie-parser@2.7.1: resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} @@ -1946,6 +2342,15 @@ packages: peerDependencies: svelte: '>=3.23.0 || ^5.0.0-next.0' + svelte-eslint-parser@1.8.0: + resolution: {integrity: sha512-mikR1qwIVy3t5WthUoAXkMwxkXvabZP9FJgdx35Ei7EbGWmctva1Pih16Koeor/bdNNq8NXHlwKGS6NkYTawLg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.34.1} + peerDependencies: + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + svelte: + optional: true + svelte-exmarkdown@5.0.1: resolution: {integrity: sha512-LVfk4WxysQ/jHws30QsTEtTv89TkPO1w/zZR8PjNMK69aqAjYk1S5l5inuPX1JoQwWN0cjg9WqLKxXKLWKOddw==} peerDependencies: @@ -2016,6 +2421,10 @@ packages: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.17: + resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} + engines: {node: '>=12.0.0'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -2037,16 +2446,33 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} + typescript-eslint@8.61.0: + resolution: {integrity: sha512-8y31Rd0eGTrDKqhy6vT0HtzhN+YLjQizwX3aA3hPXP/ynSfnrBXcQY5IzsP9/DM7+klX4IUncZZjkchP0z+rUw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.1.0' + typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} @@ -2079,6 +2505,9 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -2157,6 +2586,10 @@ packages: engines: {node: '>= 8'} hasBin: true + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -2165,11 +2598,19 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + yaml@1.10.3: + resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} + engines: {node: '>= 6'} + yaml@2.8.0: resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} engines: {node: '>= 14.6'} hasBin: true + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + yup@1.6.1: resolution: {integrity: sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==} @@ -2751,6 +3192,40 @@ snapshots: '@esbuild/win32-x64@0.25.5': optional: true + '@eslint-community/eslint-utils@4.9.1(eslint@10.5.0(jiti@1.21.7))': + dependencies: + eslint: 10.5.0(jiti@1.21.7) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.2': {} + + '@eslint/config-array@0.23.5': + dependencies: + '@eslint/object-schema': 3.0.5 + debug: 4.4.1 + minimatch: 10.2.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.6.0': + dependencies: + '@eslint/core': 1.2.1 + + '@eslint/core@1.2.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/js@10.0.1(eslint@10.5.0(jiti@1.21.7))': + optionalDependencies: + eslint: 10.5.0(jiti@1.21.7) + + '@eslint/object-schema@3.0.5': {} + + '@eslint/plugin-kit@0.7.2': + dependencies: + '@eslint/core': 1.2.1 + levn: 0.4.1 + '@floating-ui/core@1.7.1': dependencies: '@floating-ui/utils': 0.2.9 @@ -2762,6 +3237,22 @@ snapshots: '@floating-ui/utils@0.2.9': {} + '@humanfs/core@0.19.2': + dependencies: + '@humanfs/types': 0.15.0 + + '@humanfs/node@0.16.8': + dependencies: + '@humanfs/core': 0.19.2 + '@humanfs/types': 0.15.0 + '@humanwhocodes/retry': 0.4.3 + + '@humanfs/types@0.15.0': {} + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.4.3': {} + '@iarna/toml@2.2.5': {} '@img/sharp-darwin-arm64@0.34.2': @@ -3402,12 +3893,16 @@ snapshots: dependencies: '@types/ms': 2.1.0 + '@types/esrecurse@4.3.1': {} + '@types/estree@1.0.8': {} '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 + '@types/json-schema@7.0.15': {} + '@types/luxon@3.6.2': {} '@types/mdast@4.0.4': @@ -3436,12 +3931,120 @@ snapshots: dependencies: '@types/webidl-conversions': 7.0.3 + '@typescript-eslint/eslint-plugin@8.61.0(@typescript-eslint/parser@8.61.0(eslint@10.5.0(jiti@1.21.7))(typescript@5.8.3))(eslint@10.5.0(jiti@1.21.7))(typescript@5.8.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.61.0(eslint@10.5.0(jiti@1.21.7))(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.61.0 + '@typescript-eslint/type-utils': 8.61.0(eslint@10.5.0(jiti@1.21.7))(typescript@5.8.3) + '@typescript-eslint/utils': 8.61.0(eslint@10.5.0(jiti@1.21.7))(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.61.0 + eslint: 10.5.0(jiti@1.21.7) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.61.0(eslint@10.5.0(jiti@1.21.7))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.61.0 + '@typescript-eslint/types': 8.61.0 + '@typescript-eslint/typescript-estree': 8.61.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.61.0 + debug: 4.4.3 + eslint: 10.5.0(jiti@1.21.7) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.61.0(typescript@5.8.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.61.0(typescript@5.8.3) + '@typescript-eslint/types': 8.61.0 + debug: 4.4.3 + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.61.0': + dependencies: + '@typescript-eslint/types': 8.61.0 + '@typescript-eslint/visitor-keys': 8.61.0 + + '@typescript-eslint/tsconfig-utils@8.61.0(typescript@5.8.3)': + dependencies: + typescript: 5.8.3 + + '@typescript-eslint/type-utils@8.61.0(eslint@10.5.0(jiti@1.21.7))(typescript@5.8.3)': + dependencies: + '@typescript-eslint/types': 8.61.0 + '@typescript-eslint/typescript-estree': 8.61.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.61.0(eslint@10.5.0(jiti@1.21.7))(typescript@5.8.3) + debug: 4.4.3 + eslint: 10.5.0(jiti@1.21.7) + ts-api-utils: 2.5.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.61.0': {} + + '@typescript-eslint/typescript-estree@8.61.0(typescript@5.8.3)': + dependencies: + '@typescript-eslint/project-service': 8.61.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.61.0(typescript@5.8.3) + '@typescript-eslint/types': 8.61.0 + '@typescript-eslint/visitor-keys': 8.61.0 + debug: 4.4.3 + minimatch: 10.2.5 + semver: 7.8.4 + tinyglobby: 0.2.17 + ts-api-utils: 2.5.0(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.61.0(eslint@10.5.0(jiti@1.21.7))(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.61.0 + '@typescript-eslint/types': 8.61.0 + '@typescript-eslint/typescript-estree': 8.61.0(typescript@5.8.3) + eslint: 10.5.0(jiti@1.21.7) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.61.0': + dependencies: + '@typescript-eslint/types': 8.61.0 + eslint-visitor-keys: 5.0.1 + '@ungap/structured-clone@1.3.0': {} '@yr/monotone-cubic-spline@1.0.3': {} + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn-jsx@5.3.2(acorn@8.17.0): + dependencies: + acorn: 8.17.0 + acorn@8.15.0: {} + acorn@8.17.0: {} + + ajv@6.15.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} @@ -3495,6 +4098,8 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + bcryptjs@2.4.3: {} binary-extensions@2.3.0: {} @@ -3505,6 +4110,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.6: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -3578,10 +4187,16 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.3: + dependencies: + ms: 2.1.3 + decode-named-character-reference@1.2.0: dependencies: character-entities: 2.0.2 + deep-is@0.1.4: {} + deepmerge@4.3.1: {} dequal@2.0.3: {} @@ -3636,18 +4251,123 @@ snapshots: escalade@3.2.0: {} + escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} + eslint-config-prettier@10.1.8(eslint@10.5.0(jiti@1.21.7)): + dependencies: + eslint: 10.5.0(jiti@1.21.7) + + eslint-plugin-svelte@3.19.0(eslint@10.5.0(jiti@1.21.7))(svelte@5.34.7): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@1.21.7)) + '@jridgewell/sourcemap-codec': 1.5.0 + eslint: 10.5.0(jiti@1.21.7) + esutils: 2.0.3 + globals: 16.5.0 + known-css-properties: 0.37.0 + postcss: 8.5.6 + postcss-load-config: 3.1.4(postcss@8.5.6) + postcss-safe-parser: 7.0.1(postcss@8.5.6) + semver: 7.7.2 + svelte-eslint-parser: 1.8.0(svelte@5.34.7) + optionalDependencies: + svelte: 5.34.7 + transitivePeerDependencies: + - ts-node + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-scope@9.1.2: + dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.8 + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@10.5.0(jiti@1.21.7): + dependencies: + '@eslint-community/eslint-utils': 4.9.1(eslint@10.5.0(jiti@1.21.7)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.23.5 + '@eslint/config-helpers': 0.6.0 + '@eslint/core': 1.2.1 + '@eslint/plugin-kit': 0.7.2 + '@humanfs/node': 0.16.8 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + ajv: 6.15.0 + cross-spawn: 7.0.6 + debug: 4.4.1 + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 1.21.7 + transitivePeerDependencies: + - supports-color + esm-env@1.2.2: {} + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + + espree@11.2.0: + dependencies: + acorn: 8.17.0 + acorn-jsx: 5.3.2(acorn@8.17.0) + eslint-visitor-keys: 5.0.1 + + esquery@1.7.0: + dependencies: + estraverse: 5.3.0 + esrap@1.4.9: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + estree-walker@2.0.2: {} + esutils@2.0.3: {} + extend@3.0.2: {} + fast-deep-equal@3.1.3: {} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -3656,6 +4376,10 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + fast-xml-parser@4.4.1: dependencies: strnum: 1.1.2 @@ -3668,10 +4392,30 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.4.2 + keyv: 4.5.4 + + flatted@3.4.2: {} + flowbite-datepicker@1.3.2(rollup@4.44.0): dependencies: '@rollup/plugin-node-resolve': 15.3.1(rollup@4.44.0) @@ -3734,12 +4478,22 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + globals@16.5.0: {} + + globals@17.6.0: {} + hasown@2.0.2: dependencies: function-bind: 1.1.2 + ignore@5.3.2: {} + + ignore@7.0.5: {} + imagetools-core@7.1.0: {} + imurmurhash@0.1.4: {} + is-arrayish@0.3.2: {} is-binary-path@2.1.0: @@ -3778,16 +4532,39 @@ snapshots: jiti@1.21.7: {} + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + kareem@2.6.3: {} + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + kleur@4.1.5: {} + known-css-properties@0.37.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lilconfig@2.1.0: {} + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} locate-character@3.0.0: {} + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + longest-streak@3.1.0: {} lru-cache@10.4.3: {} @@ -4114,6 +4891,10 @@ snapshots: mini-svg-data-uri@1.4.4: {} + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.6 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.2 @@ -4174,6 +4955,8 @@ snapshots: nanoid@5.1.5: {} + natural-compare@1.4.0: {} + node-releases@2.0.19: {} normalize-path@3.0.0: {} @@ -4184,10 +4967,29 @@ snapshots: object-hash@3.0.0: {} + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + package-json-from-dist@1.0.1: {} papaparse@5.5.3: {} + path-exists@4.0.0: {} + path-key@3.1.1: {} path-parse@1.0.7: {} @@ -4203,6 +5005,8 @@ snapshots: picomatch@4.0.2: {} + picomatch@4.0.4: {} + pify@2.3.0: {} pirates@4.0.7: {} @@ -4219,6 +5023,13 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.5.6 + postcss-load-config@3.1.4(postcss@8.5.6): + dependencies: + lilconfig: 2.1.0 + yaml: 1.10.3 + optionalDependencies: + postcss: 8.5.6 + postcss-load-config@4.0.2(postcss@8.5.6): dependencies: lilconfig: 3.1.3 @@ -4231,11 +5042,24 @@ snapshots: postcss: 8.5.6 postcss-selector-parser: 6.1.2 + postcss-safe-parser@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-scss@4.0.9(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 + postcss-selector-parser@7.1.4: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss-value-parser@4.2.0: {} postcss@8.5.6: @@ -4244,6 +5068,8 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + prelude-ls@1.2.1: {} + prettier-plugin-svelte@3.4.0(prettier@3.6.0)(svelte@5.34.7): dependencies: prettier: 3.6.0 @@ -4353,6 +5179,8 @@ snapshots: semver@7.7.2: {} + semver@7.8.4: {} + set-cookie-parser@2.7.1: {} sharp@0.34.2: @@ -4459,6 +5287,18 @@ snapshots: dependencies: svelte: 5.34.7 + svelte-eslint-parser@1.8.0(svelte@5.34.7): + dependencies: + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + postcss: 8.5.6 + postcss-scss: 4.0.9(postcss@8.5.6) + postcss-selector-parser: 7.1.4 + semver: 7.7.2 + optionalDependencies: + svelte: 5.34.7 + svelte-exmarkdown@5.0.1(svelte@5.34.7): dependencies: remark-gfm: 4.0.1 @@ -4567,6 +5407,11 @@ snapshots: fdir: 6.4.6(picomatch@4.0.2) picomatch: 4.0.2 + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -4583,12 +5428,31 @@ snapshots: trough@2.2.0: {} + ts-api-utils@2.5.0(typescript@5.8.3): + dependencies: + typescript: 5.8.3 + ts-interface-checker@0.1.13: {} tslib@2.8.1: {} + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + type-fest@2.19.0: {} + typescript-eslint@8.61.0(eslint@10.5.0(jiti@1.21.7))(typescript@5.8.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.61.0(@typescript-eslint/parser@8.61.0(eslint@10.5.0(jiti@1.21.7))(typescript@5.8.3))(eslint@10.5.0(jiti@1.21.7))(typescript@5.8.3) + '@typescript-eslint/parser': 8.61.0(eslint@10.5.0(jiti@1.21.7))(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.61.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.61.0(eslint@10.5.0(jiti@1.21.7))(typescript@5.8.3) + eslint: 10.5.0(jiti@1.21.7) + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + typescript@5.8.3: {} undici-types@7.8.0: {} @@ -4632,6 +5496,10 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + util-deprecate@1.0.2: {} uuid@9.0.1: {} @@ -4683,6 +5551,8 @@ snapshots: dependencies: isexe: 2.0.0 + word-wrap@1.2.5: {} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -4695,8 +5565,12 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 + yaml@1.10.3: {} + yaml@2.8.0: {} + yocto-queue@0.1.0: {} + yup@1.6.1: dependencies: property-expr: 2.0.6 From dc620e50958fcb5fdeedc3c5c7e3bb00a5ddb97a Mon Sep 17 00:00:00 2001 From: me-it-is <188520719+me-it-is@users.noreply.github.com> Date: Sat, 13 Jun 2026 10:57:13 -0700 Subject: [PATCH 4/6] apply automatic fixes --- src/lib/auth/permissions.ts | 2 +- src/lib/components/form/util/ValidatedLabel.svelte | 2 +- src/routes/(public)/file-transfer/+page.server.ts | 6 +++--- src/routes/admin/panel/home/bell-schedule/+page.svelte | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/lib/auth/permissions.ts b/src/lib/auth/permissions.ts index a4e4051..aba4232 100644 --- a/src/lib/auth/permissions.ts +++ b/src/lib/auth/permissions.ts @@ -102,7 +102,7 @@ export class Permissions { * @returns this, for chaining */ public strip(): Permissions { - let original = this.permissions; + const original = this.permissions; this.permissions = 0; for (let i = 0; i < PermissionValues.length; i++) { if ((original & PermissionValues[i]) === PermissionValues[i]) { diff --git a/src/lib/components/form/util/ValidatedLabel.svelte b/src/lib/components/form/util/ValidatedLabel.svelte index c6b2f67..0c474d0 100644 --- a/src/lib/components/form/util/ValidatedLabel.svelte +++ b/src/lib/components/form/util/ValidatedLabel.svelte @@ -24,7 +24,7 @@ /** * Whether the input is required or not, will render a red asterisk if true */ - required?: Boolean; + required?: boolean; children?: Snippet; } diff --git a/src/routes/(public)/file-transfer/+page.server.ts b/src/routes/(public)/file-transfer/+page.server.ts index 52a6cd7..0e7b8d4 100644 --- a/src/routes/(public)/file-transfer/+page.server.ts +++ b/src/routes/(public)/file-transfer/+page.server.ts @@ -3,20 +3,20 @@ import type { PageServerLoad } from './$types'; import { fileTransferCodeValidator } from '$api/file_transfer/validator'; export const load = (async ({ url, cookies }) => { - let existingCode = url.searchParams.get('code'); + const existingCode = url.searchParams.get('code'); if (existingCode && (await fileTransferCodeValidator.isValid(existingCode))) { cookies.set('fileTransferCode', existingCode, { path: '/', maxAge: 1800 }); // 30min return; } - let cookieCode = cookies.get('fileTransferCode'); + const cookieCode = cookies.get('fileTransferCode'); if (cookieCode && (await fileTransferCodeValidator.isValid(cookieCode))) { cookies.set('fileTransferCode', cookieCode, { path: '/', maxAge: 1800 }); // 30min return redirect(301, '?code=' + cookieCode); } - let code = + const code = Math.floor(Math.random() * 10000) .toString() .padStart(4, '0') + diff --git a/src/routes/admin/panel/home/bell-schedule/+page.svelte b/src/routes/admin/panel/home/bell-schedule/+page.svelte index 55774e6..cbeb0d8 100644 --- a/src/routes/admin/panel/home/bell-schedule/+page.svelte +++ b/src/routes/admin/panel/home/bell-schedule/+page.svelte @@ -92,10 +92,10 @@
- + Date: Sat, 13 Jun 2026 12:33:07 -0700 Subject: [PATCH 5/6] fix as many lints as i can --- src/lib/auth/session.ts | 4 ++-- src/lib/components/NotificationProvider.svelte | 2 +- src/lib/components/QrCodeCard.svelte | 1 - src/lib/components/form/FileDropzone.svelte | 2 +- src/lib/components/form/ValidatedInput.svelte | 2 +- src/lib/components/form/ValidatedInputGroup.svelte | 2 +- src/lib/components/form/ValidatedSelect.svelte | 2 +- src/lib/components/form/ValidatedTextarea.svelte | 2 +- src/lib/components/info/BellScheduleTable.svelte | 2 +- src/lib/components/info/BellScheduleTabs.svelte | 4 ++-- src/lib/components/info/BulletinBoard.svelte | 2 +- src/lib/components/info/LinkCardContent.svelte | 2 +- src/lib/components/info/LinkCardList.svelte | 2 +- src/lib/db/mongodb.ts | 4 ++-- src/lib/models/basicModels.ts | 4 ++-- src/routes/(public)/Footer.svelte | 4 ++-- src/routes/(public)/QuickLinks.svelte | 2 +- src/routes/(public)/clubs/ClubList.svelte | 4 ++-- .../(public)/link-generator/edit/LinkLoginForm.svelte | 2 +- src/routes/+layout.svelte | 3 +-- src/routes/admin/(auth)/login/google/+server.ts | 2 +- src/routes/admin/(auth)/login/google/callback/+server.ts | 2 +- src/routes/admin/panel/+layout.svelte | 7 ++----- src/routes/admin/panel/+page.svelte | 4 ++-- src/routes/admin/panel/clubs/AutoImportClubsButton.svelte | 2 +- .../admin/panel/home/bell-schedule/DefaultSchedules.svelte | 2 +- src/routes/admin/panel/users/+page.svelte | 1 - src/routes/admin/panel/users/EditableUser.svelte | 2 +- src/routes/api/v2/page_data/commonEditEndpoints.ts | 4 ++-- 29 files changed, 36 insertions(+), 42 deletions(-) diff --git a/src/lib/auth/session.ts b/src/lib/auth/session.ts index 89cca09..e47d7eb 100644 --- a/src/lib/auth/session.ts +++ b/src/lib/auth/session.ts @@ -40,7 +40,7 @@ export async function createSession( * @param token The session token to look for * @returns ISession if the session is valid, null otherwise */ -export async function validateAndRenewSession(token: any): Promise { +export async function validateAndRenewSession(token: string | undefined): Promise { if (!token || typeof token !== 'string' || token.length !== 32) { return null; } @@ -75,7 +75,7 @@ export async function validateAndRenewSession(token: any): Promise { +export async function deleteSession(token: string | undefined): Promise { if (typeof token !== 'string' || token.length !== 32) { return false; } diff --git a/src/lib/components/NotificationProvider.svelte b/src/lib/components/NotificationProvider.svelte index 6528796..b9ed6b7 100644 --- a/src/lib/components/NotificationProvider.svelte +++ b/src/lib/components/NotificationProvider.svelte @@ -65,7 +65,7 @@ {@render children?.()}
- {#each notifications as { message, type }, i} + {#each notifications as { message, type } (message)} hide(message)}> {#if type === 'success'} diff --git a/src/lib/components/QrCodeCard.svelte b/src/lib/components/QrCodeCard.svelte index 0c600aa..cece0e9 100644 --- a/src/lib/components/QrCodeCard.svelte +++ b/src/lib/components/QrCodeCard.svelte @@ -6,7 +6,6 @@ ButtonGroup, Card, Helper, - Hr, Input, Label, Select, diff --git a/src/lib/components/form/FileDropzone.svelte b/src/lib/components/form/FileDropzone.svelte index ab63ae6..f70e68d 100644 --- a/src/lib/components/form/FileDropzone.svelte +++ b/src/lib/components/form/FileDropzone.svelte @@ -1,5 +1,5 @@
- {#each links as link} + {#each links as link (link.name)} - import type { ClubListData, IClub } from '$api/page_data/clubs/types'; + import type { ClubListData } from '$api/page_data/clubs/types'; import ExternalLink from '$components/ExternalLink.svelte'; import SectionHeader from '$components/SectionHeader.svelte'; import { @@ -59,7 +59,7 @@ Instagram - {#each searchedClubs as club} + {#each searchedClubs as club (club.id)} {club.name} diff --git a/src/routes/(public)/link-generator/edit/LinkLoginForm.svelte b/src/routes/(public)/link-generator/edit/LinkLoginForm.svelte index 4e86530..e9129fd 100644 --- a/src/routes/(public)/link-generator/edit/LinkLoginForm.svelte +++ b/src/routes/(public)/link-generator/edit/LinkLoginForm.svelte @@ -8,7 +8,7 @@ import { EyeOutline, EyeSlashOutline } from 'flowbite-svelte-icons'; interface Props { - suffix?: any; + suffix?: string; password?: string; onSubmit?: (linkLoginData: { suffix: string; password: string }) => void; onChange?: () => void; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 0e03519..da6e727 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,9 +1,8 @@