diff --git a/eslint.config.mjs b/eslint.config.mjs index 969ef0ca3ed..b7f0c6bf8cd 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -98,6 +98,7 @@ const commonConfig = { '@typescript-eslint/consistent-type-definitions': 'off', '@typescript-eslint/dot-notation': 'error', '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-unnecessary-type-conversion': 'warn', '@typescript-eslint/explicit-member-accessibility': [ 'error', { diff --git a/extension/chrome/elements/add_pubkey.ts b/extension/chrome/elements/add_pubkey.ts index 00092ccc676..2b6061ccc8d 100644 --- a/extension/chrome/elements/add_pubkey.ts +++ b/extension/chrome/elements/add_pubkey.ts @@ -69,7 +69,7 @@ View.run( await Ui.modal.warning(`some keys could not be processed due to errors:\n${errs.map(e => `-> ${e.message}\n`).join('')}`); } $('.copy_from_email').val(''); - $('.pubkey').val(String(KeyUtil.armor(keys[0]))); + $('.pubkey').val(KeyUtil.armor(keys[0])); $('.action_ok').trigger('click'); } else if (errs.length) { await Ui.modal.error(`error processing public keys:\n${errs.map(e => `-> ${e.message}\n`).join('')}`); diff --git a/extension/chrome/elements/compose-modules/compose-quote-module.ts b/extension/chrome/elements/compose-modules/compose-quote-module.ts index e2424a5c616..9e9ffd11a86 100644 --- a/extension/chrome/elements/compose-modules/compose-quote-module.ts +++ b/extension/chrome/elements/compose-modules/compose-quote-module.ts @@ -211,7 +211,7 @@ export class ComposeQuoteModule extends ViewModule { } const text = this.messageToReplyOrForward.text; const from = Str.parseEmail(this.messageToReplyOrForward.headers.from || '').email; - const date = new Date(String(this.messageToReplyOrForward.headers.date)); + const date = new Date(this.messageToReplyOrForward.headers.date); const dateStr = Str.fromDate(date).replace(' ', ' at '); const rtl = new RegExp('[' + Str.rtlChars + ']').exec(text); const dirAttr = `dir="${rtl ? 'rtl' : 'ltr'}"`; diff --git a/extension/chrome/elements/compose-modules/compose-recipients-module.ts b/extension/chrome/elements/compose-modules/compose-recipients-module.ts index 7f4fa07e80f..82563dc0e26 100644 --- a/extension/chrome/elements/compose-modules/compose-recipients-module.ts +++ b/extension/chrome/elements/compose-modules/compose-recipients-module.ts @@ -300,7 +300,7 @@ export class ComposeRecipientsModule extends ViewModule { this.view.S.now('send_btn_text').text(this.BTN_LOADING); this.view.sizeModule.setInputTextHeightManuallyIfNeeded(); recipientEl.evaluating = (async () => { - this.view.errModule.debug(`evaluateRecipients.evaluat.recipient.email(${String(recipientEl.email)})`); + this.view.errModule.debug(`evaluateRecipients.evaluat.recipient.email(${recipientEl.email})`); this.view.errModule.debug(`evaluateRecipients.evaluating.recipient.status(${recipientEl.status})`); this.view.errModule.debug(`evaluateRecipients.evaluating: calling getUpToDatePubkeys`); const info = await this.view.storageModule.getUpToDatePubkeys(recipientEl.email); diff --git a/extension/chrome/elements/pgp_block_modules/pgp-block-attachments-module.ts b/extension/chrome/elements/pgp_block_modules/pgp-block-attachments-module.ts index 2270e7644e9..1d5115e2ccc 100644 --- a/extension/chrome/elements/pgp_block_modules/pgp-block-attachments-module.ts +++ b/extension/chrome/elements/pgp_block_modules/pgp-block-attachments-module.ts @@ -30,19 +30,19 @@ export class PgpBlockViewAttachmentsModule { const size = filesize(attachments[i].length); const htmlContent = `${Xss.escape(nameVisible)}   ${size}`; - const attachment = $(``); + const attachment = $(``); attachment.attr('title', name); Xss.sanitizeAppend(attachment, htmlContent); if (isEncrypted) { attachment.addClass('preview-attachment'); attachment.attr('data-test', 'preview-attachment'); attachment.append( - `` + }" title="DOWNLOAD">` ); // xss-escaped } else { - attachment.attr('data-test', `download-attachment-${Number(i)}`); + attachment.attr('data-test', `download-attachment-${i}`); attachment.addClass('download-attachment'); } $('#attachments').append(attachment); // xss-escaped diff --git a/extension/js/common/api/email-provider/gmail/gmail.ts b/extension/js/common/api/email-provider/gmail/gmail.ts index cfdd4bc595c..083031c2171 100644 --- a/extension/js/common/api/email-provider/gmail/gmail.ts +++ b/extension/js/common/api/email-provider/gmail/gmail.ts @@ -51,7 +51,7 @@ export class Gmail extends EmailProviderApi implements EmailProviderInterface { method: 'GET', data: { labelIds: labelId !== 'ALL' ? labelId : undefined, - includeSpamTrash: Boolean(labelId === 'SPAM' || labelId === 'TRASH'), + includeSpamTrash: labelId === 'SPAM' || labelId === 'TRASH', // pageToken: page_token, // q, // maxResults diff --git a/extension/js/common/api/shared/api-error.ts b/extension/js/common/api/shared/api-error.ts index 8cc8b51d064..0246ba57839 100644 --- a/extension/js/common/api/shared/api-error.ts +++ b/extension/js/common/api/shared/api-error.ts @@ -101,7 +101,7 @@ export class AjaxErr extends ApiCallErr { const redactedPayload = AjaxErr.redactSensitiveData(Catch.stringify(req.data).substring(0, 1000)); stack += `\n\nresponseText(0, 1000):\n${redactedRes}\n\npayload(0, 1000):\n${redactedPayload}`; } - const message = `${String(xhr.statusText || '(no status text)')}: ${String(xhr.status || -1)} when ${ApiCallErr.describeApiAction(req)} -> ${ + const message = `${xhr.statusText || '(no status text)'}: ${xhr.status || -1} when ${ApiCallErr.describeApiAction(req)} -> ${ resMsg || '(no standard err msg)' }`; return new AjaxErr(message, stack, status, CatchHelper.censoredUrl(req.url), responseText, xhr.statusText || '(no status text)', resMsg, resDetails); diff --git a/extension/js/common/browser/browser.ts b/extension/js/common/browser/browser.ts index 0fbf54790bc..3951ccb20e2 100644 --- a/extension/js/common/browser/browser.ts +++ b/extension/js/common/browser/browser.ts @@ -10,7 +10,7 @@ import { BgUtils } from '../../service_worker/bgutils.js'; export class Browser { public static objUrlCreate = (content: Uint8Array | string) => { - return URL.createObjectURL(new Blob([content], { type: 'application/octet-stream' })); + return URL.createObjectURL(new Blob([content as BlobPart], { type: 'application/octet-stream' })); }; public static saveToDownloads = (attachment: Attachment) => { diff --git a/extension/js/common/core/crypto/smime/smime-key.ts b/extension/js/common/core/crypto/smime/smime-key.ts index 043294971b8..c2fcc3aec9c 100644 --- a/extension/js/common/core/crypto/smime/smime-key.ts +++ b/extension/js/common/core/crypto/smime/smime-key.ts @@ -107,7 +107,7 @@ export class SmimeKey { } p7.addRecipient(certificate); } - p7.content = this.forge.util.createBuffer(input); + p7.content = this.forge.util.createBuffer(new Uint8Array(input)); p7.encrypt(); let data: Uint8Array; if (armor) { @@ -151,7 +151,7 @@ export class SmimeKey { type: this.forge.pki.oids.messageDigest }] */ }); - p7.content = this.forge.util.createBuffer(data); + p7.content = this.forge.util.createBuffer(new Uint8Array(data)); p7.sign(); return SmimeKey.messageToDer(p7); } @@ -413,7 +413,7 @@ export class SmimeKey { if (!eku) { return false; } - return !!(eku as { emailProtection: boolean }).emailProtection; + return (eku as { emailProtection: boolean }).emailProtection; } private static dateToNumber(date: Date): undefined | number { diff --git a/extension/js/common/core/mime.ts b/extension/js/common/core/mime.ts index 4edcf2a8ac0..97c4387d40b 100644 --- a/extension/js/common/core/mime.ts +++ b/extension/js/common/core/mime.ts @@ -192,7 +192,7 @@ export class Mime { const parser = new MimeParser(); const leafNodes: { [key: string]: MimeParserNode } = {}; parser.onbody = (node: MimeParserNode) => { - const path = String(node.path.join('.')); + const path = node.path.join('.'); if (typeof leafNodes[path] === 'undefined') { leafNodes[path] = node; } @@ -343,7 +343,7 @@ export class Mime { let from: string | undefined; const getHdrValAsArr = (hdr: MimeContentHeader) => typeof hdr === 'string' ? ([hdr].map(h => Str.parseEmail(h).email).filter(e => !!e) as string[]) : hdr.map(h => h.address); - const getHdrValAsStr = (hdr: MimeContentHeader) => Str.parseEmail((Array.isArray(hdr) ? hdr[0]?.address : String(hdr || '')) || '').email; + const getHdrValAsStr = (hdr: MimeContentHeader) => Str.parseEmail((Array.isArray(hdr) ? hdr[0]?.address : hdr || '') || '').email; for (const hdrName of headersNames) { const header = parsedMimeMsg.headers[hdrName]; if (header) { @@ -427,13 +427,13 @@ export class Mime { if (node.headers['content-disposition']?.[0]) { const header = node.headers['content-disposition'][0]; if (header.params?.filename) { - return String(header.params.filename); + return header.params.filename; } } if (node.headers['content-type']?.[0]) { const header = node.headers['content-type'][0]; if (header.params?.name) { - return String(header.params.name); + return header.params.name; } } return; diff --git a/extension/js/common/message-renderer.ts b/extension/js/common/message-renderer.ts index f4744fb61b1..dd359d68426 100644 --- a/extension/js/common/message-renderer.ts +++ b/extension/js/common/message-renderer.ts @@ -740,6 +740,7 @@ export class MessageRenderer { signerEmail, verificationPubs, result.content, + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-conversion !!result.isEncrypted, result.signature, renderModule, diff --git a/extension/js/common/platform/catch.ts b/extension/js/common/platform/catch.ts index 26391bd1bab..79496a4f775 100644 --- a/extension/js/common/platform/catch.ts +++ b/extension/js/common/platform/catch.ts @@ -258,7 +258,7 @@ export class Catch { thrown.stack += Catch.formattedStackBlock('Catch.reportErr calling stack', CatchHelper.stackTrace()); if (thrown.hasOwnProperty('workerStack')) { // https://github.com/openpgpjs/openpgpjs/issues/656#event-1498323188 - thrown.stack += Catch.formattedStackBlock('openpgp.js worker stack', String((thrown as Error & { workerStack: string }).workerStack)); + thrown.stack += Catch.formattedStackBlock('openpgp.js worker stack', (thrown as Error & { workerStack: string }).workerStack); } } const exception = Catch.formExceptionFromThrown(thrown); diff --git a/extension/js/common/platform/store/encryption-key-store.ts b/extension/js/common/platform/store/encryption-key-store.ts index 6d7d10058f4..7007bcdc7ef 100644 --- a/extension/js/common/platform/store/encryption-key-store.ts +++ b/extension/js/common/platform/store/encryption-key-store.ts @@ -4,6 +4,12 @@ import { storageGet, storageSet } from '../../browser/chrome.js'; import { Buf } from '../../core/buf.js'; import { secureRandomBytes } from '../util.js'; +const toArrayBufferStrict = (view: ArrayBufferView): ArrayBuffer => { + const ab = new ArrayBuffer(view.byteLength); + new Uint8Array(ab).set(new Uint8Array(view.buffer, view.byteOffset, view.byteLength)); + return ab; +}; + export class EncryptionKeyStore { private static key = 'cryptup_cryptokey' as const; @@ -11,10 +17,11 @@ export class EncryptionKeyStore { const storageObj = await storageGet('local', [EncryptionKeyStore.key]); const value = storageObj[EncryptionKeyStore.key]; if (!length || typeof value !== 'undefined') { - return Buf.fromBase64Str(value as string); + const buf = Buf.fromBase64Str(value as string); // Buf extends Uint8Array + return toArrayBufferStrict(buf); } const newKey = secureRandomBytes(length); await storageSet('local', { [EncryptionKeyStore.key]: new Buf(newKey).toBase64Str() }); - return newKey; + return toArrayBufferStrict(newKey); } } diff --git a/extension/js/common/ui/backup-ui/backup-ui.ts b/extension/js/common/ui/backup-ui/backup-ui.ts index 69a78bc5dd6..f0f4551add0 100644 --- a/extension/js/common/ui/backup-ui/backup-ui.ts +++ b/extension/js/common/ui/backup-ui/backup-ui.ts @@ -147,7 +147,7 @@ export class BackupUi { private renderPrvKeysBackupSelection = async (kinfos: KeyInfoWithIdentity[]) => { for (const ki of kinfos) { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const email = Xss.escape(String(ki.emails![0])); + const email = Xss.escape(ki.emails![0]); const dom = `
diff --git a/extension/js/common/xss-safe-factory.ts b/extension/js/common/xss-safe-factory.ts index 05439e0d73a..48df1d6b07c 100644 --- a/extension/js/common/xss-safe-factory.ts +++ b/extension/js/common/xss-safe-factory.ts @@ -171,8 +171,8 @@ export class XssSafeFactory { const params: UrlParams = { isReplyBox: true, frameId: `frame_${Str.sloppyRandom(10)}`, - skipClickPrompt: Boolean(skipClickPrompt), - ignoreDraft: Boolean(ignoreDraft), + skipClickPrompt, + ignoreDraft, replyMsgId: convoParams.replyMsgId, draftId: convoParams.draftId, removeAfterClose: convoParams.removeAfterClose, diff --git a/extension/js/content_scripts/webmail/generic/setup-webmail-content-script.ts b/extension/js/content_scripts/webmail/generic/setup-webmail-content-script.ts index 5dd93680248..a9ab961fff2 100644 --- a/extension/js/content_scripts/webmail/generic/setup-webmail-content-script.ts +++ b/extension/js/content_scripts/webmail/generic/setup-webmail-content-script.ts @@ -463,7 +463,7 @@ export const contentScriptSetupIfVacant = async (webmailSpecific: WebmailSpecifi await webmailSpecific.start(acctEmail, clientConfiguration, inject, notifications, factory, relayManager); } catch (e) { if (e instanceof TabIdRequiredError) { - console.error(`FlowCrypt cannot start: ${String(e.message)}`); + console.error(`FlowCrypt cannot start: ${e.message}`); } else if (e instanceof Error && e.message === 'Extension context invalidated.') { console.info(`FlowCrypt cannot start: extension context invalidated. Destroying.`); win.destroy(); diff --git a/extension/js/service_worker/bg-handlers.ts b/extension/js/service_worker/bg-handlers.ts index c439c06dba8..fc5657ec7f8 100644 --- a/extension/js/service_worker/bg-handlers.ts +++ b/extension/js/service_worker/bg-handlers.ts @@ -175,7 +175,7 @@ export class BgHandlers { if (tab.id) { const message = await messenger.messageDisplay.getDisplayedMessage(tab.id); if (message?.id) { - return await messenger.messages.getFull(Number(message.id)); + return await messenger.messages.getFull(message.id); } } return; diff --git a/package-lock.json b/package-lock.json index 0dc021b7c8c..2db07cf0e48 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,8 +61,8 @@ "puppeteer": "24.15.0", "stylelint": "16.23.1", "stylelint-config-standard": "39.0.0", - "typescript": "5.8.3", - "typescript-eslint": "8.38.0", + "typescript": "5.9.2", + "typescript-eslint": "8.41.0", "undici-types": "^7.15.0", "web-ext": "8.9.0", "webpack-cli": "^6.0.1" @@ -1178,17 +1178,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", - "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.41.0.tgz", + "integrity": "sha512-8fz6oa6wEKZrhXWro/S3n2eRJqlRcIa6SlDh59FXJ5Wp5XRZ8B9ixpJDcjadHq47hMx0u+HW6SNa6LjJQ6NLtw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/type-utils": "8.38.0", - "@typescript-eslint/utils": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/type-utils": "8.41.0", + "@typescript-eslint/utils": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -1202,9 +1202,9 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.38.0", + "@typescript-eslint/parser": "^8.41.0", "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { @@ -1218,16 +1218,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz", - "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.41.0.tgz", + "integrity": "sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", "debug": "^4.3.4" }, "engines": { @@ -1239,32 +1239,18 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", - "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", - "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.41.0.tgz", + "integrity": "sha512-b8V9SdGBQzQdjJ/IO3eDifGpDBJfvrNTp2QD9P2BeqWTGrRibgfgIlBSw6z3b6R7dPzg752tOs4u/7yCLxksSQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.38.0", - "@typescript-eslint/types": "^8.38.0", + "@typescript-eslint/tsconfig-utils": "^8.41.0", + "@typescript-eslint/types": "^8.41.0", "debug": "^4.3.4" }, "engines": { @@ -1275,18 +1261,18 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", - "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.41.0.tgz", + "integrity": "sha512-n6m05bXn/Cd6DZDGyrpXrELCPVaTnLdPToyhBoFkLIMznRUQUEQdSp96s/pcWSQdqOhrgR1mzJ+yItK7T+WPMQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0" + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1296,24 +1282,10 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", - "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", - "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.41.0.tgz", + "integrity": "sha512-TDhxYFPUYRFxFhuU5hTIJk+auzM/wKvWgoNYOPcOf6i4ReYlOoYN8q1dV5kOTjNQNJgzWN3TUUQMtlLOcUgdUw==", "dev": true, "license": "MIT", "engines": { @@ -1324,19 +1296,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", - "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.41.0.tgz", + "integrity": "sha512-63qt1h91vg3KsjVVonFJWjgSK7pZHSQFKH6uwqxAH9bBrsyRhO6ONoKyXxyVBzG1lJnFAJcKAcxLS54N1ee1OQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/utils": "8.38.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0", + "@typescript-eslint/utils": "8.41.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -1349,21 +1321,7 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", - "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { @@ -1381,16 +1339,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", - "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.41.0.tgz", + "integrity": "sha512-D43UwUYJmGhuwHfY7MtNKRZMmfd8+p/eNSfFe6tH5mbVDto+VQCayeAt35rOx3Cs6wxD16DQtIKw/YXxt5E0UQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.38.0", - "@typescript-eslint/tsconfig-utils": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/visitor-keys": "8.38.0", + "@typescript-eslint/project-service": "8.41.0", + "@typescript-eslint/tsconfig-utils": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/visitor-keys": "8.41.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -1406,21 +1364,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/types": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", - "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { @@ -1450,16 +1394,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", - "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.41.0.tgz", + "integrity": "sha512-udbCVstxZ5jiPIXrdH+BZWnPatjlYwJuJkDA4Tbo3WyYLh8NvB+h/bKeSZHDOFKfphsZYJQqaFtLeXEqurQn1A==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.38.0", - "@typescript-eslint/types": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0" + "@typescript-eslint/scope-manager": "8.41.0", + "@typescript-eslint/types": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1470,31 +1414,17 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", - "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", - "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.41.0.tgz", + "integrity": "sha512-+GeGMebMCy0elMNg67LRNoVnUFPIm37iu5CmHESVx56/9Jsfdpsvbv605DQ81Pi/x11IdKUsS5nzgTYbCQU9fg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/types": "8.41.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -1505,20 +1435,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", - "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@ungap/structured-clone": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", @@ -2263,6 +2179,29 @@ "dev": true, "license": "MIT" }, + "node_modules/addons-linter/node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/addons-linter/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -10203,6 +10142,15 @@ "node": ">=8.0" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/ts-api-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", @@ -10274,9 +10222,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true, "license": "Apache-2.0", "bin": { @@ -10288,16 +10236,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.38.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.38.0.tgz", - "integrity": "sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==", + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.41.0.tgz", + "integrity": "sha512-n66rzs5OBXW3SFSnZHr2T685q1i4ODm2nulFJhMZBotaTavsS8TrI3d7bDlRSs9yWo7HmyWrN9qDu14Qv7Y0Dw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.38.0", - "@typescript-eslint/parser": "8.38.0", - "@typescript-eslint/typescript-estree": "8.38.0", - "@typescript-eslint/utils": "8.38.0" + "@typescript-eslint/eslint-plugin": "8.41.0", + "@typescript-eslint/parser": "8.41.0", + "@typescript-eslint/typescript-estree": "8.41.0", + "@typescript-eslint/utils": "8.41.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -10308,7 +10256,7 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/uc.micro": { @@ -10590,6 +10538,15 @@ "node": ">= 8" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "peer": true + }, "node_modules/webpack": { "version": "5.101.3", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.3.tgz", @@ -10755,6 +10712,19 @@ "node": ">=6" } }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/when": { "version": "3.7.7", "resolved": "https://registry.npmjs.org/when/-/when-3.7.7.tgz", diff --git a/package.json b/package.json index d783e15ee42..04dd8148071 100644 --- a/package.json +++ b/package.json @@ -36,8 +36,8 @@ "puppeteer": "24.15.0", "stylelint": "16.23.1", "stylelint-config-standard": "39.0.0", - "typescript": "5.8.3", - "typescript-eslint": "8.38.0", + "typescript": "5.9.2", + "typescript-eslint": "8.41.0", "undici-types": "^7.15.0", "web-ext": "8.9.0", "webpack-cli": "^6.0.1"