diff --git a/package.json b/package.json index 169ea3ccc3882..535481a577782 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,6 @@ "@types/common-tags": "^1.8.0", "@types/express": "^4.17.3", "@types/fs-extra": "^9.0.12", - "@types/got": "^9.6.11", "@types/jaeger-client": "^3.18.0", "@types/jest": "^24.9.1", "@types/joi": "^14.3.4", diff --git a/packages/gatsby-core-utils/package.json b/packages/gatsby-core-utils/package.json index b6645166c1d5e..f67e300b8eeac 100644 --- a/packages/gatsby-core-utils/package.json +++ b/packages/gatsby-core-utils/package.json @@ -34,6 +34,7 @@ "configstore": "^5.0.1", "file-type": "^16.5.3", "fs-extra": "^10.0.0", + "got": "^11.8.2", "node-object-hash": "^2.3.8", "proper-lockfile": "^4.1.2", "tmp": "^0.2.1", @@ -45,6 +46,7 @@ "@types/ci-info": "2.0.0", "babel-preset-gatsby-package": "^1.14.0-next.0", "cross-env": "^7.0.3", + "msw": "^0.35.0", "typescript": "^4.3.5" }, "engines": { diff --git a/packages/gatsby-core-utils/src/__tests__/create-remote-file-node-integration.js b/packages/gatsby-core-utils/src/__tests__/create-remote-file-node-integration.js index 70cb94d036268..27fe5d1d1441a 100644 --- a/packages/gatsby-core-utils/src/__tests__/create-remote-file-node-integration.js +++ b/packages/gatsby-core-utils/src/__tests__/create-remote-file-node-integration.js @@ -129,6 +129,8 @@ function createMockCache() { path.join(os.tmpdir(), `gatsby-source-filesystem-`) ) + fs.ensureDir(tmpDir) + return { get: jest.fn(), set: jest.fn(), diff --git a/packages/gatsby-core-utils/src/fetch-remote-file.ts b/packages/gatsby-core-utils/src/fetch-remote-file.ts index aba43adde7c98..e939f791ae0de 100644 --- a/packages/gatsby-core-utils/src/fetch-remote-file.ts +++ b/packages/gatsby-core-utils/src/fetch-remote-file.ts @@ -1,7 +1,6 @@ -import got from "got" +import got, { Headers, Options } from "got" import fileType from "file-type" import path from "path" -import { IncomingMessage, OutgoingHttpHeaders } from "http" import fs from "fs-extra" import { createContentDigest } from "./create-content-digest" import { @@ -10,7 +9,8 @@ import { createFilePath, } from "./filename-utils" -import { GatsbyCache } from "gatsby" +import type { IncomingMessage } from "http" +import type { GatsbyCache } from "gatsby" export interface IFetchRemoteFileOptions { url: string @@ -19,7 +19,7 @@ export interface IFetchRemoteFileOptions { htaccess_pass?: string htaccess_user?: string } - httpHeaders?: OutgoingHttpHeaders + httpHeaders?: Headers ext?: string name?: string } @@ -57,10 +57,10 @@ const INCOMPLETE_RETRY_LIMIT = process.env.GATSBY_INCOMPLETE_RETRY_LIMIT * @return {Promise} Resolves with the [http Result Object]{@link https://nodejs.org/api/http.html#http_class_http_serverresponse} */ const requestRemoteNode = ( - url: got.GotUrl, - headers: OutgoingHttpHeaders, + url: string | URL, + headers: Headers, tmpFilename: string, - httpOptions: got.GotOptions | undefined, + httpOptions?: Options, attempt: number = 1 ): Promise => new Promise((resolve, reject) => { @@ -71,12 +71,15 @@ const requestRemoteNode = ( const handleTimeout = async (): Promise => { fsWriteStream.close() fs.removeSync(tmpFilename) + if (attempt < STALL_RETRY_LIMIT) { // Retry by calling ourself recursively resolve( requestRemoteNode(url, headers, tmpFilename, httpOptions, attempt + 1) ) } else { + // TODO move to new Error type + // eslint-disable-next-line prefer-promise-reject-errors reject(`Failed to download ${url} after ${STALL_RETRY_LIMIT} attempts`) } } @@ -93,15 +96,21 @@ const requestRemoteNode = ( send: CONNECTION_TIMEOUT, // https://github.com/sindresorhus/got#timeout }, ...httpOptions, + isStream: true, }) let haveAllBytesBeenWritten = false + // Fixes a bug in latest got where progress.total gets reset when stream ends, even if it wasn't complete. + let totalSize: number | null = null responseStream.on(`downloadProgress`, progress => { if ( - progress.transferred === progress.total || - progress.total === null || - progress.total === undefined + progress.total != null && + (!totalSize || totalSize < progress.total) ) { + totalSize = progress.total + } + + if (progress.transferred === totalSize || totalSize === null) { haveAllBytesBeenWritten = true } }) @@ -113,14 +122,17 @@ const requestRemoteNode = ( if (timeout) { clearTimeout(timeout) } + + fsWriteStream.close() fs.removeSync(tmpFilename) reject(error) }) - fsWriteStream.on(`error`, (error: any) => { + fsWriteStream.on(`error`, (error: unknown) => { if (timeout) { clearTimeout(timeout) } + reject(error) }) @@ -128,6 +140,10 @@ const requestRemoteNode = ( resetTimeout() fsWriteStream.on(`finish`, () => { + if (timeout) { + clearTimeout(timeout) + } + fsWriteStream.close() // We have an incomplete download @@ -135,7 +151,7 @@ const requestRemoteNode = ( fs.removeSync(tmpFilename) if (attempt < INCOMPLETE_RETRY_LIMIT) { - resolve( + return resolve( requestRemoteNode( url, headers, @@ -145,16 +161,15 @@ const requestRemoteNode = ( ) ) } else { - reject( + // TODO move to new Error type + // eslint-disable-next-line prefer-promise-reject-errors + return reject( `Failed to download ${url} after ${INCOMPLETE_RETRY_LIMIT} attempts` ) } } - if (timeout) { - clearTimeout(timeout) - } - resolve(response) + return resolve(response) }) }) }) @@ -177,14 +192,11 @@ export async function fetchRemoteFile({ headers[`If-None-Match`] = cachedHeaders.etag } - // Add Basic authentication if passed in: - // https://github.com/sindresorhus/got/blob/main/documentation/2-options.md#username - // The "auth" API isn't particularly extensible, we should define an API that we validate - const httpOptions: got.GotOptions = {} + // Add htaccess authentication if passed in. This isn't particularly + // extensible. We should define a proper API that we validate. + const httpOptions: Options = {} if (auth && (auth.htaccess_pass || auth.htaccess_user)) { - // @ts-ignore - We use outdated @types/got typings. Once we update got everywhere we can remove @types/got and have correct typings httpOptions.username = auth.htaccess_user - // @ts-ignore - see above httpOptions.password = auth.htaccess_pass } diff --git a/packages/gatsby-dev-cli/package.json b/packages/gatsby-dev-cli/package.json index 21dd8ac3f0af5..35394de42a318 100644 --- a/packages/gatsby-dev-cli/package.json +++ b/packages/gatsby-dev-cli/package.json @@ -17,7 +17,7 @@ "execa": "^5.1.1", "find-yarn-workspace-root": "^2.0.0", "fs-extra": "^10.0.0", - "got": "^10.7.0", + "got": "^11.8.2", "is-absolute": "^1.0.0", "lodash": "^4.17.21", "signal-exit": "^3.0.3", diff --git a/packages/gatsby-plugin-sharp/package.json b/packages/gatsby-plugin-sharp/package.json index 45e8927e8a89b..56904e9bdaab5 100644 --- a/packages/gatsby-plugin-sharp/package.json +++ b/packages/gatsby-plugin-sharp/package.json @@ -15,7 +15,7 @@ "gatsby-core-utils": "^2.14.0-next.0", "gatsby-plugin-utils": "^1.14.0-next.0", "gatsby-telemetry": "^2.14.0-next.0", - "got": "^10.7.0", + "got": "^11.8.2", "lodash": "^4.17.21", "mini-svg-data-uri": "^1.3.3", "potrace": "^2.1.8", diff --git a/packages/gatsby-source-filesystem/package.json b/packages/gatsby-source-filesystem/package.json index e14cef6eb5ebe..547eb6712fa44 100644 --- a/packages/gatsby-source-filesystem/package.json +++ b/packages/gatsby-source-filesystem/package.json @@ -25,8 +25,7 @@ "@babel/cli": "^7.14.8", "@babel/core": "^7.14.8", "babel-preset-gatsby-package": "^1.14.0-next.0", - "cross-env": "^7.0.3", - "msw": "^0.33.2" + "cross-env": "^7.0.3" }, "homepage": "https://github.com/gatsbyjs/gatsby/tree/master/packages/gatsby-source-filesystem#readme", "keywords": [ diff --git a/packages/gatsby-source-filesystem/src/__tests__/create-remote-file-node-integration.js b/packages/gatsby-source-filesystem/src/__tests__/create-remote-file-node-integration.js deleted file mode 100644 index 2efe48ad27002..0000000000000 --- a/packages/gatsby-source-filesystem/src/__tests__/create-remote-file-node-integration.js +++ /dev/null @@ -1,268 +0,0 @@ -import * as path from "path" -import * as zlib from "zlib" -import * as os from "os" -import { rest } from "msw" -import { setupServer } from "msw/node" -import { Writable } from "stream" -import got from "got" -import createRemoteFileNode from "../create-remote-file-node" - -const fs = jest.requireActual(`fs-extra`) - -const gotStream = jest.spyOn(got, `stream`) -const urlCount = new Map() - -async function getFileSize(file) { - const stat = await fs.stat(file) - - return stat.size -} - -/** - * A utility to help create file responses - * - Url with attempts will use maxBytes for x amount of time until it delivers the full response - * - MaxBytes indicates how much bytes we'll be sending - * - * @param {string} file File path on disk - * @param {Object} req Is the request object from msw - * @param {{ compress: boolean}} options Options for the getFilecontent (use gzip or not) - */ -async function getFileContent(file, req, options = {}) { - const cacheKey = req.url.origin + req.url.pathname - const maxRetry = req.url.searchParams.get(`attempts`) - const maxBytes = req.url.searchParams.get(`maxBytes`) - const currentRetryCount = urlCount.get(cacheKey) || 0 - urlCount.set(cacheKey, currentRetryCount + 1) - - let fileContentBuffer = await fs.readFile(file) - if (options.compress) { - fileContentBuffer = zlib.deflateSync(fileContentBuffer) - } - - const content = await new Promise(resolve => { - const fileStream = fs.createReadStream(file, { - end: - currentRetryCount < Number(maxRetry) - ? Number(maxBytes) - : Number.MAX_SAFE_INTEGER, - }) - - const writableStream = new Writable() - const result = [] - writableStream._write = (chunk, encoding, next) => { - result.push(chunk) - - next() - } - - writableStream.on(`finish`, () => { - resolve(Buffer.concat(result)) - }) - - // eslint-disable-next-line no-unused-vars - let stream = fileStream - if (options.compress) { - stream = stream.pipe(zlib.createDeflate()) - } - - stream.pipe(writableStream) - }) - - return { - content, - contentLength: - req.url.searchParams.get(`contentLength`) === `false` - ? undefined - : fileContentBuffer.length, - } -} - -const server = setupServer( - rest.get(`http://external.com/logo.svg`, async (req, res, ctx) => { - const { content, contentLength } = await getFileContent( - path.join(__dirname, `./fixtures/gatsby-logo.svg`), - req - ) - - return res( - ctx.set(`Content-Type`, `image/svg+xml`), - ctx.set(`Content-Length`, contentLength), - ctx.status(200), - ctx.body(content) - ) - }), - rest.get(`http://external.com/logo-gzip.svg`, async (req, res, ctx) => { - const { content, contentLength } = await getFileContent( - path.join(__dirname, `./fixtures/gatsby-logo.svg`), - req, - { - compress: true, - } - ) - - return res( - ctx.set(`Content-Type`, `image/svg+xml`), - ctx.set(`content-encoding`, `gzip`), - ctx.set(`Content-Length`, contentLength), - ctx.status(200), - ctx.body(content) - ) - }), - rest.get(`http://external.com/dog.jpg`, async (req, res, ctx) => { - const { content, contentLength } = await getFileContent( - path.join(__dirname, `./fixtures/dog-thumbnail.jpg`), - req - ) - - return res( - ctx.set(`Content-Type`, `image/svg+xml`), - ctx.set(`Content-Length`, contentLength), - ctx.status(200), - ctx.body(content) - ) - }) -) - -function createMockCache() { - const tmpDir = fs.mkdtempSync( - path.join(os.tmpdir(), `gatsby-source-filesystem-`) - ) - - return { - get: jest.fn(), - set: jest.fn(), - directory: tmpDir, - } -} - -const reporter = jest.fn(() => { - return {} -}) - -describe(`create-remote-file-node`, () => { - let cache - - beforeAll(() => { - cache = createMockCache() - // Establish requests interception layer before all tests. - server.listen() - }) - afterAll(() => { - if (cache) { - fs.removeSync(cache.directory) - } - - // Clean up after all tests are done, preventing this - // interception layer from affecting irrelevant tests. - server.close() - }) - - beforeEach(() => { - gotStream.mockClear() - urlCount.clear() - }) - - it(`downloads and create a file`, async () => { - const fileNode = await createRemoteFileNode({ - url: `http://external.com/logo.svg`, - store: {}, - getCache: () => cache, - createNode: jest.fn(), - createNodeId: jest.fn(), - reporter, - }) - - expect(fileNode.base).toBe(`logo.svg`) - expect(fileNode.size).toBe( - await getFileSize(path.join(__dirname, `./fixtures/gatsby-logo.svg`)) - ) - expect(gotStream).toBeCalledTimes(1) - }) - - it(`downloads and create a gzip file`, async () => { - const fileNode = await createRemoteFileNode({ - url: `http://external.com/logo-gzip.svg`, - store: {}, - getCache: () => cache, - createNode: jest.fn(), - createNodeId: jest.fn(), - reporter, - }) - - expect(fileNode.base).toBe(`logo-gzip.svg`) - expect(fileNode.size).toBe( - await getFileSize(path.join(__dirname, `./fixtures/gatsby-logo.svg`)) - ) - expect(gotStream).toBeCalledTimes(1) - }) - - it(`downloads and create a file`, async () => { - const fileNode = await createRemoteFileNode({ - url: `http://external.com/dog.jpg`, - store: {}, - getCache: () => cache, - createNode: jest.fn(), - createNodeId: jest.fn(), - reporter, - }) - - expect(fileNode.base).toBe(`dog.jpg`) - expect(fileNode.size).toBe( - await getFileSize(path.join(__dirname, `./fixtures/dog-thumbnail.jpg`)) - ) - expect(gotStream).toBeCalledTimes(1) - }) - - it(`doesn't retry when no content-length is given`, async () => { - const fileNode = await createRemoteFileNode({ - url: `http://external.com/logo-gzip.svg?attempts=1&maxBytes=300&contentLength=false`, - store: {}, - getCache: () => cache, - createNode: jest.fn(), - createNodeId: jest.fn(), - reporter, - }) - - expect(fileNode.base).toBe(`logo-gzip.svg`) - expect(fileNode.size).not.toBe( - await getFileSize(path.join(__dirname, `./fixtures/gatsby-logo.svg`)) - ) - expect(gotStream).toBeCalledTimes(1) - }) - - describe(`retries the download`, () => { - it(`Retries when gzip compression file is incomplete`, async () => { - const fileNode = await createRemoteFileNode({ - url: `http://external.com/logo-gzip.svg?attempts=1&maxBytes=300`, - store: {}, - getCache: () => cache, - createNode: jest.fn(), - createNodeId: jest.fn(), - reporter, - }) - - expect(fileNode.base).toBe(`logo-gzip.svg`) - expect(fileNode.size).toBe( - await getFileSize(path.join(__dirname, `./fixtures/gatsby-logo.svg`)) - ) - expect(gotStream).toBeCalledTimes(2) - }) - - it(`Retries when binary file is incomplete`, async () => { - const fileNode = await createRemoteFileNode({ - url: `http://external.com/dog.jpg?attempts=1&maxBytes=300`, - store: {}, - getCache: () => cache, - createNode: jest.fn(), - createNodeId: jest.fn(), - reporter, - }) - - expect(fileNode.base).toBe(`dog.jpg`) - expect(fileNode.size).toBe( - await getFileSize(path.join(__dirname, `./fixtures/dog-thumbnail.jpg`)) - ) - expect(gotStream).toBeCalledTimes(2) - }) - }) -}) diff --git a/packages/gatsby-source-filesystem/src/__tests__/create-remote-file-node.js b/packages/gatsby-source-filesystem/src/__tests__/create-remote-file-node.js index 0aa9ff3e85bf1..b64bf6d21c6fe 100644 --- a/packages/gatsby-source-filesystem/src/__tests__/create-remote-file-node.js +++ b/packages/gatsby-source-filesystem/src/__tests__/create-remote-file-node.js @@ -22,16 +22,22 @@ jest.mock(`got`, () => { } }) +jest.mock(`gatsby-core-utils`, () => { + return { + fetchRemoteFile: jest.fn(), + } +}) + jest.mock(`../create-file-node`, () => { return { createFileNode: jest.fn(), } }) -const reporter = require(`gatsby/reporter`) +const reporter = {} -const got = require(`got`) const createRemoteFileNode = require(`../create-remote-file-node`) const { createFileNode } = require(`../create-file-node`) +const { fetchRemoteFile } = require(`gatsby-core-utils`) const createMockCache = () => { return { @@ -85,40 +91,21 @@ describe(`create-remote-file-node`, () => { const setup = (args = {}, response = { statusCode: 200 }) => { const url = `https://images.whatever.com/real-image-trust-me-${uuid}.png` - const gotMock = { - pipe: jest.fn(), - on: jest.fn(), + if (response.statusCode === 404) { + fetchRemoteFile.mockImplementation(({ url }) => { + // eslint-disable-next-line no-throw-literal + throw `failed to process ${url}` + }) } + fetchRemoteFile.mockClear() + createFileNode.mockImplementationOnce(() => { return { internal: {}, } }) - got.stream.mockReturnValueOnce({ - pipe: jest.fn(() => gotMock), - on: jest.fn((mockType, mockCallback) => { - if (mockType === `response`) { - // got throws on 404/500 so we mimic this behaviour - if (response.statusCode === 404) { - throw new Error(`Response code 404 (Not Found)`) - } - - mockCallback(response) - } - if (mockType === `downloadProgress`) { - mockCallback({ - progress: 1, - transferred: 1, - total: 1, - }) - } - - return gotMock - }), - }) - uuid += 1 return createRemoteFileNode({ @@ -148,16 +135,19 @@ describe(`create-remote-file-node`, () => { url, }) - expect(got.stream).toHaveBeenCalledWith(url, expect.any(Object)) + expect(fetchRemoteFile).toHaveBeenCalledWith( + expect.objectContaining({ + url, + }) + ) }) it(`passes headers`, async () => { await setup() - expect(got.stream).toHaveBeenCalledWith( - expect.any(String), + expect(fetchRemoteFile).toHaveBeenCalledWith( expect.objectContaining({ - headers: {}, + httpHeaders: {}, }) ) }) @@ -171,11 +161,9 @@ describe(`create-remote-file-node`, () => { auth, }) - expect(got.stream).toHaveBeenCalledWith( - expect.any(String), + expect(fetchRemoteFile).toHaveBeenCalledWith( expect.objectContaining({ - username: auth.htaccess_user, - password: auth.htaccess_pass, + auth, }) ) }) @@ -187,12 +175,11 @@ describe(`create-remote-file-node`, () => { }, }) - expect(got.stream).toHaveBeenCalledWith( - expect.any(String), + expect(fetchRemoteFile).toHaveBeenCalledWith( expect.objectContaining({ - headers: expect.objectContaining({ + httpHeaders: { Authorization: `Bearer foobar`, - }), + }, }) ) }) @@ -200,7 +187,7 @@ describe(`create-remote-file-node`, () => { it(`fails when 404 is given`, async () => { expect.assertions(1) try { - await setup({}, `response`, { statusCode: 404 }) + await setup({}, { statusCode: 404 }) } catch (err) { expect(err).toEqual( expect.stringContaining( @@ -209,40 +196,6 @@ describe(`create-remote-file-node`, () => { ) } }) - - it(`retries if stalled`, done => { - const fs = require(`fs-extra`) - - fs.createWriteStream.mockReturnValue({ - on: jest.fn(), - close: jest.fn(), - }) - jest.useFakeTimers() - got.stream.mockReset() - got.stream.mockReturnValueOnce({ - pipe: jest.fn(() => { - return { - pipe: jest.fn(), - on: jest.fn(), - } - }), - on: jest.fn((mockType, mockCallback) => { - if (mockType === `response`) { - mockCallback({ statusCode: 200 }) - - expect(got.stream).toHaveBeenCalledTimes(1) - jest.advanceTimersByTime(1000) - expect(got.stream).toHaveBeenCalledTimes(1) - jest.advanceTimersByTime(30000) - - expect(got.stream).toHaveBeenCalledTimes(2) - done() - } - }), - }) - setup() - jest.runAllTimers() - }) }) }) diff --git a/packages/gatsby-source-filesystem/src/create-remote-file-node.js b/packages/gatsby-source-filesystem/src/create-remote-file-node.js index aca385ae98c05..3332b0827a05c 100644 --- a/packages/gatsby-source-filesystem/src/create-remote-file-node.js +++ b/packages/gatsby-source-filesystem/src/create-remote-file-node.js @@ -1,9 +1,8 @@ const fs = require(`fs-extra`) -const { createContentDigest } = require(`gatsby-core-utils`) +const { createContentDigest, fetchRemoteFile } = require(`gatsby-core-utils`) const path = require(`path`) const { isWebUri } = require(`valid-url`) const Queue = require(`better-queue`) -const { fetchRemoteFile } = require(`gatsby-core-utils`) const { createFileNode } = require(`./create-file-node`) const { getRemoteFileExtension, createFilePath } = require(`./utils`) diff --git a/packages/gatsby-source-npm-package-search/package.json b/packages/gatsby-source-npm-package-search/package.json index 9cd3ae6455d48..64a32ea100f74 100644 --- a/packages/gatsby-source-npm-package-search/package.json +++ b/packages/gatsby-source-npm-package-search/package.json @@ -12,7 +12,7 @@ "dependencies": { "@babel/runtime": "^7.14.8", "algoliasearch": "^4.9.1", - "got": "^8.3.2" + "got": "^11.8.2" }, "devDependencies": { "@babel/cli": "^7.14.8", diff --git a/packages/gatsby-source-wordpress/package.json b/packages/gatsby-source-wordpress/package.json index 2a12c8d8f3a0d..52b64ccf7d852 100644 --- a/packages/gatsby-source-wordpress/package.json +++ b/packages/gatsby-source-wordpress/package.json @@ -33,7 +33,7 @@ "gatsby-plugin-catch-links": "^3.14.0-next.0", "gatsby-source-filesystem": "^3.14.0-next.0", "glob": "^7.1.6", - "got": "^11.7.0", + "got": "^11.8.2", "graphql-query-compress": "^1.2.2", "lodash": "^4.17.21", "node-fetch": "^2.6.0", diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 6798b89790de9..3b91552c3ca5f 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -86,7 +86,7 @@ "gatsby-telemetry": "^2.14.0-next.0", "gatsby-worker": "^0.5.0-next.0", "glob": "^7.1.6", - "got": "8.3.2", + "got": "^11.8.2", "graphql": "^15.4.0", "graphql-compose": "~7.25.0", "graphql-playground-middleware-express": "^1.7.18", diff --git a/packages/gatsby/src/utils/start-server.ts b/packages/gatsby/src/utils/start-server.ts index 071f9c1db02e6..c59f02e920c1b 100644 --- a/packages/gatsby/src/utils/start-server.ts +++ b/packages/gatsby/src/utils/start-server.ts @@ -1,6 +1,6 @@ import webpackHotMiddleware from "@gatsbyjs/webpack-hot-middleware" import webpackDevMiddleware from "webpack-dev-middleware" -import got from "got" +import got, { Method } from "got" import webpack from "webpack" import express from "express" import compression from "compression" @@ -461,7 +461,11 @@ module.exports = { req .pipe( got - .stream(proxiedUrl, { headers, method, decompress: false }) + .stream(proxiedUrl, { + headers, + method: method as Method, + decompress: false, + }) .on(`response`, response => res.writeHead(response.statusCode || 200, response.headers) ) diff --git a/yarn.lock b/yarn.lock index 079258d449828..3efd50fea88e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3563,6 +3563,18 @@ strict-event-emitter "^0.2.0" xmldom "^0.6.0" +"@mswjs/interceptors@^0.12.6": + version "0.12.6" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.12.6.tgz#0afb7c91e14875a1127ae5181d0eae31d50a9276" + integrity sha512-+1jaUpKEWXP4Yed4Lj9RftroZStw0NsEvEFjwJgc941xcaiTDYyBON4kpBY32RWd7UsW/xGE1piy8qt0Gfiqyw== + dependencies: + "@open-draft/until" "^1.0.3" + "@xmldom/xmldom" "^0.7.2" + debug "^4.3.2" + headers-utils "^3.0.2" + outvariant "^1.2.0" + strict-event-emitter "^0.2.0" + "@n1ru4l/push-pull-async-iterable-iterator@^2.0.1": version "2.1.2" resolved "https://registry.yarnpkg.com/@n1ru4l/push-pull-async-iterable-iterator/-/push-pull-async-iterable-iterator-2.1.2.tgz#e486bf86c4c29e78601694a26f31c2dec0c08d9b" @@ -4018,15 +4030,6 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -"@sindresorhus/is@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" - -"@sindresorhus/is@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-2.1.1.tgz#ceff6a28a5b4867c2dd4a1ba513de278ccbe8bb1" - integrity sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg== - "@sindresorhus/is@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.0.tgz#2ff674e9611b45b528896d820d3d7a812de2f0e4" @@ -4178,7 +4181,7 @@ dependencies: defer-to-connect "^1.0.1" -"@szmarczak/http-timer@^4.0.0", "@szmarczak/http-timer@^4.0.5": +"@szmarczak/http-timer@^4.0.5": version "4.0.5" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.5.tgz#bfbd50211e9dfa51ba07da58a14cdfd333205152" integrity sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ== @@ -4580,15 +4583,6 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/got@^9.6.11": - version "9.6.11" - resolved "https://registry.yarnpkg.com/@types/got/-/got-9.6.11.tgz#482b402cc5ee459481aeeadb08142ebb1a9afb26" - integrity sha512-dr3IiDNg5TDesGyuwTrN77E1Cd7DCdmCFtEfSGqr83jMMtcwhf/SGPbN2goY4JUWQfvxwY56+e5tjfi+oXeSdA== - dependencies: - "@types/node" "*" - "@types/tough-cookie" "*" - form-data "^2.5.0" - "@types/graceful-fs@^4.1.2": version "4.1.5" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" @@ -4709,7 +4703,7 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= -"@types/keyv@*", "@types/keyv@^3.1.1": +"@types/keyv@*": version "3.1.1" resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7" integrity sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw== @@ -5046,11 +5040,6 @@ resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.0.tgz#e3f52b4d7397eaa9193592ef3fdd44dc0af4298c" integrity sha512-flgpHJjntpBAdJD43ShRosQvNC0ME97DCfGvZEDlAThQmnerRXrLbX6YgzRBQCZTthET9eAWFAMaYP0m0Y4HzQ== -"@types/tough-cookie@*": - version "2.3.5" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.5.tgz#9da44ed75571999b65c37b60c9b2b88db54c585d" - integrity sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg== - "@types/uglify-js@*": version "3.0.4" resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.4.tgz#96beae23df6f561862a830b4288a49e86baac082" @@ -5458,6 +5447,11 @@ dependencies: tslib "^2.1.0" +"@xmldom/xmldom@^0.7.2": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.3.tgz#55de695f77afd3cc0e5bee0aa900040bc63c0f63" + integrity sha512-8XmJdPut2XGtfFcsNsqEsvMUmAwk7xLq7m+E/GcsU9b5qyFFIsiX4Fvnb5UoQ4wo12Wlm07YFJERoyWUYdbIpw== + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -7364,31 +7358,11 @@ cache-manager@^3.4.0: lodash "^4.17.20" lru-cache "6.0.0" -cacheable-lookup@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz#87be64a18b925234875e10a9bb1ebca4adce6b38" - integrity sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg== - dependencies: - "@types/keyv" "^3.1.1" - keyv "^4.0.0" - cacheable-lookup@^5.0.3: version "5.0.4" resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== -cacheable-request@^2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" - dependencies: - clone-response "1.0.2" - get-stream "3.0.0" - http-cache-semantics "3.8.1" - keyv "3.0.0" - lowercase-keys "1.0.0" - normalize-url "2.0.1" - responselike "1.0.2" - cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -7931,7 +7905,7 @@ clone-regexp@^2.1.0: dependencies: is-regexp "^2.0.0" -clone-response@1.0.2, clone-response@^1.0.2: +clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" dependencies: @@ -9516,13 +9490,6 @@ decompress-response@^4.2.0: dependencies: mimic-response "^2.0.0" -decompress-response@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-5.0.0.tgz#7849396e80e3d1eba8cb2f75ef4930f76461cb0f" - integrity sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw== - dependencies: - mimic-response "^2.0.0" - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -11987,7 +11954,7 @@ fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" -from2@^2.1.0, from2@^2.1.1: +from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" dependencies: @@ -12306,7 +12273,7 @@ get-stdin@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" -get-stream@3.0.0, get-stream@^3.0.0: +get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -12712,50 +12679,7 @@ good-listener@^1.2.2: dependencies: delegate "^3.1.2" -got@8.3.2, got@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" - dependencies: - "@sindresorhus/is" "^0.7.0" - cacheable-request "^2.1.1" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - into-stream "^3.1.0" - is-retry-allowed "^1.1.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - mimic-response "^1.0.0" - p-cancelable "^0.4.0" - p-timeout "^2.0.1" - pify "^3.0.0" - safe-buffer "^5.1.1" - timed-out "^4.0.1" - url-parse-lax "^3.0.0" - url-to-options "^1.0.1" - -got@^10.7.0: - version "10.7.0" - resolved "https://registry.yarnpkg.com/got/-/got-10.7.0.tgz#62889dbcd6cca32cd6a154cc2d0c6895121d091f" - integrity sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg== - dependencies: - "@sindresorhus/is" "^2.0.0" - "@szmarczak/http-timer" "^4.0.0" - "@types/cacheable-request" "^6.0.1" - cacheable-lookup "^2.0.0" - cacheable-request "^7.0.1" - decompress-response "^5.0.0" - duplexer3 "^0.1.4" - get-stream "^5.0.0" - lowercase-keys "^2.0.0" - mimic-response "^2.1.0" - p-cancelable "^2.0.0" - p-event "^4.0.0" - responselike "^2.0.0" - to-readable-stream "^2.0.0" - type-fest "^0.10.0" - -got@^11.7.0, got@^11.8.2: +got@^11.8.2: version "11.8.2" resolved "https://registry.yarnpkg.com/got/-/got-11.8.2.tgz#7abb3959ea28c31f3576f1576c1effce23f33599" integrity sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ== @@ -13097,21 +13021,11 @@ has-glob@^1.0.0: dependencies: is-glob "^3.0.0" -has-symbol-support-x@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" - has-symbols@^1.0.1, has-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== -has-to-string-tag-x@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" - dependencies: - has-symbol-support-x "^1.4.1" - has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -13551,7 +13465,7 @@ http-basic@^2.5.1: concat-stream "^1.4.6" http-response-object "^1.0.0" -http-cache-semantics@3.8.1, http-cache-semantics@^3.8.1: +http-cache-semantics@^3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -14092,13 +14006,6 @@ interpret@^2.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== -into-stream@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" - dependencies: - from2 "^2.1.1" - p-is-promise "^1.1.0" - invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -14499,10 +14406,6 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" - is-online@^8.5.1: version "8.5.1" resolved "https://registry.yarnpkg.com/is-online/-/is-online-8.5.1.tgz#bcc6970c6a3fad552a41738c0f0d0737b0ce6e63" @@ -14627,7 +14530,7 @@ is-resolvable@^1.0.0, is-resolvable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" -is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: +is-retry-allowed@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" @@ -14891,13 +14794,6 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -isurl@^1.0.0-alpha5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" - dependencies: - has-to-string-tag-x "^1.2.0" - is-object "^1.0.1" - iterall@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" @@ -16270,12 +16166,6 @@ keygrip@~1.1.0: dependencies: tsscmp "1.0.6" -keyv@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" - dependencies: - json-buffer "3.0.0" - keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -17142,10 +17032,6 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lowercase-keys@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" - lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -18087,7 +17973,7 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" -mimic-response@^2.0.0, mimic-response@^2.1.0: +mimic-response@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== @@ -18333,6 +18219,32 @@ msw@^0.33.2: type-fest "^1.2.2" yargs "^17.0.1" +msw@^0.35.0: + version "0.35.0" + resolved "https://registry.yarnpkg.com/msw/-/msw-0.35.0.tgz#18a4ceb6c822ef226a30421d434413bc45030d38" + integrity sha512-V7A6PqaS31F1k//fPS0OnO7vllfaqBUFsMEu3IpYixyWpiUInfyglodnbXhhtDyytkQikpkPZv8TZi/CvZzv/w== + dependencies: + "@mswjs/cookies" "^0.1.6" + "@mswjs/interceptors" "^0.12.6" + "@open-draft/until" "^1.0.3" + "@types/cookie" "^0.4.1" + "@types/inquirer" "^7.3.3" + "@types/js-levenshtein" "^1.1.0" + chalk "^4.1.1" + chokidar "^3.4.2" + cookie "^0.4.1" + graphql "^15.5.1" + headers-utils "^3.0.2" + inquirer "^8.1.1" + is-node-process "^1.0.1" + js-levenshtein "^1.1.6" + node-fetch "^2.6.1" + node-match-path "^0.6.3" + statuses "^2.0.0" + strict-event-emitter "^0.2.0" + type-fest "^1.2.2" + yargs "^17.0.1" + multer@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.2.tgz#2f1f4d12dbaeeba74cb37e623f234bf4d3d2057a" @@ -18797,14 +18709,6 @@ normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" -normalize-url@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" - dependencies: - prepend-http "^2.0.0" - query-string "^5.0.1" - sort-keys "^2.0.0" - normalize-url@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" @@ -19298,6 +19202,11 @@ outvariant@^1.1.0: "@types/format-util" "^1.0.1" format-util "^1.0.5" +outvariant@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.2.1.tgz#e630f6cdc1dbf398ed857e36f219de4a005ccd35" + integrity sha512-bcILvFkvpMXh66+Ubax/inxbKRyWTUiiFIW2DWkiS79wakrLGn3Ydy+GvukadiyfZjaL6C7YhIem4EZSM282wA== + override-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/override-require/-/override-require-1.1.1.tgz#6ae22fadeb1f850ffb0cf4c20ff7b87e5eb650df" @@ -19319,10 +19228,6 @@ p-any@^2.0.0: p-some "^4.0.0" type-fest "^0.3.0" -p-cancelable@^0.4.0: - version "0.4.1" - resolved "http://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" - p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" @@ -19353,7 +19258,7 @@ p-each-series@^2.1.0: resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== -p-event@^4.0.0, p-event@^4.1.0: +p-event@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" integrity sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== @@ -19487,12 +19392,6 @@ p-some@^4.0.0: aggregate-error "^3.0.0" p-cancelable "^2.0.0" -p-timeout@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" - dependencies: - p-finally "^1.0.0" - p-timeout@^3.0.0, p-timeout@^3.1.0, p-timeout@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" @@ -21218,14 +21117,6 @@ qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - query-string@^6.13.1, query-string@^6.13.3, query-string@^6.13.7, query-string@^6.13.8, query-string@^6.8.2: version "6.13.8" resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.8.tgz#8cf231759c85484da3cf05a851810d8e825c1159" @@ -23260,7 +23151,7 @@ resolve@^2.0.0-next.3: is-core-module "^2.2.0" path-parse "^1.0.6" -responselike@1.0.2, responselike@^1.0.2: +responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" dependencies: @@ -24647,10 +24538,6 @@ strict-ui@^0.2.0-0: reflexbox "^4.0.6" theme-ui ">= 0.4.0-rc.1" -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" @@ -25555,7 +25442,7 @@ through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@^2.3.8, version "2.3.8" resolved "http://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" -timed-out@^4.0.0, timed-out@^4.0.1: +timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -25692,11 +25579,6 @@ to-readable-stream@^1.0.0: resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== -to-readable-stream@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-2.1.0.tgz#82880316121bea662cdc226adb30addb50cb06e8" - integrity sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w== - to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -26007,11 +25889,6 @@ type-fest@0.20.2, type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type-fest@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.10.0.tgz#7f06b2b9fbfc581068d1341ffabd0349ceafc642" - integrity sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw== - type-fest@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" @@ -26768,10 +26645,6 @@ url-polyfill@^1.1.12: resolved "https://registry.yarnpkg.com/url-polyfill/-/url-polyfill-1.1.12.tgz#6cdaa17f6b022841b3aec0bf8dbd87ac0cd33331" integrity sha512-mYFmBHCapZjtcNHW0MDq9967t+z4Dmg5CJ0KqysK3+ZbyoNOWQHksGCTWwDhxGXllkWlOc10Xfko6v4a3ucM6A== -url-to-options@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" - url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"