diff --git a/lib/config/massage.ts b/lib/config/massage.ts index 094237c11bfdb27ad8d3574396062e791d6d553b..5130edd2bd5c34d706da7a19f2960dea99e22ffb 100644 --- a/lib/config/massage.ts +++ b/lib/config/massage.ts @@ -1,5 +1,4 @@ import is from '@sindresorhus/is'; -import { clone } from '../util/clone'; import { getOptions } from './options'; import type { PackageRule, RenovateConfig, UpdateType } from './types'; @@ -17,7 +16,7 @@ export function massageConfig(config: RenovateConfig): RenovateConfig { } }); } - const massagedConfig = clone(config); + const massagedConfig = structuredClone(config); for (const [key, val] of Object.entries(config)) { if (allowedStrings.includes(key) && is.string(val)) { massagedConfig[key] = [val]; @@ -56,7 +55,7 @@ export function massageConfig(config: RenovateConfig): RenovateConfig { PackageRule ][]) { if (updateTypes.includes(key)) { - let newRule = clone(rule); + let newRule = structuredClone(rule); Object.keys(newRule).forEach((newKey) => { if (!(newKey.startsWith(`match`) || newKey.startsWith('exclude'))) { delete newRule[newKey]; diff --git a/lib/config/presets/index.ts b/lib/config/presets/index.ts index 24459e102cb960bb44ee27dd3524dd9ec0f17b05..32d17ea8212751e2bc6a3eed3000ae404dddb10b 100644 --- a/lib/config/presets/index.ts +++ b/lib/config/presets/index.ts @@ -6,7 +6,6 @@ import { import { logger } from '../../logger'; import { ExternalHostError } from '../../types/errors/external-host-error'; import * as memCache from '../../util/cache/memory'; -import { clone } from '../../util/clone'; import { regEx } from '../../util/regex'; import * as massage from '../massage'; import * as migration from '../migration'; @@ -274,7 +273,7 @@ export async function resolveConfigPresets( _ignorePresets?: string[], existingPresets: string[] = [] ): Promise<AllConfig> { - let ignorePresets = clone(_ignorePresets); + let ignorePresets = structuredClone(_ignorePresets); if (!ignorePresets || ignorePresets.length === 0) { ignorePresets = inputConfig.ignorePresets ?? []; } diff --git a/lib/config/utils.ts b/lib/config/utils.ts index 4c891e21c14bd76b4eb5a14dbb28b53f1a38bbef..106d9e168f1453d2c88913b83ea1a6bfbdf7e389 100644 --- a/lib/config/utils.ts +++ b/lib/config/utils.ts @@ -1,5 +1,4 @@ import { logger } from '../logger'; -import { clone } from '../util/clone'; import * as options from './options'; import type { RenovateConfig } from './types'; @@ -11,9 +10,8 @@ export function mergeChildConfig< if (!child) { return parent as never; } - const parentConfig = clone(parent); - // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion - const childConfig = clone(child!); + const parentConfig = structuredClone(parent); + const childConfig = structuredClone(child); const config: Record<string, any> = { ...parentConfig, ...childConfig }; for (const option of options.getOptions()) { if ( diff --git a/lib/logger/utils.ts b/lib/logger/utils.ts index d16976867840803ef9f375e39e21f9867a2f9915..4d0297cedb823bdb1bd7ccfd9a8c10458375bf9c 100644 --- a/lib/logger/utils.ts +++ b/lib/logger/utils.ts @@ -3,7 +3,6 @@ import is from '@sindresorhus/is'; import bunyan from 'bunyan'; import fs from 'fs-extra'; import { RequestError as HttpError } from 'got'; -import { clone } from '../util/clone'; import { redactedFields, sanitize } from '../util/sanitize'; import type { BunyanRecord, BunyanStream } from './types'; @@ -65,7 +64,7 @@ export default function prepareError(err: Error): Record<string, unknown> { // handle got error if (err instanceof HttpError) { const options: Record<string, unknown> = { - headers: clone(err.options.headers), + headers: structuredClone(err.options.headers), url: err.options.url?.toString(), hostType: err.options.context.hostType, }; @@ -82,8 +81,11 @@ export default function prepareError(err: Error): Record<string, unknown> { statusCode: err.response?.statusCode, statusMessage: err.response?.statusMessage, body: - err.name === 'TimeoutError' ? undefined : clone(err.response.body), - headers: clone(err.response.headers), + // istanbul ignore if: not easily testable + err.name === 'TimeoutError' + ? undefined + : structuredClone(err.response.body), + headers: structuredClone(err.response.headers), httpVersion: err.response.httpVersion, retryCount: err.response.retryCount, }; diff --git a/lib/modules/datasource/aws-machine-image/index.spec.ts b/lib/modules/datasource/aws-machine-image/index.spec.ts index ff8f7aef304409932290a4d6389c9463c3694e14..6349da52d929538d1630412845818204bafe7a42 100644 --- a/lib/modules/datasource/aws-machine-image/index.spec.ts +++ b/lib/modules/datasource/aws-machine-image/index.spec.ts @@ -347,7 +347,7 @@ describe('modules/datasource/aws-machine-image/index', () => { packageName: '[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["with one matching image to return that image"]}]', }); - expect(res).toStrictEqual({ + expect(res).toEqual({ releases: [ { isDeprecated: false, @@ -366,7 +366,7 @@ describe('modules/datasource/aws-machine-image/index', () => { packageName: '[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["with one deprecated matching image to return that image"]}]', }); - expect(res).toStrictEqual({ + expect(res).toEqual({ releases: [ { isDeprecated: true, @@ -385,7 +385,7 @@ describe('modules/datasource/aws-machine-image/index', () => { packageName: '[{"Name":"owner-id","Values":["602401143452"]},{"Name":"name","Values":["with 3 matching image to return the newest image"]}]', }); - expect(res).toStrictEqual({ + expect(res).toEqual({ releases: [ { isDeprecated: false, diff --git a/lib/modules/datasource/aws-rds/index.spec.ts b/lib/modules/datasource/aws-rds/index.spec.ts index d0eda95cfac8ff2f2e0beef9ea078ad48df017d2..7d46e5493c6eb4240fbf0f9be62cb8a920ca02fc 100644 --- a/lib/modules/datasource/aws-rds/index.spec.ts +++ b/lib/modules/datasource/aws-rds/index.spec.ts @@ -119,7 +119,7 @@ describe('modules/datasource/aws-rds/index', () => { datasource: AwsRdsDataSource.id, packageName: '[{"Name":"engine","Values":["mysql"]}]', }); - expect(res).toStrictEqual({ + expect(res).toEqual({ releases: [ { isDeprecated: true, @@ -138,7 +138,7 @@ describe('modules/datasource/aws-rds/index', () => { datasource: AwsRdsDataSource.id, packageName: '[{"Name":"engine","Values":["mysql"]}]', }); - expect(res).toStrictEqual({ + expect(res).toEqual({ releases: [ { isDeprecated: false, diff --git a/lib/modules/datasource/docker/index.spec.ts b/lib/modules/datasource/docker/index.spec.ts index 17ce2dee16a6c43af7df518af47dd969a40a1bce..fe3979b58e57cced4f6b14cb6afd49a2dd7db8cf 100644 --- a/lib/modules/datasource/docker/index.spec.ts +++ b/lib/modules/datasource/docker/index.spec.ts @@ -1830,7 +1830,7 @@ describe('modules/datasource/docker/index', () => { datasource: DockerDatasource.id, packageName: 'registry.company.com/node', }); - expect(res).toStrictEqual({ + expect(res).toEqual({ registryUrl: 'https://registry.company.com', releases: [ { @@ -1881,7 +1881,7 @@ describe('modules/datasource/docker/index', () => { datasource: DockerDatasource.id, packageName: 'registry.company.com/node', }); - expect(res).toStrictEqual({ + expect(res).toEqual({ registryUrl: 'https://registry.company.com', releases: [ { @@ -1935,7 +1935,7 @@ describe('modules/datasource/docker/index', () => { datasource: DockerDatasource.id, packageName: 'registry.company.com/node', }); - expect(res).toStrictEqual({ + expect(res).toEqual({ registryUrl: 'https://registry.company.com', releases: [], sourceUrl: 'https://github.com/renovatebot/renovate', @@ -1962,7 +1962,7 @@ describe('modules/datasource/docker/index', () => { datasource: DockerDatasource.id, packageName: 'registry.company.com/node', }); - expect(res).toStrictEqual({ + expect(res).toEqual({ registryUrl: 'https://registry.company.com', releases: [], }); @@ -1986,7 +1986,7 @@ describe('modules/datasource/docker/index', () => { datasource: DockerDatasource.id, packageName: 'registry.company.com/node', }); - expect(res).toStrictEqual({ + expect(res).toEqual({ registryUrl: 'https://registry.company.com', releases: [], }); @@ -2007,7 +2007,7 @@ describe('modules/datasource/docker/index', () => { datasource: DockerDatasource.id, packageName: 'registry.company.com/node', }); - expect(res).toStrictEqual({ + expect(res).toEqual({ registryUrl: 'https://registry.company.com', releases: [], }); @@ -2048,7 +2048,7 @@ describe('modules/datasource/docker/index', () => { datasource: DockerDatasource.id, packageName: 'registry.company.com/node', }); - expect(res).toStrictEqual({ + expect(res).toEqual({ registryUrl: 'https://registry.company.com', releases: [ { @@ -2093,7 +2093,7 @@ describe('modules/datasource/docker/index', () => { datasource: DockerDatasource.id, packageName: 'registry.company.com/node', }); - expect(res).toStrictEqual({ + expect(res).toEqual({ registryUrl: 'https://registry.company.com', releases: [ { @@ -2123,7 +2123,7 @@ describe('modules/datasource/docker/index', () => { datasource: DockerDatasource.id, packageName: 'registry.company.com/node', }); - expect(res).toStrictEqual({ + expect(res).toEqual({ registryUrl: 'https://registry.company.com', releases: [], }); @@ -2173,7 +2173,7 @@ describe('modules/datasource/docker/index', () => { datasource: DockerDatasource.id, packageName: 'registry.company.com/node', }); - expect(res).toStrictEqual({ + expect(res).toEqual({ registryUrl: 'https://registry.company.com', releases: [], }); @@ -2229,7 +2229,7 @@ describe('modules/datasource/docker/index', () => { datasource: DockerDatasource.id, packageName: 'ghcr.io/visualon/drone-git', }); - expect(res).toStrictEqual({ + expect(res).toEqual({ registryUrl: 'https://ghcr.io', sourceUrl: 'https://github.com/visualon/drone-git', releases: [{ version: '1.0.0' }], diff --git a/lib/modules/datasource/jenkins-plugins/index.ts b/lib/modules/datasource/jenkins-plugins/index.ts index aef686da9b17ae2ebd40a80b928b73dd3dac561e..d8f717c28dfcd7a6b9a8023412a0bf69209a9082 100644 --- a/lib/modules/datasource/jenkins-plugins/index.ts +++ b/lib/modules/datasource/jenkins-plugins/index.ts @@ -33,7 +33,7 @@ export class JenkinsPluginsDatasource extends Datasource { return null; } - const result = clone(plugin); + const result = structuredClone(plugin); const versions = await this.getJenkinsPluginVersions(); const releases = versions[packageName]; result.releases = releases ? clone(releases) : []; diff --git a/lib/modules/datasource/kubernetes-api/index.spec.ts b/lib/modules/datasource/kubernetes-api/index.spec.ts index d4b2a954e4ca9311453f8329d1ab557e8ba3c635..7b453fc2d8415cf4b1020c15cc1d4eb05f43c469 100644 --- a/lib/modules/datasource/kubernetes-api/index.spec.ts +++ b/lib/modules/datasource/kubernetes-api/index.spec.ts @@ -16,7 +16,7 @@ describe('modules/datasource/kubernetes-api/index', () => { packageName: 'CSIStorageCapacity', }); expect(res).not.toBeNull(); - expect(res).toStrictEqual({ + expect(res).toEqual({ releases: [ { version: 'storage.k8s.io/v1beta1' }, { version: 'storage.k8s.io/v1' }, diff --git a/lib/modules/manager/gradle/parser/common.spec.ts b/lib/modules/manager/gradle/parser/common.spec.ts index 9b2c2339dead2f86061f862ebd6cabb9d1845294..8c377a1345911c0292fdd555b0c3b6a406c87fd6 100644 --- a/lib/modules/manager/gradle/parser/common.spec.ts +++ b/lib/modules/manager/gradle/parser/common.spec.ts @@ -59,7 +59,7 @@ describe('modules/manager/gradle/parser/common', () => { it('prependNestingDepth', () => { ctx.tmpNestingDepth = ctx.varTokens = [token]; prependNestingDepth(ctx); - expect(ctx.varTokens).toStrictEqual([token, token]); + expect(ctx.varTokens).toEqual([token, token]); coalesceVariable(ctx); expect(ctx).toMatchObject({ diff --git a/lib/modules/manager/gradle/parser/common.ts b/lib/modules/manager/gradle/parser/common.ts index 6f5c17790d20c09260054dfdfbecd5ae93ac9066..e72d582ea0ac8f85d346f1f87f3ca4990b17304d 100644 --- a/lib/modules/manager/gradle/parser/common.ts +++ b/lib/modules/manager/gradle/parser/common.ts @@ -1,5 +1,4 @@ import { lexer, parser, query as q } from 'good-enough-parser'; -import { clone } from '../../../../util/clone'; import { regEx } from '../../../../util/regex'; import type { Ctx, @@ -52,7 +51,7 @@ export function reduceNestingDepth(ctx: Ctx): Ctx { } export function prependNestingDepth(ctx: Ctx): Ctx { - ctx.varTokens = [...clone(ctx.tmpNestingDepth), ...ctx.varTokens]; + ctx.varTokens = [...structuredClone(ctx.tmpNestingDepth), ...ctx.varTokens]; return ctx; } diff --git a/lib/modules/manager/npm/update/locked-dependency/index.spec.ts b/lib/modules/manager/npm/update/locked-dependency/index.spec.ts index 857621abaaf9a0350f32a8f273d373bcab2afe49..930836f4ff0de9e709c48637adfe74d8506247c0 100644 --- a/lib/modules/manager/npm/update/locked-dependency/index.spec.ts +++ b/lib/modules/manager/npm/update/locked-dependency/index.spec.ts @@ -1,7 +1,6 @@ import { updateLockedDependency } from '../..'; import { Fixtures } from '../../../../../../test/fixtures'; import * as httpMock from '../../../../../../test/http-mock'; -import { clone } from '../../../../../util/clone'; import type { UpdateLockedConfig } from '../../../types'; const packageFileContent = Fixtures.get('package.json', './package-lock'); @@ -114,7 +113,7 @@ describe('modules/manager/npm/update/locked-dependency/index', () => { }); it('fails to remediate if parent dep cannot support', async () => { - const acceptsModified = clone(acceptsJson); + const acceptsModified = structuredClone(acceptsJson); acceptsModified.versions['2.0.0'] = {}; httpMock .scope('https://registry.npmjs.org') diff --git a/lib/modules/platform/github/index.spec.ts b/lib/modules/platform/github/index.spec.ts index 91d35bc7177cf7368cd668bf1381aa4c7024faa0..b787c71f2ed7ca70b2e29a8be48b703b2d76f853 100644 --- a/lib/modules/platform/github/index.spec.ts +++ b/lib/modules/platform/github/index.spec.ts @@ -208,7 +208,7 @@ describe('modules/platform/github/index', () => { }); const repos = await github.getRepos(); - expect(repos).toStrictEqual(['a/b', 'c/d']); + expect(repos).toEqual(['a/b', 'c/d']); }); it('should return an array of repos when using GitHub App Installation Token', async () => { @@ -236,7 +236,7 @@ describe('modules/platform/github/index', () => { }); const repos = await github.getRepos(); - expect(repos).toStrictEqual(['a/b', 'c/d']); + expect(repos).toEqual(['a/b', 'c/d']); }); }); diff --git a/lib/util/clone.ts b/lib/util/clone.ts index 67813c024241fdf3e4f64aa05221129fbb52610d..422add0b37d904458c75b775020a2cb6ffdd272c 100644 --- a/lib/util/clone.ts +++ b/lib/util/clone.ts @@ -1,5 +1,10 @@ import { quickStringify } from './stringify'; +/** + * Creates a deep clone of an object. + * @deprecated Use {@link structuredClone} instead. + * @param input The object to clone. + */ export function clone<T>(input: T | null = null): T { const stringifiedInput = quickStringify(input); return stringifiedInput ? JSON.parse(stringifiedInput) : null; diff --git a/lib/util/github/graphql/cache-strategies/memory-cache-strategy.spec.ts b/lib/util/github/graphql/cache-strategies/memory-cache-strategy.spec.ts index 88849193a12b66de745641c49f44fe0a9a7857ff..71ab7203107807e1361e31a2ad57aac23c95f0a1 100644 --- a/lib/util/github/graphql/cache-strategies/memory-cache-strategy.spec.ts +++ b/lib/util/github/graphql/cache-strategies/memory-cache-strategy.spec.ts @@ -1,6 +1,5 @@ import { DateTime, Settings } from 'luxon'; import * as memCache from '../../../cache/memory'; -import { clone } from '../../../clone'; import type { GithubDatasourceItem, GithubGraphqlCacheRecord } from '../types'; import { GithubGraphqlMemoryCacheStrategy } from './memory-cache-strategy'; @@ -45,7 +44,7 @@ describe('util/github/graphql/cache-strategies/memory-cache-strategy', () => { items, createdAt: isoTs('2022-10-01 15:30'), }; - memCache.set('github-graphql-cache:foo:bar', clone(cacheRecord)); + memCache.set('github-graphql-cache:foo:bar', structuredClone(cacheRecord)); // At this moment, cache is valid let now = '2022-10-31 15:29:59'; @@ -85,7 +84,7 @@ describe('util/github/graphql/cache-strategies/memory-cache-strategy', () => { items: oldItems, createdAt: isoTs('2022-10-30 12:00'), }; - memCache.set('github-graphql-cache:foo:bar', clone(cacheRecord)); + memCache.set('github-graphql-cache:foo:bar', structuredClone(cacheRecord)); const now = '2022-10-31 15:30'; mockTime(now); @@ -121,7 +120,7 @@ describe('util/github/graphql/cache-strategies/memory-cache-strategy', () => { items: oldItems, createdAt: isoTs('2022-10-30 12:00'), }; - memCache.set('github-graphql-cache:foo:bar', clone(cacheRecord)); + memCache.set('github-graphql-cache:foo:bar', structuredClone(cacheRecord)); const now = '2022-10-31 15:30'; mockTime(now); @@ -147,7 +146,7 @@ describe('util/github/graphql/cache-strategies/memory-cache-strategy', () => { items: oldItems, createdAt: isoTs('2022-12-31 12:00'), }; - memCache.set('github-graphql-cache:foo:bar', clone(cacheRecord)); + memCache.set('github-graphql-cache:foo:bar', structuredClone(cacheRecord)); const now = '2022-12-31 23:59'; mockTime(now); @@ -191,7 +190,7 @@ describe('util/github/graphql/cache-strategies/memory-cache-strategy', () => { items, createdAt: isoTs('2022-10-30 12:00'), }; - memCache.set('github-graphql-cache:foo:bar', clone(cacheRecord)); + memCache.set('github-graphql-cache:foo:bar', structuredClone(cacheRecord)); const now = '2022-10-31 15:30'; mockTime(now); diff --git a/lib/util/github/graphql/cache-strategies/package-cache-strategy.spec.ts b/lib/util/github/graphql/cache-strategies/package-cache-strategy.spec.ts index 80c02add16a5b3ce8780bba829c4a7d45c3bb182..b288f2eeb6d1394ac36c5d96798d7e694559d8bd 100644 --- a/lib/util/github/graphql/cache-strategies/package-cache-strategy.spec.ts +++ b/lib/util/github/graphql/cache-strategies/package-cache-strategy.spec.ts @@ -1,6 +1,5 @@ import { DateTime, Settings } from 'luxon'; import * as packageCache from '../../../cache/package'; -import { clone } from '../../../clone'; import type { GithubDatasourceItem, GithubGraphqlCacheRecord } from '../types'; import { GithubGraphqlPackageCacheStrategy } from './package-cache-strategy'; @@ -31,7 +30,7 @@ describe('util/github/graphql/cache-strategies/package-cache-strategy', () => { items: oldItems, createdAt: isoTs('2022-10-15 12:00'), }; - cacheGet.mockResolvedValueOnce(clone(cacheRecord)); + cacheGet.mockResolvedValueOnce(structuredClone(cacheRecord)); const now = '2022-10-30 12:00'; mockTime(now); diff --git a/lib/util/host-rules.ts b/lib/util/host-rules.ts index 0f5e72194517792b1575ed9e43bcce317d338550..9ee45b797cb6afd1bdb150e46f10b0fc36eaefc0 100644 --- a/lib/util/host-rules.ts +++ b/lib/util/host-rules.ts @@ -2,7 +2,6 @@ import is from '@sindresorhus/is'; import merge from 'deepmerge'; import { logger } from '../logger'; import type { HostRule, HostRuleSearchResult } from '../types'; -import { clone } from './clone'; import * as sanitize from './sanitize'; import { toBase64 } from './string'; import { parseUrl, validateUrl } from './url'; @@ -16,7 +15,7 @@ interface LegacyHostRule { } function migrateRule(rule: LegacyHostRule & HostRule): HostRule { - const cloned: LegacyHostRule & HostRule = clone(rule); + const cloned: LegacyHostRule & HostRule = structuredClone(rule); delete cloned.hostName; delete cloned.domainName; delete cloned.baseUrl; @@ -187,7 +186,7 @@ export function findAll({ hostType }: { hostType: string }): HostRule[] { * @returns a deep copy of all known host rules without any filtering */ export function getAll(): HostRule[] { - return clone(hostRules); + return structuredClone(hostRules); } export function clear(): void { diff --git a/lib/util/http/github.spec.ts b/lib/util/http/github.spec.ts index f2383c4b715d35d1cf50c3a5bcb07a20de21a461..fe85535129ac9321c2b7d137aed34936c3c8de91 100644 --- a/lib/util/http/github.spec.ts +++ b/lib/util/http/github.spec.ts @@ -621,7 +621,7 @@ describe('util/http/github', () => { .reply(200, { data: { repository } }); const res = await githubApi.requestGraphql(graphqlQuery); - expect(res?.data).toStrictEqual({ repository }); + expect(res?.data).toEqual({ repository }); }); it('queryRepoField', async () => { diff --git a/lib/workers/repository/init/index.ts b/lib/workers/repository/init/index.ts index 89296f134f1ed09e1554dcb12ceb870e7c48aef1..10eb930580fd6f62a457daab4ecd8f4bd38a7ca2 100644 --- a/lib/workers/repository/init/index.ts +++ b/lib/workers/repository/init/index.ts @@ -3,7 +3,6 @@ import { applySecretsToConfig } from '../../../config/secrets'; import type { RenovateConfig } from '../../../config/types'; import { logger } from '../../../logger'; import { platform } from '../../../modules/platform'; -import { clone } from '../../../util/clone'; import { cloneSubmodules, setUserRepoConfig } from '../../../util/git'; import { getAll } from '../../../util/host-rules'; import { checkIfConfigured } from '../configured'; @@ -14,7 +13,12 @@ import { getRepoConfig } from './config'; import { detectVulnerabilityAlerts } from './vulnerability'; function initializeConfig(config: RenovateConfig): RenovateConfig { - return { ...clone(config), errors: [], warnings: [], branchList: [] }; + return { + ...structuredClone(config), + errors: [], + warnings: [], + branchList: [], + }; } function warnOnUnsupportedOptions(config: RenovateConfig): void { diff --git a/lib/workers/repository/onboarding/branch/config.ts b/lib/workers/repository/onboarding/branch/config.ts index 8350dba61b087d38e13b18f236b7d19b4c4d1aac..fdceac6ba71f828104300d72bd1be9e1b0098964 100644 --- a/lib/workers/repository/onboarding/branch/config.ts +++ b/lib/workers/repository/onboarding/branch/config.ts @@ -6,13 +6,12 @@ import type { RenovateSharedConfig, } from '../../../../config/types'; import { logger } from '../../../../logger'; -import { clone } from '../../../../util/clone'; import { EditorConfig, JSONWriter } from '../../../../util/json-writer'; async function getOnboardingConfig( config: RenovateConfig -): Promise<RenovateSharedConfig> { - let onboardingConfig = clone(config.onboardingConfig); +): Promise<RenovateSharedConfig | undefined> { + let onboardingConfig = structuredClone(config.onboardingConfig); let orgPreset: string | undefined; diff --git a/lib/workers/repository/package-files.ts b/lib/workers/repository/package-files.ts index 02887c20c9ca2b50c0427a3c898e5d71315b81f7..b33bec994c6d6fdf4fcc43d581e798b68f16b586 100644 --- a/lib/workers/repository/package-files.ts +++ b/lib/workers/repository/package-files.ts @@ -1,7 +1,6 @@ import is from '@sindresorhus/is'; import { logger } from '../../logger'; import type { PackageFile } from '../../modules/manager/types'; -import { clone } from '../../util/clone'; export class PackageFiles { private static data = new Map<string, Record<string, PackageFile[]> | null>(); @@ -45,7 +44,7 @@ export class PackageFiles { let removed = false; let truncated = false; - const data = new Map(clone(Array.from(this.data))); + const data = new Map(structuredClone(Array.from(this.data))); // filter all deps with skip reason for (const managers of [...data.values()].filter(is.truthy)) { diff --git a/lib/workers/repository/process/fetch.ts b/lib/workers/repository/process/fetch.ts index 92ae3315d113fce9dc8df9ac90d62ae9a6163fcb..9f9c2ec29d1623fa867ae6c29c6e599d0bc7325c 100644 --- a/lib/workers/repository/process/fetch.ts +++ b/lib/workers/repository/process/fetch.ts @@ -14,7 +14,6 @@ import type { import { ExternalHostError } from '../../../types/errors/external-host-error'; import * as memCache from '../../../util/cache/memory'; import type { LookupStats } from '../../../util/cache/memory/types'; -import { clone } from '../../../util/clone'; import { applyPackageRules } from '../../../util/package-rules'; import * as p from '../../../util/promises'; import { PackageFiles } from '../package-files'; @@ -38,7 +37,7 @@ async function fetchDepUpdates( packageFileConfig: RenovateConfig & PackageFile, indep: PackageDependency ): Promise<PackageDependency> { - const dep = clone(indep); + const dep = structuredClone(indep); dep.updates = []; if (is.string(dep.depName)) { dep.depName = dep.depName.trim(); diff --git a/lib/workers/repository/process/index.ts b/lib/workers/repository/process/index.ts index 62596fd29d9a4bcdbda0139c67010a744a496651..0593f539bc42bb5a6c684af3eec14737e4514221 100644 --- a/lib/workers/repository/process/index.ts +++ b/lib/workers/repository/process/index.ts @@ -8,7 +8,6 @@ import type { PackageFile } from '../../../modules/manager/types'; import { platform } from '../../../modules/platform'; import { scm } from '../../../modules/platform/scm'; import { getCache } from '../../../util/cache/repository'; -import { clone } from '../../../util/clone'; import { getBranchList } from '../../../util/git'; import { configRegexPredicate } from '../../../util/regex'; import { addSplit } from '../../../util/split'; @@ -23,7 +22,7 @@ async function getBaseBranchConfig( ): Promise<RenovateConfig> { logger.debug(`baseBranch: ${baseBranch}`); - let baseBranchConfig: RenovateConfig = clone(config); + let baseBranchConfig: RenovateConfig = structuredClone(config); if ( config.useBaseBranchConfig === 'merge' && diff --git a/lib/workers/repository/process/lookup/filter-checks.spec.ts b/lib/workers/repository/process/lookup/filter-checks.spec.ts index 8c210db87d65262dcad06b162f18ec5620738678..9e950ed7073d491b7d462f4ed16be7f8b2cf5413 100644 --- a/lib/workers/repository/process/lookup/filter-checks.spec.ts +++ b/lib/workers/repository/process/lookup/filter-checks.spec.ts @@ -1,7 +1,6 @@ import { getConfig, mocked } from '../../../../../test/util'; import type { Release } from '../../../../modules/datasource'; import * as allVersioning from '../../../../modules/versioning'; -import { clone } from '../../../../util/clone'; import * as _dateUtil from '../../../../util/date'; import * as _mergeConfidence from '../../../../util/merge-confidence'; import { toMs } from '../../../../util/pretty-time'; @@ -43,7 +42,7 @@ describe('workers/repository/process/lookup/filter-checks', () => { beforeEach(() => { config = getConfig(); config.currentVersion = '1.0.0'; - sortedReleases = clone(releases); + sortedReleases = structuredClone(releases); jest.resetAllMocks(); dateUtil.getElapsedMs.mockReturnValueOnce(toMs('3 days') ?? 0); dateUtil.getElapsedMs.mockReturnValueOnce(toMs('5 days') ?? 0); diff --git a/lib/workers/repository/process/lookup/index.ts b/lib/workers/repository/process/lookup/index.ts index 1434370d15f64da3b473da0255291b0ce47273a0..0b087ede0e94109307e7550951d693878ccd9036 100644 --- a/lib/workers/repository/process/lookup/index.ts +++ b/lib/workers/repository/process/lookup/index.ts @@ -16,7 +16,6 @@ import { import { getRangeStrategy } from '../../../../modules/manager'; import * as allVersioning from '../../../../modules/versioning'; import { ExternalHostError } from '../../../../types/errors/external-host-error'; -import { clone } from '../../../../util/clone'; import { applyPackageRules } from '../../../../util/package-rules'; import { regEx } from '../../../../util/regex'; import { getBucket } from './bucket'; @@ -81,7 +80,7 @@ export async function lookupUpdates( return res; } - dependency = clone(await getPkgReleases(config)); + dependency = structuredClone(await getPkgReleases(config)); if (!dependency) { // If dependency lookup fails then warn and return const warning: ValidationMessage = { diff --git a/lib/workers/repository/update/pr/changelog/release-notes.spec.ts b/lib/workers/repository/update/pr/changelog/release-notes.spec.ts index ae031163b8f29ca108ca017f62949230b4ab783d..978bef659f4a447f4d8c0ce4147a8e3ae05f12c2 100644 --- a/lib/workers/repository/update/pr/changelog/release-notes.spec.ts +++ b/lib/workers/repository/update/pr/changelog/release-notes.spec.ts @@ -2,7 +2,6 @@ import { DateTime } from 'luxon'; import { Fixtures } from '../../../../../../test/fixtures'; import * as httpMock from '../../../../../../test/http-mock'; import { mocked, partial } from '../../../../../../test/util'; -import { clone } from '../../../../../util/clone'; import * as githubGraphql from '../../../../../util/github/graphql'; import * as _hostRules from '../../../../../util/host-rules'; import { toBase64 } from '../../../../../util/string'; @@ -1136,7 +1135,7 @@ describe('workers/repository/update/pr/changelog/release-notes', () => { it('handles github sourceDirectory', async () => { const sourceDirectory = 'packages/foo'; - const subdirTree = clone(githubTreeResponse); + const subdirTree = structuredClone(githubTreeResponse); for (const file of subdirTree.tree) { file.path = `${sourceDirectory}/${file.path}`; } @@ -1307,7 +1306,7 @@ describe('workers/repository/update/pr/changelog/release-notes', () => { it('handles gitlab sourceDirectory', async () => { const sourceDirectory = 'packages/foo'; - const response = clone(gitlabTreeResponse).map((file) => ({ + const response = structuredClone(gitlabTreeResponse).map((file) => ({ ...file, path: `${sourceDirectory}/${file.path}`, }));