diff --git a/packages/osv-offline-updater/package.json b/packages/osv-offline-updater/package.json index 0580ce28..cdc738a5 100644 --- a/packages/osv-offline-updater/package.json +++ b/packages/osv-offline-updater/package.json @@ -17,7 +17,6 @@ "@octokit/rest": "22.0.1", "adm-zip": "0.5.17", "fs-extra": "11.3.5", - "got": "15.0.5", "luxon": "3.7.2", "signale": "1.4.0" }, diff --git a/packages/osv-offline-updater/src/client/osv.ts b/packages/osv-offline-updater/src/client/osv.ts index 298920e6..cae47c39 100644 --- a/packages/osv-offline-updater/src/client/osv.ts +++ b/packages/osv-offline-updater/src/client/osv.ts @@ -1,19 +1,26 @@ import { format } from 'util'; import AdmZip from 'adm-zip'; -import got from 'got'; import type { Ecosystem, Osv } from '@renovatebot/osv-offline-db'; +export type Fetcher = typeof globalThis.fetch; + export class OsvDownloader { private static readonly downloadUrlFormat = 'https://osv-vulnerabilities.storage.googleapis.com/%s/all.zip'; - constructor(private readonly ecosystem: Ecosystem) {} + constructor( + private readonly ecosystem: Ecosystem, + private readonly fetcher: Fetcher = globalThis.fetch + ) {} public async download(): Promise { const downloadUrl = format(OsvDownloader.downloadUrlFormat, this.ecosystem); - const response = await got.get(downloadUrl, { responseType: 'buffer' }); - return new AdmZip(Buffer.from(response.body)) + const response = await this.fetcher(downloadUrl); + if (!response.ok) { + throw new Error(`Download failed with status ${response.status}`); + } + return new AdmZip(Buffer.from(await response.arrayBuffer())) .getEntries() .map( (entry) => JSON.parse(entry.getData().toString()) as Osv.Vulnerability diff --git a/packages/osv-offline/package.json b/packages/osv-offline/package.json index df90fba0..908d7f85 100644 --- a/packages/osv-offline/package.json +++ b/packages/osv-offline/package.json @@ -16,7 +16,6 @@ "adm-zip": "~0.5.17", "debug": "^4.4.3", "fs-extra": "^11.3.5", - "got": "^15.0.5", "luxon": "^3.7.2" }, "devDependencies": { diff --git a/packages/osv-offline/src/lib/download.ts b/packages/osv-offline/src/lib/download.ts index 0e0921c8..2b98075c 100644 --- a/packages/osv-offline/src/lib/download.ts +++ b/packages/osv-offline/src/lib/download.ts @@ -1,5 +1,4 @@ import fs from 'fs-extra'; -import got from 'got'; import { pipeline } from 'node:stream/promises'; import { OsvOfflineDb } from '@renovatebot/osv-offline-db'; import path from 'path'; @@ -8,9 +7,13 @@ import AdmZip from 'adm-zip'; import { Result, failure, success } from './types.ts'; import debug from 'debug'; +export type Fetcher = typeof globalThis.fetch; + const logger = debug('osv-offline:download'); -export async function tryDownloadDb(): Promise { +export async function tryDownloadDb( + fetcher: Fetcher = globalThis.fetch +): Promise { await fs.ensureDir(OsvOfflineDb.rootDirectory); if (process.env.OSV_OFFLINE_DISABLE_DOWNLOAD?.toLowerCase() === 'true') { @@ -41,10 +44,14 @@ export async function tryDownloadDb(): Promise { const databaseUrl = process.env.OSV_OFFLINE_DATABASE_URL ?? 'https://github.com/renovatebot/osv-offline/releases/latest/download/osv-offline.zip'; - const stream = got.stream(databaseUrl); + const response = await fetcher(databaseUrl); + if (!response.ok || !response.body) { + return failure( + new Error(`Download failed with status ${response.status}`) + ); + } const zipPath = path.join(OsvOfflineDb.rootDirectory, 'osv-offline.zip'); - const writeStream = fs.createWriteStream(zipPath); - await pipeline(stream, writeStream); + await pipeline(response.body, fs.createWriteStream(zipPath)); logger('Downloading databases done.'); logger('Extracting databases ...'); const zip = new AdmZip(zipPath); diff --git a/packages/osv-offline/src/lib/download.unit.spec.ts b/packages/osv-offline/src/lib/download.unit.spec.ts index 9e055291..76862d04 100644 --- a/packages/osv-offline/src/lib/download.unit.spec.ts +++ b/packages/osv-offline/src/lib/download.unit.spec.ts @@ -4,16 +4,6 @@ import path from 'path'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { tryDownloadDb } from './download.ts'; -const mockStream = vi.hoisted(() => vi.fn()); - -vi.mock('got', () => { - const mockGot = { stream: mockStream }; - return { - default: mockGot, - got: mockGot, - }; -}); - describe('packages/osv-offline/src/lib/download.unit', () => { describe('tryDownloadDb', () => { beforeEach(async () => { @@ -24,18 +14,17 @@ describe('packages/osv-offline/src/lib/download.unit', () => { 'osv-offline.zip' ); await fs.rm(zipFilePath, { force: true }); - vi.clearAllMocks(); }); it('uses default URL when OSV_OFFLINE_DATABASE_URL is not set', async () => { - mockStream.mockImplementationOnce(() => { - throw new Error('intentional stream error'); - }); + const fetcher = vi + .fn() + .mockResolvedValue(new Response(null, { status: 500 })); - const result = await tryDownloadDb(); + const result = await tryDownloadDb(fetcher); expect(result.success).toBe(false); - expect(mockStream).toHaveBeenCalledWith( + expect(fetcher).toHaveBeenCalledWith( 'https://github.com/renovatebot/osv-offline/releases/latest/download/osv-offline.zip' ); }); @@ -43,15 +32,25 @@ describe('packages/osv-offline/src/lib/download.unit', () => { it('uses OSV_OFFLINE_DATABASE_URL when set', async () => { const customUrl = 'https://example.com/custom-db.zip'; process.env.OSV_OFFLINE_DATABASE_URL = customUrl; + const fetcher = vi + .fn() + .mockResolvedValue(new Response(null, { status: 500 })); - mockStream.mockImplementationOnce(() => { - throw new Error('intentional stream error'); - }); + const result = await tryDownloadDb(fetcher); - const result = await tryDownloadDb(); + expect(result.success).toBe(false); + expect(fetcher).toHaveBeenCalledWith(customUrl); + }); + + it('returns failure when response has no body', async () => { + const fetcher = vi.fn().mockResolvedValue({ + ok: true, + body: null, + status: 200, + }); + const result = await tryDownloadDb(fetcher); expect(result.success).toBe(false); - expect(mockStream).toHaveBeenCalledWith(customUrl); }); }); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a6e70759..d12f7968 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,9 +99,6 @@ importers: fs-extra: specifier: ^11.3.5 version: 11.3.5 - got: - specifier: ^15.0.5 - version: 15.0.5 luxon: specifier: ^3.7.2 version: 3.7.2 @@ -161,9 +158,6 @@ importers: fs-extra: specifier: 11.3.5 version: 11.3.5 - got: - specifier: 15.0.5 - version: 15.0.5 luxon: specifier: 3.7.2 version: 3.7.2 @@ -487,9 +481,6 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@keyv/serialize@1.1.1': - resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==} - '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} @@ -718,10 +709,6 @@ packages: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - '@sindresorhus/is@8.0.0': - resolution: {integrity: sha512-YvOsokBE5NsyHuXMnwEVB7lgFk6lX8F4OXCruYVgFII0hUHof0RGUvhMoabVt9hRqbg+qVzayzEG24RCcxcYeA==} - engines: {node: '>=22'} - '@sindresorhus/merge-streams@4.0.0': resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} @@ -771,9 +758,6 @@ packages: '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} - '@types/http-cache-semantics@4.2.0': - resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} - '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -1104,18 +1088,6 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - byte-counter@0.1.0: - resolution: {integrity: sha512-jheRLVMeUKrDBjVw2O5+k4EvR4t9wtxHL+bo/LxfkxsVeuGMy3a5SEGgXdAFA4FSzTrU8rQXQIrsZ3oBq5a0pQ==} - engines: {node: '>=20'} - - cacheable-lookup@7.0.0: - resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} - engines: {node: '>=14.16'} - - cacheable-request@13.0.18: - resolution: {integrity: sha512-rFWadDRKJs3s2eYdXlGggnBZKG7MTblkFBB0YllFds+UYnfogDp2wcR6JN97FhRkHTvq59n2vhNoHNZn29dh/Q==} - engines: {node: '>=18'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1140,10 +1112,6 @@ packages: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} - chunk-data@0.1.0: - resolution: {integrity: sha512-zFyPtyC0SZ6Zu79b9sOYtXZcgrsXe0RpePrzRyj52hYVFG1+Rk6rBqjjOEk+GNQwc3PIX+86teQMok970pod1g==} - engines: {node: '>=20'} - clean-stack@5.3.0: resolution: {integrity: sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==} engines: {node: '>=14.16'} @@ -1256,10 +1224,6 @@ packages: supports-color: optional: true - decompress-response@10.0.0: - resolution: {integrity: sha512-oj7KWToJuuxlPr7VV0vabvxEIiqNMo+q0NueIiL3XhtwC6FVOX7Hr1c0C4eD0bmf7Zr+S/dSf2xvkH3Ad6sU3Q==} - engines: {node: '>=20'} - deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -1566,10 +1530,6 @@ packages: resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==} engines: {node: '>=18'} - got@15.0.5: - resolution: {integrity: sha512-PMIMaZuYUCK43+Z9JWEXea4kkX2b3301m81D5TS6QpfG4PmNyirzEdO/Oa2OHAN4GsjnPfvWCWsshKN2rq4/gQ==} - engines: {node: '>=22'} - graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} @@ -1607,17 +1567,10 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - http-cache-semantics@4.2.0: - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} - http2-wrapper@2.2.1: - resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} - engines: {node: '>=10.19.0'} - https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -1790,9 +1743,6 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - keyv@5.6.0: - resolution: {integrity: sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==} - levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -1917,14 +1867,6 @@ packages: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} - lowercase-keys@3.0.0: - resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - lowercase-keys@4.0.1: - resolution: {integrity: sha512-wI9Nui/L8VfADa/cr/7NQruaASk1k23/Uh1khQ02BCVYiiy8F4AhOGnQzJy3Fl/c44GnYSbZHv8g7EcG3kJ1Qg==} - engines: {node: '>=20'} - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -1992,10 +1934,6 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - mimic-response@4.0.0: - resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -2040,10 +1978,6 @@ packages: resolution: {integrity: sha512-RWk+PI433eESQ7ounYxIp67CYuVsS1uYSonX3kA6ps/3LWfjVQa/ptEg6Y3T6uAMq1mWpX9PQ+qx+QaHpsc7gQ==} engines: {node: ^20.17.0 || >=22.9.0} - normalize-url@8.1.1: - resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} - engines: {node: '>=14.16'} - normalize-url@9.0.0: resolution: {integrity: sha512-z9nC87iaZXXySbWWtTHfCFJyFvKaUAW6lODhikG7ILSbVgmwuFjUqkgnheHvAUcGedO29e2QGBRXMUD64aurqQ==} engines: {node: '>=20'} @@ -2306,10 +2240,6 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -2345,9 +2275,6 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -2359,10 +2286,6 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - responselike@4.0.2: - resolution: {integrity: sha512-cGk8IbWEAnaCpdAt1BHzJ3Ahz5ewDJa0KseTsE3qIRMJ3C698W8psM7byCeWVpd/Ha7FUYzuRVzXoKoM6nRUbA==} - engines: {node: '>=20'} - restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -2646,10 +2569,6 @@ packages: engines: {node: '>=0.8.0'} hasBin: true - uint8array-extras@1.5.0: - resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} - engines: {node: '>=18'} - undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -3086,8 +3005,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@keyv/serialize@1.1.1': {} - '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.10.0 @@ -3325,8 +3242,6 @@ snapshots: '@sindresorhus/is@4.6.0': {} - '@sindresorhus/is@8.0.0': {} - '@sindresorhus/merge-streams@4.0.0': {} '@standard-schema/spec@1.1.0': {} @@ -3372,8 +3287,6 @@ snapshots: '@types/jsonfile': 6.1.4 '@types/node': 22.19.18 - '@types/http-cache-semantics@4.2.0': {} - '@types/json-schema@7.0.15': {} '@types/jsonfile@6.1.4': @@ -3687,20 +3600,6 @@ snapshots: dependencies: fill-range: 7.1.1 - byte-counter@0.1.0: {} - - cacheable-lookup@7.0.0: {} - - cacheable-request@13.0.18: - dependencies: - '@types/http-cache-semantics': 4.2.0 - get-stream: 9.0.1 - http-cache-semantics: 4.2.0 - keyv: 5.6.0 - mimic-response: 4.0.0 - normalize-url: 8.1.1 - responselike: 4.0.2 - callsites@3.1.0: {} chai@6.2.2: {} @@ -3720,8 +3619,6 @@ snapshots: char-regex@1.0.2: {} - chunk-data@0.1.0: {} - clean-stack@5.3.0: dependencies: escape-string-regexp: 5.0.0 @@ -3840,10 +3737,6 @@ snapshots: dependencies: ms: 2.1.3 - decompress-response@10.0.0: - dependencies: - mimic-response: 4.0.0 - deep-extend@0.6.0: {} deep-is@0.1.4: {} @@ -4184,21 +4077,6 @@ snapshots: globals@17.6.0: {} - got@15.0.5: - dependencies: - '@sindresorhus/is': 8.0.0 - byte-counter: 0.1.0 - cacheable-lookup: 7.0.0 - cacheable-request: 13.0.18 - chunk-data: 0.1.0 - decompress-response: 10.0.0 - http2-wrapper: 2.2.1 - keyv: 5.6.0 - lowercase-keys: 4.0.1 - responselike: 4.0.2 - type-fest: 5.6.0 - uint8array-extras: 1.5.0 - graceful-fs@4.2.10: {} graceful-fs@4.2.11: {} @@ -4230,8 +4108,6 @@ snapshots: html-escaper@2.0.2: {} - http-cache-semantics@4.2.0: {} - http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.4 @@ -4239,11 +4115,6 @@ snapshots: transitivePeerDependencies: - supports-color - http2-wrapper@2.2.1: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 @@ -4381,10 +4252,6 @@ snapshots: dependencies: json-buffer: 3.0.1 - keyv@5.6.0: - dependencies: - '@keyv/serialize': 1.1.1 - levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -4494,10 +4361,6 @@ snapshots: strip-ansi: 7.2.0 wrap-ansi: 9.0.2 - lowercase-keys@3.0.0: {} - - lowercase-keys@4.0.1: {} - lru-cache@10.4.3: {} lru-cache@11.3.5: {} @@ -4556,8 +4419,6 @@ snapshots: mimic-function@5.0.1: {} - mimic-response@4.0.0: {} - minimatch@10.2.5: dependencies: brace-expansion: 5.0.5 @@ -4601,8 +4462,6 @@ snapshots: semver: 7.7.4 validate-npm-package-license: 3.0.4 - normalize-url@8.1.1: {} - normalize-url@9.0.0: {} npm-normalize-package-bin@4.0.0: {} @@ -4765,8 +4624,6 @@ snapshots: punycode@2.3.1: {} - quick-lru@5.1.1: {} - rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -4823,18 +4680,12 @@ snapshots: require-directory@2.1.1: {} - resolve-alpn@1.2.1: {} - resolve-from@4.0.0: {} resolve-from@5.0.0: {} resolve-pkg-maps@1.0.0: {} - responselike@4.0.2: - dependencies: - lowercase-keys: 3.0.0 - restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -5139,8 +4990,6 @@ snapshots: uglify-js@3.19.3: optional: true - uint8array-extras@1.5.0: {} - undici-types@6.21.0: {} undici@6.25.0: {}