Compare commits

...

24 commits

Author SHA1 Message Date
Felipe Santos
19bb15c7d1
Merge add6ca5720 into c04c64f5e7 2025-01-07 23:27:02 -03:00
renovate[bot]
c04c64f5e7
chore(deps): update dependency @types/node to v20.17.11 (#33457)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-08 02:10:47 +00:00
Felipe Santos
add6ca5720 Add tests for approvePrForAutomerge 2024-12-29 16:04:44 +00:00
Felipe Santos
b93ee7a628 Address review comments 2024-12-29 15:52:37 +00:00
Felipe Santos
74137a8460 Merge branch 'main' of https://github.com/renovatebot/renovate into fix-auto-merge-if-plus-one 2024-12-29 12:41:33 -03:00
Felipe Santos
e0b6f8d5ed chore: remove spurious comment 2024-12-02 17:41:35 +00:00
Felipe Santos
53743b27bf chore: fix type import 2024-12-02 17:38:39 +00:00
Felipe Santos
b1ce02b44b Merge branch 'main' of https://github.com/renovatebot/renovate into fix-auto-merge-if-plus-one 2024-12-02 17:36:43 +00:00
Felipe Santos
bb317ce921 chore(gerrit): improve approve method to avoid some API calls 2024-12-02 17:30:54 +00:00
Felipe Santos
4dfc817793 Revert "chore(gerrit): still approve if change was approved another user"
This reverts commit 5eb284603f.
2024-12-02 17:20:47 +00:00
Felipe Santos
c4c81e30fc chore: rename approvePr to approvePrForAutomerge 2024-12-02 17:19:39 +00:00
Felipe Santos
7923d5b955 Revert "feat(gitlab,azure): try approving before auto-merge"
This reverts commit c679c28d01.
2024-12-02 17:19:32 +00:00
Felipe Santos
539c12f744
Merge branch 'main' into fix-auto-merge-if-plus-one 2024-12-02 11:18:19 -03:00
Felipe Santos
ac30f2b204 test(automerge): add test for auto approve before merging 2024-12-01 17:32:33 +00:00
Felipe Santos
bd05816dd1 test(gerrit): fix lint in client.spec.ts 2024-12-01 17:28:48 +00:00
Felipe Santos
dbdf41a936 chore: add better jsdoc for approvePr 2024-12-01 17:27:27 +00:00
Felipe Santos
c679c28d01 feat(gitlab,azure): try approving before auto-merge 2024-12-01 17:17:00 +00:00
Felipe Santos
5eb284603f chore(gerrit): still approve if change was approved another user 2024-12-01 17:03:07 +00:00
Felipe Santos
1d8daf5095 test(gerrit): fix approvePr coverage 2024-12-01 16:40:25 +00:00
Felipe Santos
7877331cf7 Merge branch 'main' of https://github.com/renovatebot/renovate into fix-auto-merge-if-plus-one 2024-12-01 14:59:21 +00:00
Felipe Santos
6ffa5b615f Merge branch 'main' into fix-auto-merge-if-plus-one 2024-11-30 07:18:40 +00:00
Felipe Santos
6ac7b9e089 chore(gerrit): try auto-approve right before auto-merge 2024-11-30 07:12:25 +00:00
Felipe Santos
107a298054 chore(gerrit): improve auto-approve on new patchset workaround 2024-11-30 01:52:23 +00:00
Felipe Santos
46f8eed01f fix(gerrit): not auto-approving if change already had a Code-Review +1 2024-11-29 23:58:24 +00:00
14 changed files with 189 additions and 203 deletions

View file

@ -399,10 +399,20 @@ describe('modules/platform/gerrit/client', () => {
describe('approveChange()', () => { describe('approveChange()', () => {
it('already approved - do nothing', async () => { it('already approved - do nothing', async () => {
const change = partial<GerritChange>({}); const change = partial<GerritChange>({
labels: {
'Code-Review': {
all: [{ value: 2 }],
},
},
});
httpMock httpMock
.scope(gerritEndpointUrl) .scope(gerritEndpointUrl)
.get((url) => url.includes('/a/changes/123456?o=')) .get(
(url) =>
url.includes('/a/changes/123456?o=') &&
url.includes('o=DETAILED_LABELS'),
)
.reply(200, gerritRestResponse(change), jsonResultHeader); .reply(200, gerritRestResponse(change), jsonResultHeader);
await expect(client.approveChange(123456)).toResolve(); await expect(client.approveChange(123456)).toResolve();
}); });
@ -411,17 +421,54 @@ describe('modules/platform/gerrit/client', () => {
const change = partial<GerritChange>({ labels: {} }); const change = partial<GerritChange>({ labels: {} });
httpMock httpMock
.scope(gerritEndpointUrl) .scope(gerritEndpointUrl)
.get((url) => url.includes('/a/changes/123456?o=')) .get(
(url) =>
url.includes('/a/changes/123456?o=') &&
url.includes('o=DETAILED_LABELS'),
)
.reply(200, gerritRestResponse(change), jsonResultHeader); .reply(200, gerritRestResponse(change), jsonResultHeader);
await expect(client.approveChange(123456)).toResolve(); await expect(client.approveChange(123456)).toResolve();
}); });
it('not already approved - approve now', async () => { it('not already approved - approve now', async () => {
const change = partial<GerritChange>({ labels: { 'Code-Review': {} } }); const change = partial<GerritChange>({
labels: { 'Code-Review': { all: [] } },
});
httpMock httpMock
.scope(gerritEndpointUrl) .scope(gerritEndpointUrl)
.get((url) => url.includes('/a/changes/123456?o=')) .get(
(url) =>
url.includes('/a/changes/123456?o=') &&
url.includes('o=DETAILED_LABELS'),
)
.reply(200, gerritRestResponse(change), jsonResultHeader);
const approveMock = httpMock
.scope(gerritEndpointUrl)
.post('/a/changes/123456/revisions/current/review', {
labels: { 'Code-Review': +2 },
notify: 'NONE',
})
.reply(200, gerritRestResponse(''), jsonResultHeader);
await expect(client.approveChange(123456)).toResolve();
expect(approveMock.isDone()).toBeTrue();
});
it('not already approved because of +1 - approve now', async () => {
const change = partial<GerritChange>({
labels: {
'Code-Review': {
all: [{ value: 1 }],
},
},
});
httpMock
.scope(gerritEndpointUrl)
.get(
(url) =>
url.includes('/a/changes/123456?o=') &&
url.includes('o=DETAILED_LABELS'),
)
.reply(200, gerritRestResponse(change), jsonResultHeader); .reply(200, gerritRestResponse(change), jsonResultHeader);
const approveMock = httpMock const approveMock = httpMock
.scope(gerritEndpointUrl) .scope(gerritEndpointUrl)
@ -434,63 +481,6 @@ describe('modules/platform/gerrit/client', () => {
expect(approveMock.isDone()).toBeTrue(); expect(approveMock.isDone()).toBeTrue();
}); });
}); });
describe('wasApprovedBy()', () => {
it('label not exists', () => {
expect(
client.wasApprovedBy(partial<GerritChange>({}), 'user'),
).toBeUndefined();
});
it('not approved by anyone', () => {
expect(
client.wasApprovedBy(
partial<GerritChange>({
labels: {
'Code-Review': {},
},
}),
'user',
),
).toBeUndefined();
});
it('approved by given user', () => {
expect(
client.wasApprovedBy(
partial<GerritChange>({
labels: {
'Code-Review': {
approved: {
_account_id: 1,
username: 'user',
},
},
},
}),
'user',
),
).toBeTrue();
});
it('approved by given other', () => {
expect(
client.wasApprovedBy(
partial<GerritChange>({
labels: {
'Code-Review': {
approved: {
_account_id: 1,
username: 'other',
},
},
},
}),
'user',
),
).toBeFalse();
});
});
}); });
function gerritRestResponse(body: any): any { function gerritRestResponse(body: any): any {

View file

@ -2,6 +2,7 @@ import { REPOSITORY_ARCHIVED } from '../../../constants/error-messages';
import { logger } from '../../../logger'; import { logger } from '../../../logger';
import { GerritHttp } from '../../../util/http/gerrit'; import { GerritHttp } from '../../../util/http/gerrit';
import { regEx } from '../../../util/regex'; import { regEx } from '../../../util/regex';
import { getQueryString } from '../../../util/url';
import type { import type {
GerritAccountInfo, GerritAccountInfo,
GerritBranchInfo, GerritBranchInfo,
@ -72,10 +73,14 @@ class GerritClient {
return changes.body; return changes.body;
} }
async getChange(changeNumber: number): Promise<GerritChange> { async getChange(
changeNumber: number,
extraOptions?: string[],
): Promise<GerritChange> {
const options = [...this.requestDetails, ...(extraOptions ?? [])];
const queryString = getQueryString({ o: options });
const changes = await this.gerritHttp.getJson<GerritChange>( const changes = await this.gerritHttp.getJson<GerritChange>(
`a/changes/${changeNumber}?` + `a/changes/${changeNumber}?${queryString}`,
this.requestDetails.map((det) => `o=${det}`).join('&'),
); );
return changes.body; return changes.body;
} }
@ -196,15 +201,11 @@ class GerritClient {
} }
async checkIfApproved(changeId: number): Promise<boolean> { async checkIfApproved(changeId: number): Promise<boolean> {
const change = await client.getChange(changeId); const change = await client.getChange(changeId, ['DETAILED_LABELS']);
const reviewLabels = change?.labels?.['Code-Review']; const reviewLabel = change?.labels?.['Code-Review'];
return reviewLabels === undefined || reviewLabels.approved !== undefined;
}
wasApprovedBy(change: GerritChange, username: string): boolean | undefined {
return ( return (
change.labels?.['Code-Review'].approved && reviewLabel === undefined ||
change.labels['Code-Review'].approved.username === username reviewLabel.all?.some((label) => label.value === 2) === true
); );
} }

View file

@ -187,28 +187,6 @@ describe('modules/platform/gerrit/index', () => {
gerrit.writeToConfig({ labels: {} }); gerrit.writeToConfig({ labels: {} });
}); });
it('updatePr() - auto approve enabled', async () => {
const change = partial<GerritChange>({
current_revision: 'some-revision',
revisions: {
'some-revision': partial<GerritRevisionInfo>({
commit: {
message: 'some message',
},
}),
},
});
clientMock.getChange.mockResolvedValueOnce(change);
await gerrit.updatePr({
number: 123456,
prTitle: 'subject',
platformPrOptions: {
autoApprove: true,
},
});
expect(clientMock.approveChange).toHaveBeenCalledWith(123456);
});
it('updatePr() - closed => abandon the change', async () => { it('updatePr() - closed => abandon the change', async () => {
const change = partial<GerritChange>({}); const change = partial<GerritChange>({});
clientMock.getChange.mockResolvedValueOnce(change); clientMock.getChange.mockResolvedValueOnce(change);
@ -309,7 +287,7 @@ describe('modules/platform/gerrit/index', () => {
]); ]);
}); });
it('createPr() - update body WITHOUT approve', async () => { it('createPr() - update body', async () => {
const pr = await gerrit.createPr({ const pr = await gerrit.createPr({
sourceBranch: 'source', sourceBranch: 'source',
targetBranch: 'target', targetBranch: 'target',
@ -325,26 +303,6 @@ describe('modules/platform/gerrit/index', () => {
'body', 'body',
TAG_PULL_REQUEST_BODY, TAG_PULL_REQUEST_BODY,
); );
expect(clientMock.approveChange).not.toHaveBeenCalled();
});
it('createPr() - update body and approve', async () => {
const pr = await gerrit.createPr({
sourceBranch: 'source',
targetBranch: 'target',
prTitle: change.subject,
prBody: 'body',
platformPrOptions: {
autoApprove: true,
},
});
expect(pr).toHaveProperty('number', 123456);
expect(clientMock.addMessageIfNotAlreadyExists).toHaveBeenCalledWith(
123456,
'body',
TAG_PULL_REQUEST_BODY,
);
expect(clientMock.approveChange).toHaveBeenCalledWith(123456);
}); });
}); });
@ -750,6 +708,13 @@ describe('modules/platform/gerrit/index', () => {
//TODO: add some tests for Gerrit-specific replacements.. //TODO: add some tests for Gerrit-specific replacements..
}); });
describe('approvePrForAutomerge()', () => {
it('approvePrForAutomerge() - calls approveChange', async () => {
await expect(gerrit.approvePrForAutomerge(123456)).toResolve();
expect(clientMock.approveChange).toHaveBeenCalledWith(123456);
});
});
describe('currently unused/not-implemented functions', () => { describe('currently unused/not-implemented functions', () => {
it('deleteLabel()', async () => { it('deleteLabel()', async () => {
await expect( await expect(

View file

@ -160,9 +160,6 @@ export async function updatePr(prConfig: UpdatePrConfig): Promise<void> {
TAG_PULL_REQUEST_BODY, TAG_PULL_REQUEST_BODY,
); );
} }
if (prConfig.platformPrOptions?.autoApprove) {
await client.approveChange(prConfig.number);
}
if (prConfig.state && prConfig.state === 'closed') { if (prConfig.state && prConfig.state === 'closed') {
await client.abandonChange(prConfig.number); await client.abandonChange(prConfig.number);
} }
@ -195,9 +192,6 @@ export async function createPr(prConfig: CreatePRConfig): Promise<Pr | null> {
prConfig.prBody, prConfig.prBody,
TAG_PULL_REQUEST_BODY, TAG_PULL_REQUEST_BODY,
); );
if (prConfig.platformPrOptions?.autoApprove) {
await client.approveChange(pr._number);
}
return getPr(pr._number); return getPr(pr._number);
} }
@ -442,3 +436,14 @@ export function findIssue(title: string): Promise<Issue | null> {
export function getIssueList(): Promise<Issue[]> { export function getIssueList(): Promise<Issue[]> {
return Promise.resolve([]); return Promise.resolve([]);
} }
/**
* The Code-Review +2 vote of when the change was created or updated in Gerrit
* may have been downgraded by a CI check utilizing the same account as
* Renovate (e.g. SonarQube which posts Code-Review +1). This function will
* vote with +2 again on the change, if needed, before Renovate attempt to
* automerge it.
*/
export async function approvePrForAutomerge(number: number): Promise<void> {
await client.approveChange(number);
}

View file

@ -369,7 +369,6 @@ describe('modules/platform/gerrit/scm', () => {
}, },
}); });
clientMock.findChanges.mockResolvedValueOnce([existingChange]); clientMock.findChanges.mockResolvedValueOnce([existingChange]);
clientMock.wasApprovedBy.mockReturnValueOnce(true);
git.prepareCommit.mockResolvedValueOnce({ git.prepareCommit.mockResolvedValueOnce({
commitSha: 'commitSha' as LongCommitSha, commitSha: 'commitSha' as LongCommitSha,
parentCommitSha: 'parentSha' as LongCommitSha, parentCommitSha: 'parentSha' as LongCommitSha,
@ -385,6 +384,7 @@ describe('modules/platform/gerrit/scm', () => {
message: 'commit msg', message: 'commit msg',
files: [], files: [],
prTitle: 'pr title', prTitle: 'pr title',
autoApprove: true,
}), }),
).toBe('commitSha'); ).toBe('commitSha');
expect(git.prepareCommit).toHaveBeenCalledWith({ expect(git.prepareCommit).toHaveBeenCalledWith({
@ -396,19 +396,15 @@ describe('modules/platform/gerrit/scm', () => {
'Renovate-Branch: renovate/dependency-1.x\nChange-Id: ...', 'Renovate-Branch: renovate/dependency-1.x\nChange-Id: ...',
], ],
prTitle: 'pr title', prTitle: 'pr title',
autoApprove: true,
force: true, force: true,
}); });
expect(git.fetchRevSpec).toHaveBeenCalledWith('refs/changes/1/2'); expect(git.fetchRevSpec).toHaveBeenCalledWith('refs/changes/1/2');
expect(git.pushCommit).toHaveBeenCalledWith({ expect(git.pushCommit).toHaveBeenCalledWith({
files: [], files: [],
sourceRef: 'renovate/dependency-1.x', sourceRef: 'renovate/dependency-1.x',
targetRef: 'refs/for/main%notify=NONE', targetRef: 'refs/for/main%notify=NONE,l=Code-Review+2',
}); });
expect(clientMock.wasApprovedBy).toHaveBeenCalledWith(
existingChange,
'user',
);
expect(clientMock.approveChange).toHaveBeenCalledWith(123456);
}); });
}); });
}); });

