From ed2a6fb8ababc1de7aa6846294af73a15adb6115 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 23 May 2026 21:22:23 -0400 Subject: [PATCH 01/19] [dependencies]: Bump qs from 6.14.2 to 6.15.2 (#1277) Bumps [qs](https://github.com/ljharb/qs) from 6.14.2 to 6.15.2.
Changelog

Sourced from qs's changelog.

6.15.2

6.15.1

6.15.0

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=qs&package-manager=npm_and_yarn&previous-version=6.14.2&new-version=6.15.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/microsoft/azure-devops-mcp/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f9af048c..9132f8c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7184,9 +7184,9 @@ "license": "MIT" }, "node_modules/qs": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", - "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "version": "6.15.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", + "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" From 4a5e3815a2cbf57c6dbf6244e2224de3a463e050 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 May 2026 10:39:37 -0400 Subject: [PATCH 02/19] [dependencies]: Bump @azure/msal-node from 5.1.5 to 5.2.1 (#1255) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [@azure/msal-node](https://github.com/AzureAD/microsoft-authentication-library-for-js) from 5.1.5 to 5.2.1.
Release notes

Sourced from @​azure/msal-node's releases.

@​azure/msal-react v5.2.1

5.2.1

Wed, 01 Apr 2026 20:09:00 GMT

Patches

@​azure/msal-angular v5.2.1

5.2.1

Tue, 21 Apr 2026 22:41:19 GMT

Patches

  • Bump @​azure/msal-browser to v5.8.0 (beachball)

@​azure/msal-node-extensions v5.2.1

5.2.1

Mon, 11 May 2026 21:48:15 GMT

Patches

  • Bump @​azure/msal-common to v16.6.1 (beachball)

@​azure/msal-node v5.2.1

5.2.1

Mon, 11 May 2026 21:48:15 GMT

Patches

  • Bump @​azure/msal-common to v16.6.1 (beachball)

@​azure/msal-browser v5.2.0

5.2.0

Tue, 10 Feb 2026 23:04:27 GMT

Minor changes

  • Add correlationId to events #8288 (thomas.norling@microsoft.com)
  • Bump @​azure/msal-common to v16.0.4 (beachball)
  • Bump eslint-config-msal to v0.0.0 (beachball)
  • Bump msal-test-utils to v0.0.1 (beachball)
  • Bump rollup-msal to v0.0.0 (beachball)

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@azure/msal-node&package-manager=npm_and_yarn&previous-version=5.1.5&new-version=5.2.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dan Hellem --- package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9132f8c5..4b3b4526 100644 --- a/package-lock.json +++ b/package-lock.json @@ -187,12 +187,12 @@ } }, "node_modules/@azure/msal-node": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.1.5.tgz", - "integrity": "sha512-ObTeMoNPmq19X3z40et9Xvs4ZoWVeJg43PZMRLG5iwVL+2nCtAerG3YTDItqPp1CfXNwmCXBbg8jn1DOx65c3g==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.2.1.tgz", + "integrity": "sha512-tmQiQ2HvtzaeLqYGy3BemiPOSGPY4wCy1IW5zDWITKSs/s35WEd7Zij/hCxvUdAOzj6U3qnyaGbYXY91ortFEQ==", "license": "MIT", "dependencies": { - "@azure/msal-common": "16.5.2", + "@azure/msal-common": "16.6.1", "jsonwebtoken": "^9.0.0" }, "engines": { @@ -200,9 +200,9 @@ } }, "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { - "version": "16.5.2", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.5.2.tgz", - "integrity": "sha512-GkDEL6TYo3HgT3UuqakdgE9PZfc1hMki6+Hwgy1uddb/EauvAKfu85vVhuofRSo22D1xTnWt8Ucwfg4vSCVwvA==", + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.6.1.tgz", + "integrity": "sha512-VxKdEtUwDuLD0F1hOQP7kye0YadZxFJfv37Em440geEf/w9uggKnHpRrqwZJOdxmPUOdhZ9kyRtKuAJW8wUcRg==", "license": "MIT", "engines": { "node": ">=0.8.0" From 9ea3fda56efb5381a9e015ea2feb713372dd0429 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 May 2026 10:26:20 -0400 Subject: [PATCH 03/19] [dependencies]: Bump @azure/msal-node from 5.2.1 to 5.2.2 (#1290) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [@azure/msal-node](https://github.com/AzureAD/microsoft-authentication-library-for-js) from 5.2.1 to 5.2.2.
Release notes

Sourced from @​azure/msal-node's releases.

@​azure/msal-angular v5.2.2

5.2.2

Tue, 28 Apr 2026 21:30:33 GMT

Patches

  • Bump @​azure/msal-browser to v5.9.0 (beachball)

@​azure/msal-node-extensions v5.2.2

5.2.2

Tue, 19 May 2026 19:29:14 GMT

Patches

  • Bump @​azure/msal-common to v16.6.2 (beachball)

@​azure/msal-node v5.2.2

5.2.2

Tue, 19 May 2026 19:29:14 GMT

Patches

  • Bump @​azure/msal-common to v16.6.2 (beachball)
Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@azure/msal-node&package-manager=npm_and_yarn&previous-version=5.2.1&new-version=5.2.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4b3b4526..b17cee07 100644 --- a/package-lock.json +++ b/package-lock.json @@ -187,12 +187,12 @@ } }, "node_modules/@azure/msal-node": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.2.1.tgz", - "integrity": "sha512-tmQiQ2HvtzaeLqYGy3BemiPOSGPY4wCy1IW5zDWITKSs/s35WEd7Zij/hCxvUdAOzj6U3qnyaGbYXY91ortFEQ==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.2.2.tgz", + "integrity": "sha512-toS+2AePxqyzb0YOKttDOOiSl3jrkK9aiqIvpurpis0O34QcIS5gToqrgT39p04Dpxw3YoUU0lxJKTpSFFfA6Q==", "license": "MIT", "dependencies": { - "@azure/msal-common": "16.6.1", + "@azure/msal-common": "16.6.2", "jsonwebtoken": "^9.0.0" }, "engines": { @@ -200,9 +200,9 @@ } }, "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.6.1.tgz", - "integrity": "sha512-VxKdEtUwDuLD0F1hOQP7kye0YadZxFJfv37Em440geEf/w9uggKnHpRrqwZJOdxmPUOdhZ9kyRtKuAJW8wUcRg==", + "version": "16.6.2", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.6.2.tgz", + "integrity": "sha512-hQjjsekAjB00cM1EmatWJlzhEoK2Qhz7Rj5gvM6tYf8iL7RM3tkxlpU9fG0+ofkulzg9AEEA6dIEnSmDr5ZqUA==", "license": "MIT", "engines": { "node": ">=0.8.0" From 226d57fd702766436d96a33273087f5471f25bfe Mon Sep 17 00:00:00 2001 From: Dan Hellem Date: Wed, 27 May 2026 11:43:47 -0400 Subject: [PATCH 04/19] Add statusName mapping for pull requests and update tests (#1288) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This pull request adds a human-readable `statusName` field to the trimmed pull request objects returned by the `trimPullRequest` function in `src/tools/repositories.ts`. The new field maps the numeric pull request status codes to descriptive string values (e.g., "Active", "Abandoned"). Comprehensive updates were made to the test suite to reflect this new field, ensuring consistency and correctness across all relevant test cases. Key changes: **Feature Addition:** * Added a `statusName` property to the object returned by `trimPullRequest`, mapping numeric status codes to human-readable strings using a new `statusMap`. **Testing Updates:** * Updated all relevant test cases in `repositories.test.ts` to include and assert the new `statusName` field for both numeric and enum-based status values. ## GitHub issue number #1263 ## **Associated Risks** None ## ✅ **PR Checklist** - [x] **I have read the [contribution guidelines](https://github.com/microsoft/azure-devops-mcp/blob/main/CONTRIBUTING.md)** - [x] **I have read the [code of conduct guidelines](https://github.com/microsoft/azure-devops-mcp/blob/main/CODE_OF_CONDUCT.md)** - [x] Title of the pull request is clear and informative. - [x] 👌 Code hygiene - [x] 🔭 Telemetry added, updated, or N/A - [x] 📄 Documentation added, updated, or N/A - [x] 🛡️ Automated tests added, or N/A ## 🧪 **How did you test it?** Updated auto tests and did a manual check across several PRs --- src/tools/repositories.ts | 4 + test/src/tools/repositories.test.ts | 165 ++++++++++++++++++++++++++++ 2 files changed, 169 insertions(+) diff --git a/src/tools/repositories.ts b/src/tools/repositories.ts index 05501ed9..1029acc8 100644 --- a/src/tools/repositories.ts +++ b/src/tools/repositories.ts @@ -123,11 +123,15 @@ function trimPullRequest(pr: GitPullRequest | null | undefined, includeDescripti if (!pr) { return null; } + + const statusName = typeof pr.status === "number" ? (PullRequestStatus[pr.status] ?? "Unknown") : "Unknown"; + return { pullRequestId: pr.pullRequestId, codeReviewId: pr.codeReviewId, repository: pr.repository?.name, status: pr.status, + statusName, createdBy: { displayName: pr.createdBy?.displayName, uniqueName: pr.createdBy?.uniqueName, diff --git a/test/src/tools/repositories.test.ts b/test/src/tools/repositories.test.ts index 9a7e67e5..6f852dc9 100644 --- a/test/src/tools/repositories.test.ts +++ b/test/src/tools/repositories.test.ts @@ -109,6 +109,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: { name: "test-repo" }, status: 1, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -151,6 +152,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: "test-repo", status: 1, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -178,6 +180,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: { name: "test-repo" }, status: 1, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -213,6 +216,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: "test-repo", status: 1, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -240,6 +244,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: { name: "test-repo" }, status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -275,6 +280,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: "test-repo", status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -302,6 +308,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: { name: "test-repo" }, status: PullRequestStatus.Abandoned, + statusName: "Abandoned", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -337,6 +344,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: "test-repo", status: PullRequestStatus.Abandoned, + statusName: "Abandoned", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -364,6 +372,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: { name: "test-repo" }, status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -401,6 +410,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: "test-repo", status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -598,6 +608,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: { name: "test-repo" }, status: 1, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -645,6 +656,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: { name: "test-repo" }, status: 1, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -735,6 +747,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: { name: "test-repo" }, status: 1, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -793,6 +806,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: { name: "test-repo" }, status: 1, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -859,6 +873,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: { name: "test-repo" }, status: 1, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -913,6 +928,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: { name: "test-repo" }, status: 1, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -961,6 +977,7 @@ describe("repos tools", () => { codeReviewId: 456, repository: { name: "test-repo" }, status: 1, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -1004,6 +1021,7 @@ describe("repos tools", () => { codeReviewId: 456, repository: "test-repo", status: 1, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -1030,6 +1048,7 @@ describe("repos tools", () => { codeReviewId: 456, repository: { name: "test-repo" }, status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -1083,6 +1102,7 @@ describe("repos tools", () => { codeReviewId: 456, repository: "test-repo", status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -1131,6 +1151,7 @@ describe("repos tools", () => { codeReviewId: 789, repository: { name: "test-repo" }, status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -1170,6 +1191,7 @@ describe("repos tools", () => { codeReviewId: 789, repository: "test-repo", status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -1611,6 +1633,7 @@ describe("repos tools", () => { const params = { project: "test-project", + status: "Active", top: 100, skip: 0, }; @@ -1674,6 +1697,7 @@ describe("repos tools", () => { pullRequestId: 123, codeReviewId: 456, status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "John Doe", uniqueName: "john@example.com" }, creationDate: "2023-01-01T00:00:00Z", title: "Feature PR", @@ -2043,6 +2067,7 @@ describe("repos tools", () => { codeReviewId: 456, repository: { name: "test-repo" }, status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "John Doe", uniqueName: "john@example.com" }, creationDate: "2023-01-01T00:00:00Z", title: "Feature PR", @@ -2070,6 +2095,7 @@ describe("repos tools", () => { codeReviewId: 456, repository: "test-repo", status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "John Doe", uniqueName: "john@example.com" }, creationDate: "2023-01-01T00:00:00Z", title: "Feature PR", @@ -2082,6 +2108,133 @@ describe("repos tools", () => { expect(result.content[0].text).toBe(JSON.stringify(expectedResult, null, 2)); }); + it("should map statusName from PullRequestStatus enum values", async () => { + configureRepoTools(server, tokenProvider, connectionProvider, userAgentProvider); + + const call = (server.tool as jest.Mock).mock.calls.find(([toolName]) => toolName === REPO_TOOLS.list_pull_requests_by_repo_or_project); + if (!call) throw new Error("repo_list_pull_requests_by_repo_or_project tool not registered"); + const [, , , handler] = call; + + const mockPRs = [ + { + pullRequestId: 123, + codeReviewId: 456, + repository: { name: "test-repo" }, + status: PullRequestStatus.NotSet, + createdBy: { displayName: "John Doe", uniqueName: "john@example.com" }, + creationDate: "2023-01-01T00:00:00Z", + title: "NotSet PR", + isDraft: false, + sourceRefName: "refs/heads/notset-branch", + targetRefName: "refs/heads/main", + }, + { + pullRequestId: 124, + codeReviewId: 457, + repository: { name: "test-repo" }, + status: PullRequestStatus.All, + createdBy: { displayName: "John Doe", uniqueName: "john@example.com" }, + creationDate: "2023-01-01T00:00:00Z", + title: "All PR", + isDraft: false, + sourceRefName: "refs/heads/all-branch", + targetRefName: "refs/heads/main", + }, + ]; + mockGitApi.getPullRequestsByProject.mockResolvedValue(mockPRs); + + const params = { + project: "test-project", + status: "Active", + top: 100, + skip: 0, + }; + + const result = await handler(params); + + const expectedResult = [ + { + pullRequestId: 123, + codeReviewId: 456, + repository: "test-repo", + status: PullRequestStatus.NotSet, + statusName: "NotSet", + createdBy: { displayName: "John Doe", uniqueName: "john@example.com" }, + creationDate: "2023-01-01T00:00:00Z", + title: "NotSet PR", + isDraft: false, + sourceRefName: "refs/heads/notset-branch", + targetRefName: "refs/heads/main", + }, + { + pullRequestId: 124, + codeReviewId: 457, + repository: "test-repo", + status: PullRequestStatus.All, + statusName: "All", + createdBy: { displayName: "John Doe", uniqueName: "john@example.com" }, + creationDate: "2023-01-01T00:00:00Z", + title: "All PR", + isDraft: false, + sourceRefName: "refs/heads/all-branch", + targetRefName: "refs/heads/main", + }, + ]; + + expect(result.content[0].text).toBe(JSON.stringify(expectedResult, null, 2)); + }); + + it("should return Unknown statusName for unrecognized pull request status", async () => { + configureRepoTools(server, tokenProvider, connectionProvider, userAgentProvider); + + const call = (server.tool as jest.Mock).mock.calls.find(([toolName]) => toolName === REPO_TOOLS.list_pull_requests_by_repo_or_project); + if (!call) throw new Error("repo_list_pull_requests_by_repo_or_project tool not registered"); + const [, , , handler] = call; + + const mockPRs = [ + { + pullRequestId: 123, + codeReviewId: 456, + repository: { name: "test-repo" }, + status: 999, + createdBy: { displayName: "John Doe", uniqueName: "john@example.com" }, + creationDate: "2023-01-01T00:00:00Z", + title: "Unknown Status PR", + isDraft: false, + sourceRefName: "refs/heads/unknown-status", + targetRefName: "refs/heads/main", + }, + ]; + mockGitApi.getPullRequestsByProject.mockResolvedValue(mockPRs as any); + + const params = { + project: "test-project", + status: "Active", + top: 100, + skip: 0, + }; + + const result = await handler(params); + + const expectedResult = [ + { + pullRequestId: 123, + codeReviewId: 456, + repository: "test-repo", + status: 999, + statusName: "Unknown", + createdBy: { displayName: "John Doe", uniqueName: "john@example.com" }, + creationDate: "2023-01-01T00:00:00Z", + title: "Unknown Status PR", + isDraft: false, + sourceRefName: "refs/heads/unknown-status", + targetRefName: "refs/heads/main", + }, + ]; + + expect(result.content[0].text).toBe(JSON.stringify(expectedResult, null, 2)); + }); + it("should filter by current user when created_by_me is true", async () => { configureRepoTools(server, tokenProvider, connectionProvider, userAgentProvider); @@ -2095,6 +2248,7 @@ describe("repos tools", () => { codeReviewId: 456, repository: { name: "test-repo" }, status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com" }, creationDate: "2023-01-01T00:00:00Z", title: "My Feature PR", @@ -2124,6 +2278,7 @@ describe("repos tools", () => { codeReviewId: 456, repository: "test-repo", status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com" }, creationDate: "2023-01-01T00:00:00Z", title: "My Feature PR", @@ -2149,6 +2304,7 @@ describe("repos tools", () => { codeReviewId: 789, repository: { name: "test-repo" }, status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Other User", uniqueName: "other@example.com" }, creationDate: "2023-01-02T00:00:00Z", title: "Review Me PR", @@ -2178,6 +2334,7 @@ describe("repos tools", () => { codeReviewId: 789, repository: "test-repo", status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Other User", uniqueName: "other@example.com" }, creationDate: "2023-01-02T00:00:00Z", title: "Review Me PR", @@ -2203,6 +2360,7 @@ describe("repos tools", () => { codeReviewId: 101112, repository: { name: "test-repo" }, status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com" }, creationDate: "2023-01-03T00:00:00Z", title: "Both Creator and Reviewer PR", @@ -2233,6 +2391,7 @@ describe("repos tools", () => { codeReviewId: 101112, repository: "test-repo", status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com" }, creationDate: "2023-01-03T00:00:00Z", title: "Both Creator and Reviewer PR", @@ -2261,6 +2420,7 @@ describe("repos tools", () => { codeReviewId: 888, repository: { name: "test-repo" }, status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Specific User", uniqueName: "specific@example.com" }, creationDate: "2023-01-04T00:00:00Z", title: "Specific User PR", @@ -2292,6 +2452,7 @@ describe("repos tools", () => { codeReviewId: 888, repository: "test-repo", status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Specific User", uniqueName: "specific@example.com" }, creationDate: "2023-01-04T00:00:00Z", title: "Specific User PR", @@ -2450,6 +2611,7 @@ describe("repos tools", () => { codeReviewId: 666, repository: { name: "test-repo" }, status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Another User", uniqueName: "another@example.com" }, creationDate: "2023-01-05T00:00:00Z", title: "PR Reviewed by Specific User", @@ -2479,6 +2641,7 @@ describe("repos tools", () => { codeReviewId: 666, repository: "test-repo", status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Another User", uniqueName: "another@example.com" }, creationDate: "2023-01-05T00:00:00Z", title: "PR Reviewed by Specific User", @@ -6481,6 +6644,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: { name: "test-repo" }, status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", @@ -6527,6 +6691,7 @@ describe("repos tools", () => { codeReviewId: 123, repository: "test-repo", status: PullRequestStatus.Active, + statusName: "Active", createdBy: { displayName: "Test User", uniqueName: "testuser@example.com", From bcedac2c57c99c1e3a5e23dd4c34bf01197dd77d Mon Sep 17 00:00:00 2001 From: CB <76459544+cb-117@users.noreply.github.com> Date: Wed, 27 May 2026 08:45:56 -0700 Subject: [PATCH 05/19] docs: add Codex MCP setup (#1283) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds Codex setup documentation for the local Azure DevOps MCP Server. ## GitHub issue number Fixes #1274 ## **Associated Risks** Low. This is documentation-only and does not change runtime behavior. ## ✅ **PR Checklist** - [x] **I have read the [contribution guidelines](https://github.com/microsoft/azure-devops-mcp/blob/main/CONTRIBUTING.md)** - [x] **I have read the [code of conduct guidelines](https://github.com/microsoft/azure-devops-mcp/blob/main/CODE_OF_CONDUCT.md)** - [x] Title of the pull request is clear and informative. - [x] 👌 Code hygiene - [x] 🔭 Telemetry added, updated, or N/A - [x] 📄 Documentation added, updated, or N/A - [x] 🛡️ Automated tests added, or N/A ## 🧪 **How did you test it?** - `codex mcp add --help` - `npx prettier --check README.md docs/GETTINGSTARTED.md` - `git diff --check` - `npm test` The docs lead with Codex interactive authentication, which does not require a PAT, then document Azure CLI and PAT options for environments where browser sign-in is not practical. --------- Co-authored-by: Connor Bescos <76459544+connorbescos@users.noreply.github.com> Co-authored-by: Dan Hellem --- README.md | 4 ++-- docs/GETTINGSTARTED.md | 44 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bf118067..d8509fb4 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ For a comprehensive list of local tools, see [TOOLSET.md](./docs/TOOLSET.md). Use this section if you specifically need the local `stdio` server experience. For most users, start with the [Remote MCP Server](#-remote-mcp-server-recommended) section above. -For the best experience, use Visual Studio Code and GitHub Copilot. See the [getting started documentation](./docs/GETTINGSTARTED.md) to use our MCP Server with other tools such as Visual Studio 2022, Claude Code, Cursor, Opencode, and Kilocode. +For the best experience, use Visual Studio Code and GitHub Copilot. See the [getting started documentation](./docs/GETTINGSTARTED.md) to use our MCP Server with other tools such as Visual Studio 2022, Codex, Claude Code, Cursor, Opencode, and Kilocode. ### Prerequisites @@ -165,7 +165,7 @@ Open GitHub Copilot Chat and try a prompt like `List ADO projects`. The first ti > 💥 We strongly recommend creating a `.github\copilot-instructions.md` in your project. This will enhance your experience using the Azure DevOps MCP Server with GitHub Copilot Chat. > To start, just include "`This project uses Azure DevOps. Always check to see if the Azure DevOps MCP server has a tool relevant to the user's request`" in your copilot instructions file. -See the [getting started documentation](./docs/GETTINGSTARTED.md) to use our MCP Server with other tools such as Visual Studio 2022, Claude Code, and Cursor. +See the [getting started documentation](./docs/GETTINGSTARTED.md) to use our MCP Server with other tools such as Visual Studio 2022, Codex, Claude Code, and Cursor. ## 🌏 Using Domains (local) diff --git a/docs/GETTINGSTARTED.md b/docs/GETTINGSTARTED.md index ba4caa82..e9397cab 100644 --- a/docs/GETTINGSTARTED.md +++ b/docs/GETTINGSTARTED.md @@ -7,6 +7,7 @@ This guide will help you get started with the Azure DevOps MCP Server in differe - [Getting started with Visual Studio Code & GitHub Copilot](#️-visual-studio-code--github-copilot) - [Getting started with Visual Studio 2022 & GitHub Copilot](#%EF%B8%8F-visual-studio-2022--github-copilot) - [Getting started with GitHub Copilot CLI](#-using-mcp-server-with-github-copilot-cli) +- [Getting started with Codex](#-using-mcp-server-with-codex) - [Getting started with Claude Code](#-using-mcp-server-with-claude-code) - [Getting started with Claude Desktop](#️-using-mcp-server-with-claude-desktop) - [Getting started with Cursor](#-using-mcp-server-with-cursor) @@ -356,6 +357,49 @@ Replace `{Contoso}` with your Azure DevOps organization name. For more information, see the [Copilot CLI documentation](https://docs.github.com/en/copilot/concepts/agents/about-copilot-cli). +### 🤖 Using MCP Server with Codex + +Codex can run the Azure DevOps MCP Server as a local stdio MCP server from either the Codex CLI or IDE extension. The configuration is shared through `~/.codex/config.toml`. + +#### Interactive authentication + +For local development, start with the default interactive authentication flow: + +```bash +codex mcp add azure-devops -- npx -y @azure-devops/mcp Contoso +``` + +Replace `Contoso` with your Azure DevOps organization name. + +Verify that Codex can see the server: + +```bash +codex mcp list +``` + +On first use of an Azure DevOps tool, the MCP server opens a browser window for Microsoft account sign-in. Use an account that has access to the selected Azure DevOps organization. + +#### Azure CLI authentication + +If your workstation already uses Azure CLI sign-in, authenticate first and configure the MCP server with `azcli`: + +```bash +az login +codex mcp add azure-devops -- npx -y @azure-devops/mcp Contoso --authentication azcli +``` + +#### Manual `config.toml` configuration + +You can also edit `~/.codex/config.toml` directly: + +```toml +[mcp_servers.azure-devops] +command = "npx" +args = ["-y", "@azure-devops/mcp", "Contoso"] +``` + +Restart Codex after editing the config manually, then ask for a simple read-only operation such as `List ADO projects`. + ### 🤖 Using MCP Server with Claude Code See https://docs.anthropic.com/en/docs/claude-code/mcp for general guidance on adding MCP Server to Claude Code experience. From 42bc9bb7292406aab727cbb57efa44ee972b3bfb Mon Sep 17 00:00:00 2001 From: Dan Hellem Date: Wed, 27 May 2026 14:37:34 -0400 Subject: [PATCH 06/19] adding azure devops logo for plugin publishing (#1291) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adding new logo file ## GitHub issue number ## **Associated Risks** _Replace_ by possible risks this pull request can bring you might have thought of ## ✅ **PR Checklist** - [ ] **I have read the [contribution guidelines](https://github.com/microsoft/azure-devops-mcp/blob/main/CONTRIBUTING.md)** - [ ] **I have read the [code of conduct guidelines](https://github.com/microsoft/azure-devops-mcp/blob/main/CODE_OF_CONDUCT.md)** - [ ] Title of the pull request is clear and informative. - [ ] 👌 Code hygiene - [ ] 🔭 Telemetry added, updated, or N/A - [ ] 📄 Documentation added, updated, or N/A - [ ] 🛡️ Automated tests added, or N/A ## 🧪 **How did you test it?** _Replace_ with use cases tested and models used --- docs/media/azure devops logo.png | Bin 0 -> 155874 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/media/azure devops logo.png diff --git a/docs/media/azure devops logo.png b/docs/media/azure devops logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fafb00b1a0fade0d3856fc1b2488ed80388fbcde GIT binary patch literal 155874 zcmXt9WmKHa4qg^__u?+ai_79r+}*vnyHniVwNNPTUfkW?3KaL^cA@?5k3B2r>`an* zk~~S~4U?A@M})(J0{{Ssk`f|{000p5{(^x5001WGOYCoNuyzs}jsO6?)cXspkT1F9 z?ME<2MR6fO#rTJVw=WQ8f--^tKy?iKlL6%0cO)lKbtffTQzusg2NQspg_*TMc6G85 z0I07cDI%!s26p_sF<~?0Oc+{TFQmXkSsfz_=~ww=5Jy!FS7?m z;%n^KpM=C~h!EfiDAGH`IK-X$Zb8~R@#Av{v7oi=FnZDO87F$t@gyX4;)LdON>i)p z{aYFYnqr+{}p< z7hD?|TbIbL+`OK=&9RWz?A3VJc(VyNI>%V%)QNsg1zUhHJRQa;ydp+3LdPZndF(7$J z?iko5ic44}kPTC!V+i!P?B@R&{mLsiGk?JAt$$J92lf89gh5lOH#=Oi4yU}>zUEZg z{_JqwOc4A%ir{uO*DSX}^Z@Be& zZ1=tYCrr+NwwNIAxDkJSwY7c>JUjiJL$#UaKLQqN==b3%Ww2jdTmD!CNB_&{j@%-=o;)O#Huzm{^`F8ba=Fz?-7 zo&C(w|BmIr>_PR~y@Hvid;9Av6k2!}p$5hLE$0jX<@3^T0+y}!Zo7aU@xKMiaB|;_ z{iJ+Z==<>c_^`G7a9a1Jl;0M!k~O(zCEF?nc{zB!N*jzlR!QF^RRdDQvl7_4$B|2i zm^(gan9*@Ppr_k4^=7L3yPCgCd0F9tO*A}zk7J^gHgx06!F#;R+%%R_Ca)eJ0$|dS zSMvwQnpJ_oHy{=QWDdkxK8NDs+0^l^YfHbMwh!Jv&4{#a&RvlvFX*L9Df#?^DADbcBaz+m&`3K*Qm4&HDeTzLWMUt=fou%%jm^blo%Psk)$ja3ghQ+R=5m!G^nfyV z+IXOz^=7cC>gDPDx7y3SVZb{Y5={F3f{JSR9aLBQJ*~*=JXIrmh*Aw~lvG9DUSH0L zG*Hf(@ep`;7sOBDmGdS;X6Sn-C>EB(Oc&*=&r>|1a5efr%;h%pY56|w>UpmGbvE38 zwtEt}*MHrV5r}CZ9+wO@o$&TH{bLmT>?5{wb+9ai6HE1@x=oj%!lF-o&6h=>{z8sV z&UeMRBex5oiy-95RqM3s-EqFrL%p9Z5lsxz&0g0Uv~S$8jEx!2;w&^m^jsMBxHV#X z!&O>zS26yP=VPbC_r0fjFTI*aIl_{zf*yvw5NqeoU~F`g^#QXFuaDxsmk*UM!hc;V z;{OXH-yp98esSXFv?JYK!iiN73D7zc#VGZHRB=Cf005wd?3))0KJ>Lna$PZHzMxj z2Y@)$(_#-R=aQ9+oI5jrg4QU??^@{X;Qqc|_Vy*iJTg0BD$7~kID@3cxLdotU2y30 zhko0RM$kK!O#eY?B5~%qe&vO;P1QtFTXucR=&PDXFEF$SC*RP`j@%0-!wAwGDHk}2 z-dyX7Xt^*5Yq=s`Ga|F}4d3n^MHP7~C9{7$a)c-FEO|;5K*ve%jmjmQ) zhR>_vuF){qJg$U0ToUHs{UEj3PU_r$d3WFz$y%P!e(>z$aLwyGaCzTT7;MxfpG+De zgrX|ZV!H7U_Qd~URhq+QI0vwT`gm-n12u9-EY!UQdmOs-IRNUexweI)Dsp7N9;cqV zY+7FvTu$_a3E~z{)hlb_wEHqhgl~oedkl#r3TUwL^cE>DTW#BJv60`yMP(g5pzbZQ zn|)rqF(LffSBmM&DwI>bSejB0c)G=14i`#U&{M}+jc_%TS3KUJ4`TB}PU-agSRUhL zIw?7y3N4MEed~G28-MqJ{Jhat`)=IIhX2-->MhV*)ZJ6~lg(##jFg(hR|&b4))Tcm zbmIi7#Y_Z~oEeqPB0nQwHEzLYQ;jh3*(=Wg-~%hZ<(^9<2-X7;Exvo&_&y20ZoQkg zt@}TZ{Y>aA?~or2CO>$nUzp-Zmkq_s49UhSdmnj06C32n=t0!S%}_w}Ysp|;YU?Po zdImq4fvF4&+^ri*r2Z)X8zQAe;?_ln?t7F|Q~eKK5%j`Dp2xFas@kifcs?kHX~p9X z^La?)W*w;7VkXcJ@Kw;W>3wmgJ3&HzUP`T@$ov+b0e7tL1FSZ zGf76kYS!#vCPDhW2LmrRVk~>-Oa-?me$1#r_jI4z0y@!p^`zG(`k@cj&u2y=XSp@0LS& zV)72IwJ(z3BtKhl(w_XcM4a&h@~=9pdCdc@X58Ae4KP&_af$<~b#f|&B&^~wn>?Mg zz0LgJl87$if3AU1)_Z6~2L}V`V(qd7U;OI9`l*)>MzbQ6;B4^A8NiIy%2a(qxdK;v z=YGI=gox^n`)rk!vo*#TG5C?34T$o?>1%H|ci0O&^hW((toi*Pzak%}9DqTZjVfB_ zgZ-gn^B6Ff{AciSf-t8fZq*QMo_~tM-5;^M>makCwOBV1e8+9I4U6^?uZyC#m)Rjj z9-X8r6zN>o-eb8tq%qig=Hpe$q{>3N`C3r~*MC8-2cWRqfs~ErI2!1&+v#J#fdrA` zro-+;0*?3{BlASBgV5z@B&LZi;SI7F%BK0piMI>6)GGD>Wp*8oeE{kR&RF=C>f?Be<+BsOActr$1%3@_Rs#UC*cD+qqoek(V%J1%&L z#rsIbn3pMO_fqpC7SiAxXrx-Z!*3BRpyBQr@?CB&lYeq+H4T?8v`{%LN*o*0PqHKN zo#gIlUnhZ$z=}3pYGqLybI@A~_>W;}gC)BoZ6^GgE|Q*d>qLBfgz&Ozha2n0>=ofU z_J|}PYvwnB=ccZ2M8z>*!lS?%)YXSaeQ$^=6P6j{W_7lZW z9>fRZXy7f?-T6NHmh)9N6iKrrDY6Iw$8wP3Ad&`hh zA2lw~hJc`V768*l$d%wqdp`0tbW8CLRq2>>XbmxrzkPfSD%L_Ge!)d!&1CAdcyzK} znSSzqRJUspcXSo0n*JE8{SQG!<-XfNI5bO#GG7qQa2?@NvxrY~&)YfB{NFslk_7Y0;3@3lH1b~(ReHalHST|VXbBNzEn;?8I6m-@9@3=MrO-91zF)k4r1U$^A7;>qW#E$;) zLRfv954v7;K_*Tt$b=tLP@YA;`dvcYfvhIoFiIys%6X++ z?^80*?V9xrmr_3zsrgdiaLHvOOJbbX>k7_y%|K2=fer)ZB%d?qmH;04a@A*SZLnli zsO-POpe)%y^F51LFmI7r^#75WMkGP7U#V;i76DD0E!-X$S?&iOklj@w&BKEnsmM@n z=#3IJ+POy$;cdupoG@oI>#_EyxoyT(gcF%XQw@dv=D|q78w@0wqe2o%XiP`CgZlwa=5FYyV z`$NyyiORp2fcXy-$v^~riIh|w8BZJ?BLJrnI`Il6J({t0JOQ^-nGuV_?e7cbwt}J+ zuCIXI=&`sYjlR>J3A{`la+&5ip;dJVo!#~Bs}QM5Ndkr=IaSM?fa(O%!#R5tU-Oll zwT`Rrz7L4++|rTp{|qP~(VL#EvfXVo+#0qlnHI%A*W3oU<6U)dH*nMx4rF7_HUcR; zcg(kj1TWWFe)KK%b%Z|LKlzrlb>Jy`u2>kHLB~+NsBa(MpPx~hJm|Qqp^mNo`4mR< zN82rr=cVh*{rlnZp8d$uEA z1#orI4j*wlBTnZM^l8;xqfAZ?^GW@{j_T&ZjOvF+lTZxn5vY311cjq_I>T9-ejcKz zfS=PjAk6XlG_$^r|J`rnzx_UH7X?Lyi#u@TCM}s+Y|_C)m>1vx2UE!b7)YiBqpF*lStkl*GhhK?$4XhA$&bv0 zxyThQk>uR|OMg>a^#4-?TO`gDKN>zb$T+whcEYpKZ-kaZF>~S0omSNlKX(Fd-Vz0X8&vWCWMaX`LC^>U!jN02jR8&ZL-x&n!;DBU3t3 zI;@1xd}xnnG}A{#NBKsv_LTlntlBo z*3BAD@-^k!!DCQ_DT}+cmP+p#`?b<`=`C<&)BOV}5y=+kK@73g z0sxxTn5zMpbXt6lV*+wdinI|ziN~{-6W|Lm+!9oLx^zjh)fLo zH3GR7WvpaDPweopRfHqk_e~s3v`iR0gA^VGWmhNLTsQ?g`r(=Of(l?`t-Z)3A2;iC zP3ECnhCj2h+Ej4f5pRq^bUNcr&VdvjU*H4gSB1V zXQ9)&7Y=h1Xje;Do)j^OwxJAiSs3%6NRwb1FEI>v(RwfTC;b20C%m6cIP-!-7eQQa zBEu6?)%ecdpBw@c`$}=qkktxt2Q9O0_XmU8@zg*Kcw*-X8z3@sS9C##U~*YHK`P7= z+rkeQKyKwXxcidkNf@D!DruA_f4VP&il3^&t&$93Wb>B}M5O#j*Gp6sIqOPcq90Jj z)n<`f=a4{Pzo}71BWDk9c=g~fm|dIbDlP;;_=s)~RCM!{UbGRrKWa0Q)Y~T`>9JC? zMeJ2bM;yCd?kWMJw7S%xKiiI6UW)cIxn8TcID5BB7pcrkjsK=0Y})?^HO)h76l%hZ zR*q65bx1L+!D=v4WZ`m(Ju(t5@gt0hGb+19kEJBA4<@IpXX2|;X!zuG4OLtP327IR zNV;6HvXXnpRoweq>;nW0uV&F=-f4zV1G5a}w1lmp>YNTJoQIO04T zpb2>!292Q`?o{hYurhx(;dv=K8^KH76}GQ9GkghRR7E}+n;5iZw--C8zq%=;K>tm! z17TADC>n5F#JMxrl z<9TGDP#pDf+lb8#0u-+g5iAh(80v3dadIeJ7r9P`E{@_4*=81~x73Mrf^@4{ga}aR z9Du>0EhoNmdRYP?TT`|nG!;X9Gy@`srVk^2bqF;o2PJ(9{agl)5?F`2yyN`T2St#1 ztR9d`OkCHpkUxJuVIe4&@w@dM;R0%Z{VGMC(3^wM=R8Hg&B^TMt|yey${s*?#Tc?d zKs-Ryy`N%G^Z6BQI z3BC1K|Az9MrRq6ibz+SG%PuSzP?tT6PNv960wTkYXUw(IKF7l|@-_euP{n zR^4We5ZtGH(LdPy0}*32I@ov^UtVdr^(`q zL&bJfkprQS{Jw=31?Ov7Flk}Qf@bnFGgoCJ&`zbR| znOHb>qr+WtD5_{tsxi%lmVN+F(eA+6p%9Xvib6{cS4hVG*q_kHx6Ende$a*YqgFB< zO3N-eip@nTo4$C|dR=&@aQCBsQ%km^yPIF;f~;RHvi#MqMC{ew-NDp74oITo`9ivG5_22P6| zj%TSNB(hYK_Y2ioi^NnNjoA5u8>QN`%e6t3^aRFWXMTWDDD&{@9_Z)Z8=+<_LKX z1qZsZFKp+6USmVcJJ&kDyf-6SoYS(ju8xgk$QM)f2b#ilE+b4W0T4WQcs5l-h`U+i z013!pz%7P4%cOfRxyi#d{&dE6=;7eqly3145~Sjq-rBS?frr42yC`4t_c}%TFWdKt zcBtV(=5O-!O6_O-VES-j;77FFz{d~h#ojzfGm<^jYVqn-pAlCPkq}Oa(iW<;BUKO3 z8U;=bW~G}UX%#b{IWYO=EaJqHMs8S~*MJl6lw2fR*x3q}AzbNNn7|E(moJUpMYhcR zICRvnmb0N@5!EofA7fRh)Pc>@tJuGkO&Ef@Kv79N)fd+CGK@iw%-&chOPk zg*}Vn-dCMtzE0d~{aSS>#*uDn~CpGftLPi>K+KY=KCv$=X@Q+#$!WN8hnYu4pyhfGNuUAU%1u z_?FlCRsP0<96>@thSG`Wc)o|t0oNF0y6dk!@_gLK8;b&aOs2^8ME;VeP+q#}V6wHe zQLIf;dW8nT``S5ri{`-;4+F&}OQ=QmAW2|a+n;Wa&M3^`Dg-@MZ5HbWCgN*Bc62>6}yEoZv#?ixE<0n)+ut!{REe(#uBrX;}y z`j`a?8}YQ}OT@ULv$#C|-hygvYTR*M_R0XkkEgTLLg6xik3F0bdd;)qj*PPjW}o6uEt{uh#&}RA4yM$;FiBTA_nzQUzV_rY&W; z8U$H6ls<1SybQ0MwLSJNY&5<*2I)Jj=tv;A9syi>I5~2Z1JH~2Ud{NCKM?}L&6A53 zQF0@njI>RyyUX@7lAvr^%2Wvn)}af`Q}5~a@}y&#_^CG#x__r|J3&sf1G>A;$>ElS zZdc<}^pY>w?FRn%7uP<*f+j7x%u*8P>4;Vk6?)(Z(`kMQ=Z$O$s~KX#7v>tSelLq! z(q@-*oW=z8V_BhYV(^1wClOkbbj0P^8(h=?#M@8X(r8S4dJ(BMCjLCy^_!k3LU+{= zT(-Yy6QZZ}-a?i8dnzS6P8xhoJbq(=;5)}R)Zt59WdqoU$u)kk#D+D+&cZV520Qt` ztY*hYp6jYvJ&n95?{NPhK2xo0MqmK`Jz-GgSR3Wzr9f{UYv{7QJM^g(>e2J`1JD**Izq z)GCkUx9JHR9fsVycvJ84=Q|t70lg*Nw?cc7br0OLZlyW%sVn6f0mPr0)sxT9J37*n za1aV>{Ou#0Mid6;!HTDV?tm$`syNH}Gx0pLrArZRu2=VTZj`MIoA&968+Idp3XYn0 z8t$5aL^}v)iCU3~Ttg^1J;%4Av}qO*D{7m8L{cMQY}f<(Nvu{&Dnk1>IjxGZ!b2)& zwRjwCjXJS<|xlzpgRQd)20M0M$LuZm_PL0;)Mv3*=j`mww#QToEyS{FIxr_{dNyhuM z!JPq;c<=7+&SrxsyP7NGe!H4E_g;88k%fOK*lj$yas4hBtiPhG!9+uPRTsbnL1QDf z5Eb{8`5Fwi2W*iv2FIo&4hS)mAl6SDrBkRqD(&;LCHz$K=bGzfh8322S=`s&BWn0M znTm$gA4ix*1)*WHP_9NUVXlfCs^tt)iX(Vs0A=9SEI-e@xUlglB1m(Bp56b4aEIHt zdmF@Ca@0Mkv0NZ;%bADl^AY&n-jy%szod~O1MEh}h<*%t7-t=I^U>(~%(^6T;c%)x zPtwAVgU~p^P~KMBKUify12S_Kywd6nQ|ZYCqJuac6@N+ZwwThgkWU{@J=l3P*jFz%e*O{ z)D@uE3r-WVmy@vFe*P)3N>KCVIckc#IAGCQ(_0vCxPJ+RhK6~lU&whcP5IvkGCQm( z_AK|%M7%AnD})=(Ii+QUgal_%J;pvSIGes-k^J!P;gkJZ_hTHYU?zFx;DQu7`IK%N^V|3nGbMf(<2d2))^VFm2xwyt$K z@|!-$0aKPIS5uWZYP@wgYmSBZSdw8Z3I{W)Ujpj(pAagIq6_b4fR_)k_7gzE{@JSCxUcmw^p;c1(TGLn3-vR-6#}PdbHRN zXjCQx(Px?Ei*_9|bCNZeari&gGNBi>RWU*c7t_9=rYwKMK4F1UMFh2^)uW`OeF9ic zDs`P?0D198UUT^GwCUfycp&jzbJF|LjWF?x&A`gXo8=7ws4Wf{c{rv>ur}41Oj2f2 z6Z+A5?09!DP&^J{6~!v`B+3Wvj)tVbJT@gPNS58bc&y0?Ff~-AJ4{(v_-`9#EuhYj z)so5xU^LSeye1T5)FYTX!(lK2W@>j$p)+~&T9u3d*lxrOc2J$^&uO=wzS%D) zJs>hK!_iTyf=YU&R)2K@)<39AW@g%v4)%~;h(CH4@e?z0^KsEEYyzTh;`7ldkwZO9 zYp)O4T^Mio>s)Uzp2m$n(K5jK{~}n_zC~OkzstNqopxwt5;o_rkr(7+F{MRvUEIS$ zf7ko3Q_niE@V)--c;3ty(7prk-9VLOHtgW3Fgt$0mW<%f!ZZ<_29KGf5ELfN>#sxhDmhfDc_@y9NP5M32? z=%}SqDa?`Ej?!jH`W&cx=c|c`0ZszbnMD;?L4%{?SBg!Pp?$SVa@4 z51-tf@n~b2ivz5*94A{yHp-85JIv-58m_Y#A(g>p0Lp;l&Q=d`% z?i&S|U=qR#XCi+x(g~7mREHEzDago%5Lo40m)3?rXzTrh)1`KuG>?19dpmUSdEA~) zGy)@*w@b#<4a$`Yg;nWh_-5@u75vAKIaSS1Apr#YbdS}6VXS30v|dVpugsDadFpUa zq%=ef{pICc11B29C0C8CcU}nrSD^X7^CGI@H}!q;c^_nXpDrvP8+Vp)!Op)IwtxWaTGg~3f zJ&ZIWqf`wI_HykNv2WZ5qTe4k2SidOAxGr6m8-Jig4D%nJoOwrIN@x19SNfoOCqlmtTPLNfpkG0-IIU|MPaIn!j81aUssRpubzxb=~|Oki%r{a>V!|O4V;28u^nBJk5~9Y zkx`$$=@ABH0T3Eng$ZUkm+#uWR2q%zoy_E*^s@tkCt8+DU>}zuWaU1|_D)0jtSpZ; zBVrY26y${AR#lCT^{VSZ2a=7-PpO)ssTm!I*gUrZ%f8LHq_hX!c?Pr?SB&Ciuxbx` zB9okI^QAWHjI*yKY*nAKm!C1#5r&0>3+eN2QND|p#5NBDbCES9S?BV4|6LiQ9w=md3D6^eh*bl$`p6g@1HLs&QRGqtq~2{)Z?u!KA_S9K)sVewuzww~Ewk0DaIwWa10 z!GaiyTj1wIRl!NqQ6g!@{J+!RX1O=2>OdCr^QuQ&;AY{crO`yT9W3twLauNES}@<6ZYn|U%~CPOr#+F7V&_Z zych(-Z19OqhBRR@fb{|x`9#M& zCD3P|nOUJtp7!U9k9-T@_m#1Dd%^nu?aCq$U8bqk|@z zrq)@hfNDmBSPVstgadwg6d;orZ}=xCbkpJ)`l?*IaZ{$>GyEWa!AyNTvF>6Y2W1zZ ziZvl%CND0&qrKjJo0=k42wmE@u7Gd_HI-+@>l02ofNDTMu)8$AjB43{1g8Dx_JVvVL2U#h;fUtLy-pn=W7@p9XBOx-D;gxHZgU^ zOy8%2b!)p=>oeQ`m&vhX$@Db$M;+K3oWT>W#}ESKo^4UZ&9eK@Vp5;YF;Md5@A+%_O@Y+7{~C)kb_>%x|1OPp>17Xa(G_Oa83UPnDH&bIb#_(_ZjX ziHnsoG>!#koPSaD5SEVyt~aTo;B?56*nlOHXG?9@pWUuiu(vfa2Jcft3ahWhO2r6! z&GOXuOBsU=qZ!+^ei8!Sp{J`>LTGG<4=3{DFuzFJ)E`)U26p*k7(@%w-O=){*q*p@~(jZNWVFAfN zoRrO1trN}A&D$28fjD(L4TI>l%(+`nzv7}dnuT6>+k#6_K+&9Y7^b^z=x)+;he6Qq*@6+s zov4F2UwLvC!TD=thA|<2mb3ctN5P}HMaTJmti2$-%L=~!I$JHeHumF}JESkpV z6Qt`XC1oCMqN4di%F0}XxxOo&VlP7f=ZHYlW+wJXgOb9nG{KK)a;rRXf;w&VR#~;f zSiRvkIGgj}OnTLX$+>*)q+G?w~2;-miv;%h?a%nJ&^sBnSjf^ zQj>Il)El=MpCY8;)mZ_Zw}ugmRzvF3VX7Dl`(O4$bfF`U_tB?n;~Uk;(?e)Ee%`fio^dB=GChooGrRCyF^lM+n@;A-AtBzg3aH|y97M@W6nv?#Y;I>Jo zO4xph0S!%YW;vJ1Wf3u~9LXqzv#LZ6T++Pl!n9DNv;7dQB#x*)?%S}V$|DI6O)D?8 zud-#IaDO?{+2}bI_YaaB>GGw&StDHr#grPQ`F0`OYeW$=DJ0j9^Q_@*7S2Sz_8NBr{t4?&Dl?vjTNa)sQZ4+B+VaPp~t{rs|42{3k7nAfLW07IIO^9#LdCc5}(n{fB7y4(?w$EflHtq zT2ZJ8^MyWQqifO_ksE8+AQh3FKp;5S>2cSys0U81HWZh^YQb9VUJs8Fy;MDYKR7k- z!-zHRBhZD6b%7J7mWO*I)IK=b6{FTkd@=VcAwryApW~9NsuLi9V7I)1ArXs}iSZba zgXMEI6xGL)>6drv{K5<3jrsSVE!^La zA(g-qJh)G2<&$Ze7|6x7qJ2vDo)Ly8~#FWyx%t zobaeSgQYE^IOUCqT`~;75FMM>zGXjakx^vi96SUmf4maULmP-(3oq4=uXX1A6bjQs zNUwcX_Rz8hUPSu>H*!Flj&%qXI?i-OTSV&TV{?U3-&v*9I4cOq)UMcW&e}^w%-uC< zDqSxVL6y-+8qwcwR+GIY;G8hlXsM68k)42uv!gmU_$`IK-<}be7&*%Lpg;3bq2(a{ z_Dc)|5^52NPHz_0k7eGd9cg|J8Vu)~X=hjKpyza*IjYx7>bL+q&i(@3&kS-aI0aul zpjQUUsbJ?~jXEeCxp?P9sK(jve*0cD>b~;5U4_Gp>jShKUM{>Q5cwXROSYNtIYXi= zUQKlt4Oe-Y^o7f+Nhz1XEc%60UyJbxpAO(E)LQlbYMPpaJYo7?h6l5gY09%oWvY|X zqQ|7IjUqfK@-l2brC*?1r8orwlr91-E|P;BNURV;6H}86=Uc)V(nwr{b!ZTM;7nXr zq~|`bP?pK5w+cMum3*WmN^O*a%gHh+mSvH(*i7!xdDf)a*Uao>aqJqEDU3wU$W_Fm z2(M=%du+gNvb>db3CofRb4x*($7P#vw-r@4YP-X53`x&hcD|!7;`v|7j@5}NAH?kR+3q0j;ViYNLTBtNaS9QgG}&Uw`Vm}OMFNpRov_Q3fjU2s z#qGF9P!4{tl<1m){(PGNazjY3uYjZ(O}x!=2)(})jL4lz_^EatY=*yZ_})&ed(OOH zZtb;xn>)lHojW$3$rVMY+Y6}$IEO}L*lWv3paiE9sz1vPfKVsZ>vK9cZycDQghZt` zKJf|jLKV%K^2!#ZLHqQlAEXY`HUt*Bh|05nRsXhY>B!Prs!l2ST|g`F!+h(dIe7YJ zv~-wg>wT)ps3@Cd-6rehG4#m;$cZj}9+~Jl-KDjCX780Kld;<$^J#H*`i3o zabN%8*aOB20|NzH#v=W5OB3S3ucNG_+JK&A?8o?fj90Bv4F_Sxp^zY~*N2Jo`qGEA z4?PN!G<}C{8@-=QiwCq``zkwL8s0C3ju`ssg1yBeA6LH|yw9F*H4j8EFCgCI_gkjn=n>joa*qWMg{lH1u0^I083_svJz;tPer2(?Bg`Lui^)rd4~3o?Oa>$?X*i8nGJq$=Q$1y9F3^5NVe zz!fU5F%SqA`WKxch54CTD=1i=v7!88UaO7t=AA>LJY-b$nuUu)K^2 z58iK<>jrUIyGl|u_hlu}&xaI3WhbNTn1|^ugW&_Ga@J zxgo+uR10=4fpl0*?H*+V6g|Qfm8BA5GkPW^I@C>{hOChIM}Zn@7<{FNQO3Z7_AOn5 zY%i4|auY-2Xgk@ZNy*($e_B&>DHtp1q4p_~!F+~Kb}u(*sD3S>_(`L|9A&_W92)UA z_CY>H`d;Js+eM(90*filaXo`IUq6?@rxKh|8Q6~g_B-+T#gY`G?*)BYJVn?wZQT#+ z!#!l4OmfFpju2&E&9^1JQpJdP94|r##xXzYTb6o>t1%`Yv|py40Fstf;(`b;=Du|B zZx9h-%d3hhi&&BlB=Ldcrds(ue}~g67Avpxd-H=>8!c-m0t&(d)<}Vc>j2Ob!b*8S zm{XIeY-EfQdgaIpS2&-x@?Rwt&vvimuv|$d)m8c)Q`PQ6wCIT{dghKyP9i~*^ zjm>p!^^Ch&`@K;OgBO03zg)i$D7T0iRASg<0v6MD>f94V3@(GgJKiU6td zlXf7(mj10dBlS)dzc~ct7@58pdmRY2hQL7UF!|2le!8TF00aLp z6K^f8u~reC6Q|t@;%q8TZgQV#_*Bq5OIJM^ij!_5o{M0%1DKscQB1y3=-r6wjD*J3G|6oE<0Sm6Lu z1FgS^;){GzG6-Pbce2Jk^`9E0@Bhih;3?g8)?@0}@}s!f#UB`nC;v;ev+BrHUVz{E zHCg{=R$6a(FO>m2pF^aNjW{z-^MD%QGt~}9T|ENl26i5->oS|U5V^6mzRxvCwiZ_A zw*Ofmv2??v1#0S!2TXCU{a3RPNQJ$;;7H}95yG!})j&#D_O0TeNCfk_iM%IqM-e+B z^UDPbRkMmRdc^-!K!Ll061i((8xJhStBO!1r2-ns*IGk`+A&RVl{G5R7noKYi!-aR z$k;Fi8a6zBJ5iWxYX|F<0^!10RaA{tJq()Au=&gKZ){3*$~%eG?RvNF#K@)GfOwp@ z9_Cx5BJ2DoBj!_hVO=0Ds3-}O89a^JefnY26${o!`meI5Y_|1RXIU=`r}!fp+y_hS zgl64eC2ht$8T}Et`lG5V+uqusVfgR??FNWHR`%N&Kt_9y2Hr?%Ekqo9?4U{33r!ug;`CJ4ip>=99an0tW z(~gb@-X=PiXm5R9#x#U;N2=2H?jYV`%k~B7rR)z*BdNGtelR&us+RKTsrJyI@THxi z?n`G#J{WC%W^>~x^FBb(4{c4GrNN3bHa|2<&=V@BOZOhM5I+t;N%MsID0TuZ2ZG|22B}fF;ACVB)9vQ+vqULPW6NbZcaW<(9;Ssu>_Bk zndRcZ5brqQ%n; z3}sfw+7&++&SWPIN6C3U8l~_cx|W2vHAOM6X}Fx#^=$UrFby_~!zi>2XpImw?3lzu z`stFo|LJ%=$7k=HunIDhgenAru03A1(2Q6McmgH^5?>G4&aN-|?efa!{8C6EZ`dUJNlB^Zf(L2RK#5pa$@Q4Bxli}6A(n(;U(U>5Rc z_!U-n%OxlQUJT_=5EN**Tk8q-9UxB|TxjSPSy2JEJ}iLmZKEKKw7i}k*6PG24U;%l zXVF^b0hATW9hgO}KEYDDP1-|u!^|xRFO+b)GSOQES1*1L>wQmfZ0`v!7X3+Nl@C|X zeCJDN(bqaCd?qCRlPOlo3wAg4WT~y&5pWKR!p2TIbJtY-uo@bz1d86T-*l!Ct1wyn zR5T!XL`f2B89gcMd^LEo zszO;TXXs8{73&`t#I4k~=W8Z1oQddJm|If}^s?Hjn2(FMVl3Bk=_(nbJIyNRMrlx?Pt{nY{5X#nT zxz@ptQXE}MCsnu0cnUwLc3;@>UN3osJ5p2(hHZBgPEBugeuo~xfP;FQidsb1h~nEx zF`@N>#OAw}RpI$m`lqFFsRAf_gFfGACfR!<=lIYbWi=pZr$DDDha7{UhhqyTAPSMz zXnmHy&H|Jp?pI+eNK->I)73qR5|GPZHHR(h>>;Ur7KgmxNCX>CqK_%ame5P#}KHSNUd>yAww(%t(0{fBI=SyDo3no&Te6~d~Y zdpme_ZJ{5*W{Xgy?7RtlB9->4{JIG3p|;@G@YfdR^Ey{Wazc> zrD)yKmeB)))v(K+JX`#Mn9LUNz#u4&nH`pl6MWmJ1A)i4$67CeZv#8VrYA%&0pZ!t zql-rDoR>2gS(d%rLGWxCheoLfPf$uvkx#MGX;kU^+3x7M>U+a{Vfha5Hp^~wh8uxx zf-<3nLhJG+mqM!}5MJGsx0o|#Rje$KA{+A}q!d$tr}M@w#BuCIt5JE@F|i zDMVJ~CloPPaD7Qq!~rE^p4kh0<_)b1?Tv$Mk^aanTv%$9m9Vr`&9<^l^P(^xMich#WeMB$&bl@%f?xB- zJU;~gT4K8Zm~t93OcE9Y#*Y0b?LW$RoS|)L5S*@(%O=o8hiwLxOAqx{Cx@9!oK^VR zf+mQx6hDhbi{(0vXi?NjEUS(zNai+E$^~$VuJv(WQ6@9#vI9oyCO`?R8YSSlD5b)P zUvK)p$vcUv91k&AcdG}X@VG+e@KWx?13If|Pk(?0u^cK2_*%{n zRwaoX_)@vyTOZjUY>OC*b&jt!jKKg)wpl9)vYGO&=+1PmORbk>^8I5B(lj>dIU_&l z%7A{C9^H?<{txRw6u;R5K}%jxaa;02%E|ofd&T_NeTW49e($k8O)Uu;XT)z>Wv~I~ zF45dzO?pUM;xcc8HHhgfv7DIt6hG1|gIwRH!8d2a*7NI75P;co6}w$cMr0E-B3)km zPJ#>1dGBz{x+V0J;L@mFegkAiv<@VXYg!$rWWZyF33!z~CVf(&rBjzLNCOW`?JktX zBpZNbg$k8o=q8cm{Z>yEcV+dZXf*gvO!QgJ=7N#Ep6~jwyy0D!zAV2}qxI|*4^-FA z@|?R*<18_2~;1^TqDj zj1%(SZsPd+PwX%IKX~_xufK0gmb@Uc7@!wW2!3cuWoA4iXrExSa)4~p>oj3wHrd$4 ztTs}qz|P~pP3HR=txRTvC<}?U(YE@2W0@+3#M=(%2MpwTRopmqd05+E#AT=1}*QnA|wSxEd(GcL|mboH=efoA4d+)l$)M>MKsM*D|k zO?EsdY>^uQ*JaD2e9m~rSFglU1722hhsIkg;-fqLN?Du#+4>e5)EZy6j?PPjzXKwAt($(dBT(BOwhKhB%rqwkb}z$JcrF z)x5HRjg7S7Qmc+oZ5Q6x4La*OF|9D7rN&)u?b3At>?2&QdriInsP`VNr%XFC-*P!_ z)eH94kAYE&_EEoK|2p1z<1gNOXiJv7AhH0^3nl~n+$H$wIE{M@zu~7K0O`qOOn){R zluyYBN-{4rND@_mY-Iv2@QUf=z+R@b<3H$dkg0OCfwt+sOc6#lzo`#9%aF9!*!Rv9Lm2<*Z-9L@9_VqG_Va*Wp9OC~8^;5Y?;50Kf#i zbh}xDK?Lf$#0FImkM9~Q)QT>Q-hdpQA*lxoEB(*9hxI+1aaSlR5BH$wWLfiu9Z^eF zXKgnCIyOV~uj~>in^!!}mN7k{n8}OebrW#d<&E~w5{v_QhY7~(zS6OPm}FFZQfQg# zb4-WCMy3CFfuJQXk}Lr90?FU_kAM7)xI@5mU}S2UA{98erGde%K{GG}krHKUI%&8K zLhfUTvp2ZlG~9A53`2nDY>?>^Lp(~Daem)1&%J6)Mrk(zEHykUi@_MDaIwU&EeMuBf5u&)SR-U<~%Y`5yCcG!<$k}6Tfz&I((~-*7N>kvO1RFdIY=%yOWpr5I zs@)!Tv%gLEjZULMg#tV@W?5W=OOM@U^4m$38@>*d!L}A)Jj%Cc|MEf@tlwTbh*0Lu zVY?^q&sKFsb_5fq-pA@{S%1M@07I&GRXso!utEhRS710>&K}5ZS1~$T-muG+wAj6;&g>NHa&^4W^laSZ(Dj|%8!Y#2K14*OdXh3+W0&$nQa+`t zoOW-FK~fg!S}sl3RnK;9McOY~=im>WQpbI`#(aQ9u{Ot&GVR(;8LI(f?knsEKnnt& zP#28{GN}*ahsqgKOxSi%C+9|nn>T9g~Dn?~0UhCF+ z-y0^!vSF_x*2!}p9NZV>Et}q+@$Bx#*dWi-Do z2d+6rZ=&d=&=Lr><1W)cTNSb-w^R@s&F@oRArj=iOl&)%|ByQ6zC)~=m&2~oW;&AB z@z3|{FZtJ2Owf|&Sr!BI0>}w|>;ylj=Rz@V%WGZA~xmi50nZ|!XIk$a54%#iUYPGbjHXtrtV#7FREx#KSS zBa0BN!*m1n5gE9BOFi~Zg~bL1t&jjx=wEW03vYC+)pf?fRC`37AYX>DY^?&sMmd=v z@*`L+@B{pt8t&Clt_8EUnda8}1Mw%>-PmSU(aQGKGeZRh)b_hDWg)=!?S;y=0zZ3k z9k9qQ>u~vOx#YO+EU;Z z*Q5J~F-ED_OK;brWo*1_pY~kJo?tDo(yaOxiM#5!9kV6O6S|YPtBuR~a}?-Rc;@#^ z7(kf0DLa>nH|`dV&^vx7D-@6IU+wR`@#pV7vL#ENQ*m4JT+841k8_`&^K-Ajvbp8l zCWeF`-E1D9bG)3>K}br?fc5^`iCLMTvZI*AS}&=&Wo}~17tb`K;$%^343*h52K=dx zrUmck@L8T=Icv(=YVkCdV!RMZ!F$`45!4|70Y-c(7_1fm3O-MPr=riYMr5g||J>cV z&8^jnn}S(LH_Y5`T8f~;QDQEE3fC?Jwg_whab+<=gWWJj1b57o-?XYEYBL_ojLk1h z6@Pb4C(JKhTF@rhrv5$MeaXB8-F56!!X$b3nIgHuuX&$svK0a-rOS@zse?_>!j$It zF6@y7CnLRjt(cigM*%;WFWjR#cG0s-8eXi?e6Q*;-$k%Ala9&g2vg|R3>cqphG>gk z4R^K&nnla#c>im6YROL0ACj(yX zDjGYN7JAYsUR|-l>{dW<9DrJeHt4Q#e(uC_N%vWgZJSC;*A?{M^@`T3_D-vKBZA*x zvtY@4zfz-obeVO53glb>4*IE+Q$&9Cc>};fTdEE%y3E#KM(!EiWnWf%DA zA)x^hyZj8U8Z_n2T_60`^%-4)_w6j(k>1mzVZQe60zpfjGg&UM=T!d2|L(`%@Bw~$ zfWvxWnl$GhoBS>^v&SGt8kd@4Gx`hh{rgh<3(={rcz7iNrB=~|am&;VdX z1EjmHhu|6yEu8cH-=Wc{cqGwuNafDo8w7disC9gK z^rO4@{S_0mfSxls!OwoTKf!mu=bj{V&QFDSXp?Oo#*KrtersFA;AOLN@0ib! zr-4hsjkMLltZ%>!PSXxfo2AfF9UA7!7lt;tWZd*v`8GuGYGFR!25S^$Zvv(C5MU5^ zcb2b=pJ5zN*A~i=#gb-*Sf)+Df+8jdh(WsY z@Fv*mf<`<9F#CkJ>U9u?Efl1%tWE&oL~>sKBF_yaasHL%@e}CC=Ms6cY?i&aC`w#U zfEffBW=@>I#aKRkfxwt?1Jn?E=6u@vUAKP4BAiSNyjzK z9XZYyBReD|mA0YI8+Rt=8ru1y9Zb*yK}((&SpeuclGE)4@Z-xLe!Iu)c*?y`%0A`{^?A`2^F24;w3qd9|LScw8bHL-P_f3{tp=gc$! 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 Date: Wed, 27 May 2026 14:50:19 -0400 Subject: [PATCH 07/19] Enhance reviewer handling by checking and updating required status (#1289) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This pull request enhances the handling of pull request reviewer votes in the repository tools, ensuring that the `isRequired` status of reviewers is preserved when casting votes and improving error handling. It also extends test coverage for these scenarios. **Vote casting and reviewer handling improvements:** * [`src/tools/repositories.ts`](diffhunk://#diff-e3b482da7e394e782902c348cf01ce12c7c881ed9745c10aff16e8f873714103L1986-R2000): Before casting a vote with `createPullRequestReviewer`, the code now checks if the reviewer already exists using `getPullRequestReviewer`. If so, it preserves the reviewer's `isRequired` status in the payload. If the reviewer does not exist, it gracefully handles the error and proceeds to add the reviewer. **Test coverage enhancements:** * `repositories.test.ts`: Mocks and tests for `getPullRequestReviewer` were added to ensure the correct behavior when the reviewer exists, does not exist, or when API errors occur. This includes: - Verifying that `isRequired` is preserved in the payload. [[1]](diffhunk://#diff-ab08119c40bb674907f4cd70e8c549daaf3bcd559398b0f2eddb463bf8eb160aR5962) [[2]](diffhunk://#diff-ab08119c40bb674907f4cd70e8c549daaf3bcd559398b0f2eddb463bf8eb160aL5972-R5976) [[3]](diffhunk://#diff-ab08119c40bb674907f4cd70e8c549daaf3bcd559398b0f2eddb463bf8eb160aR5987) [[4]](diffhunk://#diff-ab08119c40bb674907f4cd70e8c549daaf3bcd559398b0f2eddb463bf8eb160aL5994-R6021) - Testing the scenario where the reviewer does not exist yet. - Ensuring API errors from `getPullRequestReviewer` are properly propagated and do not trigger reviewer creation. - Adding the necessary mocks for `getPullRequestReviewer` in the test setup. [[1]](diffhunk://#diff-ab08119c40bb674907f4cd70e8c549daaf3bcd559398b0f2eddb463bf8eb160aR37) [[2]](diffhunk://#diff-ab08119c40bb674907f4cd70e8c549daaf3bcd559398b0f2eddb463bf8eb160aR71) These changes make vote handling more robust and ensure that reviewer status is not inadvertently lost during updates. ## GitHub issue number #1287 ## **Associated Risks** N/A ## ✅ **PR Checklist** - [x] **I have read the [contribution guidelines](https://github.com/microsoft/azure-devops-mcp/blob/main/CONTRIBUTING.md)** - [x] **I have read the [code of conduct guidelines](https://github.com/microsoft/azure-devops-mcp/blob/main/CODE_OF_CONDUCT.md)** - [x] Title of the pull request is clear and informative. - [x] 👌 Code hygiene - [x] 🔭 Telemetry added, updated, or N/A - [x] 📄 Documentation added, updated, or N/A - [x] 🛡️ Automated tests added, or N/A ## 🧪 **How did you test it?** updated tests and did a manual verification --- src/tools/repositories.ts | 16 ++++++++- test/src/tools/repositories.test.ts | 52 +++++++++++++++++++++++++++-- 2 files changed, 65 insertions(+), 3 deletions(-) diff --git a/src/tools/repositories.ts b/src/tools/repositories.ts index 1029acc8..e76b2b46 100644 --- a/src/tools/repositories.ts +++ b/src/tools/repositories.ts @@ -1987,7 +1987,21 @@ function configureRepoTools(server: McpServer, tokenProvider: () => Promise { + if (!(error instanceof Error) || !/not found|reviewer does not exist/i.test(error.message)) { + throw error; + } + + return undefined; + }); + + const reviewerPayload = { + vote: voteMap[vote], + id: userId, + ...(existingReviewer?.isRequired !== undefined ? { isRequired: existingReviewer.isRequired } : {}), + }; + + await gitApi.createPullRequestReviewer(reviewerPayload as any, repositoryId, pullRequestId, userId, project); return { content: [ diff --git a/test/src/tools/repositories.test.ts b/test/src/tools/repositories.test.ts index 6f852dc9..e6fa42b3 100644 --- a/test/src/tools/repositories.test.ts +++ b/test/src/tools/repositories.test.ts @@ -34,6 +34,7 @@ describe("repos tools", () => { getComments: jest.MockedFunction<(...args: unknown[]) => Promise>; getRefs: jest.MockedFunction<(...args: unknown[]) => Promise>; getPullRequest: jest.MockedFunction<(...args: unknown[]) => Promise>; + getPullRequestReviewer: jest.MockedFunction<(...args: unknown[]) => Promise>; getPullRequestLabels: jest.MockedFunction<(...args: unknown[]) => Promise>; createPullRequestLabel: jest.MockedFunction<(...args: unknown[]) => Promise>; deletePullRequestLabels: jest.MockedFunction<(...args: unknown[]) => Promise>; @@ -67,6 +68,7 @@ describe("repos tools", () => { getComments: jest.fn(), getRefs: jest.fn(), getPullRequest: jest.fn(), + getPullRequestReviewer: jest.fn(), getPullRequestLabels: jest.fn(), createPullRequestLabel: jest.fn(), deletePullRequestLabels: jest.fn(), @@ -6120,6 +6122,7 @@ describe("repos tools", () => { if (!call) throw new Error("repo_vote_pull_request tool not registered"); const [, , , handler] = call; + mockGitApi.getPullRequestReviewer.mockResolvedValue({ id: "user123", isRequired: true }); mockGitApi.createPullRequestReviewer.mockResolvedValue({}); const params = { @@ -6132,7 +6135,8 @@ describe("repos tools", () => { const result = await handler(params); expect(mockGetCurrentUserDetails).toHaveBeenCalledWith(tokenProvider, connectionProvider, userAgentProvider); - expect(mockGitApi.createPullRequestReviewer).toHaveBeenCalledWith({ vote: 10, id: "user123" }, "repo123", 427, "user123", "test-project"); + expect(mockGitApi.getPullRequestReviewer).toHaveBeenCalledWith("repo123", 427, "user123", "test-project"); + expect(mockGitApi.createPullRequestReviewer).toHaveBeenCalledWith({ vote: 10, id: "user123", isRequired: true }, "repo123", 427, "user123", "test-project"); expect(result.content[0].text).toBe("Successfully cast vote 'Approved' on PR #427."); }); @@ -6143,6 +6147,7 @@ describe("repos tools", () => { if (!call) throw new Error("repo_vote_pull_request tool not registered"); const [, , , handler] = call; + mockGitApi.getPullRequestReviewer.mockResolvedValue({ id: "user123", isRequired: false }); mockGitApi.createPullRequestReviewer.mockResolvedValue({}); const params = { @@ -6154,7 +6159,29 @@ describe("repos tools", () => { await handler(params); - expect(mockGitApi.createPullRequestReviewer).toHaveBeenCalledWith({ vote: -10, id: "user123" }, "repo123", 427, "user123", "test-project"); + expect(mockGitApi.createPullRequestReviewer).toHaveBeenCalledWith({ vote: -10, id: "user123", isRequired: false }, "repo123", 427, "user123", "test-project"); + }); + + it("should cast a vote when reviewer does not exist yet", async () => { + configureRepoTools(server, tokenProvider, connectionProvider, userAgentProvider); + + const call = (server.tool as jest.Mock).mock.calls.find(([toolName]) => toolName === REPO_TOOLS.vote_pull_request); + if (!call) throw new Error("repo_vote_pull_request tool not registered"); + const [, , , handler] = call; + + mockGitApi.getPullRequestReviewer.mockRejectedValue(new Error("Reviewer not found")); + mockGitApi.createPullRequestReviewer.mockResolvedValue({}); + + const params = { + repositoryId: "repo123", + pullRequestId: 427, + project: "test-project", + vote: "NoVote" as const, + }; + + await handler(params); + + expect(mockGitApi.createPullRequestReviewer).toHaveBeenCalledWith({ vote: 0, id: "user123" }, "repo123", 427, "user123", "test-project"); }); it("should throw when authenticated user ID is missing", async () => { @@ -6184,6 +6211,7 @@ describe("repos tools", () => { if (!call) throw new Error("repo_vote_pull_request tool not registered"); const [, , , handler] = call; + mockGitApi.getPullRequestReviewer.mockResolvedValue({ id: "user123" }); mockGitApi.createPullRequestReviewer.mockRejectedValue(new Error("Reviewer update failed")); const params = { @@ -6195,6 +6223,26 @@ describe("repos tools", () => { await expect(handler(params)).rejects.toThrow("Reviewer update failed"); }); + + it("should propagate API errors from getPullRequestReviewer", async () => { + configureRepoTools(server, tokenProvider, connectionProvider, userAgentProvider); + + const call = (server.tool as jest.Mock).mock.calls.find(([toolName]) => toolName === REPO_TOOLS.vote_pull_request); + if (!call) throw new Error("repo_vote_pull_request tool not registered"); + const [, , , handler] = call; + + mockGitApi.getPullRequestReviewer.mockRejectedValue(new Error("Reviewer lookup failed")); + + const params = { + repositoryId: "repo123", + pullRequestId: 427, + project: "test-project", + vote: "WaitingForAuthor" as const, + }; + + await expect(handler(params)).rejects.toThrow("Reviewer lookup failed"); + expect(mockGitApi.createPullRequestReviewer).not.toHaveBeenCalled(); + }); }); describe("pullRequestStatusStringToInt function coverage", () => { From 160fe93faf8397f5e511dd762ab5852f83db1b4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 May 2026 22:01:28 -0400 Subject: [PATCH 08/19] [dependencies]: Bump lint-staged from 17.0.0 to 17.0.5 (#1296) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [lint-staged](https://github.com/lint-staged/lint-staged) from 17.0.0 to 17.0.5.

Release notes

Sourced from lint-staged's releases.

v17.0.5

Patch Changes

  • #1792 1f67271 - Correctly set the --max-arg-length default value based on the running platform. This controls how very long lists of staged files are split into multiple chunks.

v17.0.4

Patch Changes

  • #1788 f95c1f8 - Another fix for making sure lint-staged adds task modifications correctly to the commit in the following cases:

    • after editing <file> it is staged with git add <file>, and then committed with git commit
    • after editing <file> it is committed with git commit --all without explicit git add
    • after editing <file> it is committed with git commit <pathspec> without explicit git add

    There's new test cases which actually setup the Git pre_commit hook to run lint-staged and verify them. These issues started in v17.0.0 when trying to improve support for committig without having explicitly staged files.

v17.0.3

Patch Changes

  • #1782 06813f9 Thanks @​iiroj! - Fix lint-staged behavior when implicitly committing files without using git add by either:
    • git commit -am "my commit message" where -a (--all) means to automatically stage all tracked modified and deleted files
    • git commit -m "my commit message" . where . is an example of a pathspec where matching files will be staged

v17.0.2

Patch Changes

v17.0.1

Patch Changes

  • #1776 4a5664b Thanks @​iiroj! - Adjust GitHub Actions workflow so that automatic publishing works with signed commits.
Changelog

Sourced from lint-staged's changelog.

17.0.5

Patch Changes

  • #1792 1f67271 - Correctly set the --max-arg-length default value based on the running platform. This controls how very long lists of staged files are split into multiple chunks.

17.0.4

Patch Changes

  • #1788 f95c1f8 - Another fix for making sure lint-staged adds task modifications correctly to the commit in the following cases:

    • after editing <file> it is staged with git add <file>, and then committed with git commit
    • after editing <file> it is committed with git commit --all without explicit git add
    • after editing <file> it is committed with git commit <pathspec> without explicit git add

    There's new test cases which actually setup the Git pre_commit hook to run lint-staged and verify them. These issues started in v17.0.0 when trying to improve support for committig without having explicitly staged files.

17.0.3

Patch Changes

  • #1782 06813f9 Thanks @​iiroj! - Fix lint-staged behavior when implicitly committing files without using git add by either:
    • git commit -am "my commit message" where -a (--all) means to automatically stage all tracked modified and deleted files
    • git commit -m "my commit message" . where . is an example of a pathspec where matching files will be staged

17.0.2

Patch Changes

17.0.1

Patch Changes

  • #1776 4a5664b Thanks @​iiroj! - Adjust GitHub Actions workflow so that automatic publishing works with signed commits.
Commits
  • cbd822e Merge pull request #1793 from lint-staged/changeset-release/main
  • 1911244 chore(changeset): release
  • 7339d7d Merge pull request #1792 from lint-staged/fix-max-arg-length-default
  • 1f67271 fix: default maxArgLength to undefined instead of NaN when parsing cli ...
  • 2862964 Merge pull request #1789 from lint-staged/changeset-release/main
  • c9ecd54 chore(changeset): release
  • cc6b51a Merge pull request #1788 from lint-staged/fix-update-index-again
  • f95c1f8 fix: update both default index.lock and non-standard lock when latter exists
  • f44ee68 Merge pull request #1786 from lint-staged/update-repo-url
  • a61cf18 build(deps): update dependencies
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=lint-staged&package-manager=npm_and_yarn&previous-version=17.0.0&new-version=17.0.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index b17cee07..357693eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6103,9 +6103,9 @@ "license": "MIT" }, "node_modules/lint-staged": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-17.0.0.tgz", - "integrity": "sha512-286BsrsEp/7taRKY839AAU8E78uModiwmU7/cbuHbGfNA4mQVtLXA2Au9pLgWI2v4/M+PHq+s/rH+LJlVKucwA==", + "version": "17.0.5", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-17.0.5.tgz", + "integrity": "sha512-d12yC+/e8RhBjZtaxZn71FyrgU/P5e+uAPifhCLwdosQZP/zamSdKRWDC30ocVIbzDKiFG1McHc/LUgB92GIPw==", "dev": true, "license": "MIT", "dependencies": { From 1cd5d8959bfcd4add42cface36e4335a927884d5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 29 May 2026 09:05:38 -0400 Subject: [PATCH 09/19] [dependencies]: Bump ts-jest from 29.4.9 to 29.4.11 (#1298) Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 29.4.9 to 29.4.11.
Release notes

Sourced from ts-jest's releases.

v29.4.11

Please refer to CHANGELOG.md for details.

v29.4.10

Please refer to CHANGELOG.md for details.

Changelog

Sourced from ts-jest's changelog.

29.4.11 (2026-05-21)

Bug Fixes

  • preserve Bundler on the CJS path under TypeScript >= 6 (3941818), closes #4198

29.4.10 (2026-05-18)

Bug Fixes

  • pass resolutionMode to ts.resolveModuleName for hybrid module support (b557a85)
  • rebuild Program when consecutive compiles need different module kinds (a82a2b3), closes #4774
  • respect tsconfig moduleResolution instead of forcing Node10 (1bffffc)
  • transformer: transpile mjs files from node_modules for CJS mode (96d025d)
  • transformer: use a consistent comparator in hoist-jest sortStatements (8a8fd2f)
Commits
  • bff2d64 chore(release): 29.4.11
  • 3941818 fix: preserve Bundler on the CJS path under TypeScript >= 6
  • efb3c2f build(deps): bump webpack-dev-server from 5.2.2 to 5.2.4 in /website
  • 4e46fad ci: refactor release workflow
  • 96b3ac0 chore(release): 29.4.10
  • e98ec64 build(deps): update github/codeql-action digest to 458d36d
  • 21ac58f build(deps): update jest packages
  • 0fdc96d build(deps): update dependency semver to ^7.8.0
  • 4b95551 build(deps): update dependency jest-environment-jsdom to ^30.4.1 (#5311)
  • 7b88447 build(deps): update eslint packages to ^8.59.3 (#5310)
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ts-jest&package-manager=npm_and_yarn&previous-version=29.4.9&new-version=29.4.11)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 357693eb..0f39546d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8337,9 +8337,9 @@ } }, "node_modules/ts-jest": { - "version": "29.4.9", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.9.tgz", - "integrity": "sha512-LTb9496gYPMCqjeDLdPrKuXtncudeV1yRZnF4Wo5l3SFi0RYEnYRNgMrFIdg+FHvfzjCyQk1cLncWVqiSX+EvQ==", + "version": "29.4.11", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.11.tgz", + "integrity": "sha512-IrFl7l9AuB/qrNw5quqvAv/hmKMb8dhWOH4jQOGo0Oq8tCeo1O86/iTFG1FaRimgUkF13l4PcepO8ATFT6Ns4g==", "dev": true, "license": "MIT", "dependencies": { @@ -8349,7 +8349,7 @@ "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.7.4", + "semver": "^7.8.0", "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, @@ -8390,9 +8390,9 @@ } }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", "dev": true, "license": "ISC", "bin": { From a3cb32f0a8b799cef01852dab9514828069d0833 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Jun 2026 15:17:36 -0400 Subject: [PATCH 10/19] [dependencies]: Bump jest from 30.3.0 to 30.4.2 (#1311) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [jest](https://github.com/jestjs/jest/tree/HEAD/packages/jest) from 30.3.0 to 30.4.2.
Release notes

Sourced from jest's releases.

v30.4.2

Fixes

  • [jest-runtime] Fix named imports from CJS modules whose module.exports is a function with own-property exports (#16150)

Full Changelog: https://github.com/jestjs/jest/compare/v30.4.1...v30.4.2

v30.4.1

Features

  • [jest-config, jest-core, jest-runner, jest-schemas, jest-types] Allow custom runner configuration options via tuple format ['runner-path', {options}] (#16141)

Fixes

  • [jest-runtime] Align CJS-from-ESM default export with Node: module.exports is always the ESM default, __esModule unwrapping is no longer applied (#16143)

Full Changelog: https://github.com/jestjs/jest/compare/v30.4.0...v30.4.1

v30.4.0

Big release! 😀

Main feature is a rewrite of our custom runtime in preparation for stabilisation of native support of ESM. As part of that work require(esm) module is now supported on Node 24.9+ (still requires --experimental-vm-modules like before).

In addition we now support fake timers for the recently released Temporal API in Node v26.

React 19 is also supported properly in pretty-format, meaning snapshots of React components now work like they should.

Due to all the changes, there might be regressions that snuck in. Please report them!

Full list of changes below

Features

  • [babel-jest] Support collecting coverage from .mts, .cts (and other) files (#15994)
  • [jest-circus, jest-cli, jest-config, jest-core, jest-jasmine2, jest-types] Add --collect-tests flag to discover and list tests without executing them (#16006)
  • [jest-config, jest-runner, jest-worker] Add workerGracefulExitTimeout config option to control how long workers are given to exit before being force-killed (#15984)
  • [jest-config] Add support for jest.config.mts as a valid configuration file (#16005)
  • [jest-config, jest-core, jest-reporters, jest-runner] verbose and silent can now be set per-project; the project-level value overrides the global value for that project's tests (#16133)
  • [@jest/fake-timers] Accept Temporal.Duration in jest.advanceTimersByTime() and jest.advanceTimersByTimeAsync() (#16128)
  • [@jest/fake-timers] Accept Temporal.Instant and Temporal.ZonedDateTime in jest.setSystemTime() and useFakeTimers({now}) (#16128)
  • [@jest/fake-timers] Support faking Temporal.Now.* (#16131)
  • [jest-mock] Add clearMocksOnScope(scope) on ModuleMocker for clearing every mock function exposed on a scope object (#16088)
  • [jest-resolve] Add canResolveSync() on Resolver so callers can detect when a user-configured resolver only exports an async hook (#16064)
  • [jest-runtime] Use synchronous evaluate() for ES modules without top-level await on Node versions that support it (v24.9+), and prefer the synchronous transform path when a sync transformer is configured (#16062)
  • [jest-runtime] Support require() of ES modules on Node v24.9+ (#16074)
  • [jest-runtime] Validate TC39 import attributes (with { type: 'json' }) on ESM imports (#16127)
  • [@jest/transform] Add canTransformSync(filename) on ScriptTransformer so callers can pick the sync vs async transform path (#16062)
  • [jest-util] Add isError helper (#16076)

... (truncated)

Changelog

Sourced from jest's changelog.

30.4.2

Fixes

  • [jest-runtime] Fix named imports from CJS modules whose module.exports is a function with own-property exports (#16150)

30.4.1

Features

  • [jest-config, jest-core, jest-runner, jest-schemas, jest-types] Allow custom runner configuration options via tuple format ['runner-path', {options}] (#16141)

Fixes

  • [jest-runtime] Align CJS-from-ESM default export with Node: module.exports is always the ESM default, __esModule unwrapping is no longer applied (#16143)

30.4.0

Features

  • [babel-jest] Support collecting coverage from .mts, .cts (and other) files (#15994)
  • [jest-circus, jest-cli, jest-config, jest-core, jest-jasmine2, jest-types] Add --collect-tests flag to discover and list tests without executing them (#16006)
  • [jest-config, jest-runner, jest-worker] Add workerGracefulExitTimeout config option to control how long workers are given to exit before being force-killed (#15984)
  • [jest-config] Add support for jest.config.mts as a valid configuration file (#16005)
  • [jest-config, jest-core, jest-reporters, jest-runner] verbose and silent can now be set per-project; the project-level value overrides the global value for that project's tests (#16133)
  • [@jest/fake-timers] Accept Temporal.Duration in jest.advanceTimersByTime() and jest.advanceTimersByTimeAsync() (#16128)
  • [@jest/fake-timers] Accept Temporal.Instant and Temporal.ZonedDateTime in jest.setSystemTime() and useFakeTimers({now}) (#16128)
  • [@jest/fake-timers] Support faking Temporal.Now.* (#16131)
  • [jest-mock] Add clearMocksOnScope(scope) on ModuleMocker for clearing every mock function exposed on a scope object (#16088)
  • [jest-resolve] Add canResolveSync() on Resolver so callers can detect when a user-configured resolver only exports an async hook (#16064)
  • [jest-runtime] Use synchronous evaluate() for ES modules without top-level await on Node versions that support it (v24.9+), and prefer the synchronous transform path when a sync transformer is configured (#16062)
  • [jest-runtime] Support require() of ES modules on Node v24.9+ (#16074)
  • [jest-runtime] Validate TC39 import attributes (with { type: 'json' }) on ESM imports (#16127)
  • [@jest/transform] Add canTransformSync(filename) on ScriptTransformer so callers can pick the sync vs async transform path (#16062)
  • [jest-util] Add isError helper (#16076)
  • [pretty-format] Support React 19 (#16123)

Fixes

  • [expect-utils] Fix toStrictEqual failing on structuredClone results due to cross-realm constructor mismatch (#15959)
  • [@jest/expect-utils] Prevent toMatchObject/subset matching from throwing when encountering exotic iterables (#15952)
  • [fake-timers] Convert Date to milliseconds before passing to @sinonjs/fake-timers (#16029)
  • [jest] Export GlobalConfig and ProjectConfig TypeScript types (#16132)
  • [jest-circus] Prevent crash when asyncError is undefined for non-Error throws (#16003)
  • [jest-circus, jest-jasmine2] Include Error.cause in JSON failureMessages output (#15967)
  • [jest-config] Fix preset path resolution on Windows when the preset uses subpath exports (#15961)
  • [jest-config] Allow collectCoverage and coverageProvider in project config without a validation warning (#16132)
  • [jest-config] Project config validator now emits "is not supported in an individual project configuration" instead of "probably a typing mistake" for known global-only options (#16132)
  • [jest-environment-node] Fix --localstorage-file warning on Node 25+ (#16086)
  • [jest-reporters] Apply global coverage threshold to unmatched pattern files in addition to glob/path thresholds (#16137)

... (truncated)

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=jest&package-manager=npm_and_yarn&previous-version=30.3.0&new-version=30.4.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 955 +++++++++++++++++++++++++--------------------- 1 file changed, 510 insertions(+), 445 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0f39546d..ddbf8e91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -341,9 +341,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, "license": "MIT", "engines": { @@ -508,13 +508,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", - "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -634,13 +634,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", - "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -725,21 +725,21 @@ } }, "node_modules/@emnapi/core": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz", - "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.1.0", + "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz", - "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", "dev": true, "license": "MIT", "optional": true, @@ -748,9 +748,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", - "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", "dev": true, "license": "MIT", "optional": true, @@ -1113,17 +1113,17 @@ } }, "node_modules/@jest/console": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.3.0.tgz", - "integrity": "sha512-PAwCvFJ4696XP2qZj+LAn1BWjZaJ6RjG6c7/lkMaUJnkyMS34ucuIsfqYvfskVNvUI27R/u4P1HMYFnlVXG/Ww==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.4.1.tgz", + "integrity": "sha512-v3bhyxUh9Hgmo5p6hAOXe14/R3ZxZDOsvHleh4B07z3m/x4/ngPUXEm9XwK4sF4u+f+P2ORb0Ge+MgpaqRMVDA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.3.0", + "@jest/types": "30.4.1", "@types/node": "*", "chalk": "^4.1.2", - "jest-message-util": "30.3.0", - "jest-util": "30.3.0", + "jest-message-util": "30.4.1", + "jest-util": "30.4.1", "slash": "^3.0.0" }, "engines": { @@ -1131,38 +1131,39 @@ } }, "node_modules/@jest/core": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.3.0.tgz", - "integrity": "sha512-U5mVPsBxLSO6xYbf+tgkymLx+iAhvZX43/xI1+ej2ZOPnPdkdO1CzDmFKh2mZBn2s4XZixszHeQnzp1gm/DIxw==", + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.4.2.tgz", + "integrity": "sha512-TZJA6cPJUFxoWhxaLo8t0VX/MZX2wPWr0uIDvLSHIvN4gu9h02vSzqI2kBADG1ExqQlC+cY09xKMSreivvrChQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.3.0", - "@jest/pattern": "30.0.1", - "@jest/reporters": "30.3.0", - "@jest/test-result": "30.3.0", - "@jest/transform": "30.3.0", - "@jest/types": "30.3.0", + "@jest/console": "30.4.1", + "@jest/pattern": "30.4.0", + "@jest/reporters": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "ci-info": "^4.2.0", "exit-x": "^0.2.2", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", - "jest-changed-files": "30.3.0", - "jest-config": "30.3.0", - "jest-haste-map": "30.3.0", - "jest-message-util": "30.3.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.3.0", - "jest-resolve-dependencies": "30.3.0", - "jest-runner": "30.3.0", - "jest-runtime": "30.3.0", - "jest-snapshot": "30.3.0", - "jest-util": "30.3.0", - "jest-validate": "30.3.0", - "jest-watcher": "30.3.0", - "pretty-format": "30.3.0", + "jest-changed-files": "30.4.1", + "jest-config": "30.4.2", + "jest-haste-map": "30.4.1", + "jest-message-util": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-resolve": "30.4.1", + "jest-resolve-dependencies": "30.4.2", + "jest-runner": "30.4.2", + "jest-runtime": "30.4.2", + "jest-snapshot": "30.4.1", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", + "jest-watcher": "30.4.1", + "pretty-format": "30.4.1", "slash": "^3.0.0" }, "engines": { @@ -1178,9 +1179,9 @@ } }, "node_modules/@jest/diff-sequences": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.3.0.tgz", - "integrity": "sha512-cG51MVnLq1ecVUaQ3fr6YuuAOitHK1S4WUJHnsPFE/quQr33ADUx1FfrTCpMCRxvy0Yr9BThKpDjSlcTi91tMA==", + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.4.0.tgz", + "integrity": "sha512-zOpzlfUs45l6u7jm39qr87JCHUDsaeCtvL+kQe/Vn9jSnRB4/5IPXISm0h9I1vZW/o00Kn4UTJ2MOlhnUGwv3g==", "dev": true, "license": "MIT", "engines": { @@ -1188,39 +1189,39 @@ } }, "node_modules/@jest/environment": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.3.0.tgz", - "integrity": "sha512-SlLSF4Be735yQXyh2+mctBOzNDx5s5uLv88/j8Qn1wH679PDcwy67+YdADn8NJnGjzlXtN62asGH/T4vWOkfaw==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.4.1.tgz", + "integrity": "sha512-AK9yNRqgKxiabqMoe4oW+3/TSSeV8vkdC7BGaxZdU0AFXfOpofTLqdru2GXKZghP3sdgwE9XXpnVwfZ8JnFV4w==", "dev": true, "license": "MIT", "dependencies": { - "@jest/fake-timers": "30.3.0", - "@jest/types": "30.3.0", + "@jest/fake-timers": "30.4.1", + "@jest/types": "30.4.1", "@types/node": "*", - "jest-mock": "30.3.0" + "jest-mock": "30.4.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/expect": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.3.0.tgz", - "integrity": "sha512-76Nlh4xJxk2D/9URCn3wFi98d2hb19uWE1idLsTt2ywhvdOldbw3S570hBgn25P4ICUZ/cBjybrBex2g17IDbg==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.4.1.tgz", + "integrity": "sha512-ginrj6TMgh2GshLUGCjO94Ptx9HhdZA/I6A9iUfyeLKFtdAjnKzHDgzgP9HYQgbxM1lbXScQ2eUBz2lGeVDPWA==", "dev": true, "license": "MIT", "dependencies": { - "expect": "30.3.0", - "jest-snapshot": "30.3.0" + "expect": "30.4.1", + "jest-snapshot": "30.4.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.3.0.tgz", - "integrity": "sha512-j0+W5iQQ8hBh7tHZkTQv3q2Fh/M7Je72cIsYqC4OaktgtO7v1So9UTjp6uPBHIaB6beoF/RRsCgMJKvti0wADA==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.4.1.tgz", + "integrity": "sha512-ZBn5CglH8fBsQsvs4VWNzD4aWfUYks+IdOOQU3MEK71ol/BcVm+P+rtb1KpiFBpSWSCE27uOahyyf1vfqOVbcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1231,18 +1232,18 @@ } }, "node_modules/@jest/fake-timers": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.3.0.tgz", - "integrity": "sha512-WUQDs8SOP9URStX1DzhD425CqbN/HxUYCTwVrT8sTVBfMvFqYt/s61EK5T05qnHu0po6RitXIvP9otZxYDzTGQ==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.4.1.tgz", + "integrity": "sha512-iW5umdmfPeWzehrVhugFQZqCchSCud5S1l2YT0O9ZhjRR0ExclANDZkiSBwzqtnlOn0J1JXvO+HZ6rkuyOVOgQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.3.0", - "@sinonjs/fake-timers": "^15.0.0", + "@jest/types": "30.4.1", + "@sinonjs/fake-timers": "^15.4.0", "@types/node": "*", - "jest-message-util": "30.3.0", - "jest-mock": "30.3.0", - "jest-util": "30.3.0" + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -1259,47 +1260,47 @@ } }, "node_modules/@jest/globals": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.3.0.tgz", - "integrity": "sha512-+owLCBBdfpgL3HU+BD5etr1SvbXpSitJK0is1kiYjJxAAJggYMRQz5hSdd5pq1sSggfxPbw2ld71pt4x5wwViA==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.4.1.tgz", + "integrity": "sha512-ZbuY4cmXC8DkxYjfvT2DbcHWL2T6vmsMhXCDcmTB2T0y0gaezBI77ufq5ZAIdcRkYZ7NEQEDg1xFeKbxUJ5v5Q==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.3.0", - "@jest/expect": "30.3.0", - "@jest/types": "30.3.0", - "jest-mock": "30.3.0" + "@jest/environment": "30.4.1", + "@jest/expect": "30.4.1", + "@jest/types": "30.4.1", + "jest-mock": "30.4.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/pattern": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", - "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.4.0.tgz", + "integrity": "sha512-RAWn3+f9u8BsHijKJ71uHcFp6vmyEt6VvoWXkl6hKF3qVIuWNmudVjg12DlBPGup/frIl5UcUlH5HfEuvHpEXg==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", - "jest-regex-util": "30.0.1" + "jest-regex-util": "30.4.0" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/reporters": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.3.0.tgz", - "integrity": "sha512-a09z89S+PkQnL055bVj8+pe2Caed2PBOaczHcXCykW5ngxX9EWx/1uAwncxc/HiU0oZqfwseMjyhxgRjS49qPw==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.4.1.tgz", + "integrity": "sha512-/SnkPCzEQpUaBH81kjdEdDdo2WZl5hxw+BmLDGWjRkm8o7XlhjwsU36cqwe5PGBE5WYpBvDzRSdXx9rbGuJtNA==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.3.0", - "@jest/test-result": "30.3.0", - "@jest/transform": "30.3.0", - "@jest/types": "30.3.0", + "@jest/console": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", "@jridgewell/trace-mapping": "^0.3.25", "@types/node": "*", "chalk": "^4.1.2", @@ -1312,9 +1313,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^5.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "30.3.0", - "jest-util": "30.3.0", - "jest-worker": "30.3.0", + "jest-message-util": "30.4.1", + "jest-util": "30.4.1", + "jest-worker": "30.4.1", "slash": "^3.0.0", "string-length": "^4.0.2", "v8-to-istanbul": "^9.0.1" @@ -1332,9 +1333,9 @@ } }, "node_modules/@jest/reporters/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", "dev": true, "license": "MIT", "dependencies": { @@ -1404,9 +1405,9 @@ } }, "node_modules/@jest/schemas": { - "version": "30.0.5", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", - "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.4.1.tgz", + "integrity": "sha512-i6b4qw5qnP8c5FEeBJg/uZQ4ddrkN6Ca8qISJh0pr7a5hfn3h3v5x60BEbOC7OYAGZNMs1LfFLwnW2CuK8F57Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1417,13 +1418,13 @@ } }, "node_modules/@jest/snapshot-utils": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.3.0.tgz", - "integrity": "sha512-ORbRN9sf5PP82v3FXNSwmO1OTDR2vzR2YTaR+E3VkSBZ8zadQE6IqYdYEeFH1NIkeB2HIGdF02dapb6K0Mj05g==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.4.1.tgz", + "integrity": "sha512-ObY4ljvQ95mt6iwKtVLetR/4yXiAgl3H4nJxhztr0MTjrN97TwDYrnCp/kF60Ec9HdhkWTHSu+Hg05aXfngpOA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.3.0", + "@jest/types": "30.4.1", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "natural-compare": "^1.4.0" @@ -1448,14 +1449,14 @@ } }, "node_modules/@jest/test-result": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.3.0.tgz", - "integrity": "sha512-e/52nJGuD74AKTSe0P4y5wFRlaXP0qmrS17rqOMHeSwm278VyNyXE3gFO/4DTGF9w+65ra3lo3VKj0LBrzmgdQ==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.4.1.tgz", + "integrity": "sha512-/ZG7pgEiOmmWkN9TplKbOu4id2N5lh7FHwRwlkgBVAzGdRH+OkkQ8wX/kIxg4zmd3ZQvAL1RwL2yWsvNYYECTw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.3.0", - "@jest/types": "30.3.0", + "@jest/console": "30.4.1", + "@jest/types": "30.4.1", "@types/istanbul-lib-coverage": "^2.0.6", "collect-v8-coverage": "^1.0.2" }, @@ -1464,15 +1465,15 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.3.0.tgz", - "integrity": "sha512-dgbWy9b8QDlQeRZcv7LNF+/jFiiYHTKho1xirauZ7kVwY7avjFF6uTT0RqlgudB5OuIPagFdVtfFMosjVbk1eA==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.4.1.tgz", + "integrity": "sha512-PeYE+4td5rKjoRPxztObrXU+H8hsjZfxKMXOcmrr34JerSyB/ROOxbbicz8B7A5j9R9VayDnVPvBmedqCsFCdw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.3.0", + "@jest/test-result": "30.4.1", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.3.0", + "jest-haste-map": "30.4.1", "slash": "^3.0.0" }, "engines": { @@ -1480,23 +1481,23 @@ } }, "node_modules/@jest/transform": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.3.0.tgz", - "integrity": "sha512-TLKY33fSLVd/lKB2YI1pH69ijyUblO/BQvCj566YvnwuzoTNr648iE0j22vRvVNk2HsPwByPxATg3MleS3gf5A==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.4.1.tgz", + "integrity": "sha512-Wz0LyktlTvRefoymh+n64hQ84KNXsRGcwdoZ8CSa0Ea+fgYcHZlnk+hDP7v2MS7il2bQ5uTEIxf4/NNfhMN4KQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", - "@jest/types": "30.3.0", + "@jest/types": "30.4.1", "@jridgewell/trace-mapping": "^0.3.25", "babel-plugin-istanbul": "^7.0.1", "chalk": "^4.1.2", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.3.0", - "jest-regex-util": "30.0.1", - "jest-util": "30.3.0", + "jest-haste-map": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-util": "30.4.1", "pirates": "^4.0.7", "slash": "^3.0.0", "write-file-atomic": "^5.0.1" @@ -1506,14 +1507,14 @@ } }, "node_modules/@jest/types": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.3.0.tgz", - "integrity": "sha512-JHm87k7bA33hpBngtU8h6UBub/fqqA9uXfw+21j5Hmk7ooPHlboRNxHq0JcMtC+n8VJGP1mcfnD3Mk+XKe1oSw==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.4.1.tgz", + "integrity": "sha512-f1x/vJXIfjOlEmejYpbkbgw1gOqpPECwMvMEtBqe47j7H2Hg8h8w3o3ikhSXq3MI15kg+oQ0exWO0uCtTNJLoQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/pattern": "30.0.1", - "@jest/schemas": "30.0.5", + "@jest/pattern": "30.4.0", + "@jest/schemas": "30.4.1", "@types/istanbul-lib-coverage": "^2.0.6", "@types/istanbul-reports": "^3.0.4", "@types/node": "*", @@ -1646,16 +1647,22 @@ } }, "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", - "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", "dev": true, "license": "MIT", "optional": true, "dependencies": { - "@emnapi/core": "^1.4.3", - "@emnapi/runtime": "^1.4.3", - "@tybys/wasm-util": "^0.10.0" + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" } }, "node_modules/@nodelib/fs.scandir": { @@ -1708,13 +1715,13 @@ } }, "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz", + "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==", "dev": true, "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": "^14.18.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/pkgr" @@ -1738,9 +1745,9 @@ } }, "node_modules/@sinonjs/fake-timers": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.1.1.tgz", - "integrity": "sha512-cO5W33JgAPbOh07tvZjUOJ7oWhtaqGHiZw+11DPbyqh2kHTBc3eF/CjJDeQ4205RLQsX6rxCuYOroFQwl7JDRw==", + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz", + "integrity": "sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -1758,9 +1765,9 @@ } }, "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.2.tgz", + "integrity": "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==", "dev": true, "license": "MIT", "optional": true, @@ -2224,9 +2231,9 @@ "license": "ISC" }, "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", - "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.12.2.tgz", + "integrity": "sha512-g5T90pqg1bo/7mytQx6F4iBNC0Wsh9cu+z9veDbFjc7HjpesJFWD7QMS0NGStXM075+7dJPPVvBbpZlnrdpi/w==", "cpu": [ "arm" ], @@ -2238,9 +2245,9 @@ ] }, "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", - "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.12.2.tgz", + "integrity": "sha512-YGCRZv/9GLhwmz6mYDeTsm/92BAyR28l6c2ReweVW5pWgfsitWLY8upvfRlGdoyD8HjeTHSYJWyZGD4KJA/nFQ==", "cpu": [ "arm64" ], @@ -2252,9 +2259,9 @@ ] }, "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", - "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.12.2.tgz", + "integrity": "sha512-u9DiNT1auQMO20A9SyTuG3wUgQWB9Z7KjAg0uFuCDR1FsAY8A0CG2S6JpHS1xwm/w1G08bjXZDcyOCjv1WAm2w==", "cpu": [ "arm64" ], @@ -2266,9 +2273,9 @@ ] }, "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", - "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.12.2.tgz", + "integrity": "sha512-f7rPLi/T1HVKZu/u6t87lroib16n8vrSzcyxI7lg4BGO9UF26KhQL44sd9eOUgrTYhvRXtWOIZT5PejdPyJfUA==", "cpu": [ "x64" ], @@ -2280,9 +2287,9 @@ ] }, "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", - "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.12.2.tgz", + "integrity": "sha512-BpcOjWCJub6nRZUS2zA20pmLvjtqAtGejETaIyRLiZiQf++cbrjltLA5NN/xaXfqeOBOSlMFbemIl5/S5tljmg==", "cpu": [ "x64" ], @@ -2294,9 +2301,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", - "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.12.2.tgz", + "integrity": "sha512-vZTDvdSISZjJx66OzJqtsOhzifbqRjbmI1Mnu49fQDwog5GtDI4QidRiEAYbZCRj9C8YZEW+3ZjqsyS9GR4k2A==", "cpu": [ "arm" ], @@ -2308,9 +2315,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", - "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.12.2.tgz", + "integrity": "sha512-BiPI+IrIlwcW4nLLMM21+B1dFPzd55yAVgVGrdgDjNef+ch03GdxrcyaIz8X9SsQirh/kCQ7mviyWlMxdh2D7g==", "cpu": [ "arm" ], @@ -2322,9 +2329,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", - "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.12.2.tgz", + "integrity": "sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==", "cpu": [ "arm64" ], @@ -2336,9 +2343,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", - "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.12.2.tgz", + "integrity": "sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==", "cpu": [ "arm64" ], @@ -2349,10 +2356,38 @@ "linux" ] }, + "node_modules/@unrs/resolver-binding-linux-loong64-gnu": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-gnu/-/resolver-binding-linux-loong64-gnu-1.12.2.tgz", + "integrity": "sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-loong64-musl": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-loong64-musl/-/resolver-binding-linux-loong64-musl-1.12.2.tgz", + "integrity": "sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", - "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.12.2.tgz", + "integrity": "sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==", "cpu": [ "ppc64" ], @@ -2364,9 +2399,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", - "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.12.2.tgz", + "integrity": "sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==", "cpu": [ "riscv64" ], @@ -2378,9 +2413,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", - "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.12.2.tgz", + "integrity": "sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==", "cpu": [ "riscv64" ], @@ -2392,9 +2427,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", - "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.12.2.tgz", + "integrity": "sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==", "cpu": [ "s390x" ], @@ -2406,9 +2441,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", - "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.12.2.tgz", + "integrity": "sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==", "cpu": [ "x64" ], @@ -2420,9 +2455,9 @@ ] }, "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", - "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.12.2.tgz", + "integrity": "sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==", "cpu": [ "x64" ], @@ -2433,10 +2468,24 @@ "linux" ] }, + "node_modules/@unrs/resolver-binding-openharmony-arm64": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-openharmony-arm64/-/resolver-binding-openharmony-arm64-1.12.2.tgz", + "integrity": "sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", - "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.12.2.tgz", + "integrity": "sha512-tYFDIkMxSflfEc/h92ZWNsZlHSwgimbNHSO3PL2JWQHfCuC2q316jMyYU9TIWZsFK2bQwyK5VAdYgn8ygPj69A==", "cpu": [ "wasm32" ], @@ -2444,16 +2493,18 @@ "license": "MIT", "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.11" + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", - "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz", + "integrity": "sha512-qzNyg3xL0VPQmCaUh+N5jSitce6k+uCBfMDesWRnlULOZaqUkaJ0ybdT+UqlAWJoQjuqfIU/0Ptx9bteN4D82g==", "cpu": [ "arm64" ], @@ -2465,9 +2516,9 @@ ] }, "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", - "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.12.2.tgz", + "integrity": "sha512-WD9sY00OfpHVGfsnHZoA8jVT+esS/Bg8z8jzxp5BnDCjjwsuKsPQrzswwpFy4J1AUJbXPRfkpcX0mXrzeXW79g==", "cpu": [ "ia32" ], @@ -2479,9 +2530,9 @@ ] }, "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", - "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.12.2.tgz", + "integrity": "sha512-nAB74NfSNKknqQ1RrYj6uz8FcXEomu/MATJZxh/x+BArzN2U3JbOYC0APYzUIGhVY3m5hRxA8VPNdPBoG8txlA==", "cpu": [ "x64" ], @@ -2703,16 +2754,16 @@ } }, "node_modules/babel-jest": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.3.0.tgz", - "integrity": "sha512-gRpauEU2KRrCox5Z296aeVHR4jQ98BCnu0IO332D/xpHNOsIH/bgSRk9k6GbKIbBw8vFeN6ctuu6tV8WOyVfYQ==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.4.1.tgz", + "integrity": "sha512-fATAbM8piYxkiXQp3RBXmZHxZVNJZAVXXfyeyCN2Tida3+qJ8ea9UxhiJ2y4fLO90ZImKt6k9FlcH2+rLkJGhw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/transform": "30.3.0", + "@jest/transform": "30.4.1", "@types/babel__core": "^7.20.5", "babel-plugin-istanbul": "^7.0.1", - "babel-preset-jest": "30.3.0", + "babel-preset-jest": "30.4.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "slash": "^3.0.0" @@ -2745,9 +2796,9 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.3.0.tgz", - "integrity": "sha512-+TRkByhsws6sfPjVaitzadk1I0F5sPvOVUH5tyTSzhePpsGIVrdeunHSw/C36QeocS95OOk8lunc4rlu5Anwsg==", + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.4.0.tgz", + "integrity": "sha512-9EdtWM/sSfXLOGLwSn+GS6pIXyBnL07/8gyJlwFXjWy4DxMOyItqyUT29d4lQiS380EZwYlX7/At4PgBS+m2aA==", "dev": true, "license": "MIT", "dependencies": { @@ -2785,13 +2836,13 @@ } }, "node_modules/babel-preset-jest": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.3.0.tgz", - "integrity": "sha512-6ZcUbWHC+dMz2vfzdNwi87Z1gQsLNK2uLuK1Q89R11xdvejcivlYYwDlEv0FHX3VwEXpbBQ9uufB/MUNpZGfhQ==", + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.4.0.tgz", + "integrity": "sha512-lBY4jxsNmCnSiu7kquw8ZC9F4+XLMOKypT3RnNHPvU2Kpd4W0xaPuLr5ZkRyOsvLYAY4yaW1ZwTW4xB7NIiZzg==", "dev": true, "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "30.3.0", + "babel-plugin-jest-hoist": "30.4.0", "babel-preset-current-node-syntax": "^1.2.0" }, "engines": { @@ -3953,18 +4004,18 @@ } }, "node_modules/expect": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-30.3.0.tgz", - "integrity": "sha512-1zQrciTiQfRdo7qJM1uG4navm8DayFa2TgCSRlzUyNkhcJ6XUZF3hjnpkyr3VhAqPH7i/9GkG7Tv5abz6fqz0Q==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.4.1.tgz", + "integrity": "sha512-PMARsyh/JtqC20HoGqlFcIlQAyqUtW4PlI1rup1uhYJtKuwAjbvWi3GQMAn+STdHum/dk8xrKfUM1+5SAwpolA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/expect-utils": "30.3.0", + "@jest/expect-utils": "30.4.1", "@jest/get-type": "30.1.0", - "jest-matcher-utils": "30.3.0", - "jest-message-util": "30.3.0", - "jest-mock": "30.3.0", - "jest-util": "30.3.0" + "jest-matcher-utils": "30.4.1", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-util": "30.4.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -5009,16 +5060,16 @@ } }, "node_modules/jest": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-30.3.0.tgz", - "integrity": "sha512-AkXIIFcaazymvey2i/+F94XRnM6TsVLZDhBMLsd1Sf/W0wzsvvpjeyUrCZD6HGG4SDYPgDJDBKeiJTBb10WzMg==", + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.4.2.tgz", + "integrity": "sha512-Yi1jqNC/Oq0N4hBgNH/YvBpP1P57QqundgytzYqy3yqAa7NZPNjSoi4SGbRAXDMdBzNE6xBCi5U7RgfrvMEUVQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.3.0", - "@jest/types": "30.3.0", + "@jest/core": "30.4.2", + "@jest/types": "30.4.1", "import-local": "^3.2.0", - "jest-cli": "30.3.0" + "jest-cli": "30.4.2" }, "bin": { "jest": "bin/jest.js" @@ -5036,14 +5087,14 @@ } }, "node_modules/jest-changed-files": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.3.0.tgz", - "integrity": "sha512-B/7Cny6cV5At6M25EWDgf9S617lHivamL8vl6KEpJqkStauzcG4e+WPfDgMMF+H4FVH4A2PLRyvgDJan4441QA==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.4.1.tgz", + "integrity": "sha512-IuctmYrxi21iOSOaIXpJWalHyPAsVv0GeBHKDn8C1CA4W5htHn7INL+wdnL4Bo0+olEndvAFkmb++tIQJG+vvg==", "dev": true, "license": "MIT", "dependencies": { "execa": "^5.1.1", - "jest-util": "30.3.0", + "jest-util": "30.4.1", "p-limit": "^3.1.0" }, "engines": { @@ -5051,29 +5102,29 @@ } }, "node_modules/jest-circus": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.3.0.tgz", - "integrity": "sha512-PyXq5szeSfR/4f1lYqCmmQjh0vqDkURUYi9N6whnHjlRz4IUQfMcXkGLeEoiJtxtyPqgUaUUfyQlApXWBSN1RA==", + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.4.2.tgz", + "integrity": "sha512-rvHH7VlY6LgbJXJTQ87GW62g1FntOtbhh0zT+v04kC+pgL6aBKyYINXxWukCpj3dcIBMw5/XUbtDS9dU9JTXeQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.3.0", - "@jest/expect": "30.3.0", - "@jest/test-result": "30.3.0", - "@jest/types": "30.3.0", + "@jest/environment": "30.4.1", + "@jest/expect": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/types": "30.4.1", "@types/node": "*", "chalk": "^4.1.2", "co": "^4.6.0", "dedent": "^1.6.0", "is-generator-fn": "^2.1.0", - "jest-each": "30.3.0", - "jest-matcher-utils": "30.3.0", - "jest-message-util": "30.3.0", - "jest-runtime": "30.3.0", - "jest-snapshot": "30.3.0", - "jest-util": "30.3.0", + "jest-each": "30.4.1", + "jest-matcher-utils": "30.4.1", + "jest-message-util": "30.4.1", + "jest-runtime": "30.4.2", + "jest-snapshot": "30.4.1", + "jest-util": "30.4.1", "p-limit": "^3.1.0", - "pretty-format": "30.3.0", + "pretty-format": "30.4.1", "pure-rand": "^7.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.6" @@ -5083,21 +5134,21 @@ } }, "node_modules/jest-cli": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.3.0.tgz", - "integrity": "sha512-l6Tqx+j1fDXJEW5bqYykDQQ7mQg+9mhWXtnj+tQZrTWYHyHoi6Be8HPumDSA+UiX2/2buEgjA58iJzdj146uCw==", + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.4.2.tgz", + "integrity": "sha512-jfA2ocvVHMXS2QijrJ0d31ektP+d/W0T5RpcTX2Pq+3sVqHlsXVCM2+FmwpL+bdY8OfHpIg9xMxLF17Zg0U49Q==", "dev": true, "license": "MIT", "dependencies": { - "@jest/core": "30.3.0", - "@jest/test-result": "30.3.0", - "@jest/types": "30.3.0", + "@jest/core": "30.4.2", + "@jest/test-result": "30.4.1", + "@jest/types": "30.4.1", "chalk": "^4.1.2", "exit-x": "^0.2.2", "import-local": "^3.2.0", - "jest-config": "30.3.0", - "jest-util": "30.3.0", - "jest-validate": "30.3.0", + "jest-config": "30.4.2", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", "yargs": "^17.7.2" }, "bin": { @@ -5223,33 +5274,33 @@ } }, "node_modules/jest-config": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.3.0.tgz", - "integrity": "sha512-WPMAkMAtNDY9P/oKObtsRG/6KTrhtgPJoBTmk20uDn4Uy6/3EJnnaZJre/FMT1KVRx8cve1r7/FlMIOfRVWL4w==", + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.4.2.tgz", + "integrity": "sha512-rNHAShJQqQwFNoL0hbf3BphSBOWnpOUAKvidLS/AjNVLPfoj5mSf4jQMfW3cYOs6hXeZC7nF7mDHaBnbxELOzg==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.27.4", "@jest/get-type": "30.1.0", - "@jest/pattern": "30.0.1", - "@jest/test-sequencer": "30.3.0", - "@jest/types": "30.3.0", - "babel-jest": "30.3.0", + "@jest/pattern": "30.4.0", + "@jest/test-sequencer": "30.4.1", + "@jest/types": "30.4.1", + "babel-jest": "30.4.1", "chalk": "^4.1.2", "ci-info": "^4.2.0", "deepmerge": "^4.3.1", "glob": "^10.5.0", "graceful-fs": "^4.2.11", - "jest-circus": "30.3.0", - "jest-docblock": "30.2.0", - "jest-environment-node": "30.3.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.3.0", - "jest-runner": "30.3.0", - "jest-util": "30.3.0", - "jest-validate": "30.3.0", + "jest-circus": "30.4.2", + "jest-docblock": "30.4.0", + "jest-environment-node": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-resolve": "30.4.1", + "jest-runner": "30.4.2", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", "parse-json": "^5.2.0", - "pretty-format": "30.3.0", + "pretty-format": "30.4.1", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -5274,9 +5325,9 @@ } }, "node_modules/jest-config/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", "dev": true, "license": "MIT", "dependencies": { @@ -5346,25 +5397,25 @@ } }, "node_modules/jest-diff": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.3.0.tgz", - "integrity": "sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.4.1.tgz", + "integrity": "sha512-CRpFK0RtLriVDGcPPAnR6HMVI8bSR2jnUIgralhauzYQZIb4RH9AtEInTuQr65LmmGggGcRT6HIASxwqsVsmlA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/diff-sequences": "30.3.0", + "@jest/diff-sequences": "30.4.0", "@jest/get-type": "30.1.0", "chalk": "^4.1.2", - "pretty-format": "30.3.0" + "pretty-format": "30.4.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-docblock": { - "version": "30.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.2.0.tgz", - "integrity": "sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==", + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.4.0.tgz", + "integrity": "sha512-ZPMabUZCx5MpbZ2eBYSvZ0J8fvo3dR9oM+eeUpb3aKNQFuS2tu3Duw1TNlMoP8k3WQgKGJuhcMFvwcVuq6T7oA==", "dev": true, "license": "MIT", "dependencies": { @@ -5375,36 +5426,36 @@ } }, "node_modules/jest-each": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.3.0.tgz", - "integrity": "sha512-V8eMndg/aZ+3LnCJgSm13IxS5XSBM22QSZc9BtPK8Dek6pm+hfUNfwBdvsB3d342bo1q7wnSkC38zjX259qZNA==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.4.1.tgz", + "integrity": "sha512-/8MJbH6fuj48TstjrMf+u/pd06Qezz5xOXvZA6442heNOWr8bdeoGZX2d9fCn028CoMgYmroH9//zky5GfyYmA==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", - "@jest/types": "30.3.0", + "@jest/types": "30.4.1", "chalk": "^4.1.2", - "jest-util": "30.3.0", - "pretty-format": "30.3.0" + "jest-util": "30.4.1", + "pretty-format": "30.4.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-environment-node": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.3.0.tgz", - "integrity": "sha512-4i6HItw/JSiJVsC5q0hnKIe/hbYfZLVG9YJ/0pU9Hz2n/9qZe3Rhn5s5CUZA5ORZlcdT/vmAXRMyONXJwPrmYQ==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.4.1.tgz", + "integrity": "sha512-4FZYVOk85hz2AyT6BbarKy9u37g6DbrDyCdFhsnDdXqyrueYQvB+0zO4f/kqLCRD0BsPRXPMNJeQwihKZV8naw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.3.0", - "@jest/fake-timers": "30.3.0", - "@jest/types": "30.3.0", + "@jest/environment": "30.4.1", + "@jest/fake-timers": "30.4.1", + "@jest/types": "30.4.1", "@types/node": "*", - "jest-mock": "30.3.0", - "jest-util": "30.3.0", - "jest-validate": "30.3.0" + "jest-mock": "30.4.1", + "jest-util": "30.4.1", + "jest-validate": "30.4.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -5436,20 +5487,20 @@ } }, "node_modules/jest-haste-map": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.3.0.tgz", - "integrity": "sha512-mMi2oqG4KRU0R9QEtscl87JzMXfUhbKaFqOxmjb2CKcbHcUGFrJCBWHmnTiUqi6JcnzoBlO4rWfpdl2k/RfLCA==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.4.1.tgz", + "integrity": "sha512-rFrcONd8jeFsyw+Z9CrScJgglRf2+NFmNam8dKu7n+SoHqNYT47mn0DdEcVUZJpvh7Iz6/si7f7yUH7GJHVgnw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.3.0", + "@jest/types": "30.4.1", "@types/node": "*", "anymatch": "^3.1.3", "fb-watchman": "^2.0.2", "graceful-fs": "^4.2.11", - "jest-regex-util": "30.0.1", - "jest-util": "30.3.0", - "jest-worker": "30.3.0", + "jest-regex-util": "30.4.0", + "jest-util": "30.4.1", + "jest-worker": "30.4.1", "picomatch": "^4.0.3", "walker": "^1.0.8" }, @@ -5474,49 +5525,50 @@ } }, "node_modules/jest-leak-detector": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.3.0.tgz", - "integrity": "sha512-cuKmUUGIjfXZAiGJ7TbEMx0bcqNdPPI6P1V+7aF+m/FUJqFDxkFR4JqkTu8ZOiU5AaX/x0hZ20KaaIPXQzbMGQ==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.4.1.tgz", + "integrity": "sha512-IpmyiioeHxiWDhesHnUFmOxcTzwCwKpgACgWajtAP+nYQXiY7DakTxB6Bx9JFiRMljr0AX1PvnQdaU1KFoz6NQ==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", - "pretty-format": "30.3.0" + "pretty-format": "30.4.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.3.0.tgz", - "integrity": "sha512-HEtc9uFQgaUHkC7nLSlQL3Tph4Pjxt/yiPvkIrrDCt9jhoLIgxaubo1G+CFOnmHYMxHwwdaSN7mkIFs6ZK8OhA==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.4.1.tgz", + "integrity": "sha512-zvYfX5CaeEkFrrLS9suWe9rvJrm9J1Iv3ua8kIBv9GEPzcnsfBf0bob37la7s67fs0nlBC3EuvkOLnXQKxtx4A==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", "chalk": "^4.1.2", - "jest-diff": "30.3.0", - "pretty-format": "30.3.0" + "jest-diff": "30.4.1", + "pretty-format": "30.4.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-message-util": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.3.0.tgz", - "integrity": "sha512-Z/j4Bo+4ySJ+JPJN3b2Qbl9hDq3VrXmnjjGEWD/x0BCXeOXPTV1iZYYzl2X8c1MaCOL+ewMyNBcm88sboE6YWw==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.4.1.tgz", + "integrity": "sha512-kwCKIvq0MCW1HzLoGola9Te6JUdzgV0loyKJ3Qghrkz9i5/RRIHsL95BMQc2HBBhlBKC4j22K9p11TGHH8RBpQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@jest/types": "30.3.0", + "@jest/types": "30.4.1", "@types/stack-utils": "^2.0.3", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", + "jest-util": "30.4.1", "picomatch": "^4.0.3", - "pretty-format": "30.3.0", + "pretty-format": "30.4.1", "slash": "^3.0.0", "stack-utils": "^2.0.6" }, @@ -5538,15 +5590,15 @@ } }, "node_modules/jest-mock": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.3.0.tgz", - "integrity": "sha512-OTzICK8CpE+t4ndhKrwlIdbM6Pn8j00lvmSmq5ejiO+KxukbLjgOflKWMn3KE34EZdQm5RqTuKj+5RIEniYhog==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.4.1.tgz", + "integrity": "sha512-/i8SVb8/NSB7RfNi8gfqu8gxLV23KaL5EpAttyb9iz8qWRIqXRLflycz/32wXsYkOnaUlx8NAKnJYtpsmXUmfw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.3.0", + "@jest/types": "30.4.1", "@types/node": "*", - "jest-util": "30.3.0" + "jest-util": "30.4.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -5571,9 +5623,9 @@ } }, "node_modules/jest-regex-util": { - "version": "30.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", - "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", + "version": "30.4.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.4.0.tgz", + "integrity": "sha512-mWlvLviKIgIQ8VCuM1xRdD0TWp3zlzionlmDBjuXVBs+VkmXq6FgW9T4Emr7oGz/Rk6feDCGyiugolcQEyp3mg==", "dev": true, "license": "MIT", "engines": { @@ -5581,18 +5633,18 @@ } }, "node_modules/jest-resolve": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.3.0.tgz", - "integrity": "sha512-NRtTAHQlpd15F9rUR36jqwelbrDV/dY4vzNte3S2kxCKUJRYNd5/6nTSbYiak1VX5g8IoFF23Uj5TURkUW8O5g==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.4.1.tgz", + "integrity": "sha512-Zry8Yq/yJcNAZ7dJ5F2heic8AheXvbFZ7XI5V+h28nrYZ7Qoyy4dItq8OodjnYD270mvX+ZudmrNV9cysqhW5Q==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.2", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.3.0", + "jest-haste-map": "30.4.1", "jest-pnp-resolver": "^1.2.3", - "jest-util": "30.3.0", - "jest-validate": "30.3.0", + "jest-util": "30.4.1", + "jest-validate": "30.4.1", "slash": "^3.0.0", "unrs-resolver": "^1.7.11" }, @@ -5601,46 +5653,46 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.3.0.tgz", - "integrity": "sha512-9ev8s3YN6Hsyz9LV75XUwkCVFlwPbaFn6Wp75qnI0wzAINYWY8Fb3+6y59Rwd3QaS3kKXffHXsZMziMavfz/nw==", + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.4.2.tgz", + "integrity": "sha512-gDiVh1I+GxYzz9oXlyw+1wv6VOYX1WYxMOfjsA3iGKePV2oxmbHhwxfkALxNxYy1ciw6APWwkW2zZONwP97aEQ==", "dev": true, "license": "MIT", "dependencies": { - "jest-regex-util": "30.0.1", - "jest-snapshot": "30.3.0" + "jest-regex-util": "30.4.0", + "jest-snapshot": "30.4.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/jest-runner": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.3.0.tgz", - "integrity": "sha512-gDv6C9LGKWDPLia9TSzZwf4h3kMQCqyTpq+95PODnTRDO0g9os48XIYYkS6D236vjpBir2fF63YmJFtqkS5Duw==", + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.4.2.tgz", + "integrity": "sha512-2dw0PslVYXxffXGpLo+Ejad+KcI1Qkjn7f4X4619gf21oCUmL+SPfjqIa/losUem3yEOvfNZe/F1HWUcNpODcg==", "dev": true, "license": "MIT", "dependencies": { - "@jest/console": "30.3.0", - "@jest/environment": "30.3.0", - "@jest/test-result": "30.3.0", - "@jest/transform": "30.3.0", - "@jest/types": "30.3.0", + "@jest/console": "30.4.1", + "@jest/environment": "30.4.1", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", "@types/node": "*", "chalk": "^4.1.2", "emittery": "^0.13.1", "exit-x": "^0.2.2", "graceful-fs": "^4.2.11", - "jest-docblock": "30.2.0", - "jest-environment-node": "30.3.0", - "jest-haste-map": "30.3.0", - "jest-leak-detector": "30.3.0", - "jest-message-util": "30.3.0", - "jest-resolve": "30.3.0", - "jest-runtime": "30.3.0", - "jest-util": "30.3.0", - "jest-watcher": "30.3.0", - "jest-worker": "30.3.0", + "jest-docblock": "30.4.0", + "jest-environment-node": "30.4.1", + "jest-haste-map": "30.4.1", + "jest-leak-detector": "30.4.1", + "jest-message-util": "30.4.1", + "jest-resolve": "30.4.1", + "jest-runtime": "30.4.2", + "jest-util": "30.4.1", + "jest-watcher": "30.4.1", + "jest-worker": "30.4.1", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -5649,32 +5701,32 @@ } }, "node_modules/jest-runtime": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.3.0.tgz", - "integrity": "sha512-CgC+hIBJbuh78HEffkhNKcbXAytQViplcl8xupqeIWyKQF50kCQA8J7GeJCkjisC6hpnC9Muf8jV5RdtdFbGng==", + "version": "30.4.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.4.2.tgz", + "integrity": "sha512-3/5e8iPz2k/VLqlr8DgTftYyLUv8Su3FkCAO2/Od81UsUTpSxOrS6O5x5KkoQwyUjmpYyDJKeyAvg2T2nvpNkQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "30.3.0", - "@jest/fake-timers": "30.3.0", - "@jest/globals": "30.3.0", + "@jest/environment": "30.4.1", + "@jest/fake-timers": "30.4.1", + "@jest/globals": "30.4.1", "@jest/source-map": "30.0.1", - "@jest/test-result": "30.3.0", - "@jest/transform": "30.3.0", - "@jest/types": "30.3.0", + "@jest/test-result": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", "@types/node": "*", "chalk": "^4.1.2", "cjs-module-lexer": "^2.1.0", "collect-v8-coverage": "^1.0.2", "glob": "^10.5.0", "graceful-fs": "^4.2.11", - "jest-haste-map": "30.3.0", - "jest-message-util": "30.3.0", - "jest-mock": "30.3.0", - "jest-regex-util": "30.0.1", - "jest-resolve": "30.3.0", - "jest-snapshot": "30.3.0", - "jest-util": "30.3.0", + "jest-haste-map": "30.4.1", + "jest-message-util": "30.4.1", + "jest-mock": "30.4.1", + "jest-regex-util": "30.4.0", + "jest-resolve": "30.4.1", + "jest-snapshot": "30.4.1", + "jest-util": "30.4.1", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -5683,9 +5735,9 @@ } }, "node_modules/jest-runtime/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", "dev": true, "license": "MIT", "dependencies": { @@ -5755,9 +5807,9 @@ } }, "node_modules/jest-snapshot": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.3.0.tgz", - "integrity": "sha512-f14c7atpb4O2DeNhwcvS810Y63wEn8O1HqK/luJ4F6M4NjvxmAKQwBUWjbExUtMxWJQ0wVgmCKymeJK6NZMnfQ==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.4.1.tgz", + "integrity": "sha512-tEOkkfOMppUyeiHwjZswOQ3lcnoTnws/q5FnGIaeIh/jmoU0ZlgMYRR8sTlTj+nNGCoJ0RDq6SfxGxCsyMTPmw==", "dev": true, "license": "MIT", "dependencies": { @@ -5766,20 +5818,20 @@ "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-syntax-typescript": "^7.27.1", "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.3.0", + "@jest/expect-utils": "30.4.1", "@jest/get-type": "30.1.0", - "@jest/snapshot-utils": "30.3.0", - "@jest/transform": "30.3.0", - "@jest/types": "30.3.0", + "@jest/snapshot-utils": "30.4.1", + "@jest/transform": "30.4.1", + "@jest/types": "30.4.1", "babel-preset-current-node-syntax": "^1.2.0", "chalk": "^4.1.2", - "expect": "30.3.0", + "expect": "30.4.1", "graceful-fs": "^4.2.11", - "jest-diff": "30.3.0", - "jest-matcher-utils": "30.3.0", - "jest-message-util": "30.3.0", - "jest-util": "30.3.0", - "pretty-format": "30.3.0", + "jest-diff": "30.4.1", + "jest-matcher-utils": "30.4.1", + "jest-message-util": "30.4.1", + "jest-util": "30.4.1", + "pretty-format": "30.4.1", "semver": "^7.7.2", "synckit": "^0.11.8" }, @@ -5788,9 +5840,9 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", "dev": true, "license": "ISC", "bin": { @@ -5801,13 +5853,13 @@ } }, "node_modules/jest-util": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.3.0.tgz", - "integrity": "sha512-/jZDa00a3Sz7rdyu55NLrQCIrbyIkbBxareejQI315f/i8HjYN+ZWsDLLpoQSiUIEIyZF/R8fDg3BmB8AtHttg==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.4.1.tgz", + "integrity": "sha512-vjQb1sACEiv13DKJMDToJpzVW0joCsIQrmbg0fi7CyOOt+g9jTuQl2A216pWRBYhOVt53XbL/2LbMKg1BECWOw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "30.3.0", + "@jest/types": "30.4.1", "@types/node": "*", "chalk": "^4.1.2", "ci-info": "^4.2.0", @@ -5832,18 +5884,18 @@ } }, "node_modules/jest-validate": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.3.0.tgz", - "integrity": "sha512-I/xzC8h5G+SHCb2P2gWkJYrNiTbeL47KvKeW5EzplkyxzBRBw1ssSHlI/jXec0ukH2q7x2zAWQm7015iusg62Q==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.4.1.tgz", + "integrity": "sha512-PDWi4SOwLnwqNDfHZjOcsEFyZ4fc/2W2gVL3DEoyqnB6jCQMLRtfBong8s6omIw3lI0HWOus12xfnFmQtjW3fw==", "dev": true, "license": "MIT", "dependencies": { "@jest/get-type": "30.1.0", - "@jest/types": "30.3.0", + "@jest/types": "30.4.1", "camelcase": "^6.3.0", "chalk": "^4.1.2", "leven": "^3.1.0", - "pretty-format": "30.3.0" + "pretty-format": "30.4.1" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -5863,19 +5915,19 @@ } }, "node_modules/jest-watcher": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.3.0.tgz", - "integrity": "sha512-PJ1d9ThtTR8aMiBWUdcownq9mDdLXsQzJayTk4kmaBRHKvwNQn+ANveuhEBUyNI2hR1TVhvQ8D5kHubbzBHR/w==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.4.1.tgz", + "integrity": "sha512-/l9UonmvCwjHH7d2h3iAwIloLc1H0S8mJZ/LNK3i86hqwPAz8otUJjP9MfYtz9Tt77Su5FD2xGjZn8d31IZHlw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "30.3.0", - "@jest/types": "30.3.0", + "@jest/test-result": "30.4.1", + "@jest/types": "30.4.1", "@types/node": "*", "ansi-escapes": "^4.3.2", "chalk": "^4.1.2", "emittery": "^0.13.1", - "jest-util": "30.3.0", + "jest-util": "30.4.1", "string-length": "^4.0.2" }, "engines": { @@ -5883,15 +5935,15 @@ } }, "node_modules/jest-worker": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.3.0.tgz", - "integrity": "sha512-DrCKkaQwHexjRUFTmPzs7sHQe0TSj9nvDALKGdwmK5mW9v7j90BudWirKAJHt3QQ9Dhrg1F7DogPzhChppkJpQ==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.4.1.tgz", + "integrity": "sha512-SHynN/q/QD++iNyvMdy+WMmbCGk8jIsNcRxycXbWubSOhvo6T+j2afcfUSl+3hYsiBebOTo0cT7c2H7CXugu1g==", "dev": true, "license": "MIT", "dependencies": { "@types/node": "*", "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.3.0", + "jest-util": "30.4.1", "merge-stream": "^2.0.0", "supports-color": "^8.1.1" }, @@ -6432,9 +6484,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", "dev": true, "license": "ISC", "bin": { @@ -7104,15 +7156,16 @@ } }, "node_modules/pretty-format": { - "version": "30.3.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.3.0.tgz", - "integrity": "sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ==", + "version": "30.4.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.4.1.tgz", + "integrity": "sha512-K6KiKMHTL4jjX4u3Kir2EW07nRfcqVTXIImx50wbjHQTcZPgg+gjVeNTIT3l3L1Rd4UefxfogquC9J37SoFyyw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "30.0.5", + "@jest/schemas": "30.4.1", "ansi-styles": "^5.2.0", - "react-is": "^18.3.1" + "react-is-18": "npm:react-is@^18.3.1", + "react-is-19": "npm:react-is@^19.2.5" }, "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" @@ -7243,13 +7296,22 @@ "node": ">= 0.10" } }, - "node_modules/react-is": { + "node_modules/react-is-18": { + "name": "react-is", "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, + "node_modules/react-is-19": { + "name": "react-is", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.7.tgz", + "integrity": "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==", + "dev": true, + "license": "MIT" + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -8169,13 +8231,13 @@ } }, "node_modules/synckit": { - "version": "0.11.12", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", - "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz", + "integrity": "sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/core": "^0.2.9" + "@pkgr/core": "^0.3.6" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -8597,38 +8659,41 @@ } }, "node_modules/unrs-resolver": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", - "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.12.2.tgz", + "integrity": "sha512-dmlRxBJJayXjqTwC+JtF1HhJmgf3ftQ3YejFcZrf4+KKtJv0qDsK1pjqaaVjG7wJ5NJ6UVP1OqRMQ71Z4C3rxQ==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { - "napi-postinstall": "^0.3.0" + "napi-postinstall": "^0.3.4" }, "funding": { "url": "https://opencollective.com/unrs-resolver" }, "optionalDependencies": { - "@unrs/resolver-binding-android-arm-eabi": "1.11.1", - "@unrs/resolver-binding-android-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-arm64": "1.11.1", - "@unrs/resolver-binding-darwin-x64": "1.11.1", - "@unrs/resolver-binding-freebsd-x64": "1.11.1", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", - "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", - "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", - "@unrs/resolver-binding-linux-x64-musl": "1.11.1", - "@unrs/resolver-binding-wasm32-wasi": "1.11.1", - "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", - "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", - "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + "@unrs/resolver-binding-android-arm-eabi": "1.12.2", + "@unrs/resolver-binding-android-arm64": "1.12.2", + "@unrs/resolver-binding-darwin-arm64": "1.12.2", + "@unrs/resolver-binding-darwin-x64": "1.12.2", + "@unrs/resolver-binding-freebsd-x64": "1.12.2", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.12.2", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.12.2", + "@unrs/resolver-binding-linux-arm64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-arm64-musl": "1.12.2", + "@unrs/resolver-binding-linux-loong64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-loong64-musl": "1.12.2", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-riscv64-musl": "1.12.2", + "@unrs/resolver-binding-linux-s390x-gnu": "1.12.2", + "@unrs/resolver-binding-linux-x64-gnu": "1.12.2", + "@unrs/resolver-binding-linux-x64-musl": "1.12.2", + "@unrs/resolver-binding-openharmony-arm64": "1.12.2", + "@unrs/resolver-binding-wasm32-wasi": "1.12.2", + "@unrs/resolver-binding-win32-arm64-msvc": "1.12.2", + "@unrs/resolver-binding-win32-ia32-msvc": "1.12.2", + "@unrs/resolver-binding-win32-x64-msvc": "1.12.2" } }, "node_modules/update-browserslist-db": { From f843550e833df4dc583f7ed448c35bdcb0b587bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Jun 2026 11:05:16 -0400 Subject: [PATCH 11/19] [dependencies]: Bump hono from 4.12.18 to 4.12.23 (#1326) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [hono](https://github.com/honojs/hono) from 4.12.18 to 4.12.23.
Release notes

Sourced from hono's releases.

v4.12.23

What's Changed

Full Changelog: https://github.com/honojs/hono/compare/v4.12.22...v4.12.23

v4.12.22

What's Changed

New Contributors

Full Changelog: https://github.com/honojs/hono/compare/v4.12.21...v4.12.22

v4.12.21

Security fixes

This release includes fixes for the following security issues:

app.mount() strips mount prefix using undecoded path, causing incorrect routing for percent-encoded paths

Affects: app.mount(). Fixes prefix stripping using the raw URL pathname instead of the decoded path, where percent-encoded characters in the mount prefix or path could cause the prefix to be removed at the wrong position, resulting in the sub-application receiving an incorrect path. GHSA-2gcr-mfcq-wcc3

IP Restriction bypasses static deny rules for non-canonical IPv6

Affects: hono/ip-restriction. Fixes IP address comparison using string equality, where non-canonical IPv6 representations of a denied address — such as compressed forms or hex-notation IPv4-mapped addresses — could bypass static deny rules. GHSA-xrhx-7g5j-rcj5

Cookie helper does not sanitize sameSite and priority, allowing Set-Cookie injection

Affects: hono/cookie. Fixes missing validation of sameSite and priority options against injection characters (;, \r, \n), where user-controlled input passed to either option could inject additional attributes into the Set-Cookie response header. GHSA-3hrh-pfw6-9m5x

JWT middleware accepts any Authorization scheme, not only Bearer

Affects: hono/jwt, hono/jwk. Fixes missing scheme validation in the Authorization header, where any two-part header value was accepted regardless of the scheme name, allowing non-Bearer schemes to pass JWT authentication. GHSA-f577-qrjj-4474


Users who use app.mount(), hono/ip-restriction, hono/cookie, or hono/jwt/hono/jwk are encouraged to upgrade to this version.

... (truncated)

Commits
  • 83bfb3b 4.12.23
  • bcd290a fix(utils/ipaddr): do not compress a single 0 group to :: (#4971)
  • c968177 feat(compress): add contentTypeFilter option and `COMPRESSIBLE_CONTENT_TYPE_R...
  • 0265a54 docs(contribution): add AI Usage Policy (#4970)
  • c84c5d2 feat(context): export the Context class publicly (#4543)
  • 82dad62 fix(serve-static): normalize all backslashes in file paths, not just the firs...
  • 2f01b77 4.12.22
  • 6bc0dff feat: add msgpack as a compressible content type (#4957)
  • 7e0555d fix(deno): echo negotiated WebSocket subprotocol in upgrade response (#4955)
  • f0ed246 fix(compress): respect Accept-Encoding when encoding option is set (#4951)
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=hono&package-manager=npm_and_yarn&previous-version=4.12.18&new-version=4.12.23)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/microsoft/azure-devops-mcp/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index ddbf8e91..4f9c2dc6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4584,9 +4584,9 @@ } }, "node_modules/hono": { - "version": "4.12.18", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.18.tgz", - "integrity": "sha512-RWzP96k/yv0PQfyXnWjs6zot20TqfpfsNXhOnev8d1InAxubW93L11/oNUc3tQqn2G0bSdAOBpX+2uDFHV7kdQ==", + "version": "4.12.23", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.23.tgz", + "integrity": "sha512-eIaZ9qDgu7XV0pxOCrg7/WhnQ6Ivm22UcxhXx/A3dcbqbbYgBEkc6e/J/s7j2tS96zoB0S9VBdLwQNCWwUo4LA==", "license": "MIT", "engines": { "node": ">=16.9.0" From 2511ee867ad4d431e36491b68178134762ba569e Mon Sep 17 00:00:00 2001 From: vladislav doster Date: Fri, 5 Jun 2026 10:05:42 -0500 Subject: [PATCH 12/19] docs: Correct spelling (#1324) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Correct spelling in documentation and codebase comments. ## GitHub issue number N/A ## **Associated Risks** N/A ## ✅ **PR Checklist** - [X] **I have read the [contribution guidelines](https://github.com/microsoft/azure-devops-mcp/blob/main/CONTRIBUTING.md)** - [X] **I have read the [code of conduct guidelines](https://github.com/microsoft/azure-devops-mcp/blob/main/CODE_OF_CONDUCT.md)** - [X] Title of the pull request is clear and informative. - [X] 👌 Code hygiene - [X] 🔭 Telemetry added, updated, or N/A - [X] 📄 Documentation added, updated, or N/A - [X] 🛡️ Automated tests added, or N/A ## 🧪 **How did you test it?** N/A Signed-off-by: vladdoster Co-authored-by: Dan Hellem --- docs/EXAMPLES.md | 6 +++--- docs/FAQ.md | 2 +- src/index.ts | 2 +- src/tools/work-items.ts | 4 ++-- src/tools/work.ts | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/EXAMPLES.md b/docs/EXAMPLES.md index ec43bc69..9a3cbebc 100644 --- a/docs/EXAMPLES.md +++ b/docs/EXAMPLES.md @@ -122,15 +122,15 @@ List of work items for Stories backlog. But then go thru and find all the securi 📽️ [Azure DevOps MCP Server: Triage Work](https://youtu.be/gCI_pPS76C8) -### Adding and Updating Work Items Using the `format` Paramater +### Adding and Updating Work Items Using the `format` Parameter -You can use the `format` paramater to indicate markdown formatting for large text fields. It is now available on the following tools: +You can use the `format` parameter to indicate markdown formatting for large text fields. It is now available on the following tools: - **wit_update_work_items_batch** - **wit_add_child_work_items** - **wit_create_work_item** -> 🚩 HTML is the default unless `Markdown` is explicity set. +> 🚩 HTML is the default unless `Markdown` is explicitly set. ```text Update work item 12345 with a new description and use Markdown text. Use Markdown format param. Use bulk update. diff --git a/docs/FAQ.md b/docs/FAQ.md index a798b6bb..49c64b5b 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -28,6 +28,6 @@ Unfortunately, personal accounts are not supported. To maintain a higher level o ![image of login error for personal accounts](./media/personal-accounts-error.png) -## When will a remote Azure DevOps MCP Server be availble? +## When will a remote Azure DevOps MCP Server be available? We receive this question frequently. The good news is that work is currently underway. Development began in early January 2026. Once we can provide a reliable timeline, we will publish it on the public [Azure DevOps roadmap](https://learn.microsoft.com/en-us/azure/devops/release-notes/features-timeline). diff --git a/src/index.ts b/src/index.ts index 28d70bb1..34d34a2a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -125,7 +125,7 @@ async function main() { logger.debug("PAT mode: global fetch interceptor installed to rewrite Bearer -> Basic auth headers"); } - // removing prompts untill further notice + // removing prompts until further notice // configurePrompts(server); configureAllTools(server, authenticator, getAzureDevOpsClient(authenticator, userAgentComposer, argv.authentication), () => userAgentComposer.userAgent, enabledDomains); diff --git a/src/tools/work-items.ts b/src/tools/work-items.ts index 86dea044..be7adff6 100644 --- a/src/tools/work-items.ts +++ b/src/tools/work-items.ts @@ -158,7 +158,7 @@ function configureWorkItemTools(server: McpServer, tokenProvider: () => Promise< server.tool( WORKITEM_TOOLS.my_work_items, - "Retrieve a list of work items relevent to the authenticated user. If a project is not specified, you will be prompted to select one.", + "Retrieve a list of work items relevant to the authenticated user. If a project is not specified, you will be prompted to select one.", { project: z.string().optional().describe("The name or ID of the Azure DevOps project. Reuse from prior context if already known. If not provided, a project selection prompt will be shown."), type: z.enum(["assignedtome", "myactivity"]).default("assignedtome").describe("The type of work items to retrieve. Defaults to 'assignedtome'."), @@ -905,7 +905,7 @@ function configureWorkItemTools(server: McpServer, tokenProvider: () => Promise< })); // Check if any field has format === "Markdown" and add the multilineFieldsFormat operation - // this should only happen for large text fields, but since we dont't know by field name, lets assume if the users + // this should only happen for large text fields, but since we don't know by field name, lets assume if the users // passes a value longer than 100 characters, then we can set the format to Markdown fields.forEach(({ name, value, format }) => { if (value.length > 100 && format === "Markdown") { diff --git a/src/tools/work.ts b/src/tools/work.ts index 10318888..c235141d 100644 --- a/src/tools/work.ts +++ b/src/tools/work.ts @@ -133,7 +133,7 @@ function configureWorkTools(server: McpServer, _: () => Promise, connect { project: z.string().optional().describe("The name or ID of the Azure DevOps project. Reuse from prior context if already known. If not provided, a project selection prompt will be shown."), depth: z.coerce.number().default(2).describe("Depth of children to fetch."), - excludedIds: z.array(z.coerce.number().min(1)).optional().describe("An optional array of iteration IDs, and thier children, that should not be returned."), + excludedIds: z.array(z.coerce.number().min(1)).optional().describe("An optional array of iteration IDs, and their children, that should not be returned."), }, async ({ project, depth, excludedIds: ids }) => { try { From 3765839dae864b8a25bfe19112988363d2ccc15c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 5 Jun 2026 11:24:28 -0400 Subject: [PATCH 13/19] [dependencies]: Bump azure-devops-extension-api from 4.270.0 to 5.272.3 (#1256) Bumps [azure-devops-extension-api](https://github.com/Microsoft/azure-devops-extension-api) from 4.270.0 to 5.272.3.
Commits
  • f59100a Merge pull request #202 from microsoft/users/clipskey/remove-top-level-types
  • c79a377 Removes top-level types from package.json; removes reference usage in index.d.ts
  • 2aee921 Merge pull request #201 from microsoft/releases/5.272.2
  • ce46bd6 Merge pull request #200 from microsoft/users/clipskey/use-references-for-docs
  • f0be856 Merge pull request #200 from microsoft/users/clipskey/use-references-for-docs
  • bdff8e3 Makes comments a little more concise
  • b55c5b9 Fixes issue with buildpackage.js
  • 6ad4f64 Adds TS ///references to .d.ts for docs pipeline
  • dd4a949 Merge pull request #199 from microsoft/releases/5.272.1
  • 757b445 Merge pull request #198 from microsoft/users/clipskey/fix-buildpackage-for-do...
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=azure-devops-extension-api&package-manager=npm_and_yarn&previous-version=4.270.0&new-version=5.272.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dan Hellem --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4f9c2dc6..72dee50d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@azure/identity": "^4.10.0", "@azure/msal-node": "^5.0.6", "@modelcontextprotocol/sdk": "1.29.0", - "azure-devops-extension-api": "^4.264.0", + "azure-devops-extension-api": "^5.272.3", "azure-devops-extension-sdk": "^4.0.2", "azure-devops-node-api": "^15.1.2", "winston": "^3.18.3", @@ -2720,9 +2720,9 @@ "license": "MIT" }, "node_modules/azure-devops-extension-api": { - "version": "4.270.0", - "resolved": "https://registry.npmjs.org/azure-devops-extension-api/-/azure-devops-extension-api-4.270.0.tgz", - "integrity": "sha512-FR3bC8pe0ngMa1jE3PMxXvYIqb275RlTNrJBX6IdOXHB6yUh0ePeOpHbknLvRiljgaldGxWRdHjCbGmGcImhwg==", + "version": "5.272.3", + "resolved": "https://registry.npmjs.org/azure-devops-extension-api/-/azure-devops-extension-api-5.272.3.tgz", + "integrity": "sha512-HmE62nKV2q3OKNySQcrHjPe6L1SvBsBQtCqrMXR80yv92T1e1wJ5m3VkM1oEHmSK9hKSszlevndN9KnbYlvHPg==", "license": "MIT", "dependencies": { "whatwg-fetch": "~3.0.0" diff --git a/package.json b/package.json index a8e9404a..4e5f4a2f 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "@azure/identity": "^4.10.0", "@azure/msal-node": "^5.0.6", "@modelcontextprotocol/sdk": "1.29.0", - "azure-devops-extension-api": "^4.264.0", + "azure-devops-extension-api": "^5.272.3", "azure-devops-extension-sdk": "^4.0.2", "azure-devops-node-api": "^15.1.2", "winston": "^3.18.3", From 666a9a12de49c390c2abef2e373b1c35df22b043 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jun 2026 09:56:03 -0400 Subject: [PATCH 14/19] [dependencies]: Bump lint-staged from 17.0.5 to 17.0.7 (#1330) Bumps [lint-staged](https://github.com/lint-staged/lint-staged) from 17.0.5 to 17.0.7.
Release notes

Sourced from lint-staged's releases.

v17.0.7

Patch Changes

v17.0.6

Patch Changes

  • #1803 bdf2770 - Run all tests with Deno, in addition to Node.js and Bun.

  • #1796 7508272 - Fix performance regression of lint-staged v17 by going back to using git add to stage task modifications. This was changed to git update-index --again in v17 for less manual work, but unfortunately the update-index command gets slower in very large Git repos.

  • #1797 7b2505a - This version of lint-staged uses the new staged publishing for npm packages feature. Releases are already published from GitHub Actions with trusted publishing, but now an additional approval with two-factor authentication is also required.

  • #1802 321b0a9 - Downgrade dependency tinyexec@1.2.2 to avoid issues in version 1.2.3.

Changelog

Sourced from lint-staged's changelog.

17.0.7

Patch Changes

17.0.6

Patch Changes

  • #1803 bdf2770 - Run all tests with Deno, in addition to Node.js and Bun.

  • #1796 7508272 - Fix performance regression of lint-staged v17 by going back to using git add to stage task modifications. This was changed to git update-index --again in v17 for less manual work, but unfortunately the update-index command gets slower in very large Git repos.

  • #1797 7b2505a - This version of lint-staged uses the new staged publishing for npm packages feature. Releases are already published from GitHub Actions with trusted publishing, but now an additional approval with two-factor authentication is also required.

  • #1802 321b0a9 - Downgrade dependency tinyexec@1.2.2 to avoid issues in version 1.2.3.

Commits
  • cd11fec Merge pull request #1807 from lint-staged/changeset-release/main
  • 15a8ee0 chore(changeset): release
  • 797bbd9 Merge pull request #1808 from lint-staged/add-stashing-faq
  • 504e307 docs: add FAQ entry on how stashing works
  • eff5cd1 Merge pull request #1806 from lint-staged/update-tinyexec
  • e692e58 build(deps): update tinyexec@^1.2.4
  • a2dd4ea Merge pull request #1805 from lint-staged/update-github-templates
  • c928519 docs: update GitHub templates
  • 094ba56 Merge pull request #1798 from lint-staged/changeset-release/main
  • 88e19fe chore(changeset): release
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=lint-staged&package-manager=npm_and_yarn&previous-version=17.0.5&new-version=17.0.7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 72dee50d..44856383 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6155,16 +6155,16 @@ "license": "MIT" }, "node_modules/lint-staged": { - "version": "17.0.5", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-17.0.5.tgz", - "integrity": "sha512-d12yC+/e8RhBjZtaxZn71FyrgU/P5e+uAPifhCLwdosQZP/zamSdKRWDC30ocVIbzDKiFG1McHc/LUgB92GIPw==", + "version": "17.0.7", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-17.0.7.tgz", + "integrity": "sha512-JrSobt+tW3rH8IOMi8tDZd3foorM5yPEkLD/V2NxobgHrFfHWGee4MOLVuZeScgxftEwbHrPHIFA/ZL+nUJeuA==", "dev": true, "license": "MIT", "dependencies": { "listr2": "^10.2.1", "picomatch": "^4.0.4", "string-argv": "^0.3.2", - "tinyexec": "^1.1.2" + "tinyexec": "^1.2.4" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -6176,7 +6176,7 @@ "url": "https://opencollective.com/lint-staged" }, "optionalDependencies": { - "yaml": "^2.8.4" + "yaml": "^2.9.0" } }, "node_modules/lint-staged/node_modules/picomatch": { @@ -8290,9 +8290,9 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.2.tgz", - "integrity": "sha512-dAqSqE/RabpBKI8+h26GfLq6Vb3JVXs30XYQjdMjaj/c2tS8IYYMbIzP599KtRj7c57/wYApb3QjgRgXmrCukA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", "dev": true, "license": "MIT", "engines": { @@ -9010,9 +9010,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.4.tgz", - "integrity": "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", "dev": true, "license": "ISC", "optional": true, From 1ddc03970864bcd28521cd4bef7402f0dcfcb3a1 Mon Sep 17 00:00:00 2001 From: krid-583 Date: Tue, 9 Jun 2026 18:24:50 +0530 Subject: [PATCH 15/19] Updating description for create_pull_request_thread (#1270) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - When adding a suggestion through `create_pull_request_thread` in PR's, sometimes the tool collects the length of the `suggested_content` and marks the comment to that portion of the line which ends up being different from the user's intent. _Example:_ ``` Actual Line: - //padding: functions.toRem(8) functions.toRem(16); SuggestedContent: + padding: functions.toRem(8) functions.toRem(16);6); ``` - Also the API used for creating this considers the rightFileEndOffset as an exclusive value and ignores the character in last position image image The offset used here is 13 even though the line's character length is 12. ## Fix Updated the description of parameter to consider both of this while finding the value of `RightEndFileOffset` ## GitHub issue number 1265 ## **Associated Risks** - The MCP Client missing the instructions in the description ## ✅ **PR Checklist** - [X] **I have read the [contribution guidelines](https://github.com/microsoft/azure-devops-mcp/blob/main/CONTRIBUTING.md)** - [X] **I have read the [code of conduct guidelines](https://github.com/microsoft/azure-devops-mcp/blob/main/CODE_OF_CONDUCT.md)** - [X] Title of the pull request is clear and informative. - [X] 👌 Code hygiene - [ ] 🔭 Telemetry added, updated, or N/A - [ ] 📄 Documentation added, updated, or N/A - [ ] 🛡️ Automated tests added, or N/A ## 🧪 **How did you test it?** Manually tested by trying to tell it to add a suggestion comment. Co-authored-by: Krishna Prasath D Co-authored-by: Dan Hellem --- src/tools/repositories.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tools/repositories.ts b/src/tools/repositories.ts index e76b2b46..9d77548f 100644 --- a/src/tools/repositories.ts +++ b/src/tools/repositories.ts @@ -1550,7 +1550,7 @@ function configureRepoTools(server: McpServer, tokenProvider: () => Promise Promise { From 6499921ce75a89fabadca621da58d71c351883df Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jun 2026 09:30:59 -0400 Subject: [PATCH 16/19] [dependencies]: Bump typescript-eslint from 8.59.2 to 8.61.0 (#1339) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.59.2 to 8.61.0.
Release notes

Sourced from typescript-eslint's releases.

v8.61.0

8.61.0 (2026-06-08)

🚀 Features

  • ast-spec: change type of UnaryExpression.prefix to always true (#12372)
  • ast-spec: tighten types of ArrowFunction, YieldExpression, TSTypePredicate (#12373)

🩹 Fixes

  • rule-schema-to-typescript-types: respect ECMAScript line terminators (#12374)

❤️ Thank You

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

v8.60.1

8.60.1 (2026-06-01)

🩹 Fixes

  • eslint-plugin: respect ECMAScript line terminators in ts-comment rules (#12352)
  • eslint-plugin: [no-shadow] correct rule to match ESLint v10 handling (#12182)

❤️ Thank You

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

v8.60.0

8.60.0 (2026-05-25)

🚀 Features

  • rule-tester: added updates of RuleTester from upstream (#12291)

🩹 Fixes

  • playground TS version selector is not working (#12326, #12325)

❤️ Thank You

... (truncated)

Changelog

Sourced from typescript-eslint's changelog.

8.61.0 (2026-06-08)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.60.1 (2026-06-01)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.60.0 (2026-05-25)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.59.4 (2026-05-18)

🩹 Fixes

  • typescript-eslint: export Compatible* types from typescript-eslint to resolve pnpm TS error (#12340)

❤️ Thank You

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.59.3 (2026-05-11)

This was a version bump only for typescript-eslint to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

Commits
  • 16a5b24 chore(release): publish 8.61.0
  • 4f84a69 chore(release): publish 8.60.1
  • 1849b53 chore: typecheck using tsgo (#12139)
  • f891c29 chore(release): publish 8.60.0
  • ca6ca14 chore(release): publish 8.59.4
  • 4b927c6 fix(typescript-eslint): export Compatible* types from typescript-eslint to re...
  • 48e13c0 chore(release): publish 8.59.3
  • 44f9625 chore(deps): update vitest monorepo to v4.1.5 (#12307)
  • See full diff in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=typescript-eslint&package-manager=npm_and_yarn&previous-version=8.59.2&new-version=8.61.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dan Hellem --- package-lock.json | 140 +++++++++++++++++++++++----------------------- 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/package-lock.json b/package-lock.json index 44856383..c606730e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1915,17 +1915,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.2.tgz", - "integrity": "sha512-j/bwmkBvHUtPNxzuWe5z6BEk3q54YRyGlBXkSsmfoih7zNrBvl5A9A98anlp/7JbyZcWIJ8KXo/3Tq/DjFLtuQ==", + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.61.0.tgz", + "integrity": "sha512-bFNvl9ZczlVb+wR2Akszf3gHfKVj/8WanXaGJ3UstTA7brNKg0cNdk6X1Psu5V7MZ2oQtzZKOEzIUehaoxbDGw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.59.2", - "@typescript-eslint/type-utils": "8.59.2", - "@typescript-eslint/utils": "8.59.2", - "@typescript-eslint/visitor-keys": "8.59.2", + "@typescript-eslint/scope-manager": "8.61.0", + "@typescript-eslint/type-utils": "8.61.0", + "@typescript-eslint/utils": "8.61.0", + "@typescript-eslint/visitor-keys": "8.61.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -1938,7 +1938,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.59.2", + "@typescript-eslint/parser": "^8.61.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } @@ -1954,16 +1954,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.2.tgz", - "integrity": "sha512-plR3pp6D+SSUn1HM7xvSkx12/DhoHInI2YF35KAcVFNZvlC0gtrWqx7Qq1oH2Ssgi0vlFRCTbP+DZc7B9+TtsQ==", + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.61.0.tgz", + "integrity": "sha512-5B7PfA2e1NQGCnDHd/0lW7W3gvp3d59Ryw54FYO8Uswxo9f6ikw3AZV+Xj/TvpImmpsiYyUqAfhC6kJID1jF6w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.59.2", - "@typescript-eslint/types": "8.59.2", - "@typescript-eslint/typescript-estree": "8.59.2", - "@typescript-eslint/visitor-keys": "8.59.2", + "@typescript-eslint/scope-manager": "8.61.0", + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/typescript-estree": "8.61.0", + "@typescript-eslint/visitor-keys": "8.61.0", "debug": "^4.4.3" }, "engines": { @@ -1979,14 +1979,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.2.tgz", - "integrity": "sha512-+2hqvEkeyf/0FBor67duF0Ll7Ot8jyKzDQOSrxazF/danillRq2DwR9dLptsXpoZQqxE1UisSmoZewrlPas9Vw==", + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.61.0.tgz", + "integrity": "sha512-DV42F7MLJO6Rax7SK1yg43tcnEfGUrurSpSxKuVX+a3RCTzBlH3fuxprrOJXKCJGAaw82xXocikJ0uQaqwXgGA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.59.2", - "@typescript-eslint/types": "^8.59.2", + "@typescript-eslint/tsconfig-utils": "^8.61.0", + "@typescript-eslint/types": "^8.61.0", "debug": "^4.4.3" }, "engines": { @@ -2001,14 +2001,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.2.tgz", - "integrity": "sha512-JzfyEpEtOU89CcFSwyNS3mu4MLvLSXqnmX05+aKBDM+TdR5jzcGOEBwxwGNxrEQ7p/z6kK2WyioCGBf2zZBnvg==", + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.61.0.tgz", + "integrity": "sha512-IWdXFHFSb6mlC3HPc7QsLDm5zYEbUla6trDEHf32D3/dnuUyXd87plScSNXSbm0/RxMvObpI17sv/EDTGrGZkA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.2", - "@typescript-eslint/visitor-keys": "8.59.2" + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/visitor-keys": "8.61.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2019,9 +2019,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.2.tgz", - "integrity": "sha512-BKK4alN7oi4C/zv4VqHQ+uRU+lTa6JGIZ7s1juw7b3RHo9OfKB+bKX3u0iVZetdsUCBBkSbdWbarJbmN0fTeSw==", + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.61.0.tgz", + "integrity": "sha512-O5Amvdv9ztMpxpf+vmFULGG78IE6Qwdr3bCGvqwG4nwc9H2qXkOYJJnRbRHyMkQTjv1d03olqwwwzHLMqpFePQ==", "dev": true, "license": "MIT", "engines": { @@ -2036,15 +2036,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.2.tgz", - "integrity": "sha512-nhqaj1nmTdVVl/BP5omXNRGO38jn5iosis2vbdmupF2txCf8ylWT8lx+JlvMYYVqzGVKtjojUFoQ3JRWK+mfzQ==", + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.61.0.tgz", + "integrity": "sha512-TuBiQYIkd97yBfInHCTKVYMbX4kvEmpOEuixIuzCU9p8BGT1SfyyO0d0IfDMbPIHcjn/hWnusUX5e8v5Xg+X8A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.2", - "@typescript-eslint/typescript-estree": "8.59.2", - "@typescript-eslint/utils": "8.59.2", + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/typescript-estree": "8.61.0", + "@typescript-eslint/utils": "8.61.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -2061,9 +2061,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.2.tgz", - "integrity": "sha512-e82GVOE8Ps3E++Egvb6Y3Dw0S10u8NkQ9KXmtRhCWJJ8kDhOJTvtMAWnFL16kB1583goCWXsr0NieKCZMs2/0Q==", + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.61.0.tgz", + "integrity": "sha512-9QTQpZ5Iin4CdIodfbDQFSeiSJKidgYJYug1P9CC2xWgUTvlmixViqDZNciMjwLBZyJnG4tGmPl97rVAFb1AJg==", "dev": true, "license": "MIT", "engines": { @@ -2075,16 +2075,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.2.tgz", - "integrity": "sha512-o0XPGNwcWw+FIwStOWn+BwBuEmL6QXP0rsvAFg7ET1dey1Nr6Wb1ac8p5HEsK0ygO/6mUxlk+YWQD9xcb/nnXg==", + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.61.0.tgz", + "integrity": "sha512-42zatd5qSvvcV1JdDBCLxYRznvP4eIHpPoZXdkPFnAmanA4FuZ5dibSnCBggY8hQnqajPpoGjXFdZ7fIJKQnlA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.59.2", - "@typescript-eslint/tsconfig-utils": "8.59.2", - "@typescript-eslint/types": "8.59.2", - "@typescript-eslint/visitor-keys": "8.59.2", + "@typescript-eslint/project-service": "8.61.0", + "@typescript-eslint/tsconfig-utils": "8.61.0", + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/visitor-keys": "8.61.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -2113,9 +2113,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, "license": "MIT", "dependencies": { @@ -2142,9 +2142,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.3.tgz", + "integrity": "sha512-wnilbGyMxzbY7dNOl7jpKbLSjcfeweJWU5j4+u5qW+6/wuGD9KzIGOyZnQVSBM9E7DtWaaH3CyHkppYrKYoxwg==", "dev": true, "license": "ISC", "bin": { @@ -2155,16 +2155,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.2.tgz", - "integrity": "sha512-Juw3EinkXqjaffxz6roowvV7GZT/kET5vSKKZT6upl5TXdWkLkYmNPXwDDL2Vkt2DPn0nODIS4egC/0AGxKo/Q==", + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.61.0.tgz", + "integrity": "sha512-3bzFt7ImFMW/jVYwJamDoe/dMOdFLSC6pom6rRjdh4SZJEYupyMzem8e7vKZLclLfpHjlwSAXOUxtKxGXUiLqA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.59.2", - "@typescript-eslint/types": "8.59.2", - "@typescript-eslint/typescript-estree": "8.59.2" + "@typescript-eslint/scope-manager": "8.61.0", + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/typescript-estree": "8.61.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2179,13 +2179,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.2.tgz", - "integrity": "sha512-NwjLUnGy8/Zfx23fl50tRC8rYaYnM52xNRYFAXvmiil9yh1+K6aRVQMnzW6gQB/1DLgWt977lYQn7C+wtgXZiA==", + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.61.0.tgz", + "integrity": "sha512-QVLZu3ZPQEE+HICQyAMZ2yLQhxf0meY/wx6Hx14YcTNj13JB3qHlX3lJ02L3fLGHgERRH71kvYDwiXIguT3AjQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.59.2", + "@typescript-eslint/types": "8.61.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -8300,9 +8300,9 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", - "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, "license": "MIT", "dependencies": { @@ -8599,16 +8599,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.59.2", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.2.tgz", - "integrity": "sha512-pJw051uomb3ZeCzGTpRb8RbEqB5Y4WWet8gl/GcTlU35BSx0PVdZ86/bqkQCyKKuraVQEK7r6kBHQXF+fBhkoQ==", + "version": "8.61.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.61.0.tgz", + "integrity": "sha512-8y31Rd0eGTrDKqhy6vT0HtzhN+YLjQizwX3aA3hPXP/ynSfnrBXcQY5IzsP9/DM7+klX4IUncZZjkchP0z+rUw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.59.2", - "@typescript-eslint/parser": "8.59.2", - "@typescript-eslint/typescript-estree": "8.59.2", - "@typescript-eslint/utils": "8.59.2" + "@typescript-eslint/eslint-plugin": "8.61.0", + "@typescript-eslint/parser": "8.61.0", + "@typescript-eslint/typescript-estree": "8.61.0", + "@typescript-eslint/utils": "8.61.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" From 5ea000f4017d0932d9b17cfc8e8cd12765a81e88 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jun 2026 13:11:48 -0400 Subject: [PATCH 17/19] [dependencies]: Bump @azure/msal-node from 5.2.2 to 5.2.3 (#1331) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [@azure/msal-node](https://github.com/AzureAD/microsoft-authentication-library-for-js) from 5.2.2 to 5.2.3.
Release notes

Sourced from @​azure/msal-node's releases.

@​azure/msal-angular v5.2.3

5.2.3

Thu, 07 May 2026 19:01:04 GMT

Patches

  • Bump @​azure/msal-browser to v5.10.0 (beachball)

@​azure/msal-node-extensions v5.2.3

5.2.3

Fri, 05 Jun 2026 22:24:22 GMT

Patches

@​azure/msal-node v5.2.3

5.2.3

Fri, 05 Jun 2026 22:24:22 GMT

Patches

Commits
  • 7588af3 fix ui_not_allowed naming while preserving ux_not_allowed compatibility (#8608)
  • 37c7d2a fix: set restrictive file permissions in FilePersistence (#8623)
  • 485552f Post release PR for msal-common (#8622)
  • d2378a2 fix: set document.title during authentication redirects (#8624)
  • 3469d15 Fix/clear stale encrypted cache entries (#8619)
  • bc0b340 fix: inverted username filter in CacheManager (#8621)
  • f96b364 Add PCA functions for custom authentication response handling (#8590)
  • 4e18c5c fix: respect redirectStartPage in PlatformAuthInteractionClient.acquireTokenR...
  • 08a2236 Post-release PR (#8596)
  • cf5eb29 fix: add knownAuthorities check to issuer validation for CIAM GUID-based issu...
  • See full diff in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@azure/msal-node&package-manager=npm_and_yarn&previous-version=5.2.2&new-version=5.2.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Dan Hellem --- package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index c606730e..86dc7185 100644 --- a/package-lock.json +++ b/package-lock.json @@ -187,12 +187,12 @@ } }, "node_modules/@azure/msal-node": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.2.2.tgz", - "integrity": "sha512-toS+2AePxqyzb0YOKttDOOiSl3jrkK9aiqIvpurpis0O34QcIS5gToqrgT39p04Dpxw3YoUU0lxJKTpSFFfA6Q==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.2.3.tgz", + "integrity": "sha512-YYX4TchEVddVBiybKvKhV9QO/q22jgewP+BVxKG7Uh115voPcviGlypbKERDsqQdAiSTJrwi80gcWFjYKdo8+Q==", "license": "MIT", "dependencies": { - "@azure/msal-common": "16.6.2", + "@azure/msal-common": "16.7.0", "jsonwebtoken": "^9.0.0" }, "engines": { @@ -200,9 +200,9 @@ } }, "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { - "version": "16.6.2", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.6.2.tgz", - "integrity": "sha512-hQjjsekAjB00cM1EmatWJlzhEoK2Qhz7Rj5gvM6tYf8iL7RM3tkxlpU9fG0+ofkulzg9AEEA6dIEnSmDr5ZqUA==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.7.0.tgz", + "integrity": "sha512-Jb8Y7pX6KM42SIT7KWP6YbY3+vLbwB5b5m+tpiiOzMU1QeyelQzs9lO8jv1e7/Uj9r7tg7VjPvW4T0KB1jF3UQ==", "license": "MIT", "engines": { "node": ">=0.8.0" From fcb6e82eb134861f1caa6e83bced3f333af765be Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Jun 2026 07:56:38 -0400 Subject: [PATCH 18/19] [dependencies]: Bump azure-devops-extension-api from 5.272.3 to 5.273.0 (#1346) Bumps [azure-devops-extension-api](https://github.com/Microsoft/azure-devops-extension-api) from 5.272.3 to 5.273.0.
Commits
  • dd900e7 All files have been added to the repo
  • b526e4e Merge pull request #203 from microsoft/releases/5.272.3
  • 70a53ae Merge pull request #202 from microsoft/users/clipskey/remove-top-level-types
  • See full diff in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=azure-devops-extension-api&package-manager=npm_and_yarn&previous-version=5.272.3&new-version=5.273.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 86dc7185..6aaed989 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2720,9 +2720,9 @@ "license": "MIT" }, "node_modules/azure-devops-extension-api": { - "version": "5.272.3", - "resolved": "https://registry.npmjs.org/azure-devops-extension-api/-/azure-devops-extension-api-5.272.3.tgz", - "integrity": "sha512-HmE62nKV2q3OKNySQcrHjPe6L1SvBsBQtCqrMXR80yv92T1e1wJ5m3VkM1oEHmSK9hKSszlevndN9KnbYlvHPg==", + "version": "5.273.0", + "resolved": "https://registry.npmjs.org/azure-devops-extension-api/-/azure-devops-extension-api-5.273.0.tgz", + "integrity": "sha512-JB00MYg1JUP/VsECRLYRP5+cqISbkh+0Au7ybdtP4dYNLoLCY/L7r9Wy++nm+GXqYQGb3MLi/VLnj9qgaaMamg==", "license": "MIT", "dependencies": { "whatwg-fetch": "~3.0.0" From 3dc31c6fef8e9d2a8d8927b25da19dfa4bcddc96 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 14 Jun 2026 15:50:18 -0400 Subject: [PATCH 19/19] [dependencies]: Bump @azure/msal-node from 5.2.3 to 5.2.4 (#1349) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [@azure/msal-node](https://github.com/AzureAD/microsoft-authentication-library-for-js) from 5.2.3 to 5.2.4.
Release notes

Sourced from @​azure/msal-node's releases.

@​azure/msal-angular v5.2.4

5.2.4

Mon, 11 May 2026 21:48:15 GMT

Patches

  • Bump @​azure/msal-browser to v5.10.1 (beachball)

@​azure/msal-node-extensions v5.2.4

5.2.4

Wed, 10 Jun 2026 22:41:34 GMT

Patches

  • Bump @​azure/msal-common to v16.8.0 (beachball)

@​azure/msal-node v5.2.4

5.2.4

Wed, 10 Jun 2026 22:41:34 GMT

Patches

  • Bump @​azure/msal-common to v16.8.0 (beachball)
Commits
  • faa42ab Fix migration readme (#8602) (#8638)
  • b8b8da9 Fix duplicate redirect flows clearing in-flight interaction state (#8637)
  • 772c6b6 Fix silent iframe redirect-bridge listener race condition (#8636)
  • 5c7f986 Use in-built URL API to perform URL comparisons adhering to correct MDN and R...
  • eebac50 feat: add per-type migration telemetry counters (#8628)
  • 2e5a3bd Add browser-specific guidance across msal-browser docs (#8631)
  • 343d36e Disable ServerTelemetryManager by default (#8600)
  • 891ee17 Fix correlation cache empty key eviction (#8627)
  • 188a2fc Post-release PR (#8632)
  • See full diff in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@azure/msal-node&package-manager=npm_and_yarn&previous-version=5.2.3&new-version=5.2.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6aaed989..0d17a1ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -187,12 +187,12 @@ } }, "node_modules/@azure/msal-node": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.2.3.tgz", - "integrity": "sha512-YYX4TchEVddVBiybKvKhV9QO/q22jgewP+BVxKG7Uh115voPcviGlypbKERDsqQdAiSTJrwi80gcWFjYKdo8+Q==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.2.4.tgz", + "integrity": "sha512-rpBUg9dA8UpC2WiFt3KeDKVQmmmVrfxdRnW+F1ebgou/jX/0tAvYuonaq5RUo8OaqzOrj4x/HaI8DmY56RXZ2Q==", "license": "MIT", "dependencies": { - "@azure/msal-common": "16.7.0", + "@azure/msal-common": "16.8.0", "jsonwebtoken": "^9.0.0" }, "engines": { @@ -200,9 +200,9 @@ } }, "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.7.0.tgz", - "integrity": "sha512-Jb8Y7pX6KM42SIT7KWP6YbY3+vLbwB5b5m+tpiiOzMU1QeyelQzs9lO8jv1e7/Uj9r7tg7VjPvW4T0KB1jF3UQ==", + "version": "16.8.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.8.0.tgz", + "integrity": "sha512-5S4RHOcInL2Nu2U217tDZbWGI6StMfcWCrA7TWvWdJmXQ+cYrrIqr84AsN62fGh2MDBysiBJPt6CfWceJfloEA==", "license": "MIT", "engines": { "node": ">=0.8.0"