diff --git a/conf/tsconfig.content_scripts.json b/conf/tsconfig.content_scripts.json index 233275f08a3..530c4506bd5 100644 --- a/conf/tsconfig.content_scripts.json +++ b/conf/tsconfig.content_scripts.json @@ -4,7 +4,9 @@ "module": "es2022", "forceConsistentCasingInFileNames": true, "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, "noUnusedLocals": true, + "noEmitOnError": true, "alwaysStrict": true, "noImplicitAny": true, "strictNullChecks": true, diff --git a/conf/tsconfig.streams.json b/conf/tsconfig.streams.json index b10acb6a12f..b2de0e23822 100644 --- a/conf/tsconfig.streams.json +++ b/conf/tsconfig.streams.json @@ -5,6 +5,8 @@ "allowJs": true, "alwaysStrict": true, "noImplicitAny": true, + "noFallthroughCasesInSwitch": true, + "noEmitOnError": true, "strictNullChecks": true, "allowSyntheticDefaultImports": true, "esModuleInterop": true, diff --git a/conf/tsconfig.test.json b/conf/tsconfig.test.json index 5dfdeabb0b7..3e2adc23756 100644 --- a/conf/tsconfig.test.json +++ b/conf/tsconfig.test.json @@ -4,6 +4,8 @@ "lib": ["es6", "dom"], "alwaysStrict": true, "noImplicitAny": true, + "noFallthroughCasesInSwitch": true, + "noEmitOnError": true, "strictNullChecks": true, "strictFunctionTypes": false, "allowSyntheticDefaultImports": true, diff --git a/conf/tsconfig.tooling.json b/conf/tsconfig.tooling.json index 12b769dca7a..4a778237d86 100644 --- a/conf/tsconfig.tooling.json +++ b/conf/tsconfig.tooling.json @@ -4,6 +4,8 @@ "lib": ["es6", "dom"], "alwaysStrict": true, "noImplicitAny": true, + "noFallthroughCasesInSwitch": true, + "noEmitOnError": true, "strictNullChecks": true, "module": "commonjs", "sourceMap": false, diff --git a/eslint.config.mjs b/eslint.config.mjs index ab06299afab..b1e8e0babc9 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,4 +1,5 @@ -// Importing necessary ESLint plugins +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; import tseslint from 'typescript-eslint'; import noOnlyTestsPlugin from 'eslint-plugin-no-only-tests'; import headerPlugin from '@tony.ganchev/eslint-plugin-header'; @@ -10,13 +11,12 @@ import eslintConfigPrettier from 'eslint-config-prettier'; import pluginJs from '@eslint/js'; import globals from 'globals'; -const mergeConfigs = (configs, key) => configs.reduce((acc, cfg) => ({ ...acc, ...(cfg[key] || {}) }), {}); +const tsconfigRootDir = path.dirname(fileURLToPath(import.meta.url)); +const mergeRules = configs => Object.assign({}, ...configs.map(cfg => cfg.rules)); const { strictTypeChecked, stylisticTypeChecked } = tseslint.configs; -const strictTypeCheckedPlugins = mergeConfigs(strictTypeChecked, 'plugins'); -const strictTypeCheckedRules = mergeConfigs(strictTypeChecked, 'rules'); -const stylisticPlugins = mergeConfigs(stylisticTypeChecked, 'plugins'); -const stylisticRules = mergeConfigs(stylisticTypeChecked, 'rules'); +const strictTypeCheckedRules = mergeRules(strictTypeChecked); +const stylisticRules = mergeRules(stylisticTypeChecked); const jsConfigRules = { complexity: 'off', @@ -66,27 +66,32 @@ const jsConfigRules = { destructuring: 'all', }, ], + 'prefer-promise-reject-errors': 'off', radix: 'off', 'require-atomic-updates': 0, 'sort-imports': 'off', 'local-rules/standard-loops': 'error', }; + +const basePlugins = { + header: headerPlugin, + jsdoc: jsdocPlugin, + 'prefer-arrow': preferArrowPlugin, + 'no-null': noNullPlugin, + 'local-rules': localRulesPlugin, +}; + const commonConfig = { plugins: { '@typescript-eslint': tseslint.plugin, 'no-only-tests': noOnlyTestsPlugin, - header: headerPlugin, - jsdoc: jsdocPlugin, - 'prefer-arrow': preferArrowPlugin, - 'no-null': noNullPlugin, - 'local-rules': localRulesPlugin, - ...strictTypeCheckedPlugins, - ...stylisticPlugins, + ...basePlugins, }, languageOptions: { parser: tseslint.parser, parserOptions: { project: true, + tsconfigRootDir, }, }, rules: { @@ -172,6 +177,21 @@ const commonConfig = { }, }; +const tsProjectLanguageOptions = project => ({ + ...commonConfig.languageOptions, + parserOptions: { + project, + tsconfigRootDir, + }, +}); + +const tsProjectConfig = (files, project, rules = {}) => ({ + ...commonConfig, + files, + languageOptions: tsProjectLanguageOptions(project), + ...(Object.keys(rules).length ? { rules: { ...commonConfig.rules, ...rules } } : {}), +}); + export default [ { ignores: [ @@ -188,51 +208,18 @@ export default [ }, pluginJs.configs.recommended, eslintConfigPrettier, - { - ...commonConfig, - files: ['extension/**/*.ts'], - languageOptions: { - ...commonConfig.languageOptions, - parserOptions: { - project: './tsconfig.json', - }, - }, - }, - { - ...commonConfig, - files: ['tooling/**/*.ts'], - languageOptions: { - ...commonConfig.languageOptions, - parserOptions: { - project: './conf/tsconfig.tooling.json', - }, - }, - }, - { - ...commonConfig, - files: ['test/**/*.ts'], - languageOptions: { - ...commonConfig.languageOptions, - parserOptions: { - project: './conf/tsconfig.test.eslint.json', - }, - }, - rules: { - ...commonConfig.rules, - '@typescript-eslint/no-unused-expressions': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - }, - }, + tsProjectConfig(['extension/**/*.ts'], './tsconfig.json'), + tsProjectConfig(['tooling/**/*.ts'], './conf/tsconfig.tooling.json'), + tsProjectConfig(['test/**/*.ts'], './conf/tsconfig.test.eslint.json', { + '@typescript-eslint/no-unused-expressions': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + }), ...tseslint.config({ files: ['extension/js/content_scripts/webmail/**/*.ts'], - languageOptions: { - parserOptions: { - project: './conf/tsconfig.content_scripts.json', - }, - }, + languageOptions: tsProjectLanguageOptions('./conf/tsconfig.content_scripts.json'), }), { files: ['scripts/**/*.js'], @@ -245,11 +232,7 @@ export default [ }, }, plugins: { - header: headerPlugin, - jsdoc: jsdocPlugin, - 'prefer-arrow': preferArrowPlugin, - 'no-null': noNullPlugin, - 'local-rules': localRulesPlugin, + ...basePlugins, }, rules: { ...pluginJs.configs.recommended.rules, ...jsConfigRules }, }, diff --git a/extension/js/common/api/authentication/google/google-oauth.ts b/extension/js/common/api/authentication/google/google-oauth.ts index c3ba9fdb6be..2c33fbb168e 100644 --- a/extension/js/common/api/authentication/google/google-oauth.ts +++ b/extension/js/common/api/authentication/google/google-oauth.ts @@ -89,9 +89,9 @@ export class GoogleOAuth extends OAuth { // temporary use jquery for upload requests https://github.com/FlowCrypt/flowcrypt-browser/issues/5612 if (req.progress?.upload) { // eslint-disable-next-line @typescript-eslint/no-deprecated - return (await Api.ajaxWithJquery(req, 'json')) as RT; + return await Api.ajaxWithJquery(req, 'json'); } else { - return (await Api.ajax(req, 'json')) as RT; + return await Api.ajax(req, 'json'); } }; diff --git a/extension/js/common/api/key-server/attester.ts b/extension/js/common/api/key-server/attester.ts index b274ddf1c26..cce4cdb1c7e 100644 --- a/extension/js/common/api/key-server/attester.ts +++ b/extension/js/common/api/key-server/attester.ts @@ -94,7 +94,7 @@ export class Attester extends Api { }; private jsonPost = async (path: string, values: Dict, hdrs?: Dict): Promise => { - return (await Api.apiCall(ATTESTER_API_HOST, path, { data: values, fmt: 'JSON' }, undefined, { 'api-version': '3', ...(hdrs ?? {}) }, 'json')) as RT; + return await Api.apiCall(ATTESTER_API_HOST, path, { data: values, fmt: 'JSON' }, undefined, { 'api-version': '3', ...(hdrs ?? {}) }, 'json'); }; private pubCall = async (resource: string, data?: string, hdrs?: Dict): Promise => { diff --git a/extension/js/common/api/shared/api.ts b/extension/js/common/api/shared/api.ts index 4f561ed15d6..2e490f3e9c1 100644 --- a/extension/js/common/api/shared/api.ts +++ b/extension/js/common/api/shared/api.ts @@ -413,7 +413,7 @@ export class Api { headers?: AjaxHeaders, resFmt?: T ): Promise> { - progress = progress || ({} as ProgressCbs); + progress = progress || {}; let formattedData: FormData | string | undefined; let dataPart: AjaxParams = { method: 'GET' }; if (values) { diff --git a/extension/js/common/browser/browser-extension.ts b/extension/js/common/browser/browser-extension.ts index a9990298110..99177e3530f 100644 --- a/extension/js/common/browser/browser-extension.ts +++ b/extension/js/common/browser/browser-extension.ts @@ -5,6 +5,7 @@ import { Dict } from '../core/common.js'; import { FlatTypes } from '../platform/store/abstract-store.js'; import { CatchHelper } from '../platform/catch-helper.js'; +import { Catch } from '../platform/catch.js'; export class BrowserExtension { // todo - move extension-specific common.js code here @@ -14,14 +15,14 @@ export class BrowserExtension { try { bugReport.error = JSON.stringify(error, undefined, 2); } catch (e) { - bugReport.error_as_string = String(error); - bugReport.error_serialization_error = String(e); + bugReport.error_as_string = Catch.stringify(error); + bugReport.error_serialization_error = Catch.stringify(e); } try { bugReport.details = JSON.stringify(details, undefined, 2); } catch (e) { - bugReport.details_as_string = String(details as unknown); - bugReport.details_serialization_error = String(e); + bugReport.details_as_string = Catch.stringify(details); + bugReport.details_serialization_error = Catch.stringify(e); } let result = ''; for (const k of Object.keys(bugReport)) { diff --git a/extension/js/common/core/common.ts b/extension/js/common/core/common.ts index b75e9ccab43..47935789eff 100644 --- a/extension/js/common/core/common.ts +++ b/extension/js/common/core/common.ts @@ -137,8 +137,38 @@ export class Str { return list.map(x => Str.formatEmailWithOptionalNameEx(x, forceBrackets)).join(', '); }; + public static stringify = (obj: unknown, space?: number): string => { + if (typeof obj === 'object') { + try { + return JSON.stringify(obj, undefined, space) ?? ''; + } catch { + return '[unstringifiable object]'; + } + } + if (typeof obj === 'function') { + return `[function ${obj.name || 'anonymous'}]`; + } + if (typeof obj === 'undefined') { + return ''; + } + if (typeof obj === 'symbol') { + return obj.description ?? ''; + } + switch (typeof obj) { + case 'string': + return obj; + case 'number': + return obj.toString(); + case 'boolean': + return obj ? 'true' : 'false'; + case 'bigint': + return obj.toString(); + } + return ''; + }; + public static prettyPrint = (obj: unknown) => { - return typeof obj === 'object' ? JSON.stringify(obj, undefined, 2).replace(/ /g, ' ').replace(/\n/g, '
') : String(obj as unknown); + return Str.stringify(obj, 2).replace(/ /g, ' ').replace(/\n/g, '
'); }; public static normalizeSpaces = (str: string) => { diff --git a/extension/js/common/downloader.ts b/extension/js/common/downloader.ts index 0fc92759e44..4aa3d988079 100644 --- a/extension/js/common/downloader.ts +++ b/extension/js/common/downloader.ts @@ -56,7 +56,7 @@ export class Downloader { resolve({ result: download }); }) .catch((e: unknown) => { - reject(e as Error); + reject(e instanceof Error ? e : new Error(Catch.stringify(e))); }); }); }; @@ -87,7 +87,7 @@ export class Downloader { resolve(msg.raw || ''); }) .catch((e: unknown) => { - reject(e as Error); + reject(e instanceof Error ? e : new Error(Catch.stringify(e))); }); }); }; @@ -108,7 +108,7 @@ export class Downloader { resolve(msg); }) .catch((e: unknown) => { - reject(e as Error); + reject(e instanceof Error ? e : new Error(Catch.stringify(e))); }); }); }; diff --git a/extension/js/common/message-renderer.ts b/extension/js/common/message-renderer.ts index 46928530710..095850e4d7d 100644 --- a/extension/js/common/message-renderer.ts +++ b/extension/js/common/message-renderer.ts @@ -446,7 +446,7 @@ export class MessageRenderer { resolve(await this.processedMessages.await(msgId, processed)); }) .catch((e: unknown) => { - reject(e as Error); + reject(e instanceof Error ? e : new Error(Catch.stringify(e))); }); }); }; diff --git a/extension/js/common/platform/catch.ts b/extension/js/common/platform/catch.ts index 77ed6dffba9..3da2f64f32c 100644 --- a/extension/js/common/platform/catch.ts +++ b/extension/js/common/platform/catch.ts @@ -4,7 +4,7 @@ import type { ExternalService as IExternalService } from '../api/account-servers/external-service.js'; import { Env } from '../browser/env.js'; -import { Url } from '../core/common.js'; +import { Str, Url } from '../core/common.js'; import { FLAVOR, VERSION } from '../core/const.js'; import { CatchHelper } from './catch-helper.js'; import { ErrorReport, UnreportableError } from './error-report.js'; @@ -49,14 +49,10 @@ export class Catch { if (e instanceof Error) { return `[typeof:Error:${e.name}] ${e.message}\n\n${e.stack}`; } - if (typeof e === 'string') { - return `[typeof:string] ${e}`; - } - try { - return `[typeof:${typeof e}:${String(e)}] ${JSON.stringify(e)}`; - } catch { - return `[unstringifiable typeof:${typeof e}:${String(e)}]`; + if (typeof e === 'object') { + return `[typeof:object:${Object.prototype.toString.call(e)}] ${Str.stringify(e)}`; } + return `[typeof:${typeof e}] ${Str.stringify(e)}`; } public static hasStack(e: unknown): e is ObjWithStack { @@ -315,7 +311,7 @@ export class Catch { private static formExceptionFromThrown(thrown: unknown, errMsg?: string, url?: string, line?: number, col?: number, isManuallyCalled?: boolean): Error { let exception: Error; if (typeof thrown !== 'object') { - exception = new Error(`THROWN_NON_OBJECT[${typeof thrown}]: ${String(thrown as unknown)}`); + exception = new Error(`THROWN_NON_OBJECT[${typeof thrown}]: ${Catch.stringify(thrown)}`); } else if (errMsg && url && typeof line !== 'undefined' && !col && !thrown && !isManuallyCalled) { exception = new Error(`LIMITED_ERROR: ${errMsg}`); } else if (thrown instanceof Error) { diff --git a/package-lock.json b/package-lock.json index 3502f17b35d..ee7a8004a77 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,8 +16,8 @@ "@zxcvbn-ts/language-common": "^3.0.4", "@zxcvbn-ts/language-en": "^3.0.2", "bootstrap": "^5.3.3", - "dompurify": "3.4.0", - "filesize": "11.0.16", + "dompurify": "3.4.1", + "filesize": "11.0.17", "fs-extra": "^11.3.4", "globby": "^16.2.0", "jquery": "^4.0.0", @@ -30,8 +30,8 @@ "tap-xunit": "^2.4.1" }, "devDependencies": { - "@openpgp/web-stream-tools": "0.3.0", - "@tony.ganchev/eslint-plugin-header": "^3.4.3", + "@openpgp/web-stream-tools": "0.3.1", + "@tony.ganchev/eslint-plugin-header": "^3.4.4", "@types/chai": "5.2.3", "@types/chai-as-promised": "8.0.2", "@types/chrome": "0.1.40", @@ -55,13 +55,13 @@ "mailparser": "3.9.8", "mkdirp": "3.0.1", "openpgp": "6.3.0", - "pdfjs-dist": "5.6.205", + "pdfjs-dist": "5.7.284", "prettier": "^3.8.3", "puppeteer": "24.42.0", - "stylelint": "17.8.0", + "stylelint": "17.9.1", "stylelint-config-standard": "40.0.0", "typescript": "6.0.3", - "typescript-eslint": "8.58.2", + "typescript-eslint": "8.59.1", "undici-types": "^8.1.0", "web-ext": "10.1.0", "webpack-cli": "^7.0.2" @@ -863,9 +863,9 @@ "license": "CC0-1.0" }, "node_modules/@napi-rs/canvas": { - "version": "0.1.99", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.99.tgz", - "integrity": "sha512-zN4eQlK3eBf7aJBcTHZilpBH3tDekBzPMIWC8r0s94Ecl73XfOyFi4w7yKFMRVUT0lvNQjtOL8YSrwqQj6mZFg==", + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.100.tgz", + "integrity": "sha512-xglYA6q3XO5P3BNJYxVZ1IV7DLVjp1Py6nwag88YntrS+3vKHyYcMqXVS4ZztJmwz2uGvz1FWhI/4LgbR5uQDA==", "dev": true, "license": "MIT", "optional": true, @@ -880,23 +880,23 @@ "url": "https://github.com/sponsors/Brooooooklyn" }, "optionalDependencies": { - "@napi-rs/canvas-android-arm64": "0.1.99", - "@napi-rs/canvas-darwin-arm64": "0.1.99", - "@napi-rs/canvas-darwin-x64": "0.1.99", - "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.99", - "@napi-rs/canvas-linux-arm64-gnu": "0.1.99", - "@napi-rs/canvas-linux-arm64-musl": "0.1.99", - "@napi-rs/canvas-linux-riscv64-gnu": "0.1.99", - "@napi-rs/canvas-linux-x64-gnu": "0.1.99", - "@napi-rs/canvas-linux-x64-musl": "0.1.99", - "@napi-rs/canvas-win32-arm64-msvc": "0.1.99", - "@napi-rs/canvas-win32-x64-msvc": "0.1.99" + "@napi-rs/canvas-android-arm64": "0.1.100", + "@napi-rs/canvas-darwin-arm64": "0.1.100", + "@napi-rs/canvas-darwin-x64": "0.1.100", + "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.100", + "@napi-rs/canvas-linux-arm64-gnu": "0.1.100", + "@napi-rs/canvas-linux-arm64-musl": "0.1.100", + "@napi-rs/canvas-linux-riscv64-gnu": "0.1.100", + "@napi-rs/canvas-linux-x64-gnu": "0.1.100", + "@napi-rs/canvas-linux-x64-musl": "0.1.100", + "@napi-rs/canvas-win32-arm64-msvc": "0.1.100", + "@napi-rs/canvas-win32-x64-msvc": "0.1.100" } }, "node_modules/@napi-rs/canvas-android-arm64": { - "version": "0.1.99", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.99.tgz", - "integrity": "sha512-9OCRt8VVxA17m32NWZKyNC2qamdaS/SC5CEOIQwFngRq0DIeVm4PDal+6Ljnhqm2whZiC63DNuKZ4xSp2nbj9w==", + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.100.tgz", + "integrity": "sha512-hjhCKhntPv9+t4ckHymdx0phYNcVW+GKQR6Lzw2zE+pOVjOplSmtx9nNNknTjbEDLcuLZqA1y8ufKg1XfgftzQ==", "cpu": [ "arm64" ], @@ -915,9 +915,9 @@ } }, "node_modules/@napi-rs/canvas-darwin-arm64": { - "version": "0.1.99", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.99.tgz", - "integrity": "sha512-lupMDMy1+H38dhyCcLirOKKVUyzzlxi7j7rGPLI3vViMHOoPjcXO1b10ivy+ad+q6MiwHfoLjKTCoLke5ySOBg==", + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.100.tgz", + "integrity": "sha512-2PcswRaC7Ly645DGt88///zuFDhJxJYdKAs1uU3mfk1atYkXufgcgLfBpk6Tm12nCQBaNt1wpybuPZ4qOhTo8A==", "cpu": [ "arm64" ], @@ -936,9 +936,9 @@ } }, "node_modules/@napi-rs/canvas-darwin-x64": { - "version": "0.1.99", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.99.tgz", - "integrity": "sha512-fdz02t4w8n6Ii/rYhWig6STb/zcTmCC/6YZTGmjoDeidDwn9Wf0ukQVynhCPEs29vqUc66wHZKsuIgMs9tycCg==", + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.100.tgz", + "integrity": "sha512-ePNZtj7pNIva/siZMg+HmbeozkIjqUIYdoymH8HaA3qK7LfzFN4WMBM8G6HQ9ZC+H3+Dnn5pqtiXpgLykaPOhw==", "cpu": [ "x64" ], @@ -957,9 +957,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { - "version": "0.1.99", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.99.tgz", - "integrity": "sha512-w4FwVwlNo00ezeRhfY62IVIyt6G3u8wodkPtiqWc52BUHx+VDBUM2vkS3ogfANaLI7hnf3s6WK4LyZVUjBg1lA==", + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.100.tgz", + "integrity": "sha512-d5cDB48oWFGU8/XPhUOFAlySgb/VAu7D+s8fi55K1Pcfg8aPplHWqMgibhVLU8ky7Pyg/fuiVLz4Nf3JrSTuUA==", "cpu": [ "arm" ], @@ -978,9 +978,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm64-gnu": { - "version": "0.1.99", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.99.tgz", - "integrity": "sha512-8JvHeexKQ8c7g0q7YJ29NVQwnf1ePghP9ys9ZN0R0qzyqJQ9Uw6N9qnDINArlm3IYHexB7LjzArIfhQiqSDGvQ==", + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.100.tgz", + "integrity": "sha512-rDxgxRu69RvDlX/bh9o22DxLsGr8EqsNgotL9+RwQE1S0b0cqeatqsw6aW45mukm0B42DIAaAacKaYQ8cqS1nw==", "cpu": [ "arm64" ], @@ -1002,9 +1002,9 @@ } }, "node_modules/@napi-rs/canvas-linux-arm64-musl": { - "version": "0.1.99", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.99.tgz", - "integrity": "sha512-Z+6nyLdJXWzLPVxi4H6g9TJop4DwN3KSgHWto5JCbZV5/uKoVqcSynPs0tGlUHOoWI8S8tEvJspz51GQkvr07w==", + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.100.tgz", + "integrity": "sha512-K3mDW66N+xT2/V439u1alFANiBUjdEx2gLiNYnCmUsva5jZMxWTjafBYwTzYK+EMFMHrUoabuU+T1BIP5CgbYQ==", "cpu": [ "arm64" ], @@ -1026,9 +1026,9 @@ } }, "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { - "version": "0.1.99", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.99.tgz", - "integrity": "sha512-jAnfOUv4IO1l8Levk5t85oVtEBOXLa07KnIUgWo1CDlPxiqpxS3uBfiE38Lvj/CQgHaNF6Nxk/SaemwLgsVJgw==", + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.100.tgz", + "integrity": "sha512-mooqUBTIsccZpnoQC4NgrC1v6C1vof39etLNMnBwCY+p0gajWJvAHLGQ6g/gGyS5YrpDW+GefSN4+Cvcr08UWw==", "cpu": [ "riscv64" ], @@ -1050,9 +1050,9 @@ } }, "node_modules/@napi-rs/canvas-linux-x64-gnu": { - "version": "0.1.99", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.99.tgz", - "integrity": "sha512-mIkXw3fGmbYyFjSmfWEvty4jN+rwEOmv0+Dy9bRvvTzLYWCgm3RMgUEQVfAKFw96nIRFnyNZiK83KNQaVVFjng==", + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.100.tgz", + "integrity": "sha512-1eCvkDCazm7FFhsT7DfGOdSaHgZVK3bt/dSBl5EWHOWmnz+I7j8tPseJqqD81NF+MH21jKUK4wQSDjN0mdhnTg==", "cpu": [ "x64" ], @@ -1074,9 +1074,9 @@ } }, "node_modules/@napi-rs/canvas-linux-x64-musl": { - "version": "0.1.99", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.99.tgz", - "integrity": "sha512-f3Uz2P0RgrtBHISxZqr6yiYXJlTDyCVBumDacxo+4AmSg7z0HiqYZKGWC/gszq3fbPhyQUya1W2AEteKxT9Y6A==", + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.100.tgz", + "integrity": "sha512-20arT6lnI19S68qNlii73TSEDbECNgzMz2EpldC1V3mZFuRkeujXkcebRk0LRJe9SEUAooYiLokfMViY8IX7yA==", "cpu": [ "x64" ], @@ -1098,9 +1098,9 @@ } }, "node_modules/@napi-rs/canvas-win32-arm64-msvc": { - "version": "0.1.99", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.99.tgz", - "integrity": "sha512-XE6KUkfqRsCNejcoRMiMr3RaUeObxNf6y7dut3hrq2rn7PzfRTZgrjF1F/B2C7FcdgqY/vSHWpQeMuNz1vTNHg==", + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.100.tgz", + "integrity": "sha512-DZFFT1wIAg37LJw37yhMRFfjATd3vTQzjZ1Yki8u2vhO6Hi5VE6BVaGQ1aaDu7xb4iMErz+9EOwjpS7xcxFeBw==", "cpu": [ "arm64" ], @@ -1119,9 +1119,9 @@ } }, "node_modules/@napi-rs/canvas-win32-x64-msvc": { - "version": "0.1.99", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.99.tgz", - "integrity": "sha512-plMYGVbc/vmmPF9MtmHbwNk1rL1Aj53vQZt+Gnv1oZn6gmd9jEHHJ0n9Nd2nxa5sKH7TS5IjkCDM6289O0d6PQ==", + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.100.tgz", + "integrity": "sha512-MyT1j3mHC2+Lu4pBi9mKyMJhtP6U7k7EldY7sj/uS5gJA65gTXt8MefJQXLJo5d/vZbuWmfxzkEUNc/urV3pHA==", "cpu": [ "x64" ], @@ -1175,9 +1175,9 @@ } }, "node_modules/@openpgp/web-stream-tools": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@openpgp/web-stream-tools/-/web-stream-tools-0.3.0.tgz", - "integrity": "sha512-WGCcIti5uAwySkdny5IJ975Vu6fS45LE9Ce3M7vylIWOZwzL4qFUFclskZ6JU7rQ1zgoze6CQ//QKFc/ML2uqw==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@openpgp/web-stream-tools/-/web-stream-tools-0.3.1.tgz", + "integrity": "sha512-EV+VQ4Dr8b+JmlGnc74FLgx7EhLyydOr4j6s6Hp+2scQh6sLQMs2h+1oEYUIslXcQPicWKG5ZQx+/dua0dgPWA==", "dev": true, "license": "MIT", "engines": { @@ -1470,9 +1470,9 @@ } }, "node_modules/@tony.ganchev/eslint-plugin-header": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/@tony.ganchev/eslint-plugin-header/-/eslint-plugin-header-3.4.3.tgz", - "integrity": "sha512-C8oGfJNGGcYl3y55JRS6Sfr9pAtjXyVN4qJllr5g3g6wrDkxcPMQ0654FsZtnQJTXA4swcwtR1cUhCBvW0WDKA==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@tony.ganchev/eslint-plugin-header/-/eslint-plugin-header-3.4.4.tgz", + "integrity": "sha512-O3PDvjikVWECu078bLdRb2HwjVgR+wa7D0GX8gN1A8axlgEc7tordHOoEYcKRVxGcAw7bxXjwiKGXaY17qXD+Q==", "dev": true, "license": "MIT", "peerDependencies": { @@ -1682,17 +1682,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.58.2.tgz", - "integrity": "sha512-aC2qc5thQahutKjP+cl8cgN9DWe3ZUqVko30CMSZHnFEHyhOYoZSzkGtAI2mcwZ38xeImDucI4dnqsHiOYuuCw==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.1.tgz", + "integrity": "sha512-BOziFIfE+6osHO9FoJG4zjoHUcvI7fTNBSpdAwrNH0/TLvzjsk2oo8XSSOT2HhqUyhZPfHv4UOffoJ9oEEQ7Ag==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.58.2", - "@typescript-eslint/type-utils": "8.58.2", - "@typescript-eslint/utils": "8.58.2", - "@typescript-eslint/visitor-keys": "8.58.2", + "@typescript-eslint/scope-manager": "8.59.1", + "@typescript-eslint/type-utils": "8.59.1", + "@typescript-eslint/utils": "8.59.1", + "@typescript-eslint/visitor-keys": "8.59.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -1705,7 +1705,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.58.2", + "@typescript-eslint/parser": "^8.59.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } @@ -1721,16 +1721,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.58.2.tgz", - "integrity": "sha512-/Zb/xaIDfxeJnvishjGdcR4jmr7S+bda8PKNhRGdljDM+elXhlvN0FyPSsMnLmJUrVG9aPO6dof80wjMawsASg==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.1.tgz", + "integrity": "sha512-HDQH9O/47Dxi1ceDhBXdaldtf/WV9yRYMjbjCuNk3qnaTD564qwv61Y7+gTxwxRKzSrgO5uhtw584igXVuuZkA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.58.2", - "@typescript-eslint/types": "8.58.2", - "@typescript-eslint/typescript-estree": "8.58.2", - "@typescript-eslint/visitor-keys": "8.58.2", + "@typescript-eslint/scope-manager": "8.59.1", + "@typescript-eslint/types": "8.59.1", + "@typescript-eslint/typescript-estree": "8.59.1", + "@typescript-eslint/visitor-keys": "8.59.1", "debug": "^4.4.3" }, "engines": { @@ -1746,14 +1746,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.58.2.tgz", - "integrity": "sha512-Cq6UfpZZk15+r87BkIh5rDpi38W4b+Sjnb8wQCPPDDweS/LRCFjCyViEbzHk5Ck3f2QDfgmlxqSa7S7clDtlfg==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.1.tgz", + "integrity": "sha512-+MuHQlHiEr00Of/IQbE/MmEoi44znZHbR/Pz7Opq4HryUOlRi+/44dro9Ycy8Fyo+/024IWtw8m4JUMCGTYxDg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.58.2", - "@typescript-eslint/types": "^8.58.2", + "@typescript-eslint/tsconfig-utils": "^8.59.1", + "@typescript-eslint/types": "^8.59.1", "debug": "^4.4.3" }, "engines": { @@ -1768,14 +1768,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.58.2.tgz", - "integrity": "sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.1.tgz", + "integrity": "sha512-LwuHQI4pDOYVKvmH2dkaJo6YZCSgouVgnS/z7yBPKBMvgtBvyLqiLy9Z6b7+m/TRcX1NFYUqZetI5Y+aT4GEfg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.58.2", - "@typescript-eslint/visitor-keys": "8.58.2" + "@typescript-eslint/types": "8.59.1", + "@typescript-eslint/visitor-keys": "8.59.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1786,9 +1786,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.2.tgz", - "integrity": "sha512-3SR+RukipDvkkKp/d0jP0dyzuls3DbGmwDpVEc5wqk5f38KFThakqAAO0XMirWAE+kT00oTauTbzMFGPoAzB0A==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.1.tgz", + "integrity": "sha512-/0nEyPbX7gRsk0Uwfe4ALwwgxuA66d/l2mhRDNlAvaj4U3juhUtJNq0DsY8M2AYwwb9rEq2hrC3IcIcEt++iJA==", "dev": true, "license": "MIT", "engines": { @@ -1803,15 +1803,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.58.2.tgz", - "integrity": "sha512-Z7EloNR/B389FvabdGeTo2XMs4W9TjtPiO9DAsmT0yom0bwlPyRjkJ1uCdW1DvrrrYP50AJZ9Xc3sByZA9+dcg==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.1.tgz", + "integrity": "sha512-klWPBR2ciQHS3f++ug/mVnWKPjBUo7icEL3FAO1lhAR1Z1i5NQYZ1EannMSRYcq5qCv5wNALlXr6fksRHyYl7w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.58.2", - "@typescript-eslint/typescript-estree": "8.58.2", - "@typescript-eslint/utils": "8.58.2", + "@typescript-eslint/types": "8.59.1", + "@typescript-eslint/typescript-estree": "8.59.1", + "@typescript-eslint/utils": "8.59.1", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -1828,9 +1828,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.2.tgz", - "integrity": "sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.1.tgz", + "integrity": "sha512-ZDCjgccSdYPw5Bxh+my4Z0lJU96ZDN7jbBzvmEn0FZx3RtU1C7VWl6NbDx94bwY3V5YsgwRzJPOgeY2Q/nLG8A==", "dev": true, "license": "MIT", "engines": { @@ -1842,16 +1842,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.2.tgz", - "integrity": "sha512-ELGuoofuhhoCvNbQjFFiobFcGgcDCEm0ThWdmO4Z0UzLqPXS3KFvnEZ+SHewwOYHjM09tkzOWXNTv9u6Gqtyuw==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.1.tgz", + "integrity": "sha512-OUd+vJS05sSkOip+BkZ/2NS8RMxrAAJemsC6vU3kmfLyeaJT0TftHkV9mcx2107MmsBVXXexhVu4F0TZXyMl4g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.58.2", - "@typescript-eslint/tsconfig-utils": "8.58.2", - "@typescript-eslint/types": "8.58.2", - "@typescript-eslint/visitor-keys": "8.58.2", + "@typescript-eslint/project-service": "8.59.1", + "@typescript-eslint/tsconfig-utils": "8.59.1", + "@typescript-eslint/types": "8.59.1", + "@typescript-eslint/visitor-keys": "8.59.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -1870,16 +1870,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.58.2.tgz", - "integrity": "sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.1.tgz", + "integrity": "sha512-3pIeoXhCeYH9FSCBI8P3iNwJlGuzPlYKkTlen2O9T1DSeeg8UG8jstq6BLk+Mda0qup7mgk4z4XL4OzRaxZ8LA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.58.2", - "@typescript-eslint/types": "8.58.2", - "@typescript-eslint/typescript-estree": "8.58.2" + "@typescript-eslint/scope-manager": "8.59.1", + "@typescript-eslint/types": "8.59.1", + "@typescript-eslint/typescript-estree": "8.59.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1894,13 +1894,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.2.tgz", - "integrity": "sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.1.tgz", + "integrity": "sha512-LdDNl6C5iJExcM0Yh0PwAIBb9PrSiCsWamF/JyEZawm3kFDnRoaq3LGE4bpyRao/fWeGKKyw7icx0YxrLFC5Cg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.58.2", + "@typescript-eslint/types": "8.59.1", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -2522,9 +2522,9 @@ } }, "node_modules/addons-linter/node_modules/eslint/node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", "dependencies": { @@ -2787,9 +2787,9 @@ } }, "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, "license": "MIT", "dependencies": { @@ -2823,9 +2823,9 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, "license": "MIT", "peer": true, @@ -3220,9 +3220,9 @@ } }, "node_modules/bare-os": { - "version": "3.8.7", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.8.7.tgz", - "integrity": "sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.9.0.tgz", + "integrity": "sha512-JTjuZyNIDpw+GytMO4a6TK1VXdVKKJr6DRxEHasyuYyShV2deuiHJK/ahGZlebc+SG0/wJCB9XK8gprBGDFi/Q==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3240,9 +3240,9 @@ } }, "node_modules/bare-stream": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.0.tgz", - "integrity": "sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.1.tgz", + "integrity": "sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3267,9 +3267,9 @@ } }, "node_modules/bare-url": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.1.tgz", - "integrity": "sha512-fZapLWNB25gS+etK27NV9KgBNXgo2yeYHuj+OyPblQd6GYAE3JVy6aKxszMV5jhGGFwraXQKA5fldvf3lMyEqw==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.2.tgz", + "integrity": "sha512-/9a2j4ac6ckpmAHvod/ob7x439OAHst/drc2Clnq+reRYd/ovddwcF4LfoxHyNk5AuGBnPg+HqFjmE/Zpq6v0A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3298,9 +3298,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.20", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.20.tgz", - "integrity": "sha512-1AaXxEPfXT+GvTBJFuy4yXVHWJBXa4OdbIebGN/wX5DlsIkU0+wzGnd2lOzokSk51d5LUmqjgBLRLlypLUqInQ==", + "version": "2.10.23", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.23.tgz", + "integrity": "sha512-xwVXGqevyKPsiuQdLj+dZMVjidjJV508TBqexND5HrF89cGdCYCJFB3qhcxRHSeMctdCfbR1jrxBajhDy7o29g==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -3312,9 +3312,9 @@ } }, "node_modules/basic-ftp": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.0.tgz", - "integrity": "sha512-5K9eNNn7ywHPsYnFwjKgYH8Hf8B5emh7JKcPaVjjrMJFQQwGpwowEnZNEtHs7DfR7hCZsmaK3VA4HUK0YarT+w==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.3.1.tgz", + "integrity": "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==", "dev": true, "license": "MIT", "engines": { @@ -3624,9 +3624,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001788", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001788.tgz", - "integrity": "sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==", + "version": "1.0.30001791", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz", + "integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==", "dev": true, "funding": [ { @@ -4567,9 +4567,9 @@ } }, "node_modules/dompurify": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.0.tgz", - "integrity": "sha512-nolgK9JcaUXMSmW+j1yaSvaEaoXYHwWyGJlkoCTghc97KgGDDSnpoU/PlEnw63Ah+TGKFOyY+X5LnxaWbCSfXg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.1.tgz", + "integrity": "sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -4650,9 +4650,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.340", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.340.tgz", - "integrity": "sha512-908qahOGocRMinT2nM3ajCEM99H4iPdv84eagPP3FfZy/1ZGeOy2CZYzjhms81ckOPCXPlW7LkY4XpxD8r1DrA==", + "version": "1.5.344", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz", + "integrity": "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==", "dev": true, "license": "ISC", "peer": true @@ -4712,15 +4712,15 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", - "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz", + "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.3.0" + "tapable": "^2.3.3" }, "engines": { "node": ">=10.13.0" @@ -4805,9 +4805,9 @@ } }, "node_modules/es-module-lexer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", - "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", "dev": true, "license": "MIT", "peer": true @@ -5413,9 +5413,9 @@ "license": "MIT" }, "node_modules/filesize": { - "version": "11.0.16", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-11.0.16.tgz", - "integrity": "sha512-XMcUu0Zxnh0L8rY5b5vrdKKs0H3l3osTp9vNEBulRmwLqYfuQe5SJCagpA0/sGMJx2KHbD+IWOyd6QsJQuYEkQ==", + "version": "11.0.17", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-11.0.17.tgz", + "integrity": "sha512-oHLTvMLw6imZUl1se/RBQrFlyy50nXce4sU7yGR6Qc0JgCwqnfiFsAnEwotdGmfKLD7SArGUk2/5STU0k8LOBQ==", "license": "BSD-3-Clause", "engines": { "node": ">= 10.8.0" @@ -6371,9 +6371,9 @@ } }, "node_modules/ip-address": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", - "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.1.tgz", + "integrity": "sha512-1FMu8/N15Ck1BL551Jf42NYIoin2unWjLQ2Fze/DXryJRl5twqtwNHlO39qERGbIOcKYWHdgRryhOC+NG4eaLw==", "dev": true, "license": "MIT", "engines": { @@ -6827,9 +6827,9 @@ "license": "MIT" }, "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -7123,9 +7123,9 @@ } }, "node_modules/loader-runner": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", - "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.2.tgz", + "integrity": "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==", "dev": true, "license": "MIT", "peer": true, @@ -7733,18 +7733,10 @@ "which": "^2.0.2" } }, - "node_modules/node-readable-to-web-readable-stream": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/node-readable-to-web-readable-stream/-/node-readable-to-web-readable-stream-0.4.2.tgz", - "integrity": "sha512-/cMZNI34v//jUTrI+UIo4ieHAB5EZRY/+7OmXZgBxaWBMcW2tGdceIw06RFxWxrKZ5Jp3sI2i5TsRo+CBhtVLQ==", - "dev": true, - "license": "MIT", - "optional": true - }, "node_modules/node-releases": { - "version": "2.0.37", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", - "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", "dev": true, "license": "MIT", "peer": true @@ -8238,17 +8230,16 @@ } }, "node_modules/pdfjs-dist": { - "version": "5.6.205", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.6.205.tgz", - "integrity": "sha512-tlUj+2IDa7G1SbvBNN74UHRLJybZDWYom+k6p5KIZl7huBvsA4APi6mKL+zCxd3tLjN5hOOEE9Tv7VdzO88pfg==", + "version": "5.7.284", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.7.284.tgz", + "integrity": "sha512-h4EdYQczmGhbOlqc3PPZwxevn7ApdWPbovAuWXOB/DjIyigSnwfy2oze7c6mRcSr9XgLp3eN3EeL4DyySTPMFw==", "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=20.19.0 || >=22.13.0 || >=24" + "node": ">=22.13.0 || >=24" }, "optionalDependencies": { - "@napi-rs/canvas": "^0.1.96", - "node-readable-to-web-readable-stream": "^0.4.2" + "@napi-rs/canvas": "^0.1.100" } }, "node_modules/peberminta": { @@ -8413,9 +8404,9 @@ } }, "node_modules/postcss": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz", - "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==", + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.12.tgz", + "integrity": "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==", "funding": [ { "type": "opencollective", @@ -8739,9 +8730,9 @@ } }, "node_modules/qified/node_modules/hookified": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.1.1.tgz", - "integrity": "sha512-AHb76R16GB5EsPBE2J7Ko5kiEyXwviB9P5SMrAKcuAu4vJPZttViAbj9+tZeaQE5zjDme+1vcHP78Yj/WoAveA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz", + "integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==", "dev": true, "license": "MIT" }, @@ -9105,9 +9096,9 @@ } }, "node_modules/schema-utils/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, "license": "MIT", "peer": true, @@ -9373,13 +9364,13 @@ } }, "node_modules/socks": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", - "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.8.tgz", + "integrity": "sha512-NlGELfPrgX2f1TAAcz0WawlLn+0r3FyhhCRpFFK2CemXenPYvzMWWZINv3eDNo9ucdwme7oCHRY0Jnbs4aIkog==", "dev": true, "license": "MIT", "dependencies": { - "ip-address": "^10.0.1", + "ip-address": "^10.1.1", "smart-buffer": "^4.2.0" }, "engines": { @@ -9575,9 +9566,9 @@ } }, "node_modules/string-width": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", - "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz", + "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==", "dev": true, "license": "MIT", "dependencies": { @@ -9678,9 +9669,9 @@ "license": "MIT" }, "node_modules/stylelint": { - "version": "17.8.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.8.0.tgz", - "integrity": "sha512-oHkld9T60LDSaUQ4CSVc+tlt9eUoDlxhaGWShsUCKyIL14boZfmK5bSphZqx64aiC5tCqX+BsQMTMoSz8D1zIg==", + "version": "17.9.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.9.1.tgz", + "integrity": "sha512-THTmnAPJTrg/JhkTWZlSyrO+HUYMx6ELthIHeMyD2WOKqXIJUFQv2Yxn91bvUrZdbBJaW2dUuQdPST2wcQ6C3g==", "dev": true, "funding": [ { @@ -9694,9 +9685,9 @@ ], "license": "MIT", "dependencies": { - "@csstools/css-calc": "^3.1.1", + "@csstools/css-calc": "^3.2.0", "@csstools/css-parser-algorithms": "^4.0.0", - "@csstools/css-syntax-patches-for-csstree": "^1.1.2", + "@csstools/css-syntax-patches-for-csstree": "^1.1.3", "@csstools/css-tokenizer": "^4.0.0", "@csstools/media-query-list-parser": "^5.0.0", "@csstools/selector-resolve-nested": "^4.0.0", @@ -9963,9 +9954,9 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, "license": "MIT", "dependencies": { @@ -10126,9 +10117,9 @@ } }, "node_modules/tapable": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz", - "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", "dev": true, "license": "MIT", "peer": true, @@ -10206,9 +10197,9 @@ } }, "node_modules/terser": { - "version": "5.46.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.1.tgz", - "integrity": "sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==", + "version": "5.46.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.2.tgz", + "integrity": "sha512-uxfo9fPcSgLDYob/w1FuL0c99MWiJDnv+5qXSQc5+Ki5NjVNsYi66INnMFBjf6uFz6OnX12piJQPF4IpjJTNTw==", "dev": true, "license": "BSD-2-Clause", "peer": true, @@ -10226,9 +10217,9 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz", - "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-UYhptBwhWvfIjKd/UuFo6D8uq9xpGLDK+z8EDsj/zWhrTaH34cKEbrkMKfV5YWqGBvAYA3tlzZbs2R+qYrbQJA==", "dev": true, "license": "MIT", "peer": true, @@ -10448,9 +10439,9 @@ } }, "node_modules/typed-query-selector": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.1.tgz", - "integrity": "sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==", + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.2.tgz", + "integrity": "sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ==", "dev": true, "license": "MIT" }, @@ -10476,16 +10467,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.58.2.tgz", - "integrity": "sha512-V8iSng9mRbdZjl54VJ9NKr6ZB+dW0J3TzRXRGcSbLIej9jV86ZRtlYeTKDR/QLxXykocJ5icNzbsl2+5TzIvcQ==", + "version": "8.59.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.1.tgz", + "integrity": "sha512-xqDcFVBmlrltH64lklOVp1wYxgJr6LVdg3NamBgH2OOQDLFdTKfIZXF5PfghrnXQKXZGTQs8tr1vL7fJvq8CTQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.58.2", - "@typescript-eslint/parser": "8.58.2", - "@typescript-eslint/typescript-estree": "8.58.2", - "@typescript-eslint/utils": "8.58.2" + "@typescript-eslint/eslint-plugin": "8.59.1", + "@typescript-eslint/parser": "8.59.1", + "@typescript-eslint/typescript-estree": "8.59.1", + "@typescript-eslint/utils": "8.59.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -10999,9 +10990,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz", - "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.4.0.tgz", + "integrity": "sha512-gHwIe1cgBvvfLeu1Yz/dcFpmHfKDVxxyqI+kzqmuxZED81z2ChxpyqPaWcNqigPywhaEke7AjSGga+kxY55gjQ==", "dev": true, "license": "MIT", "peer": true, diff --git a/package.json b/package.json index bb53549d1a3..8cba84a0cf5 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,8 @@ "graceful-fs": "4.1.13" }, "devDependencies": { - "@openpgp/web-stream-tools": "0.3.0", - "@tony.ganchev/eslint-plugin-header": "^3.4.3", + "@openpgp/web-stream-tools": "0.3.1", + "@tony.ganchev/eslint-plugin-header": "^3.4.4", "@types/chai": "5.2.3", "@types/chai-as-promised": "8.0.2", "@types/chrome": "0.1.40", @@ -31,13 +31,13 @@ "mailparser": "3.9.8", "mkdirp": "3.0.1", "openpgp": "6.3.0", - "pdfjs-dist": "5.6.205", + "pdfjs-dist": "5.7.284", "prettier": "^3.8.3", "puppeteer": "24.42.0", - "stylelint": "17.8.0", + "stylelint": "17.9.1", "stylelint-config-standard": "40.0.0", "typescript": "6.0.3", - "typescript-eslint": "8.58.2", + "typescript-eslint": "8.59.1", "undici-types": "^8.1.0", "web-ext": "10.1.0", "webpack-cli": "^7.0.2" @@ -49,8 +49,8 @@ "@zxcvbn-ts/language-common": "^3.0.4", "@zxcvbn-ts/language-en": "^3.0.2", "bootstrap": "^5.3.3", - "dompurify": "3.4.0", - "filesize": "11.0.16", + "dompurify": "3.4.1", + "filesize": "11.0.17", "fs-extra": "^11.3.4", "globby": "^16.2.0", "jquery": "^4.0.0", diff --git a/test/source/browser/browser-handle.ts b/test/source/browser/browser-handle.ts index 02b7c08ca76..7c71f60b9fa 100644 --- a/test/source/browser/browser-handle.ts +++ b/test/source/browser/browser-handle.ts @@ -162,7 +162,7 @@ export class BrowserHandle { }; this.browser.on('targetcreated', listener); triggeringAction().catch((e: unknown) => { - console.error(e as Error); + console.error(e); }); }); }; diff --git a/test/source/mock/google/google-data.ts b/test/source/mock/google/google-data.ts index 8090ec5d4da..96734457cf8 100644 --- a/test/source/mock/google/google-data.ts +++ b/test/source/mock/google/google-data.ts @@ -394,7 +394,7 @@ export class GoogleData { id, threadId: parseResult.threadId ?? null, // eslint-disable-line no-null/no-null historyId: '', - labelIds: ['SENT' as GmailMsg$labelId], + labelIds: ['SENT'], payload: { mimeType, headers, diff --git a/test/source/mock/lib/api.ts b/test/source/mock/lib/api.ts index f2b4df5e227..ee864d3a1eb 100644 --- a/test/source/mock/lib/api.ts +++ b/test/source/mock/lib/api.ts @@ -15,6 +15,10 @@ import { SksConfig, getMockSksEndpoints } from '../sks/sks-endpoints'; import { getMockCustomerUrlFesEndpoints } from '../fes/customer-url-fes-endpoints'; import { getMockS3Endpoints } from '../s3/s3-endpoints'; +const toError = (e: unknown): Error => { + return e instanceof Error ? e : new Error(String(e)); +}; + export class HttpAuthErr extends Error {} export class HttpClientErr extends Error { public constructor( @@ -163,13 +167,13 @@ export class Api { }); } catch (e) { console.error('exception when starting mock server', e); - reject(e as Error); + reject(toError(e)); } }); }; public close = (): Promise => { - return new Promise((resolve, reject) => this.server.close((err: unknown) => (err ? reject(err as Error) : resolve()))); + return new Promise((resolve, reject) => this.server.close((err: unknown) => (err ? reject(toError(err)) : resolve()))); }; // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -278,7 +282,7 @@ export class Api { try { resolve(Buffer.concat(body)); } catch (e) { - reject(e as Error); + reject(toError(e)); } }); }); diff --git a/test/source/platform/require.ts b/test/source/platform/require.ts index fe793c61043..5d406a1fbd4 100644 --- a/test/source/platform/require.ts +++ b/test/source/platform/require.ts @@ -6,7 +6,7 @@ import type OpenPGP from 'openpgp'; export const requireOpenpgp = (): typeof OpenPGP => { // eslint-disable-next-line @typescript-eslint/no-require-imports - return require('openpgp') as unknown as typeof OpenPGP; + return require('openpgp') as typeof OpenPGP; }; /* eslint-disable @typescript-eslint/no-explicit-any */ diff --git a/test/source/tests/setup.ts b/test/source/tests/setup.ts index 257ffdde63a..f571256f370 100644 --- a/test/source/tests/setup.ts +++ b/test/source/tests/setup.ts @@ -2250,7 +2250,7 @@ AN8G3r5Htj8olot+jm9mIa5XLXWzMNUZgg== const title = await settingsPage.read('@container-overlay-prompt-text'); expect(title).to.contain( 'Failed to store newly generated key on FlowCrypt Email Key Manager, ' + - 'No key has been generated for reject.client.keypair@key-manager-autogen.flowcrypt.test yet. Please ask your administrator.' + 'No key has been generated for reject.client.keypair@key-manager-autogen.flowcrypt.test yet. Please ask your administrator.' ); await settingsPage.click('@action-show-overlay-details'); await settingsPage.waitAll('@container-overlay-details'); @@ -2258,7 +2258,7 @@ AN8G3r5Htj8olot+jm9mIa5XLXWzMNUZgg== const details = await settingsPage.read('@container-overlay-details'); expect(details).to.contain( `405 when PUT-ing https://localhost:${t.context.urls?.port}/flowcrypt-email-key-manager/v1/keys/private string: ` + - 'privateKey -> No key has been generated for reject.client.keypair@key-manager-autogen.flowcrypt.test yet' + 'privateKey -> No key has been generated for reject.client.keypair@key-manager-autogen.flowcrypt.test yet' ); expect(details).to.not.contain('PRIVATE KEY'); }) @@ -2379,7 +2379,8 @@ AN8G3r5Htj8olot+jm9mIa5XLXWzMNUZgg== const rawMessage = await Parse.convertBase64ToMimeMsg(sentMsg.raw!); const fromEmailHeaderLine = rawMessage.headerLines[2].line; const toEmailHeaderLine = rawMessage.headerLines[3].line; - const subjectLine = String(rawMessage.headers.get('subject') as unknown); + const subjectHeader = rawMessage.headers.get('subject'); + const subjectLine = typeof subjectHeader === 'string' ? subjectHeader : JSON.stringify(subjectHeader); const adminPrivateKey = testConstants.prvBackupToDesignatedMailboxTestPrvKey; const parsedAdminPrivateKey = await KeyUtil.parse(adminPrivateKey); const passphrase = 'super hard to guess passphrase'; diff --git a/tsconfig.json b/tsconfig.json index 342552dac31..62dc9d7c0cb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,9 @@ "forceConsistentCasingInFileNames": true, "allowSyntheticDefaultImports": true, "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, "noUnusedLocals": true, + "noEmitOnError": true, "strictFunctionTypes": false, "sourceMap": false, "checkJs": false,