View file

@ -129,19 +129,16 @@ export class GerritScm extends DefaultGitScm {
hasChanges = await git.hasDiff('HEAD', 'FETCH_HEAD'); //avoid empty patchsets hasChanges = await git.hasDiff('HEAD', 'FETCH_HEAD'); //avoid empty patchsets
} }
if (hasChanges || commit.force) { if (hasChanges || commit.force) {
const pushOptions = ['notify=NONE'];
if (commit.autoApprove) {
pushOptions.push('l=Code-Review+2');
}
const pushResult = await git.pushCommit({ const pushResult = await git.pushCommit({
sourceRef: commit.branchName, sourceRef: commit.branchName,
targetRef: `refs/for/${commit.baseBranch!}%notify=NONE`, targetRef: `refs/for/${commit.baseBranch!}%${pushOptions.join(',')}`,
files: commit.files, files: commit.files,
}); });
if (pushResult) { if (pushResult) {
//existingChange was the old change before commit/push. we need to approve again, if it was previously approved from renovate
if (
existingChange &&
client.wasApprovedBy(existingChange, username)
) {
await client.approveChange(existingChange._number);
}
return commitSha; return commitSha;
} }
} }

View file

@ -79,6 +79,8 @@ export interface GerritLabelInfo {
rejected?: GerritAccountInfo; rejected?: GerritAccountInfo;
/** If true, the label blocks submit operation. If not set, the default is false. */ /** If true, the label blocks submit operation. If not set, the default is false. */
blocking?: boolean; blocking?: boolean;
/** List of votes. Only set when o=DETAILED_LABELS. */
all?: GerritApprovalInfo[];
} }
export interface GerritActionInfo { export interface GerritActionInfo {
@ -101,3 +103,8 @@ export interface GerritMergeableInfo {
| 'CHERRY_PICK'; | 'CHERRY_PICK';
mergeable: boolean; mergeable: boolean;
} }
export interface GerritApprovalInfo {
value?: number;
username?: string;
}

View file

@ -283,6 +283,11 @@ export interface Platform {
maxBodyLength(): number; maxBodyLength(): number;
labelCharLimit?(): number; labelCharLimit?(): number;
/**
* Platforms that support `autoApprove` can implement this function. It will be
* invoked during automerge before the PR branch status is checked.
*/
approvePrForAutomerge?(number: number): Promise<void>;
} }
export interface PlatformScm { export interface PlatformScm {

View file

@ -86,6 +86,8 @@ export interface CommitFilesConfig {
platformCommit?: PlatformCommitOptions; platformCommit?: PlatformCommitOptions;
/** Only needed by Gerrit platform */ /** Only needed by Gerrit platform */
prTitle?: string; prTitle?: string;
/** Only needed by Gerrit platform */
autoApprove?: boolean;
} }
export interface PushFilesConfig { export interface PushFilesConfig {

View file

@ -62,5 +62,7 @@ export function commitFilesToBranch(
platformCommit: config.platformCommit, platformCommit: config.platformCommit,
// Only needed by Gerrit platform // Only needed by Gerrit platform
prTitle: config.prTitle, prTitle: config.prTitle,
// Only needed by Gerrit platform
autoApprove: config.autoApprove,
}); });
} }

View file

@ -124,6 +124,18 @@ describe('workers/repository/update/pr/automerge', () => {
expect(platform.mergePr).toHaveBeenCalledTimes(0); expect(platform.mergePr).toHaveBeenCalledTimes(0);
}); });
it('should attempt to auto-approve if supported', async () => {
config.autoApprove = true;
config.automerge = true;
config.pruneBranchAfterAutomerge = true;
platform.getBranchStatus.mockResolvedValueOnce('green');
platform.mergePr.mockResolvedValueOnce(true);
const res = await prAutomerge.checkAutoMerge(pr, config);
expect(res).toEqual({ automerged: true, branchRemoved: true });
expect(platform.approvePrForAutomerge).toHaveBeenCalledTimes(1);
expect(platform.mergePr).toHaveBeenCalledTimes(1);
});
it('should not automerge if enabled and pr is unmergeable', async () => { it('should not automerge if enabled and pr is unmergeable', async () => {
config.automerge = true; config.automerge = true;
scm.isBranchConflicted.mockResolvedValueOnce(true); scm.isBranchConflicted.mockResolvedValueOnce(true);

View file

@ -69,6 +69,10 @@ export async function checkAutoMerge(
prAutomergeBlockReason: 'PlatformNotReady', prAutomergeBlockReason: 'PlatformNotReady',
}; };
} }
if (config.autoApprove && platform.approvePrForAutomerge) {
logger.debug('Auto-approving PR for automerge');
await platform.approvePrForAutomerge(pr.number);
}
const branchStatus = await resolveBranchStatus( const branchStatus = await resolveBranchStatus(
branchName, branchName,
!!config.internalChecksAsSuccess, !!config.internalChecksAsSuccess,

View file

@ -299,7 +299,7 @@
"@types/mdast": "3.0.15", "@types/mdast": "3.0.15",
"@types/moo": "0.5.9", "@types/moo": "0.5.9",
"@types/ms": "0.7.34", "@types/ms": "0.7.34",
"@types/node": "20.17.10", "@types/node": "20.17.11",
"@types/parse-link-header": "2.0.3", "@types/parse-link-header": "2.0.3",
"@types/punycode": "2.1.4", "@types/punycode": "2.1.4",
"@types/semver": "7.5.8", "@types/semver": "7.5.8",

View file

@ -470,8 +470,8 @@ importers:
specifier: 0.7.34 specifier: 0.7.34
version: 0.7.34 version: 0.7.34
'@types/node': '@types/node':
specifier: 20.17.10 specifier: 20.17.11
version: 20.17.10 version: 20.17.11
'@types/parse-link-header': '@types/parse-link-header':
specifier: 2.0.3 specifier: 2.0.3
version: 2.0.3 version: 2.0.3
@ -540,7 +540,7 @@ importers:
version: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1) version: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@8.57.1)(typescript@5.7.2))(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1)
eslint-plugin-jest: eslint-plugin-jest:
specifier: 28.10.0 specifier: 28.10.0
version: 28.10.0(@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2) version: 28.10.0(@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2)))(typescript@5.7.2)
eslint-plugin-jest-formatting: eslint-plugin-jest-formatting:
specifier: 3.1.0 specifier: 3.1.0
version: 3.1.0(eslint@8.57.1) version: 3.1.0(eslint@8.57.1)
@ -564,16 +564,16 @@ importers:
version: 9.1.7 version: 9.1.7
jest: jest:
specifier: 29.7.0 specifier: 29.7.0
version: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)) version: 29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2))
jest-extended: jest-extended:
specifier: 4.0.2 specifier: 4.0.2
version: 4.0.2(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2))) version: 4.0.2(jest@29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2)))
jest-mock: jest-mock:
specifier: 29.7.0 specifier: 29.7.0
version: 29.7.0 version: 29.7.0
jest-mock-extended: jest-mock-extended:
specifier: 3.0.7 specifier: 3.0.7
version: 3.0.7(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2) version: 3.0.7(jest@29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2)))(typescript@5.7.2)
jest-snapshot: jest-snapshot:
specifier: 29.7.0 specifier: 29.7.0
version: 29.7.0 version: 29.7.0
@ -609,10 +609,10 @@ importers:
version: 3.0.3 version: 3.0.3
ts-jest: ts-jest:
specifier: 29.2.5 specifier: 29.2.5
version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2) version: 29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2)))(typescript@5.7.2)
ts-node: ts-node:
specifier: 10.9.2 specifier: 10.9.2
version: 10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2) version: 10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2)
type-fest: type-fest:
specifier: 4.31.0 specifier: 4.31.0
version: 4.31.0 version: 4.31.0
@ -2121,8 +2121,8 @@ packages:
'@types/ms@0.7.34': '@types/ms@0.7.34':
resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
'@types/node@20.17.10': '@types/node@20.17.11':
resolution: {integrity: sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==} resolution: {integrity: sha512-Ept5glCK35R8yeyIeYlRIZtX6SLRyqMhOFTgj5SOkMpLTdw3SEHI9fHx60xaUZ+V1aJxQJODE+7/j5ocZydYTg==}
'@types/normalize-package-data@2.4.4': '@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@ -7496,27 +7496,27 @@ snapshots:
'@jest/console@29.7.0': '@jest/console@29.7.0':
dependencies: dependencies:
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.17.10 '@types/node': 20.17.11
chalk: 4.1.2 chalk: 4.1.2
jest-message-util: 29.7.0 jest-message-util: 29.7.0
jest-util: 29.7.0 jest-util: 29.7.0
slash: 3.0.0 slash: 3.0.0
'@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2))': '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2))':
dependencies: dependencies:
'@jest/console': 29.7.0 '@jest/console': 29.7.0
'@jest/reporters': 29.7.0 '@jest/reporters': 29.7.0
'@jest/test-result': 29.7.0 '@jest/test-result': 29.7.0
'@jest/transform': 29.7.0 '@jest/transform': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.17.10 '@types/node': 20.17.11
ansi-escapes: 4.3.2 ansi-escapes: 4.3.2
chalk: 4.1.2 chalk: 4.1.2
ci-info: 3.9.0 ci-info: 3.9.0
exit: 0.1.2 exit: 0.1.2
graceful-fs: 4.2.11 graceful-fs: 4.2.11
jest-changed-files: 29.7.0 jest-changed-files: 29.7.0
jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)) jest-config: 29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2))
jest-haste-map: 29.7.0 jest-haste-map: 29.7.0
jest-message-util: 29.7.0 jest-message-util: 29.7.0
jest-regex-util: 29.6.3 jest-regex-util: 29.6.3
@ -7541,7 +7541,7 @@ snapshots:
dependencies: dependencies:
'@jest/fake-timers': 29.7.0 '@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.17.10 '@types/node': 20.17.11
jest-mock: 29.7.0 jest-mock: 29.7.0
'@jest/expect-utils@29.4.1': '@jest/expect-utils@29.4.1':
@ -7563,7 +7563,7 @@ snapshots:
dependencies: dependencies:
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@sinonjs/fake-timers': 10.3.0 '@sinonjs/fake-timers': 10.3.0
'@types/node': 20.17.10 '@types/node': 20.17.11
jest-message-util: 29.7.0 jest-message-util: 29.7.0
jest-mock: 29.7.0 jest-mock: 29.7.0
jest-util: 29.7.0 jest-util: 29.7.0
@ -7585,7 +7585,7 @@ snapshots:
'@jest/transform': 29.7.0 '@jest/transform': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@jridgewell/trace-mapping': 0.3.25 '@jridgewell/trace-mapping': 0.3.25
'@types/node': 20.17.10 '@types/node': 20.17.11
chalk: 4.1.2 chalk: 4.1.2
collect-v8-coverage: 1.0.2 collect-v8-coverage: 1.0.2
exit: 0.1.2 exit: 0.1.2
@ -7655,7 +7655,7 @@ snapshots:
'@jest/schemas': 29.6.3 '@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4 '@types/istanbul-reports': 3.0.4
'@types/node': 20.17.10 '@types/node': 20.17.11
'@types/yargs': 17.0.33 '@types/yargs': 17.0.33
chalk: 4.1.2 chalk: 4.1.2
@ -8703,7 +8703,7 @@ snapshots:
'@types/aws4@1.11.6': '@types/aws4@1.11.6':
dependencies: dependencies:
'@types/node': 20.17.10 '@types/node': 20.17.11
'@types/babel__core@7.20.5': '@types/babel__core@7.20.5':
dependencies: dependencies:
@ -8728,27 +8728,27 @@ snapshots:
'@types/better-sqlite3@7.6.12': '@types/better-sqlite3@7.6.12':
dependencies: dependencies:
'@types/node': 20.17.10 '@types/node': 20.17.11
'@types/breejs__later@4.1.5': {} '@types/breejs__later@4.1.5': {}
'@types/bunyan@1.8.11': '@types/bunyan@1.8.11':
dependencies: dependencies:
'@types/node': 20.17.10 '@types/node': 20.17.11
'@types/bunyan@1.8.9': '@types/bunyan@1.8.9':
dependencies: dependencies:
'@types/node': 20.17.10 '@types/node': 20.17.11
'@types/cacache@17.0.2': '@types/cacache@17.0.2':
dependencies: dependencies:
'@types/node': 20.17.10 '@types/node': 20.17.11
'@types/cacheable-request@6.0.3': '@types/cacheable-request@6.0.3':
dependencies: dependencies:
'@types/http-cache-semantics': 4.0.4 '@types/http-cache-semantics': 4.0.4
'@types/keyv': 3.1.4 '@types/keyv': 3.1.4
'@types/node': 20.17.10 '@types/node': 20.17.11
'@types/responselike': 1.0.3 '@types/responselike': 1.0.3
'@types/callsite@1.0.34': {} '@types/callsite@1.0.34': {}
@ -8779,7 +8779,7 @@ snapshots:
'@types/fs-extra@11.0.4': '@types/fs-extra@11.0.4':
dependencies: dependencies:
'@types/jsonfile': 6.1.4 '@types/jsonfile': 6.1.4
'@types/node': 20.17.10 '@types/node': 20.17.11
'@types/git-url-parse@9.0.3': {} '@types/git-url-parse@9.0.3': {}
@ -8789,7 +8789,7 @@ snapshots:
'@types/graceful-fs@4.1.9': '@types/graceful-fs@4.1.9':
dependencies: dependencies:
'@types/node': 20.17.10 '@types/node': 20.17.11
'@types/http-cache-semantics@4.0.4': {} '@types/http-cache-semantics@4.0.4': {}
@ -8815,13 +8815,13 @@ snapshots:
'@types/jsonfile@6.1.4': '@types/jsonfile@6.1.4':
dependencies: dependencies:
'@types/node': 20.17.10 '@types/node': 20.17.11
'@types/katex@0.16.7': {} '@types/katex@0.16.7': {}
'@types/keyv@3.1.4': '@types/keyv@3.1.4':
dependencies: dependencies:
'@types/node': 20.17.10 '@types/node': 20.17.11
'@types/linkify-it@5.0.0': {} '@types/linkify-it@5.0.0': {}
@ -8840,7 +8840,7 @@ snapshots:
'@types/marshal@0.5.3': '@types/marshal@0.5.3':
dependencies: dependencies:
'@types/node': 20.17.10 '@types/node': 20.17.11
'@types/mdast@3.0.15': '@types/mdast@3.0.15':
dependencies: dependencies:
@ -8856,7 +8856,7 @@ snapshots:
'@types/ms@0.7.34': {} '@types/ms@0.7.34': {}
'@types/node@20.17.10': '@types/node@20.17.11':
dependencies: dependencies:
undici-types: 6.19.8 undici-types: 6.19.8
@ -8870,7 +8870,7 @@ snapshots:
'@types/responselike@1.0.3': '@types/responselike@1.0.3':
dependencies: dependencies:
'@types/node': 20.17.10 '@types/node': 20.17.11
'@types/semver-stable@3.0.2': {} '@types/semver-stable@3.0.2': {}
@ -8890,7 +8890,7 @@ snapshots:
'@types/tar@6.1.13': '@types/tar@6.1.13':
dependencies: dependencies:
'@types/node': 20.17.10 '@types/node': 20.17.11
minipass: 4.2.8 minipass: 4.2.8
'@types/tmp@0.2.6': {} '@types/tmp@0.2.6': {}
@ -8915,7 +8915,7 @@ snapshots:
'@types/yauzl@2.10.3': '@types/yauzl@2.10.3':
dependencies: dependencies:
'@types/node': 20.17.10 '@types/node': 20.17.11
optional: true optional: true
'@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)': '@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)':
@ -9680,13 +9680,13 @@ snapshots:
optionalDependencies: optionalDependencies:
typescript: 5.7.2 typescript: 5.7.2
create-jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)): create-jest@29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2)):
dependencies: dependencies:
'@jest/types': 29.6.3 '@jest/types': 29.6.3
chalk: 4.1.2 chalk: 4.1.2
exit: 0.1.2 exit: 0.1.2
graceful-fs: 4.2.11 graceful-fs: 4.2.11
jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)) jest-config: 29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2))
jest-util: 29.7.0 jest-util: 29.7.0
prompts: 2.4.2 prompts: 2.4.2
transitivePeerDependencies: transitivePeerDependencies:
@ -10109,13 +10109,13 @@ snapshots:
dependencies: dependencies:
eslint: 8.57.1 eslint: 8.57.1
eslint-plugin-jest@28.10.0(@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2): eslint-plugin-jest@28.10.0(@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(jest@29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2)))(typescript@5.7.2):
dependencies: dependencies:
'@typescript-eslint/utils': 8.19.0(eslint@8.57.1)(typescript@5.7.2) '@typescript-eslint/utils': 8.19.0(eslint@8.57.1)(typescript@5.7.2)
eslint: 8.57.1 eslint: 8.57.1
optionalDependencies: optionalDependencies:
'@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2) '@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@8.57.1)(typescript@5.7.2))(eslint@8.57.1)(typescript@5.7.2)
jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)) jest: 29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2))
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
@ -11146,7 +11146,7 @@ snapshots:
'@jest/expect': 29.7.0 '@jest/expect': 29.7.0
'@jest/test-result': 29.7.0 '@jest/test-result': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.17.10 '@types/node': 20.17.11
chalk: 4.1.2 chalk: 4.1.2
co: 4.6.0 co: 4.6.0
dedent: 1.5.3 dedent: 1.5.3
@ -11166,16 +11166,16 @@ snapshots:
- babel-plugin-macros - babel-plugin-macros
- supports-color - supports-color
jest-cli@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)): jest-cli@29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2)):
dependencies: dependencies:
'@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)) '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2))
'@jest/test-result': 29.7.0 '@jest/test-result': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
chalk: 4.1.2 chalk: 4.1.2
create-jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)) create-jest: 29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2))
exit: 0.1.2 exit: 0.1.2
import-local: 3.2.0 import-local: 3.2.0
jest-config: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)) jest-config: 29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2))
jest-util: 29.7.0 jest-util: 29.7.0
jest-validate: 29.7.0 jest-validate: 29.7.0
yargs: 17.7.2 yargs: 17.7.2
@ -11185,7 +11185,7 @@ snapshots:
- supports-color - supports-color
- ts-node - ts-node
jest-config@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)): jest-config@29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2)):
dependencies: dependencies:
'@babel/core': 7.26.0 '@babel/core': 7.26.0
'@jest/test-sequencer': 29.7.0 '@jest/test-sequencer': 29.7.0
@ -11210,8 +11210,8 @@ snapshots:
slash: 3.0.0 slash: 3.0.0
strip-json-comments: 3.1.1 strip-json-comments: 3.1.1
optionalDependencies: optionalDependencies:
'@types/node': 20.17.10 '@types/node': 20.17.11
ts-node: 10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2) ts-node: 10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2)
transitivePeerDependencies: transitivePeerDependencies:
- babel-plugin-macros - babel-plugin-macros
- supports-color - supports-color
@ -11240,16 +11240,16 @@ snapshots:
'@jest/environment': 29.7.0 '@jest/environment': 29.7.0
'@jest/fake-timers': 29.7.0 '@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.17.10 '@types/node': 20.17.11
jest-mock: 29.7.0 jest-mock: 29.7.0
jest-util: 29.7.0 jest-util: 29.7.0
jest-extended@4.0.2(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2))): jest-extended@4.0.2(jest@29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2))):
dependencies: dependencies:
jest-diff: 29.7.0 jest-diff: 29.7.0
jest-get-type: 29.6.3 jest-get-type: 29.6.3
optionalDependencies: optionalDependencies:
jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)) jest: 29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2))
jest-get-type@29.6.3: {} jest-get-type@29.6.3: {}
@ -11257,7 +11257,7 @@ snapshots:
dependencies: dependencies:
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/graceful-fs': 4.1.9 '@types/graceful-fs': 4.1.9
'@types/node': 20.17.10 '@types/node': 20.17.11
anymatch: 3.1.3 anymatch: 3.1.3
fb-watchman: 2.0.2 fb-watchman: 2.0.2
graceful-fs: 4.2.11 graceful-fs: 4.2.11
@ -11300,16 +11300,16 @@ snapshots:
slash: 3.0.0 slash: 3.0.0
stack-utils: 2.0.6 stack-utils: 2.0.6
jest-mock-extended@3.0.7(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2): jest-mock-extended@3.0.7(jest@29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2)))(typescript@5.7.2):
dependencies: dependencies:
jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)) jest: 29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2))
ts-essentials: 10.0.4(typescript@5.7.2) ts-essentials: 10.0.4(typescript@5.7.2)
typescript: 5.7.2 typescript: 5.7.2
jest-mock@29.7.0: jest-mock@29.7.0:
dependencies: dependencies:
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.17.10 '@types/node': 20.17.11
jest-util: 29.7.0 jest-util: 29.7.0
jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
@ -11344,7 +11344,7 @@ snapshots:
'@jest/test-result': 29.7.0 '@jest/test-result': 29.7.0
'@jest/transform': 29.7.0 '@jest/transform': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.17.10 '@types/node': 20.17.11
chalk: 4.1.2 chalk: 4.1.2
emittery: 0.13.1 emittery: 0.13.1
graceful-fs: 4.2.11 graceful-fs: 4.2.11
@ -11372,7 +11372,7 @@ snapshots:
'@jest/test-result': 29.7.0 '@jest/test-result': 29.7.0
'@jest/transform': 29.7.0 '@jest/transform': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.17.10 '@types/node': 20.17.11
chalk: 4.1.2 chalk: 4.1.2
cjs-module-lexer: 1.4.1 cjs-module-lexer: 1.4.1
collect-v8-coverage: 1.0.2 collect-v8-coverage: 1.0.2
@ -11418,7 +11418,7 @@ snapshots:
jest-util@29.7.0: jest-util@29.7.0:
dependencies: dependencies:
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.17.10 '@types/node': 20.17.11
chalk: 4.1.2 chalk: 4.1.2
ci-info: 3.9.0 ci-info: 3.9.0
graceful-fs: 4.2.11 graceful-fs: 4.2.11
@ -11437,7 +11437,7 @@ snapshots:
dependencies: dependencies:
'@jest/test-result': 29.7.0 '@jest/test-result': 29.7.0
'@jest/types': 29.6.3 '@jest/types': 29.6.3
'@types/node': 20.17.10 '@types/node': 20.17.11
ansi-escapes: 4.3.2 ansi-escapes: 4.3.2
chalk: 4.1.2 chalk: 4.1.2
emittery: 0.13.1 emittery: 0.13.1
@ -11446,17 +11446,17 @@ snapshots:
jest-worker@29.7.0: jest-worker@29.7.0:
dependencies: dependencies:
'@types/node': 20.17.10 '@types/node': 20.17.11
jest-util: 29.7.0 jest-util: 29.7.0
merge-stream: 2.0.0 merge-stream: 2.0.0
supports-color: 8.1.1 supports-color: 8.1.1
jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)): jest@29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2)):
dependencies: dependencies:
'@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)) '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2))
'@jest/types': 29.6.3 '@jest/types': 29.6.3
import-local: 3.2.0 import-local: 3.2.0
jest-cli: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)) jest-cli: 29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2))
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- babel-plugin-macros - babel-plugin-macros
@ -12619,7 +12619,7 @@ snapshots:
'@protobufjs/path': 1.1.2 '@protobufjs/path': 1.1.2
'@protobufjs/pool': 1.1.0 '@protobufjs/pool': 1.1.0
'@protobufjs/utf8': 1.1.0 '@protobufjs/utf8': 1.1.0
'@types/node': 20.17.10 '@types/node': 20.17.11
long: 5.2.3 long: 5.2.3
protocols@2.0.1: {} protocols@2.0.1: {}
@ -13382,12 +13382,12 @@ snapshots:
optionalDependencies: optionalDependencies:
typescript: 5.7.2 typescript: 5.7.2
ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)))(typescript@5.7.2): ts-jest@29.2.5(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(jest@29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2)))(typescript@5.7.2):
dependencies: dependencies:
bs-logger: 0.2.6 bs-logger: 0.2.6
ejs: 3.1.10 ejs: 3.1.10
fast-json-stable-stringify: 2.1.0 fast-json-stable-stringify: 2.1.0
jest: 29.7.0(@types/node@20.17.10)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2)) jest: 29.7.0(@types/node@20.17.11)(ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2))
jest-util: 29.7.0 jest-util: 29.7.0
json5: 2.2.3 json5: 2.2.3
lodash.memoize: 4.1.2 lodash.memoize: 4.1.2
@ -13401,14 +13401,14 @@ snapshots:
'@jest/types': 29.6.3 '@jest/types': 29.6.3
babel-jest: 29.7.0(@babel/core@7.26.0) babel-jest: 29.7.0(@babel/core@7.26.0)
ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.10)(typescript@5.7.2): ts-node@10.9.2(@swc/core@1.10.4)(@types/node@20.17.11)(typescript@5.7.2):
dependencies: dependencies:
'@cspotcode/source-map-support': 0.8.1 '@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11 '@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11 '@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3 '@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4 '@tsconfig/node16': 1.0.4
'@types/node': 20.17.10 '@types/node': 20.17.11
acorn: 8.14.0 acorn: 8.14.0
acorn-walk: 8.3.4 acorn-walk: 8.3.4
arg: 4.1.3 arg: 4.1.3