From 0587948d189f6180ff6b39ddc54d2dfa31a4e4fc Mon Sep 17 00:00:00 2001 From: Pascal Jufer Date: Sun, 10 Dec 2023 14:45:51 +0100 Subject: [PATCH] Replace `got` in update-check to prevent CLI crash (#20693) --- .changeset/brave-suns-hang.md | 5 + packages/update-check/package.json | 5 +- packages/update-check/src/cache.ts | 66 ++--- packages/update-check/src/index.test.ts | 40 +-- packages/update-check/src/index.ts | 28 +- pnpm-lock.yaml | 361 ++++++++++++++++-------- 6 files changed, 309 insertions(+), 196 deletions(-) create mode 100644 .changeset/brave-suns-hang.md diff --git a/.changeset/brave-suns-hang.md b/.changeset/brave-suns-hang.md new file mode 100644 index 0000000000..0dbb31c3fb --- /dev/null +++ b/.changeset/brave-suns-hang.md @@ -0,0 +1,5 @@ +--- +'@directus/update-check': patch +--- + +Fixed an issue in update-check which could lead to a CLI crash when called again after a few minutes diff --git a/packages/update-check/package.json b/packages/update-check/package.json index f4c5008ec4..84f8d0b289 100644 --- a/packages/update-check/package.json +++ b/packages/update-check/package.json @@ -26,11 +26,11 @@ "test": "vitest --watch=false" }, "dependencies": { + "axios": "1.6.2", + "axios-cache-interceptor": "1.3.2", "boxen": "7.1.1", "chalk": "5.3.0", - "filenamify": "6.0.0", "find-cache-dir": "5.0.0", - "got": "13.0.0", "semver": "7.5.4" }, "devDependencies": { @@ -39,7 +39,6 @@ "@types/node": "18.16.12", "@types/semver": "7.5.1", "@vitest/coverage-v8": "0.34.6", - "keyv": "4.5.2", "strip-ansi": "7.1.0", "tsup": "8.0.1", "typescript": "5.3.2", diff --git a/packages/update-check/src/cache.ts b/packages/update-check/src/cache.ts index 71485fa779..f140e32a8c 100644 --- a/packages/update-check/src/cache.ts +++ b/packages/update-check/src/cache.ts @@ -1,6 +1,5 @@ -import filenamify from 'filenamify'; +import { buildStorage } from 'axios-cache-interceptor'; import findCacheDirectory from 'find-cache-dir'; -import type { Store } from 'keyv'; import fs from 'node:fs/promises'; import path from 'node:path'; @@ -15,41 +14,30 @@ export async function getCache() { return; } - return new Cache(dir); -} - -class Cache implements Store { - constructor(private dir: string) {} - - async get(key: string) { - try { - const file = path.join(this.dir, filenamify(key)); - - return await fs.readFile(file, { encoding: 'utf8' }); - } catch { - return undefined; - } - } - - async set(key: string, value: string) { - const file = path.join(this.dir, filenamify(key)); - - return fs.writeFile(file, value, { encoding: 'utf8' }).catch(); - } - - async delete(key: string) { - try { - const file = path.join(this.dir, filenamify(key)); - - await fs.unlink(file); - - return true; - } catch { - return false; - } - } - - async clear() { - // Not required - } + return buildStorage({ + async set(key, value) { + const file = path.join(dir, key); + const content = JSON.stringify(value); + + return fs.writeFile(file, content).catch(() => {}); + }, + + async remove(key) { + const file = path.join(dir, key); + + return fs.unlink(file).catch(() => {}); + }, + + async find(key) { + try { + const file = path.join(dir, key); + const content = await fs.readFile(file, { encoding: 'utf8' }); + const value = JSON.parse(content); + + return value; + } catch { + return undefined; + } + }, + }); } diff --git a/packages/update-check/src/index.test.ts b/packages/update-check/src/index.test.ts index 8dbf5989be..1179331146 100644 --- a/packages/update-check/src/index.test.ts +++ b/packages/update-check/src/index.test.ts @@ -1,27 +1,33 @@ +import stripAnsi from 'strip-ansi'; import { expect, test, vi } from 'vitest'; import { updateCheck } from './index.js'; -import stripAnsi from 'strip-ansi'; -vi.mock('got', () => { - const manifest = { - 'dist-tags': { latest: '10.6.1' }, - versions: { - '10.4.3': {}, - '10.5.0': {}, - '10.5.1': {}, - '10.5.2': {}, - '10.5.3': {}, - '10.6.0': {}, - '10.6.1': {}, - '10.7.0-beta.0': {}, +vi.mock('./cache.js'); + +vi.mock('axios-cache-interceptor', () => ({ + setupCache: () => ({ + async get() { + return { data: manifest }; }, - }; + }), +})); - return { default: () => ({ json: () => manifest }) }; -}); +const manifest = { + 'dist-tags': { latest: '10.6.1' }, + versions: { + '10.4.3': {}, + '10.5.0': {}, + '10.5.1': {}, + '10.5.2': {}, + '10.5.3': {}, + '10.6.0': {}, + '10.6.1': {}, + '10.7.0-beta.0': {}, + }, +}; test('#updateCheck', async () => { - const consoleMock = vi.spyOn(console, 'warn').mockImplementation(() => undefined); + const consoleMock = vi.spyOn(console, 'warn').mockImplementation(() => {}); const currentVersion = '10.5.0'; await updateCheck(currentVersion); diff --git a/packages/update-check/src/index.ts b/packages/update-check/src/index.ts index 3bf7d9884e..6d205c0b00 100644 --- a/packages/update-check/src/index.ts +++ b/packages/update-check/src/index.ts @@ -1,34 +1,30 @@ import type { Manifest } from '@npm/types'; +import Axios from 'axios'; +import { setupCache } from 'axios-cache-interceptor'; import boxen, { type Options as BoxenOptions } from 'boxen'; import chalk from 'chalk'; -import got from 'got'; import { gte, prerelease } from 'semver'; import { getCache } from './cache.js'; const cache = await getCache(); +const instance = Axios.create(); +// @ts-ignore TODO Remove once type is fixed in axios-cache-interceptor +const axios = setupCache(instance, { storage: cache }); export async function updateCheck(currentVersion: string) { - let packageManifest: Manifest | undefined; + let response; try { - packageManifest = await got('https://registry.npmjs.org/directus', { + response = await axios.get('https://registry.npmjs.org/directus', { headers: { accept: 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*' }, - cache, - retry: { - limit: 0, - }, - timeout: { - request: 8_000, - }, - }).json(); - } catch (error) { - // Any errors are intentionally ignored & update message simply not printed + timeout: 8_000, + }); + } catch { + // Errors are intentionally ignored and update check is skipped return; } - if (!packageManifest) { - return; - } + const packageManifest = response.data; const latestVersion = packageManifest['dist-tags']['latest']; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b60ce33e11..6790c45060 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1827,21 +1827,21 @@ importers: packages/update-check: dependencies: + axios: + specifier: 1.6.2 + version: 1.6.2 + axios-cache-interceptor: + specifier: 1.3.2 + version: 1.3.2(axios@1.6.2) boxen: specifier: 7.1.1 version: 7.1.1 chalk: specifier: 5.3.0 version: 5.3.0 - filenamify: - specifier: 6.0.0 - version: 6.0.0 find-cache-dir: specifier: 5.0.0 version: 5.0.0 - got: - specifier: 13.0.0 - version: 13.0.0 semver: specifier: 7.5.4 version: 7.5.4 @@ -1861,9 +1861,6 @@ importers: '@vitest/coverage-v8': specifier: 0.34.6 version: 0.34.6(vitest@0.34.6) - keyv: - specifier: 4.5.2 - version: 4.5.2 strip-ansi: specifier: 7.1.0 version: 7.1.0 @@ -1875,7 +1872,7 @@ importers: version: 5.3.2 vitest: specifier: 0.34.6 - version: 0.34.6(happy-dom@12.10.3)(sass@1.62.1) + version: 0.34.6 packages/utils: dependencies: @@ -6675,11 +6672,6 @@ packages: engines: {node: '>=10'} dev: true - /@sindresorhus/is@5.6.0: - resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} - engines: {node: '>=14.16'} - dev: false - /@sindresorhus/slugify@2.2.1: resolution: {integrity: sha512-MkngSCRZ8JdSOCHRaYd+D01XhvU3Hjy6MGl06zhOk614hp9EOAp5gIkBeQg7wtmxpitU6eAL4kdiRMcJa2dlrw==} engines: {node: '>=12'} @@ -6714,13 +6706,6 @@ packages: defer-to-connect: 2.0.1 dev: true - /@szmarczak/http-timer@5.0.1: - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} - dependencies: - defer-to-connect: 2.0.1 - dev: false - /@tinymce/tinymce-vue@5.1.0(vue@3.3.9): resolution: {integrity: sha512-Z4R8zaOKrAXBhHWsq+qUlwHY+rvze2RgxHDrZ5+qTYkGvRofW5880HLG9gvv6TRPVsNSQBNMdsaOjJ/eueccgA==} peerDependencies: @@ -6979,6 +6964,7 @@ packages: /@types/http-cache-semantics@4.0.3: resolution: {integrity: sha512-V46MYLFp08Wf2mmaBhvgjStM3tPa+2GAdy/iqoX+noX1//zje2x4XmrIU0cAwyClATsTmahbtoQ2EwP7I5WSiA==} + dev: true /@types/http-errors@2.0.3: resolution: {integrity: sha512-pP0P/9BnCj1OVvQR2lF41EkDG/lWWnDyA203b/4Fmi2eTyORnBtcDoKDwjWQthELrBvWkMOrvSOnZ8OVlW6tXA==} @@ -7559,7 +7545,7 @@ packages: vite: ^4.0.0 || ^5.0.0 vue: ^3.2.25 dependencies: - vite: 4.5.0(@types/node@18.16.12)(sass@1.62.1) + vite: 4.5.0 vue: 3.3.8(typescript@5.3.2) dev: true @@ -7579,7 +7565,7 @@ packages: std-env: 3.4.3 test-exclude: 6.0.0 v8-to-istanbul: 9.1.3 - vitest: 0.34.6(happy-dom@12.10.3)(sass@1.62.1) + vitest: 0.34.6 transitivePeerDependencies: - supports-color dev: true @@ -8096,6 +8082,11 @@ packages: engines: {node: '>=0.4.0'} dev: true + /acorn-walk@8.3.1: + resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} + engines: {node: '>=0.4.0'} + dev: true + /acorn@8.10.0: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} @@ -8526,6 +8517,18 @@ packages: dev: false optional: true + /axios-cache-interceptor@1.3.2(axios@1.6.2): + resolution: {integrity: sha512-FNy4/IKvFYVswpPS09j3H9OUzcXSuxQ93wYxCKnogHbjCRE9nDQ/lukgjyuJqMIk3Yao51qQI/zPbMRNQu4JJw==} + engines: {node: '>=12'} + peerDependencies: + axios: ^1 + dependencies: + axios: 1.6.2 + cache-parser: 1.2.4 + fast-defer: 1.1.8 + object-code: 1.3.0 + dev: false + /axios@1.4.0: resolution: {integrity: sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==} dependencies: @@ -8545,6 +8548,16 @@ packages: transitivePeerDependencies: - debug + /axios@1.6.2: + resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} + dependencies: + follow-redirects: 1.15.3 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + /b4a@1.6.4: resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} dev: false @@ -8850,29 +8863,15 @@ packages: - bluebird optional: true + /cache-parser@1.2.4: + resolution: {integrity: sha512-O0KwuHuJnbHUrghHi2kGp0SxnWSIBXTYt7M8WVhW0kbPRUNUKoE/Of6e1rRD6AAxmfxFunKnt90yEK09D+sc5g==} + dev: false + /cacheable-lookup@5.0.4: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} engines: {node: '>=10.6.0'} dev: true - /cacheable-lookup@7.0.0: - resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} - engines: {node: '>=14.16'} - dev: false - - /cacheable-request@10.2.14: - resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} - engines: {node: '>=14.16'} - dependencies: - '@types/http-cache-semantics': 4.0.3 - get-stream: 6.0.1 - http-cache-semantics: 4.1.1 - keyv: 4.5.4 - mimic-response: 4.0.0 - normalize-url: 8.0.0 - responselike: 3.0.0 - dev: false - /cacheable-request@7.0.4: resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} engines: {node: '>=8'} @@ -10009,6 +10008,7 @@ packages: /defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} + dev: true /define-data-property@1.1.1: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} @@ -10976,6 +10976,10 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} requiresBuild: true + /fast-defer@1.1.8: + resolution: {integrity: sha512-lEJeOH5VL5R09j6AA0D4Uvq7AgsHw0dAImQQ+F3iSyHZuAxyQfWobsagGpTcOPvJr3urmKRHrs+Gs9hV+/Qm/Q==} + dev: false + /fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} dev: true @@ -11068,18 +11072,6 @@ packages: resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} dev: true - /filename-reserved-regex@3.0.0: - resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false - - /filenamify@6.0.0: - resolution: {integrity: sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ==} - engines: {node: '>=16'} - dependencies: - filename-reserved-regex: 3.0.0 - dev: false - /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -11239,11 +11231,6 @@ packages: dev: false optional: true - /form-data-encoder@2.1.4: - resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} - engines: {node: '>= 14.17'} - dev: false - /form-data@2.3.3: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} engines: {node: '>= 0.12'} @@ -11706,23 +11693,6 @@ packages: responselike: 2.0.1 dev: true - /got@13.0.0: - resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} - engines: {node: '>=16'} - dependencies: - '@sindresorhus/is': 5.6.0 - '@szmarczak/http-timer': 5.0.1 - cacheable-lookup: 7.0.0 - cacheable-request: 10.2.14 - decompress-response: 6.0.0 - form-data-encoder: 2.1.4 - get-stream: 6.0.1 - http2-wrapper: 2.2.0 - lowercase-keys: 3.0.0 - p-cancelable: 3.0.0 - responselike: 3.0.0 - dev: false - /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} @@ -12123,14 +12093,6 @@ packages: resolve-alpn: 1.2.1 dev: true - /http2-wrapper@2.2.0: - resolution: {integrity: sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==} - engines: {node: '>=10.19.0'} - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - dev: false - /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -13084,6 +13046,7 @@ packages: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 + dev: true /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} @@ -13464,11 +13427,6 @@ packages: engines: {node: '>=8'} dev: true - /lowercase-keys@3.0.0: - resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false - /lru-cache@10.0.1: resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} engines: {node: 14 || >=16.14} @@ -14120,11 +14078,6 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} - /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} - dev: false - /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -14346,6 +14299,12 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + /nanoid@4.0.2: resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} engines: {node: ^14 || ^16 || >=18} @@ -14699,11 +14658,6 @@ packages: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} - /normalize-url@8.0.0: - resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} - engines: {node: '>=14.16'} - dev: false - /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -14772,6 +14726,10 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + /object-code@1.3.0: + resolution: {integrity: sha512-PLplgvzuFhSPBuTX/mtaXEnU3c6g7qKflVVQbV9VWEnV/34iKeAX1jeDNCKq1OgGlsnkA/NjldCzTbHxa7Wj4A==} + dev: false + /object-hash@2.2.0: resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} engines: {node: '>= 6'} @@ -15007,11 +14965,6 @@ packages: engines: {node: '>=8'} dev: true - /p-cancelable@3.0.0: - resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} - engines: {node: '>=12.20'} - dev: false - /p-defer@1.0.0: resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} engines: {node: '>=4'} @@ -15977,6 +15930,15 @@ packages: picocolors: 1.0.0 source-map-js: 1.0.2 + /postcss@8.4.32: + resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + /postgres-array@2.0.0: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} @@ -16254,6 +16216,7 @@ packages: /quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} + dev: true /quickselect@2.0.0: resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} @@ -16615,6 +16578,7 @@ packages: /resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + dev: true /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} @@ -16664,13 +16628,6 @@ packages: lowercase-keys: 2.0.0 dev: true - /responselike@3.0.0: - resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} - engines: {node: '>=14.16'} - dependencies: - lowercase-keys: 3.0.0 - dev: false - /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} @@ -17631,6 +17588,10 @@ packages: resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==} dev: true + /std-env@3.6.0: + resolution: {integrity: sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==} + dev: true + /stdin-discarder@0.1.0: resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -19168,7 +19129,29 @@ packages: picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 4.5.0(@types/node@18.16.12)(sass@1.62.1) + vite: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite-node@0.34.6(@types/node@18.16.12): + resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} + engines: {node: '>=v14.18.0'} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + mlly: 1.4.2 + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 4.4.11(@types/node@18.16.12) transitivePeerDependencies: - '@types/node' - less @@ -19190,7 +19173,7 @@ packages: mlly: 1.4.2 pathe: 1.1.1 picocolors: 1.0.0 - vite: 4.5.0(@types/node@18.16.12)(sass@1.62.1) + vite: 4.4.11(@types/node@18.16.12)(sass@1.62.1) transitivePeerDependencies: - '@types/node' - less @@ -19332,8 +19315,8 @@ packages: fsevents: 2.3.3 dev: true - /vite@4.5.0(@types/node@18.16.12)(sass@1.62.1): - resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} + /vite@4.4.11(@types/node@18.16.12): + resolution: {integrity: sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -19362,13 +19345,84 @@ packages: dependencies: '@types/node': 18.16.12 esbuild: 0.18.20 - postcss: 8.4.31 + postcss: 8.4.32 + rollup: 3.29.4 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vite@4.4.11(@types/node@18.16.12)(sass@1.62.1): + resolution: {integrity: sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 18.16.12 + esbuild: 0.18.20 + postcss: 8.4.32 rollup: 3.29.4 sass: 1.62.1 optionalDependencies: fsevents: 2.3.3 dev: true + /vite@4.5.0: + resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.18.20 + postcss: 8.4.31 + rollup: 3.29.4 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /vitepress-plugin-tabs@0.3.0(vitepress@1.0.0-rc.4)(vue@3.3.8): resolution: {integrity: sha512-3dKsBuP6PDzcFHgUtNCwwCs3bYoZduj7AcQkT9JfAKTRAKPCNmjiNInPT3IZ7AihL0SJNoQ3liz/e97z8oo+XA==} peerDependencies: @@ -19394,7 +19448,7 @@ packages: mark.js: 8.11.1 minisearch: 6.1.0 shiki: 0.14.5 - vite: 4.5.0(@types/node@18.16.12)(sass@1.62.1) + vite: 4.5.0 vue: 3.3.8(typescript@5.3.2) transitivePeerDependencies: - '@algolia/client-search' @@ -19424,6 +19478,71 @@ packages: - universal-cookie dev: true + /vitest@0.34.6: + resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + dependencies: + '@types/chai': 4.3.9 + '@types/chai-subset': 1.3.4 + '@types/node': 18.16.12 + '@vitest/expect': 0.34.6 + '@vitest/runner': 0.34.6 + '@vitest/snapshot': 0.34.6 + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 + acorn: 8.11.2 + acorn-walk: 8.3.1 + cac: 6.7.14 + chai: 4.3.10 + debug: 4.3.4 + local-pkg: 0.4.3 + magic-string: 0.30.5 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.6.0 + strip-literal: 1.3.0 + tinybench: 2.5.1 + tinypool: 0.7.0 + vite: 4.4.11(@types/node@18.16.12) + vite-node: 0.34.6(@types/node@18.16.12) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /vitest@0.34.6(happy-dom@12.10.3)(sass@1.62.1): resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} engines: {node: '>=v14.18.0'} @@ -19463,8 +19582,8 @@ packages: '@vitest/snapshot': 0.34.6 '@vitest/spy': 0.34.6 '@vitest/utils': 0.34.6 - acorn: 8.10.0 - acorn-walk: 8.2.0 + acorn: 8.11.2 + acorn-walk: 8.3.1 cac: 6.7.14 chai: 4.3.10 debug: 4.3.4 @@ -19473,11 +19592,11 @@ packages: magic-string: 0.30.5 pathe: 1.1.1 picocolors: 1.0.0 - std-env: 3.4.3 + std-env: 3.6.0 strip-literal: 1.3.0 tinybench: 2.5.1 tinypool: 0.7.0 - vite: 4.5.0(@types/node@18.16.12)(sass@1.62.1) + vite: 4.4.11(@types/node@18.16.12)(sass@1.62.1) vite-node: 0.34.6(@types/node@18.16.12)(sass@1.62.1) why-is-node-running: 2.2.2 transitivePeerDependencies: