Compare commits

...

6 commits

Author SHA1 Message Date
Mark Reuter
6304305193
Merge c5bc9ff72f into abb21cd4d3 2025-01-22 20:05:54 -08:00
renovate[bot]
abb21cd4d3
chore(deps): update python:3.13 docker digest to 6ee7975 (#33781)
Some checks are pending
Build / coverage-threshold (push) Blocked by required conditions
Build / test-success (push) Blocked by required conditions
Build / lint-eslint (push) Blocked by required conditions
Build / lint-prettier (push) Blocked by required conditions
Build / setup (push) Waiting to run
Build / setup-build (push) Waiting to run
Build / prefetch (push) Blocked by required conditions
Build / lint-docs (push) Blocked by required conditions
Build / lint-other (push) Blocked by required conditions
Build / (push) Blocked by required conditions
Build / codecov (push) Blocked by required conditions
Build / build (push) Blocked by required conditions
Build / build-docs (push) Blocked by required conditions
Build / test-e2e (push) Blocked by required conditions
Build / release (push) Blocked by required conditions
Code scanning / CodeQL-Build (push) Waiting to run
Scorecard supply-chain security / Scorecard analysis (push) Waiting to run
whitesource-scan / WS_SCAN (push) Waiting to run
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-23 01:26:54 +00:00
renovate[bot]
d3a4813291
chore(deps): update dependency @types/node to v22.10.7 (#33780)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-23 01:21:26 +00:00
Sergei Zharinov
da5c5ed3f6
feat: Drop older timeStamp field support (#33734) 2025-01-22 21:48:43 +00:00
Mark Reuter
c5bc9ff72f Remove log message left in the repo 2025-01-18 12:25:49 -08:00
Mark Reuter
ce36d0dbd2 feat(bazel-module): support bazel_dep dependencies without the version parameter 2025-01-18 12:25:49 -08:00
13 changed files with 300 additions and 140 deletions

View file

@ -79,7 +79,7 @@ If Renovate finds a newer version, it updates `0.15.0` to match that version.
#### `git_override`
If Renovate finds a [`git_override`](https://bazel.build/rules/lib/globals/module#git_override), it ignores the related `bazel_dep` entry and instead evaluates the `commit` value at the specified `remote`.
If Renovate finds a [`git_override`](https://bazel.build/rules/lib/globals/module#git_override), it ignores the related `bazel_dep` entry and instead evaluates the `commit` value at the specified `remote`. When using `git_override`, the `version` parameter on the `bazel_dep` is optional.
```python
bazel_dep(name = "cgrindel_bazel_starlib", version = "0.15.0")
@ -89,6 +89,13 @@ git_override(
commit = "fb47f0e9f7c376a7700fc9fe3319231ae57880df",
remote = "https://github.com/cgrindel/bazel-starlib.git",
)
bazel_dep(name = "rules_foo")
git_override(
module_name = "rules_foo",
remote = "https://github.com/foo/rules_foo.git",
commit = "8a1e9abe415eda7cd7f2a744fdac7499ce42cdca",
)
```
If the primary branch has a newer commit than in the list, Renovate updates the `commit` value.
@ -101,6 +108,7 @@ Renovate only evaluates _two_ attributes from this declaration: `version` and `r
If a `version` is specified, it overrides the version in the `bazel_dep`.
In the following example, Renovate notices that the version is pinned to `1.2.3`.
This results in `rules_foo` being ignored for update evaluation.
When using `single_version_override`, the `version` parameter on the `bazel_dep` is optional.
```python
bazel_dep(name = "rules_foo", version = "1.2.4")
@ -109,6 +117,13 @@ single_version_override(
module_name = "rules_foo",
version = "1.2.3",
)
bazel_dep(name = "rules_bar")
single_version_override(
module_name = "rules_bar",
version = "1.2.3",
)
```
If a `registry` is specified, Renovate uses the specified registry URL to check for a new version.
@ -128,6 +143,7 @@ single_version_override(
If Renovate finds an [`archive_override`](https://bazel.build/rules/lib/globals/module#archive_override) or a [`local_path_override`](https://bazel.build/rules/lib/globals/module#local_path_override), it ignores the related `bazel_dep`.
Because these declarations lack versionable attributes, Renovate does not update them.
When using `archive_override` and `local_path_override`, the `version` parameter on the `bazel_dep` is optional.
```python
bazel_dep(name = "rules_foo", version = "1.2.3")
@ -138,6 +154,15 @@ archive_override(
"https://example.com/archive.tar.gz",
],
)
bazel_dep(name = "rules_bar")
archive_override(
module_name = "rules_bar",
urls = [
"https://example.com/archive.tar.gz",
],
)
```
#### `multiple_version_override`

View file

@ -44,7 +44,7 @@ resources:
- container: linux
image: ubuntu:24.04
- container: python
image: python:3.13@sha256:d57ec66c94b9497b9f3c66f6cdddc1e4e0bad4c584397e0b57a721baef0e6fdc
image: python:3.13@sha256:6ee79759eb6c6843f7aec973df1d3ae60f7199822669deaf77fba16a7b27d1db
stages:
- stage: StageOne

View file

@ -24,6 +24,24 @@ describe('modules/manager/bazel-module/context', () => {
]);
});
it('construct simple bazel_dep with no version', () => {
const ctx = new Ctx()
.startRule('bazel_dep')
.startAttribute('name')
.addString('rules_foo')
.endRule();
expect(ctx.results).toEqual([
fragments.record(
{
rule: fragments.string('bazel_dep'),
name: fragments.string('rules_foo'),
},
true,
),
]);
});
it('construct a rule with array arg', () => {
const ctx = new Ctx()
.startRule('foo_library')

View file

@ -93,6 +93,39 @@ describe('modules/manager/bazel-module/extract', () => {
);
});
it('returns bazel_dep with no version and git_override', async () => {
const input = codeBlock`
bazel_dep(name = "rules_foo")
git_override(
module_name = "rules_foo",
commit = "850cb49c8649e463b80ef7984e7c744279746170",
remote = "https://github.com/example/rules_foo.git",
)
`;
const result = await extractPackageFile(input, 'MODULE.bazel');
if (!result) {
throw new Error('Expected a result.');
}
expect(result.deps).toHaveLength(2);
expect(result.deps).toEqual(
expect.arrayContaining([
{
datasource: BazelDatasource.id,
depType: 'bazel_dep',
depName: 'rules_foo',
skipReason: 'git-dependency',
},
{
datasource: GithubTagsDatasource.id,
depType: 'git_override',
depName: 'rules_foo',
currentDigest: '850cb49c8649e463b80ef7984e7c744279746170',
packageName: 'example/rules_foo',
},
]),
);
});
it('returns dependencies and custom registry URLs when specified in a bazelrc', async () => {
const packageFile = 'extract/multiple-bazelrcs/MODULE.bazel';
const input = Fixtures.get(packageFile);
@ -149,6 +182,38 @@ describe('modules/manager/bazel-module/extract', () => {
);
});
it('returns bazel_dep with no version and archive_override dependencies', async () => {
const input = codeBlock`
bazel_dep(name = "rules_foo")
archive_override(
module_name = "rules_foo",
urls = [
"https://example.com/archive.tar.gz",
],
)
`;
const result = await extractPackageFile(input, 'MODULE.bazel');
if (!result) {
throw new Error('Expected a result.');
}
expect(result.deps).toHaveLength(2);
expect(result.deps).toEqual(
expect.arrayContaining([
{
datasource: BazelDatasource.id,
depType: 'bazel_dep',
depName: 'rules_foo',
skipReason: 'file-dependency',
},
{
depType: 'archive_override',
depName: 'rules_foo',
skipReason: 'unsupported-datasource',
},
]),
);
});
it('returns bazel_dep and local_path_override dependencies', async () => {
const input = codeBlock`
bazel_dep(name = "rules_foo", version = "1.2.3")
@ -180,9 +245,39 @@ describe('modules/manager/bazel-module/extract', () => {
);
});
it('returns bazel_dep and single_version_override dependencies if a version is specified', async () => {
it('returns bazel_dep with no version and local_path_override dependencies', async () => {
const input = codeBlock`
bazel_dep(name = "rules_foo", version = "1.2.3")
bazel_dep(name = "rules_foo")
local_path_override(
module_name = "rules_foo",
urls = "/path/to/repo",
)
`;
const result = await extractPackageFile(input, 'MODULE.bazel');
if (!result) {
throw new Error('Expected a result.');
}
expect(result.deps).toHaveLength(2);
expect(result.deps).toEqual(
expect.arrayContaining([
{
datasource: BazelDatasource.id,
depType: 'bazel_dep',
depName: 'rules_foo',
skipReason: 'local-dependency',
},
{
depType: 'local_path_override',
depName: 'rules_foo',
skipReason: 'unsupported-datasource',
},
]),
);
});
it('returns bazel_dep with no version and single_version_override dependencies if a version is specified', async () => {
const input = codeBlock`
bazel_dep(name = "rules_foo")
single_version_override(
module_name = "rules_foo",
version = "1.2.3",
@ -200,7 +295,6 @@ describe('modules/manager/bazel-module/extract', () => {
datasource: BazelDatasource.id,
depType: 'bazel_dep',
depName: 'rules_foo',
currentValue: '1.2.3',
skipReason: 'is-pinned',
registryUrls: ['https://example.com/custom_registry'],
},
@ -238,6 +332,29 @@ describe('modules/manager/bazel-module/extract', () => {
]);
});
it('returns bazel_dep with no version dependency if single_version_override does not have a version', async () => {
const input = codeBlock`
bazel_dep(name = "rules_foo")
single_version_override(
module_name = "rules_foo",
registry = "https://example.com/custom_registry",
)
`;
const result = await extractPackageFile(input, 'MODULE.bazel');
if (!result) {
throw new Error('Expected a result.');
}
expect(result.deps).toEqual([
{
datasource: BazelDatasource.id,
depType: 'bazel_dep',
depName: 'rules_foo',
skipReason: 'unspecified-version',
registryUrls: ['https://example.com/custom_registry'],
},
]);
});
it('returns maven.install and maven.artifact dependencies', async () => {
const input = codeBlock`
maven.artifact(

View file

@ -25,6 +25,13 @@ const bazelDepPkgDep: BasePackageDep = {
depName: 'rules_foo',
currentValue: '1.2.3',
};
const bazelDepPkgDepNoVersion: BasePackageDep = {
datasource: BazelDatasource.id,
depType: 'bazel_dep',
depName: 'rules_foo',
currentValue: undefined,
skipReason: 'unspecified-version',
};
const gitOverrideForGithubPkgDep: OverridePackageDep = {
datasource: GithubTagsDatasource.id,
depType: 'git_override',
@ -94,6 +101,10 @@ describe('modules/manager/bazel-module/rules', () => {
name: fragments.string('rules_foo'),
version: fragments.string('1.2.3'),
});
const bazelDepWithoutDevDepNoVersion = fragments.record({
rule: fragments.string('bazel_dep'),
name: fragments.string('rules_foo'),
});
const gitOverrideWithGihubHost = fragments.record({
rule: fragments.string('git_override'),
module_name: fragments.string('rules_foo'),
@ -131,6 +142,7 @@ describe('modules/manager/bazel-module/rules', () => {
it.each`
msg | a | exp
${'bazel_dep'} | ${bazelDepWithoutDevDep} | ${bazelDepPkgDep}
${'bazel_dep, no version'} | ${bazelDepWithoutDevDepNoVersion} | ${bazelDepPkgDepNoVersion}
${'git_override, GitHub host'} | ${gitOverrideWithGihubHost} | ${gitOverrideForGithubPkgDep}
${'git_override, unsupported host'} | ${gitOverrideWithUnsupportedHost} | ${gitOverrideForUnsupportedPkgDep}
${'archive_override'} | ${archiveOverride} | ${archiveOverridePkgDep}
@ -169,10 +181,17 @@ describe('modules/manager/bazel-module/rules', () => {
describe('.toPackageDependencies()', () => {
const expectedBazelDepNoOverrides: PackageDependency[] = [bazelDepPkgDep];
const expectedBazelDepNoOverridesNoVersion: PackageDependency[] = [
bazelDepPkgDepNoVersion,
];
const expectedBazelDepAndGitOverride: PackageDependency[] = [
deepmerge(bazelDepPkgDep, { skipReason: 'git-dependency' }),
bazelModulePackageDepToPackageDependency(gitOverrideForGithubPkgDep),
];
const expectedBazelDepNoVersionAndGitOverride: PackageDependency[] = [
deepmerge(bazelDepPkgDepNoVersion, { skipReason: 'git-dependency' }),
bazelModulePackageDepToPackageDependency(gitOverrideForGithubPkgDep),
];
const expectedBazelDepAndSingleVersionOverride: PackageDependency[] = [
deepmerge(bazelDepPkgDep, {
skipReason: 'is-pinned',
@ -180,30 +199,56 @@ describe('modules/manager/bazel-module/rules', () => {
}),
bazelModulePackageDepToPackageDependency(singleVersionOverridePkgDep),
];
const expectedBazelDepNoVersionAndSingleVersionOverride: PackageDependency[] =
[
deepmerge(bazelDepPkgDepNoVersion, {
skipReason: 'is-pinned',
registryUrls: [customRegistryUrl],
}),
bazelModulePackageDepToPackageDependency(singleVersionOverridePkgDep),
];
const expectedBazelDepAndArchiveOverride: PackageDependency[] = [
deepmerge(bazelDepPkgDep, { skipReason: 'file-dependency' }),
bazelModulePackageDepToPackageDependency(archiveOverridePkgDep),
];
const expectedBazelDepNoVersionAndArchiveOverride: PackageDependency[] = [
deepmerge(bazelDepPkgDepNoVersion, { skipReason: 'file-dependency' }),
bazelModulePackageDepToPackageDependency(archiveOverridePkgDep),
];
const expectedBazelDepAndLocalPathOverride: PackageDependency[] = [
deepmerge(bazelDepPkgDep, { skipReason: 'local-dependency' }),
bazelModulePackageDepToPackageDependency(localPathOverridePkgDep),
];
const expectedBazelDepNoVersionAndLocalPathOverride: PackageDependency[] = [
deepmerge(bazelDepPkgDepNoVersion, { skipReason: 'local-dependency' }),
bazelModulePackageDepToPackageDependency(localPathOverridePkgDep),
];
// If a registry is specified and a version is not specified for a
// single_version_override, it is merely providing a registry URL for the bazel_dep.
const expectedBazelDepWithRegistry: PackageDependency[] = [
deepmerge(bazelDepPkgDep, { registryUrls: [customRegistryUrl] }),
];
const expectedBazelDepNoVersionWithRegistry: PackageDependency[] = [
deepmerge(bazelDepPkgDepNoVersion, { registryUrls: [customRegistryUrl] }),
];
it.each`
msg | a | exp
${'bazel_dep, no overrides'} | ${[bazelDepPkgDep]} | ${expectedBazelDepNoOverrides}
${'bazel_dep & git_override'} | ${[bazelDepPkgDep, gitOverrideForGithubPkgDep]} | ${expectedBazelDepAndGitOverride}
${'git_override, no bazel_dep'} | ${[gitOverrideForGithubPkgDep]} | ${[]}
${'bazel_dep & archive_override'} | ${[bazelDepPkgDep, archiveOverridePkgDep]} | ${expectedBazelDepAndArchiveOverride}
${'bazel_dep & local_path_override'} | ${[bazelDepPkgDep, localPathOverridePkgDep]} | ${expectedBazelDepAndLocalPathOverride}
${'single_version_override, with version and registry'} | ${[bazelDepPkgDep, singleVersionOverridePkgDep]} | ${expectedBazelDepAndSingleVersionOverride}
${'single_version_override, with registry'} | ${[bazelDepPkgDep, singleVersionOverrideWithRegistryPkgDep]} | ${expectedBazelDepWithRegistry}
${'single_version_override, without version and registry'} | ${[bazelDepPkgDep, singleVersionOverrideWithoutVersionAndRegistryPkgDep]} | ${[bazelDepPkgDep]}
msg | a | exp
${'bazel_dep, no overrides'} | ${[bazelDepPkgDep]} | ${expectedBazelDepNoOverrides}
${'bazel_dep, no overrides, no version'} | ${[bazelDepPkgDepNoVersion]} | ${expectedBazelDepNoOverridesNoVersion}
${'bazel_dep & git_override'} | ${[bazelDepPkgDep, gitOverrideForGithubPkgDep]} | ${expectedBazelDepAndGitOverride}
${'bazel_dep, no version & git_override'} | ${[bazelDepPkgDepNoVersion, gitOverrideForGithubPkgDep]} | ${expectedBazelDepNoVersionAndGitOverride}
${'git_override, no bazel_dep'} | ${[gitOverrideForGithubPkgDep]} | ${[]}
${'bazel_dep & archive_override'} | ${[bazelDepPkgDep, archiveOverridePkgDep]} | ${expectedBazelDepAndArchiveOverride}
${'bazel_dep, no version & archive_override'} | ${[bazelDepPkgDepNoVersion, archiveOverridePkgDep]} | ${expectedBazelDepNoVersionAndArchiveOverride}
${'bazel_dep & local_path_override'} | ${[bazelDepPkgDep, localPathOverridePkgDep]} | ${expectedBazelDepAndLocalPathOverride}
${'bazel_dep, no version & local_path_override'} | ${[bazelDepPkgDepNoVersion, localPathOverridePkgDep]} | ${expectedBazelDepNoVersionAndLocalPathOverride}
${'single_version_override, with version and registry'} | ${[bazelDepPkgDep, singleVersionOverridePkgDep]} | ${expectedBazelDepAndSingleVersionOverride}
${'bazel_dep, no version & single_version_override, with version and registry'} | ${[bazelDepPkgDepNoVersion, singleVersionOverridePkgDep]} | ${expectedBazelDepNoVersionAndSingleVersionOverride}
${'single_version_override, with registry'} | ${[bazelDepPkgDep, singleVersionOverrideWithRegistryPkgDep]} | ${expectedBazelDepWithRegistry}
${'bazel_dep, no version & single_version_override, with registry'} | ${[bazelDepPkgDepNoVersion, singleVersionOverrideWithRegistryPkgDep]} | ${expectedBazelDepNoVersionWithRegistry}
${'single_version_override, without version and registry'} | ${[bazelDepPkgDep, singleVersionOverrideWithoutVersionAndRegistryPkgDep]} | ${[bazelDepPkgDep]}
${'bazel_dep, no version & single_version_override, without version and registry'} | ${[bazelDepPkgDepNoVersion, singleVersionOverrideWithoutVersionAndRegistryPkgDep]} | ${[bazelDepPkgDepNoVersion]}
`('with $msg', ({ msg, a, exp }) => {
const result = toPackageDependencies(a);
expect(result).toEqual(exp);

View file

@ -69,14 +69,15 @@ const BazelDepToPackageDep = RecordFragmentSchema.extend({
value: z.literal('bazel_dep'),
}),
name: StringFragmentSchema,
version: StringFragmentSchema,
version: StringFragmentSchema.optional(),
}),
}).transform(
({ children: { rule, name, version } }): BasePackageDep => ({
datasource: BazelDatasource.id,
depType: rule.value,
depName: name.value,
currentValue: version.value,
currentValue: version?.value,
skipReason: version ? undefined : 'unspecified-version',
}),
);

View file

@ -2,8 +2,8 @@ import { logger } from '../../../logger';
import { HttpCacheStats } from '../../stats';
import type { GotOptions, HttpResponse } from '../types';
import { copyResponse } from '../util';
import { HttpCacheSchema } from './schema';
import type { HttpCache, HttpCacheProvider } from './types';
import { type HttpCache, HttpCacheSchema } from './schema';
import type { HttpCacheProvider } from './types';
export abstract class AbstractHttpCacheProvider implements HttpCacheProvider {
protected abstract load(url: string): Promise<unknown>;

View file

@ -1,7 +1,7 @@
import { Http } from '..';
import * as httpMock from '../../../../test/http-mock';
import { logger } from '../../../../test/util';
import { getCache, resetCache } from '../../cache/repository';
import { resetCache } from '../../cache/repository';
import { repoCacheProvider } from './repository-http-cache-provider';
describe('util/http/cache/repository-http-cache-provider', () => {
@ -59,27 +59,6 @@ describe('util/http/cache/repository-http-cache-provider', () => {
});
});
it('uses older cache format', async () => {
const repoCache = getCache();
repoCache.httpCache = {
'https://example.com/foo/bar': {
etag: '123',
lastModified: 'Mon, 01 Jan 2000 00:00:00 GMT',
httpResponse: { statusCode: 200, body: { msg: 'Hello, world!' } },
timeStamp: new Date().toISOString(),
},
};
httpMock.scope('https://example.com').get('/foo/bar').reply(304);
const res = await http.getJsonUnchecked('https://example.com/foo/bar');
expect(res).toMatchObject({
statusCode: 200,
body: { msg: 'Hello, world!' },
authorization: false,
});
});
it('reports if cache could not be persisted', async () => {
httpMock
.scope('https://example.com')

View file

@ -1,6 +1,6 @@
import { getCache } from '../../cache/repository';
import { AbstractHttpCacheProvider } from './abstract-http-cache-provider';
import type { HttpCache } from './types';
import type { HttpCache } from './schema';
export class RepositoryHttpCacheProvider extends AbstractHttpCacheProvider {
override load(url: string): Promise<unknown> {

View file

@ -1,34 +1,16 @@
import { z } from 'zod';
const invalidFieldsMsg =
'Cache object should have `etag` or `lastModified` fields';
export const HttpCacheSchema = z
.object({
// TODO: remove this migration part during the Christmas eve 2024
timeStamp: z.string().optional(),
timestamp: z.string().optional(),
etag: z.string().optional(),
lastModified: z.string().optional(),
httpResponse: z.unknown(),
timestamp: z.string(),
})
.passthrough()
.transform((data) => {
if (data.timeStamp) {
data.timestamp = data.timeStamp;
delete data.timeStamp;
}
return data;
})
.pipe(
z
.object({
etag: z.string().optional(),
lastModified: z.string().optional(),
httpResponse: z.unknown(),
timestamp: z.string(),
})
.refine(
({ etag, lastModified }) => etag ?? lastModified,
invalidFieldsMsg,
),
.refine(
({ etag, lastModified }) => etag ?? lastModified,
'Cache object should have `etag` or `lastModified` fields',
)
.nullable()
.catch(null);
export type HttpCache = z.infer<typeof HttpCacheSchema>;

View file

@ -1,12 +1,5 @@
import type { GotOptions, HttpResponse } from '../types';
export interface HttpCache {
etag?: string;
lastModified?: string;
httpResponse: unknown;
timestamp: string;
}
export interface HttpCacheProvider {
setCacheHeaders<T extends Pick<GotOptions, 'headers'>>(
url: string,

View file

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

View file

@ -470,8 +470,8 @@ importers:
specifier: 0.7.34
version: 0.7.34
'@types/node':
specifier: 22.10.6
version: 22.10.6
specifier: 22.10.7
version: 22.10.7
'@types/parse-link-header':
specifier: 2.0.3
version: 2.0.3
@ -540,7 +540,7 @@ importers:
version: 2.31.0(@typescript-eslint/parser@8.20.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@8.57.1)
eslint-plugin-jest:
specifier: 28.11.0
version: 28.11.0(@typescript-eslint/eslint-plugin@8.20.0(@typescript-eslint/parser@8.20.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3)))(typescript@5.7.3)
version: 28.11.0(@typescript-eslint/eslint-plugin@8.20.0(@typescript-eslint/parser@8.20.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3)))(typescript@5.7.3)
eslint-plugin-jest-formatting:
specifier: 3.1.0
version: 3.1.0(eslint@8.57.1)
@ -564,16 +564,16 @@ importers:
version: 9.1.7
jest:
specifier: 29.7.0
version: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3))
version: 29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3))
jest-extended:
specifier: 4.0.2
version: 4.0.2(jest@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3)))
version: 4.0.2(jest@29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3)))
jest-mock:
specifier: 29.7.0
version: 29.7.0
jest-mock-extended:
specifier: 3.0.7
version: 3.0.7(jest@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3)))(typescript@5.7.3)
version: 3.0.7(jest@29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3)))(typescript@5.7.3)
jest-snapshot:
specifier: 29.7.0
version: 29.7.0
@ -609,10 +609,10 @@ importers:
version: 3.0.3
ts-jest:
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@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3)))(typescript@5.7.3)
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@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3)))(typescript@5.7.3)
ts-node:
specifier: 10.9.2
version: 10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3)
version: 10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3)
type-fest:
specifier: 4.32.0
version: 4.32.0
@ -2130,8 +2130,8 @@ packages:
'@types/ms@0.7.34':
resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
'@types/node@22.10.6':
resolution: {integrity: sha512-qNiuwC4ZDAUNcY47xgaSuS92cjf8JbSUoaKS77bmLG1rU7MlATVSiw/IlrjtIyyskXBZ8KkNfjK/P5na7rgXbQ==}
'@types/node@22.10.7':
resolution: {integrity: sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==}
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@ -7505,27 +7505,27 @@ snapshots:
'@jest/console@29.7.0':
dependencies:
'@jest/types': 29.6.3
'@types/node': 22.10.6
'@types/node': 22.10.7
chalk: 4.1.2
jest-message-util: 29.7.0
jest-util: 29.7.0
slash: 3.0.0
'@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3))':
'@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3))':
dependencies:
'@jest/console': 29.7.0
'@jest/reporters': 29.7.0
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
'@types/node': 22.10.6
'@types/node': 22.10.7
ansi-escapes: 4.3.2
chalk: 4.1.2
ci-info: 3.9.0
exit: 0.1.2
graceful-fs: 4.2.11
jest-changed-files: 29.7.0
jest-config: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3))
jest-config: 29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3))
jest-haste-map: 29.7.0
jest-message-util: 29.7.0
jest-regex-util: 29.6.3
@ -7550,7 +7550,7 @@ snapshots:
dependencies:
'@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3
'@types/node': 22.10.6
'@types/node': 22.10.7
jest-mock: 29.7.0
'@jest/expect-utils@29.4.1':
@ -7572,7 +7572,7 @@ snapshots:
dependencies:
'@jest/types': 29.6.3
'@sinonjs/fake-timers': 10.3.0
'@types/node': 22.10.6
'@types/node': 22.10.7
jest-message-util: 29.7.0
jest-mock: 29.7.0
jest-util: 29.7.0
@ -7594,7 +7594,7 @@ snapshots:
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
'@jridgewell/trace-mapping': 0.3.25
'@types/node': 22.10.6
'@types/node': 22.10.7
chalk: 4.1.2
collect-v8-coverage: 1.0.2
exit: 0.1.2
@ -7664,7 +7664,7 @@ snapshots:
'@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
'@types/node': 22.10.6
'@types/node': 22.10.7
'@types/yargs': 17.0.33
chalk: 4.1.2
@ -8712,7 +8712,7 @@ snapshots:
'@types/aws4@1.11.6':
dependencies:
'@types/node': 22.10.6
'@types/node': 22.10.7
'@types/babel__core@7.20.5':
dependencies:
@ -8737,27 +8737,27 @@ snapshots:
'@types/better-sqlite3@7.6.12':
dependencies:
'@types/node': 22.10.6
'@types/node': 22.10.7
'@types/breejs__later@4.1.5': {}
'@types/bunyan@1.8.11':
dependencies:
'@types/node': 22.10.6
'@types/node': 22.10.7
'@types/bunyan@1.8.9':
dependencies:
'@types/node': 22.10.6
'@types/node': 22.10.7
'@types/cacache@17.0.2':
dependencies:
'@types/node': 22.10.6
'@types/node': 22.10.7
'@types/cacheable-request@6.0.3':
dependencies:
'@types/http-cache-semantics': 4.0.4
'@types/keyv': 3.1.4
'@types/node': 22.10.6
'@types/node': 22.10.7
'@types/responselike': 1.0.3
'@types/callsite@1.0.34': {}
@ -8788,7 +8788,7 @@ snapshots:
'@types/fs-extra@11.0.4':
dependencies:
'@types/jsonfile': 6.1.4
'@types/node': 22.10.6
'@types/node': 22.10.7
'@types/git-url-parse@9.0.3': {}
@ -8798,7 +8798,7 @@ snapshots:
'@types/graceful-fs@4.1.9':
dependencies:
'@types/node': 22.10.6
'@types/node': 22.10.7
'@types/http-cache-semantics@4.0.4': {}
@ -8824,13 +8824,13 @@ snapshots:
'@types/jsonfile@6.1.4':
dependencies:
'@types/node': 22.10.6
'@types/node': 22.10.7
'@types/katex@0.16.7': {}
'@types/keyv@3.1.4':
dependencies:
'@types/node': 22.10.6
'@types/node': 22.10.7
'@types/linkify-it@5.0.0': {}
@ -8849,7 +8849,7 @@ snapshots:
'@types/marshal@0.5.3':
dependencies:
'@types/node': 22.10.6
'@types/node': 22.10.7
'@types/mdast@3.0.15':
dependencies:
@ -8865,7 +8865,7 @@ snapshots:
'@types/ms@0.7.34': {}
'@types/node@22.10.6':
'@types/node@22.10.7':
dependencies:
undici-types: 6.20.0
@ -8879,7 +8879,7 @@ snapshots:
'@types/responselike@1.0.3':
dependencies:
'@types/node': 22.10.6
'@types/node': 22.10.7
'@types/semver-stable@3.0.2': {}
@ -8899,7 +8899,7 @@ snapshots:
'@types/tar@6.1.13':
dependencies:
'@types/node': 22.10.6
'@types/node': 22.10.7
minipass: 4.2.8
'@types/tmp@0.2.6': {}
@ -8924,7 +8924,7 @@ snapshots:
'@types/yauzl@2.10.3':
dependencies:
'@types/node': 22.10.6
'@types/node': 22.10.7
optional: true
'@typescript-eslint/eslint-plugin@8.20.0(@typescript-eslint/parser@8.20.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3)':
@ -9689,13 +9689,13 @@ snapshots:
optionalDependencies:
typescript: 5.7.3
create-jest@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3)):
create-jest@29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3)):
dependencies:
'@jest/types': 29.6.3
chalk: 4.1.2
exit: 0.1.2
graceful-fs: 4.2.11
jest-config: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3))
jest-config: 29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3))
jest-util: 29.7.0
prompts: 2.4.2
transitivePeerDependencies:
@ -10118,13 +10118,13 @@ snapshots:
dependencies:
eslint: 8.57.1
eslint-plugin-jest@28.11.0(@typescript-eslint/eslint-plugin@8.20.0(@typescript-eslint/parser@8.20.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3)))(typescript@5.7.3):
eslint-plugin-jest@28.11.0(@typescript-eslint/eslint-plugin@8.20.0(@typescript-eslint/parser@8.20.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(jest@29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3)))(typescript@5.7.3):
dependencies:
'@typescript-eslint/utils': 8.20.0(eslint@8.57.1)(typescript@5.7.3)
eslint: 8.57.1
optionalDependencies:
'@typescript-eslint/eslint-plugin': 8.20.0(@typescript-eslint/parser@8.20.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3)
jest: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3))
jest: 29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3))
transitivePeerDependencies:
- supports-color
- typescript
@ -11154,7 +11154,7 @@ snapshots:
'@jest/expect': 29.7.0
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
'@types/node': 22.10.6
'@types/node': 22.10.7
chalk: 4.1.2
co: 4.6.0
dedent: 1.5.3
@ -11174,16 +11174,16 @@ snapshots:
- babel-plugin-macros
- supports-color
jest-cli@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3)):
jest-cli@29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3)):
dependencies:
'@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3))
'@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3))
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
chalk: 4.1.2
create-jest: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3))
create-jest: 29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3))
exit: 0.1.2
import-local: 3.2.0
jest-config: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3))
jest-config: 29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3))
jest-util: 29.7.0
jest-validate: 29.7.0
yargs: 17.7.2
@ -11193,7 +11193,7 @@ snapshots:
- supports-color
- ts-node
jest-config@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3)):
jest-config@29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3)):
dependencies:
'@babel/core': 7.26.0
'@jest/test-sequencer': 29.7.0
@ -11218,8 +11218,8 @@ snapshots:
slash: 3.0.0
strip-json-comments: 3.1.1
optionalDependencies:
'@types/node': 22.10.6
ts-node: 10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3)
'@types/node': 22.10.7
ts-node: 10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3)
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
@ -11248,16 +11248,16 @@ snapshots:
'@jest/environment': 29.7.0
'@jest/fake-timers': 29.7.0
'@jest/types': 29.6.3
'@types/node': 22.10.6
'@types/node': 22.10.7
jest-mock: 29.7.0
jest-util: 29.7.0
jest-extended@4.0.2(jest@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3))):
jest-extended@4.0.2(jest@29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3))):
dependencies:
jest-diff: 29.7.0
jest-get-type: 29.6.3
optionalDependencies:
jest: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3))
jest: 29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3))
jest-get-type@29.6.3: {}
@ -11265,7 +11265,7 @@ snapshots:
dependencies:
'@jest/types': 29.6.3
'@types/graceful-fs': 4.1.9
'@types/node': 22.10.6
'@types/node': 22.10.7
anymatch: 3.1.3
fb-watchman: 2.0.2
graceful-fs: 4.2.11
@ -11308,16 +11308,16 @@ snapshots:
slash: 3.0.0
stack-utils: 2.0.6
jest-mock-extended@3.0.7(jest@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3)))(typescript@5.7.3):
jest-mock-extended@3.0.7(jest@29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3)))(typescript@5.7.3):
dependencies:
jest: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3))
jest: 29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3))
ts-essentials: 10.0.4(typescript@5.7.3)
typescript: 5.7.3
jest-mock@29.7.0:
dependencies:
'@jest/types': 29.6.3
'@types/node': 22.10.6
'@types/node': 22.10.7
jest-util: 29.7.0
jest-pnp-resolver@1.2.3(jest-resolve@29.7.0):
@ -11352,7 +11352,7 @@ snapshots:
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
'@types/node': 22.10.6
'@types/node': 22.10.7
chalk: 4.1.2
emittery: 0.13.1
graceful-fs: 4.2.11
@ -11380,7 +11380,7 @@ snapshots:
'@jest/test-result': 29.7.0
'@jest/transform': 29.7.0
'@jest/types': 29.6.3
'@types/node': 22.10.6
'@types/node': 22.10.7
chalk: 4.1.2
cjs-module-lexer: 1.4.1
collect-v8-coverage: 1.0.2
@ -11426,7 +11426,7 @@ snapshots:
jest-util@29.7.0:
dependencies:
'@jest/types': 29.6.3
'@types/node': 22.10.6
'@types/node': 22.10.7
chalk: 4.1.2
ci-info: 3.9.0
graceful-fs: 4.2.11
@ -11445,7 +11445,7 @@ snapshots:
dependencies:
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
'@types/node': 22.10.6
'@types/node': 22.10.7
ansi-escapes: 4.3.2
chalk: 4.1.2
emittery: 0.13.1
@ -11454,17 +11454,17 @@ snapshots:
jest-worker@29.7.0:
dependencies:
'@types/node': 22.10.6
'@types/node': 22.10.7
jest-util: 29.7.0
merge-stream: 2.0.0
supports-color: 8.1.1
jest@29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3)):
jest@29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3)):
dependencies:
'@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3))
'@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3))
'@jest/types': 29.6.3
import-local: 3.2.0
jest-cli: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3))
jest-cli: 29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3))
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
@ -12627,7 +12627,7 @@ snapshots:
'@protobufjs/path': 1.1.2
'@protobufjs/pool': 1.1.0
'@protobufjs/utf8': 1.1.0
'@types/node': 22.10.6
'@types/node': 22.10.7
long: 5.2.4
protocols@2.0.1: {}
@ -13390,12 +13390,12 @@ snapshots:
optionalDependencies:
typescript: 5.7.3
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@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3)))(typescript@5.7.3):
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@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3)))(typescript@5.7.3):
dependencies:
bs-logger: 0.2.6
ejs: 3.1.10
fast-json-stable-stringify: 2.1.0
jest: 29.7.0(@types/node@22.10.6)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3))
jest: 29.7.0(@types/node@22.10.7)(ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3))
jest-util: 29.7.0
json5: 2.2.3
lodash.memoize: 4.1.2
@ -13409,14 +13409,14 @@ snapshots:
'@jest/types': 29.6.3
babel-jest: 29.7.0(@babel/core@7.26.0)
ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.6)(typescript@5.7.3):
ts-node@10.9.2(@swc/core@1.10.7)(@types/node@22.10.7)(typescript@5.7.3):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 22.10.6
'@types/node': 22.10.7
acorn: 8.14.0
acorn-walk: 8.3.4
arg: 4.1.3