From 9e698c2dc0be013fb6aa547d77eefb7d9b43109c Mon Sep 17 00:00:00 2001 From: nikhil-mittal-165 Date: Fri, 14 Aug 2026 09:49:27 +0530 Subject: [PATCH 1/7] RELEASE @W-19079373@ Prevent PR title injection in validate-pr workflow (#367) --- .github/workflows/validate-pr.yml | 21 +++++++++++++++++---- end-to-end/package-lock.json | 10 +++++----- end-to-end/package.json | 2 +- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/.github/workflows/validate-pr.yml b/.github/workflows/validate-pr.yml index 792454ec..76896c6f 100644 --- a/.github/workflows/validate-pr.yml +++ b/.github/workflows/validate-pr.yml @@ -3,6 +3,11 @@ on: pull_request: types: [edited, opened, reopened, synchronize] +# Principle of least privilege: this workflow only needs to read repository +# contents. Restricting the token limits the blast radius of any compromised step. +permissions: + contents: read + jobs: # VALIDATE PR TITLE FORMAT verify_pr_title: @@ -13,10 +18,18 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Verify PR Title + # Pass untrusted values (the PR title and branch refs) via the + # environment rather than direct ${{ }} interpolation, so they are + # treated as data and cannot inject shell commands. + env: + PR_TITLE: ${{ github.event.pull_request.title }} + BASE_REF: ${{ github.base_ref }} + HEAD_REF: ${{ github.head_ref }} run: | - title="${{ github.event.pull_request.title }}" + title="$PR_TITLE" title_upper=$(echo "$title" | tr '[:lower:]' '[:upper:]') - base_ref="${{ github.base_ref }}" + base_ref="$BASE_REF" + head_ref="$HEAD_REF" # Define regex patterns for different types of PR titles MAIN2DEV_REGEX="^MAIN2DEV[[:space:]]*:?[[:space:]]*@W-[[:digit:]]{8,9}@.*MERGING.+[[:digit:]]{1,2}\.[[:digit:]]{1,2}\.[[:digit:]]{1,2}.*" @@ -24,7 +37,7 @@ jobs: PR_INTO_DEV_OR_RELEASE_REGEX="^(FIX|CHANGE|NEW)([[:space:]]*\([^)]+\))?[[:space:]]*:?[[:space:]]*@W-[[:digit:]]{8,9}@.+" # Validate PR title based on base_ref and head_ref - if [[ "$base_ref" == "dev" && "${{ startsWith(github.head_ref, 'm2d/') }}" == "true" ]]; then + if [[ "$base_ref" == "dev" && "$head_ref" == m2d/* ]]; then if [[ ! "$title_upper" =~ $MAIN2DEV_REGEX ]]; then echo "::error::Invalid PR title: '$title'. Please follow the format: Main2Dev (__) @W-XXXXXXXX@ Merging.*\d+\.\d+\.\d+" exit 1 @@ -34,7 +47,7 @@ jobs: echo "::error::Invalid PR title: '$title'. Please follow the format: RELEASE @W-XXXXXXXX@ Summary" exit 1 fi - elif [[ "$base_ref" == "dev" || "${{ startsWith(github.base_ref, 'release-') }}" == "true" ]]; then + elif [[ "$base_ref" == "dev" || "$base_ref" == release-* ]]; then if [[ ! "$title_upper" =~ $PR_INTO_DEV_OR_RELEASE_REGEX ]]; then echo "::error::Invalid PR title: '$title'. Please follow the format: FIX|CHANGE|NEW (__) @W-XXXXXXXX@ Summary" exit 1 diff --git a/end-to-end/package-lock.json b/end-to-end/package-lock.json index 81a280da..2035218e 100644 --- a/end-to-end/package-lock.json +++ b/end-to-end/package-lock.json @@ -12,7 +12,7 @@ "@types/mocha": "^10.0.10", "@types/vscode": "^1.125.0", "@vscode/test-cli": "^0.0.15", - "@vscode/test-electron": "^2.5.2", + "@vscode/test-electron": "^3.1.0", "chai": "^6.2.2" }, "engines": { @@ -378,9 +378,9 @@ } }, "node_modules/@vscode/test-electron": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.5.2.tgz", - "integrity": "sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-3.1.0.tgz", + "integrity": "sha512-CRqv5u+YYoseuNVJ6Tyo4k0sF0mx4qnKMihRB0PjsUF8Dc0WKtCXo6CNL6nWWm5esfFQsQA/pejMj4ZbpJVLTw==", "dev": true, "license": "MIT", "dependencies": { @@ -391,7 +391,7 @@ "semver": "^7.6.2" }, "engines": { - "node": ">=16" + "node": ">=22" } }, "node_modules/agent-base": { diff --git a/end-to-end/package.json b/end-to-end/package.json index e9c7f18e..38cede51 100644 --- a/end-to-end/package.json +++ b/end-to-end/package.json @@ -7,7 +7,7 @@ "@types/mocha": "^10.0.10", "@types/vscode": "^1.125.0", "@vscode/test-cli": "^0.0.15", - "@vscode/test-electron": "^2.5.2", + "@vscode/test-electron": "^3.1.0", "chai": "^6.2.2" }, "engines": { From e820d3f4b9ad5d3e4bd0c79c2d31fab8fee399de Mon Sep 17 00:00:00 2001 From: nikhil-mittal-165 Date: Tue, 18 Aug 2026 11:41:17 +0530 Subject: [PATCH 2/7] NEW @W-21910054@ Message sanitization (#368) --- src/lib/insights-handler.ts | 50 ++++++++++- src/lib/messages.ts | 14 ++- test/lib/code-analyzer-run-action.test.ts | 4 +- test/lib/insights-handler.test.ts | 103 +++++++++++++++++++++- test/lib/messages.test.ts | 16 ++-- 5 files changed, 173 insertions(+), 14 deletions(-) diff --git a/src/lib/insights-handler.ts b/src/lib/insights-handler.ts index 13ff6fac..b35d6ff1 100644 --- a/src/lib/insights-handler.ts +++ b/src/lib/insights-handler.ts @@ -23,6 +23,7 @@ export class InsightsHandler { private readonly windowManager: WindowManager; private readonly cliCommandExecutor: CliCommandExecutor; private noOrgConnectionShown: boolean = false; + private invalidSessionShown: boolean = false; constructor(display: Display, logger: Logger, externalServiceProvider: ExternalServiceProvider, windowManager: WindowManager, cliCommandExecutor: CliCommandExecutor) { this.display = display; @@ -55,10 +56,21 @@ export class InsightsHandler { this.handleNoOrgConnection(error.message, error.remediation); } break; + case 'INVALID_SESSION': + // Only show once per session (non-intrusive) + if (!this.invalidSessionShown) { + this.invalidSessionShown = true; + this.handleInvalidSession(error.message, error.remediation); + } + break; case 'API_UNAVAILABLE': // Always show (transient error, might work on retry) this.handleApiUnavailable(error.message, error.remediation, retriggerScan); break; + case 'SCAN_TIMEOUT': + // Always show (transient error, might work on retry or after raising the timeout) + this.handleScanTimeout(error.message, error.remediation, retriggerScan); + break; case 'UNEXPECTED_ERROR': // Always show (could be different errors) this.handleUnexpectedError(error.message, error.remediation); @@ -75,7 +87,20 @@ export class InsightsHandler { }; this.display.displayInfo( - messages.insights.apexGuruSkipped.noOrgConnection(remediation), + messages.insights.apexGuruSkipped.noOrgConnection, + connectOrgButton + ); + this.logger.log(message); + } + + private handleInvalidSession(message: string, remediation: string): void { + const connectOrgButton: DisplayButton = { + text: messages.insights.buttons.connectOrg, + callback: () => this.triggerConnectOrg(remediation) + }; + + this.display.displayInfo( + messages.insights.apexGuruSkipped.invalidSession, connectOrgButton ); this.logger.log(message); @@ -95,7 +120,28 @@ export class InsightsHandler { }; this.display.displayInfo( - messages.insights.apexGuruSkipped.apiUnavailable(message), + messages.insights.apexGuruSkipped.apiUnavailable, + retryScanButton, + detailsButton + ); + this.logger.log(message); + } + + private handleScanTimeout(message: string, remediation: string, retriggerScan: () => void): void { + const retryScanButton: DisplayButton = { + text: messages.insights.buttons.retryScan, + callback: retriggerScan + }; + const detailsButton: DisplayButton = { + text: messages.insights.buttons.details, + callback: () => { + this.logger.log(remediation); + this.windowManager.showLogOutputWindow(); + } + }; + + this.display.displayInfo( + messages.insights.apexGuruSkipped.scanTimeout, retryScanButton, detailsButton ); diff --git a/src/lib/messages.ts b/src/lib/messages.ts index fcb94b51..71875a5a 100644 --- a/src/lib/messages.ts +++ b/src/lib/messages.ts @@ -47,8 +47,12 @@ export const messages = { info: { scanningWith: (version: string) => `Scanning with code-analyzer@${version} via CLI`, finishedScan: (scannedCount: number, badFileCount: number, violationCount: number, apexGuruAnalysisMode?: string) => { - const base = `Scan complete. Analyzed ${scannedCount} files. ${violationCount} violations found in ${badFileCount} files.`; - return apexGuruAnalysisMode ? `${base} ApexGuru analysis mode: '${apexGuruAnalysisMode}'.` : base; + const base = `Scan complete. Code Analyzer scanned ${scannedCount} files and found ${violationCount} violations in ${badFileCount} files`; + if (!apexGuruAnalysisMode) { + return `${base}.`; + } + const displayMode = apexGuruAnalysisMode.toLowerCase() === 'full' ? 'Advanced' : 'Basic'; + return `${base} (ApexGuru analysis mode: ${displayMode}).`; } }, suggestions: { @@ -90,8 +94,10 @@ export const messages = { }, insights: { apexGuruSkipped: { - noOrgConnection: (remediation: string) => `ApexGuru analysis was skipped because no org is connected. ${remediation}`, - apiUnavailable: (message: string) => `ApexGuru analysis was skipped because the service is currently unavailable. ${message}`, + noOrgConnection: `ApexGuru analysis was skipped because no org is connected. To authenticate, use the Connect Org button.`, + invalidSession: `Error: Invalid Session ID. We couldn't refresh your access token because the session expired or is invalid.`, + apiUnavailable: `Code Analyzer skipped ApexGuru scan because the service is temporarily unavailable. Try again later.`, + scanTimeout: `Code Analyzer skipped ApexGuru scan because the workspace scan timed out. Increase the timeout setting in the Code Analyzer configuration file.`, unexpectedError: (message: string) => `ApexGuru analysis was skipped due to an unexpected error. ${message}` }, buttons: { diff --git a/test/lib/code-analyzer-run-action.test.ts b/test/lib/code-analyzer-run-action.test.ts index 40e17c67..9cf88cbd 100644 --- a/test/lib/code-analyzer-run-action.test.ts +++ b/test/lib/code-analyzer-run-action.test.ts @@ -80,7 +80,7 @@ describe('Tests for CodeAnalyzerRunAction', () => { ]); expect(display.displayInfoCallHistory).toEqual([ {msg: '[engineF:ruleF] messageF', buttons: []}, - {msg: 'Scan complete. Analyzed 1 files. 1 violations found in 1 files.', buttons: []} + {msg: 'Scan complete. Code Analyzer scanned 1 files and found 1 violations in 1 files.', buttons: []} ]); // Sanity check, good violations still make it @@ -99,7 +99,7 @@ describe('Tests for CodeAnalyzerRunAction', () => { expect(display.displayErrorCallHistory[0].msg).toEqual(messages.error.engineUninstantiable(engine)); expect(display.displayWarningCallHistory).toEqual([]); expect(display.displayInfoCallHistory).toEqual([ - {msg: 'Scan complete. Analyzed 1 files. 0 violations found in 0 files.', buttons: []} + {msg: 'Scan complete. Code Analyzer scanned 1 files and found 0 violations in 0 files.', buttons: []} ]); }); diff --git a/test/lib/insights-handler.test.ts b/test/lib/insights-handler.test.ts index b0ff738b..2667f42a 100644 --- a/test/lib/insights-handler.test.ts +++ b/test/lib/insights-handler.test.ts @@ -100,6 +100,45 @@ describe('Tests for InsightsHandler', () => { expect(display.displayInfoCallHistory[0].buttons[0].text).toEqual(messages.insights.buttons.connectOrg); }); + it('When apexguru status is skipped with INVALID_SESSION, then info banner is shown with Connect Org button', () => { + const insights: Record = { + apexguru: { + status: 'skipped', + error: { + code: 'INVALID_SESSION', + message: 'ApexGuru skipped the scan because your org session is invalid or expired.', + remediation: '' + } + } + }; + + insightsHandler.handleInsights(insights, retriggerScan); + + expect(display.displayInfoCallHistory).toHaveLength(1); + expect(display.displayInfoCallHistory[0].msg).toContain('Invalid Session ID'); + expect(display.displayInfoCallHistory[0].buttons).toHaveLength(1); + expect(display.displayInfoCallHistory[0].buttons[0].text).toEqual(messages.insights.buttons.connectOrg); + }); + + it('INVALID_SESSION is shown once per session (non-intrusive)', () => { + const insights: Record = { + apexguru: { + status: 'skipped', + error: { + code: 'INVALID_SESSION', + message: 'Session invalid', + remediation: '' + } + } + }; + + insightsHandler.handleInsights(insights, retriggerScan); + expect(display.displayInfoCallHistory).toHaveLength(1); + + insightsHandler.handleInsights(insights, retriggerScan); + expect(display.displayInfoCallHistory).toHaveLength(1); // Still 1, suppressed + }); + it('When apexguru status is skipped with API_UNAVAILABLE, then info banner is shown with Retry Scan and Details buttons', () => { const insights: Record = { apexguru: { @@ -115,12 +154,71 @@ describe('Tests for InsightsHandler', () => { insightsHandler.handleInsights(insights, retriggerScan); expect(display.displayInfoCallHistory).toHaveLength(1); - expect(display.displayInfoCallHistory[0].msg).toContain('service is currently unavailable'); + expect(display.displayInfoCallHistory[0].msg).toContain('service is temporarily unavailable'); expect(display.displayInfoCallHistory[0].buttons).toHaveLength(2); expect(display.displayInfoCallHistory[0].buttons[0].text).toEqual(messages.insights.buttons.retryScan); expect(display.displayInfoCallHistory[0].buttons[1].text).toEqual(messages.insights.buttons.details); }); + it('When apexguru status is skipped with SCAN_TIMEOUT, then info banner is shown with Retry Scan and Details buttons', () => { + const insights: Record = { + apexguru: { + status: 'skipped', + error: { + code: 'SCAN_TIMEOUT', + message: 'Code Analyzer skipped ApexGuru scan because the workspace scan timed out after 10000 ms.', + remediation: '' + } + } + }; + + insightsHandler.handleInsights(insights, retriggerScan); + + expect(display.displayInfoCallHistory).toHaveLength(1); + expect(display.displayInfoCallHistory[0].msg).toContain('workspace scan timed out'); + expect(display.displayInfoCallHistory[0].msg).toContain('Increase the timeout setting'); + expect(display.displayInfoCallHistory[0].buttons).toHaveLength(2); + expect(display.displayInfoCallHistory[0].buttons[0].text).toEqual(messages.insights.buttons.retryScan); + expect(display.displayInfoCallHistory[0].buttons[1].text).toEqual(messages.insights.buttons.details); + }); + + it('SCAN_TIMEOUT is shown every time (transient error)', () => { + const timeoutInsights: Record = { + apexguru: { + status: 'skipped', + error: { + code: 'SCAN_TIMEOUT', + message: 'Workspace scan timed out', + remediation: '' + } + } + }; + + insightsHandler.handleInsights(timeoutInsights, retriggerScan); + expect(display.displayInfoCallHistory).toHaveLength(1); + + insightsHandler.handleInsights(timeoutInsights, retriggerScan); + expect(display.displayInfoCallHistory).toHaveLength(2); + }); + + it('SCAN_TIMEOUT Retry Scan button re-triggers the scan', () => { + const insights: Record = { + apexguru: { + status: 'skipped', + error: { + code: 'SCAN_TIMEOUT', + message: 'Workspace scan timed out', + remediation: '' + } + } + }; + + insightsHandler.handleInsights(insights, retriggerScan); + display.displayInfoCallHistory[0].buttons[0].callback(); + + expect(retriggerScanCallCount).toEqual(1); + }); + it('When apexguru status is skipped with UNEXPECTED_ERROR, then info banner is shown with View Details and Report Issue buttons', () => { const insights: Record = { apexguru: { @@ -357,6 +455,9 @@ describe('Tests for InsightsHandler', () => { ); expect(configSetCall).toBeDefined(); expect(configSetCall.args).toContain('target-org=myOrg'); + + // Verify the user sees confirmation that the target-org was set + expect(display.displayInfoCallHistory[1].msg).toEqual(messages.insights.orgSetSuccess('myOrg')); }); it('Retry Scan button re-triggers the scan', () => { diff --git a/test/lib/messages.test.ts b/test/lib/messages.test.ts index 6dc41715..43111519 100644 --- a/test/lib/messages.test.ts +++ b/test/lib/messages.test.ts @@ -3,15 +3,21 @@ import {messages} from "../../src/lib/messages"; describe('Tests for messages', () => { describe('insights messages', () => { it('apexGuruSkipped.noOrgConnection produces expected output', () => { - const result = messages.insights.apexGuruSkipped.noOrgConnection('Run sf org login web'); + const result = messages.insights.apexGuruSkipped.noOrgConnection; expect(result).toContain('no org is connected'); - expect(result).toContain('Run sf org login web'); + expect(result).toContain('Connect Org button'); }); it('apexGuruSkipped.apiUnavailable produces expected output', () => { - const result = messages.insights.apexGuruSkipped.apiUnavailable('Service is down'); - expect(result).toContain('service is currently unavailable'); - expect(result).toContain('Service is down'); + const result = messages.insights.apexGuruSkipped.apiUnavailable; + expect(result).toContain('service is temporarily unavailable'); + expect(result).toContain('Try again later'); + }); + + it('apexGuruSkipped.scanTimeout produces expected output', () => { + const result = messages.insights.apexGuruSkipped.scanTimeout; + expect(result).toContain('workspace scan timed out'); + expect(result).toContain('Increase the timeout setting'); }); it('apexGuruSkipped.unexpectedError produces expected output', () => { From 8dd0d5e310e24e9e787b5c4deda87f0183fc277e Mon Sep 17 00:00:00 2001 From: nikhil-mittal-165 Date: Wed, 19 Aug 2026 13:55:53 +0530 Subject: [PATCH 3/7] CHANGE @W-21910054@ default include suggestions (#369) --- package.json | 2 +- src/lib/settings.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b961a44b..3056e5bd 100644 --- a/package.json +++ b/package.json @@ -146,7 +146,7 @@ }, "codeAnalyzer.includeSuggestions": { "type": "boolean", - "default": false, + "default": true, "markdownDescription": "Include code suggestions for applicable violations.\n\n**Note:** Salesforce code analyzer CLI plugin version 5.12.0 or later is needed." } } diff --git a/src/lib/settings.ts b/src/lib/settings.ts index ee447703..30e56cdd 100644 --- a/src/lib/settings.ts +++ b/src/lib/settings.ts @@ -63,7 +63,7 @@ export class SettingsManagerImpl implements SettingsManager { } public getIncludeSuggestions(): boolean { - return vscode.workspace.getConfiguration('codeAnalyzer').get('includeSuggestions', false); + return vscode.workspace.getConfiguration('codeAnalyzer').get('includeSuggestions', true); } // ================================================================================================================= From 819f3c92d923635e574340dd3f7c6c64dcdcf147 Mon Sep 17 00:00:00 2001 From: nikhil-mittal-165 Date: Tue, 25 Aug 2026 19:06:33 +0530 Subject: [PATCH 4/7] CHANGE @W-22462053@ Update VS Code extension dependencies (minor/patch versions) (#370) --- package-lock.json | 364 +++++++++++++++++++++++----------------------- package.json | 8 +- 2 files changed, 186 insertions(+), 186 deletions(-) diff --git a/package-lock.json b/package-lock.json index b5912c1d..420c8cf8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "dependencies": { "@salesforce/vscode-service-provider": "^1.5.4", "@types/jest": "^30.0.0", - "@types/semver": "^7.7.1", + "@types/semver": "^7.8.0", "@types/tmp": "^0.2.6", "diff": "^8.0.3", "glob": "^13.0.6", @@ -24,7 +24,7 @@ "@types/node": "^20.0.0", "@types/vscode": "^1.125.0", "@vscode/vsce": "^3.9.2", - "esbuild": "^0.28.1", + "esbuild": "^0.28.2", "eslint": "^9.39.2", "husky": "^9.1.7", "jest": "^30.4.2", @@ -32,10 +32,10 @@ "ovsx": "^0.10.12", "proxyquire": "^2.1.3", "rimraf": "*", - "ts-jest": "^29.4.11", + "ts-jest": "^29.4.12", "ts-node": "^10.9.2", "typescript": "^5.9.3", - "typescript-eslint": "^8.65.0" + "typescript-eslint": "^8.67.0" }, "engines": { "node": ">=20.9.0", @@ -817,9 +817,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", - "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", "cpu": [ "ppc64" ], @@ -834,9 +834,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", - "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", "cpu": [ "arm" ], @@ -851,9 +851,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", - "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", "cpu": [ "arm64" ], @@ -868,9 +868,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", - "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", "cpu": [ "x64" ], @@ -885,9 +885,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", - "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", "cpu": [ "arm64" ], @@ -902,9 +902,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", - "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", "cpu": [ "x64" ], @@ -919,9 +919,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", - "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", "cpu": [ "arm64" ], @@ -936,9 +936,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", - "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", "cpu": [ "x64" ], @@ -953,9 +953,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", - "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", "cpu": [ "arm" ], @@ -970,9 +970,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", - "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", "cpu": [ "arm64" ], @@ -987,9 +987,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", - "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", "cpu": [ "ia32" ], @@ -1004,9 +1004,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", - "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", "cpu": [ "loong64" ], @@ -1021,9 +1021,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", - "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", "cpu": [ "mips64el" ], @@ -1038,9 +1038,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", - "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", "cpu": [ "ppc64" ], @@ -1055,9 +1055,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", - "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", "cpu": [ "riscv64" ], @@ -1072,9 +1072,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", - "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", "cpu": [ "s390x" ], @@ -1089,9 +1089,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", - "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", "cpu": [ "x64" ], @@ -1106,9 +1106,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", - "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", "cpu": [ "arm64" ], @@ -1123,9 +1123,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", - "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", "cpu": [ "x64" ], @@ -1140,9 +1140,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", - "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", "cpu": [ "arm64" ], @@ -1157,9 +1157,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", - "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", "cpu": [ "x64" ], @@ -1174,9 +1174,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", - "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", "cpu": [ "arm64" ], @@ -1191,9 +1191,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", - "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", "cpu": [ "x64" ], @@ -1208,9 +1208,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", - "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", "cpu": [ "arm64" ], @@ -1225,9 +1225,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", - "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", "cpu": [ "ia32" ], @@ -1242,9 +1242,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", - "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", "cpu": [ "x64" ], @@ -2964,9 +2964,9 @@ "license": "MIT" }, "node_modules/@types/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ==", "license": "MIT" }, "node_modules/@types/stack-utils": { @@ -3004,17 +3004,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.65.0.tgz", - "integrity": "sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==", + "version": "8.68.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.68.0.tgz", + "integrity": "sha512-WASHDpCm6qO5jj9g1a+8NiW5+GCkAyLReR56/4VruYmNgfUmqpxOfZ2Yfb8xGfJPWv5Qi6LSD8sXdces3vbp/Q==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.65.0", - "@typescript-eslint/type-utils": "8.65.0", - "@typescript-eslint/utils": "8.65.0", - "@typescript-eslint/visitor-keys": "8.65.0", + "@typescript-eslint/scope-manager": "8.68.0", + "@typescript-eslint/type-utils": "8.68.0", + "@typescript-eslint/utils": "8.68.0", + "@typescript-eslint/visitor-keys": "8.68.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -3027,7 +3027,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.65.0", + "@typescript-eslint/parser": "^8.68.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } @@ -3043,16 +3043,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.65.0.tgz", - "integrity": "sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==", + "version": "8.68.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.68.0.tgz", + "integrity": "sha512-fHq2VC1kpyYfvEcbiMjOpySY4WS7voEp89yAThrHRX5sm9j2lzYppCb2umFMEed4fWcyeLjHxrz0mpjNBaBxMQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.65.0", - "@typescript-eslint/types": "8.65.0", - "@typescript-eslint/typescript-estree": "8.65.0", - "@typescript-eslint/visitor-keys": "8.65.0", + "@typescript-eslint/scope-manager": "8.68.0", + "@typescript-eslint/types": "8.68.0", + "@typescript-eslint/typescript-estree": "8.68.0", + "@typescript-eslint/visitor-keys": "8.68.0", "debug": "^4.4.3" }, "engines": { @@ -3068,14 +3068,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.65.0.tgz", - "integrity": "sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==", + "version": "8.68.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.68.0.tgz", + "integrity": "sha512-5GQtWZCXFcFYux955pvoS02WLc49pXNlvIxocKjS0clvwo3in1RdlzVKyiqQH9vE5AKWFLTaUgeQkOrTS+0Qxw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.65.0", - "@typescript-eslint/types": "^8.65.0", + "@typescript-eslint/tsconfig-utils": "^8.68.0", + "@typescript-eslint/types": "^8.68.0", "debug": "^4.4.3" }, "engines": { @@ -3090,14 +3090,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.65.0.tgz", - "integrity": "sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==", + "version": "8.68.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.68.0.tgz", + "integrity": "sha512-T5eXpcaJNg8bhjHJ8Rjp68Vq/QBteYtTKY8TZqVNPaUbuz0f6jI9t6aDkylwvalpAB9XTTFeFOjrjXAZ3YvmVA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.65.0", - "@typescript-eslint/visitor-keys": "8.65.0" + "@typescript-eslint/types": "8.68.0", + "@typescript-eslint/visitor-keys": "8.68.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3108,9 +3108,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.65.0.tgz", - "integrity": "sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==", + "version": "8.68.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.68.0.tgz", + "integrity": "sha512-F7zrGQfiJHojPwi8vhxZQC1tWtJzvL74cK/nqri2lk8YUXvYaYwl263xOJ69jDWPUk1hmcdoayFwk9lX09npVw==", "dev": true, "license": "MIT", "engines": { @@ -3125,15 +3125,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.65.0.tgz", - "integrity": "sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==", + "version": "8.68.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.68.0.tgz", + "integrity": "sha512-X77zqoY1EjeWGs/0JNxeaMfp5C5lIz4Tw8y66F1Ne8Faq6g424sBNYM6xBAqElfGZPLpWS+CZAp0DXyKDzWiHg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.65.0", - "@typescript-eslint/typescript-estree": "8.65.0", - "@typescript-eslint/utils": "8.65.0", + "@typescript-eslint/types": "8.68.0", + "@typescript-eslint/typescript-estree": "8.68.0", + "@typescript-eslint/utils": "8.68.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -3150,9 +3150,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.65.0.tgz", - "integrity": "sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==", + "version": "8.68.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.68.0.tgz", + "integrity": "sha512-9RnpsGJjrAllCMefGVVsImJM24YurhC0Q1h4UbvivtvOqXmR/vEJge2OoE++z9m6hyg8T1Q8t5SNT6tHSbrxcg==", "dev": true, "license": "MIT", "engines": { @@ -3164,16 +3164,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.65.0.tgz", - "integrity": "sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==", + "version": "8.68.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.68.0.tgz", + "integrity": "sha512-OKKsD0tYmoNiU5PW2zehO1yO56jYOm1ShYlxon/Z0SJNidAkdVg86eg9ruRuoXf8xfnuWZGbwDsStkoXbZtIIA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.65.0", - "@typescript-eslint/tsconfig-utils": "8.65.0", - "@typescript-eslint/types": "8.65.0", - "@typescript-eslint/visitor-keys": "8.65.0", + "@typescript-eslint/project-service": "8.68.0", + "@typescript-eslint/tsconfig-utils": "8.68.0", + "@typescript-eslint/types": "8.68.0", + "@typescript-eslint/visitor-keys": "8.68.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -3202,9 +3202,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.8.tgz", - "integrity": "sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", "dev": true, "license": "MIT", "dependencies": { @@ -3231,16 +3231,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.65.0.tgz", - "integrity": "sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==", + "version": "8.68.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.68.0.tgz", + "integrity": "sha512-PB5gJMMOg0Q5P1tsgWtEAqQacJXq0qEqRHDX/YJ4FaTMLfZPpHB3gjl2EJuiZyPABxmj4ZQYiY9m1bdAJ5y7tQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.65.0", - "@typescript-eslint/types": "8.65.0", - "@typescript-eslint/typescript-estree": "8.65.0" + "@typescript-eslint/scope-manager": "8.68.0", + "@typescript-eslint/types": "8.68.0", + "@typescript-eslint/typescript-estree": "8.68.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3255,13 +3255,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.65.0.tgz", - "integrity": "sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==", + "version": "8.68.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.68.0.tgz", + "integrity": "sha512-YR65gGdGvTUAWLldC3xLOvOzamdGzB4A5/N8rehEaHs3Zvoe39BhgY+u0SPch1OvrVTfLcc55wsSgK2NcnTS/A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/types": "8.68.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -5146,9 +5146,9 @@ } }, "node_modules/esbuild": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", - "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5159,32 +5159,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.1", - "@esbuild/android-arm": "0.28.1", - "@esbuild/android-arm64": "0.28.1", - "@esbuild/android-x64": "0.28.1", - "@esbuild/darwin-arm64": "0.28.1", - "@esbuild/darwin-x64": "0.28.1", - "@esbuild/freebsd-arm64": "0.28.1", - "@esbuild/freebsd-x64": "0.28.1", - "@esbuild/linux-arm": "0.28.1", - "@esbuild/linux-arm64": "0.28.1", - "@esbuild/linux-ia32": "0.28.1", - "@esbuild/linux-loong64": "0.28.1", - "@esbuild/linux-mips64el": "0.28.1", - "@esbuild/linux-ppc64": "0.28.1", - "@esbuild/linux-riscv64": "0.28.1", - "@esbuild/linux-s390x": "0.28.1", - "@esbuild/linux-x64": "0.28.1", - "@esbuild/netbsd-arm64": "0.28.1", - "@esbuild/netbsd-x64": "0.28.1", - "@esbuild/openbsd-arm64": "0.28.1", - "@esbuild/openbsd-x64": "0.28.1", - "@esbuild/openharmony-arm64": "0.28.1", - "@esbuild/sunos-x64": "0.28.1", - "@esbuild/win32-arm64": "0.28.1", - "@esbuild/win32-ia32": "0.28.1", - "@esbuild/win32-x64": "0.28.1" + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" } }, "node_modules/escalade": { @@ -9858,9 +9858,9 @@ } }, "node_modules/ts-jest": { - "version": "29.4.11", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.11.tgz", - "integrity": "sha512-IrFl7l9AuB/qrNw5quqvAv/hmKMb8dhWOH4jQOGo0Oq8tCeo1O86/iTFG1FaRimgUkF13l4PcepO8ATFT6Ns4g==", + "version": "29.4.12", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.12.tgz", + "integrity": "sha512-Ov6ClY53Fflh6BGAnY2DlTq1hYDrTycz2PVTXBWFW2CU+9zrEqAp9fWdGXl42EXO5RLSFAcAZ2JFKbP+zBTFfw==", "dev": true, "license": "MIT", "dependencies": { @@ -9870,7 +9870,7 @@ "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.8.0", + "semver": "^7.8.5", "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, @@ -10071,16 +10071,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.65.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.65.0.tgz", - "integrity": "sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==", + "version": "8.68.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.68.0.tgz", + "integrity": "sha512-MHy0Y0ynqeEbx/S45+i/bBssdy3X6KNBfmJAP35GrgtNxu2TQ5K5xsFDhAnmsq1jvpdoZOPG1LGtJo0HWqYCrQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.65.0", - "@typescript-eslint/parser": "8.65.0", - "@typescript-eslint/typescript-estree": "8.65.0", - "@typescript-eslint/utils": "8.65.0" + "@typescript-eslint/eslint-plugin": "8.68.0", + "@typescript-eslint/parser": "8.68.0", + "@typescript-eslint/typescript-estree": "8.68.0", + "@typescript-eslint/utils": "8.68.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" diff --git a/package.json b/package.json index 3056e5bd..bd8181dd 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "dependencies": { "@salesforce/vscode-service-provider": "^1.5.4", "@types/jest": "^30.0.0", - "@types/semver": "^7.7.1", + "@types/semver": "^7.8.0", "@types/tmp": "^0.2.6", "diff": "^8.0.3", "glob": "^13.0.6", @@ -48,7 +48,7 @@ "@types/node": "^20.0.0", "@types/vscode": "^1.125.0", "@vscode/vsce": "^3.9.2", - "esbuild": "^0.28.1", + "esbuild": "^0.28.2", "eslint": "^9.39.2", "husky": "^9.1.7", "jest": "^30.4.2", @@ -56,10 +56,10 @@ "ovsx": "^0.10.12", "proxyquire": "^2.1.3", "rimraf": "*", - "ts-jest": "^29.4.11", + "ts-jest": "^29.4.12", "ts-node": "^10.9.2", "typescript": "^5.9.3", - "typescript-eslint": "^8.65.0" + "typescript-eslint": "^8.67.0" }, "extensionDependencies": [ "salesforce.salesforcedx-vscode-core" From a24a4ebd73795a01339172847539c63b3541be16 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2026 13:39:21 +0000 Subject: [PATCH 5/7] Preparing for v1.22.0 release. --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 420c8cf8..b484e1a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "sfdx-code-analyzer-vscode", - "version": "1.21.0", + "version": "1.22.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sfdx-code-analyzer-vscode", - "version": "1.21.0", + "version": "1.22.0", "hasInstallScript": true, "license": "BSD-3-Clause", "dependencies": { diff --git a/package.json b/package.json index bd8181dd..f60c2fa7 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "color": "#ECECEC", "theme": "light" }, - "version": "1.21.0", + "version": "1.22.0", "publisher": "salesforce", "license": "BSD-3-Clause", "engines": { From f2f3370900262ce8dcf999ea88378b1a65c6e129 Mon Sep 17 00:00:00 2001 From: Nikhil Mittal Date: Tue, 25 Aug 2026 20:22:48 +0530 Subject: [PATCH 6/7] Updating SHA256.md after 1.21.0 release --- SHA256.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHA256.md b/SHA256.md index 0f981191..d7074276 100644 --- a/SHA256.md +++ b/SHA256.md @@ -15,7 +15,7 @@ make sure that their SHA values match the values in the list below. shasum -a 256 3. Confirm that the SHA in your output matches the value in this list of SHAs. - 457e14c6c5c41e5608157b4588d5942bea65a1bad74634e31294389ab008ef9d ./extensions/sfdx-code-analyzer-vscode-1.20.0.vsix + c31411aa07d8e11d0bbbba6bc036f46f1512424271e8baaf6b07e96f129be363 ./extensions/sfdx-code-analyzer-vscode-1.21.0.vsix 4. Change the filename extension for the file that you downloaded from .zip to .vsix. From acb01470981def159a060bc71e3ae39aaaa12cf1 Mon Sep 17 00:00:00 2001 From: svc-cli-bot Date: Wed, 26 Aug 2026 00:04:35 -0500 Subject: [PATCH 7/7] Updating SHA256.md after 1.22.0 release --- SHA256.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SHA256.md b/SHA256.md index d7074276..e09b026f 100644 --- a/SHA256.md +++ b/SHA256.md @@ -15,7 +15,7 @@ make sure that their SHA values match the values in the list below. shasum -a 256 3. Confirm that the SHA in your output matches the value in this list of SHAs. - c31411aa07d8e11d0bbbba6bc036f46f1512424271e8baaf6b07e96f129be363 ./extensions/sfdx-code-analyzer-vscode-1.21.0.vsix + ac4707b344d17ecd4c7729bff6701d0a40cca61964d2efa70fd69fba747cb8de ./extensions/sfdx-code-analyzer-vscode-1.22.0.vsix 4. Change the filename extension for the file that you downloaded from .zip to .vsix.