diff --git a/.github/workflows/setup.sh b/.github/workflows/setup.sh index eced0a747..0669de0aa 100644 --- a/.github/workflows/setup.sh +++ b/.github/workflows/setup.sh @@ -5,7 +5,7 @@ echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/.npmrc set -ex -npm i --silent -g pnpm@6 esbuild@0.8.53 --unsafe-perm +npm i --silent -g pnpm@6 --unsafe-perm pnpm i --no-prefer-frozen-lockfile --ignore-scripts diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 554899478..000000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: test - -on: - push: - branches: - - main - paths-ignore: - - '*.md' - pull_request: - paths-ignore: - - '*.md' - -jobs: - fetch-engine: - timeout-minutes: 10 - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - - uses: actions/setup-node@v3 - with: - node-version: '14' - - - run: bash .github/workflows/setup.sh - env: - CI: true - - - run: pnpm run test - name: 'fetch-engine' - working-directory: packages/fetch-engine - env: - CI: true - SKIP_GIT: true - GITHUB_CONTEXT: ${{ toJson(github) }} - get-platform: - timeout-minutes: 10 - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - - uses: actions/setup-node@v3 - with: - node-version: '14' - - - run: bash .github/workflows/setup.sh - env: - CI: true - - - run: pnpm run test - name: 'get-platform' - working-directory: packages/get-platform - env: - CI: true - SKIP_GIT: true - GITHUB_CONTEXT: ${{ toJson(github) }} diff --git a/README.md b/README.md index d311c91dd..feb34d71f 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,14 @@ -# Prisma Engines Wrapper +# Prisma Engines Version
-

@prisma/engines - - - -

@prisma/engines-version

-

@prisma/fetch-engine - - - -

-

@prisma/get-platform - - - -

-This repository contains the code for packages `@prisma/engines`, `@prisma/engines-version`, `@prisma/fetch-engine` and `@prisma/get-platform`. They are wrapping the [Prisma Rust Engines](https://github.com/prisma/prisma-engines) in npm packages to be used by the [Prisma CLI, the Client](https://github.com/prisma/prisma), and other tooling. +It is used to get the hash of the [Prisma Rust Engines](https://github.com/prisma/prisma-engines) for downloading via the [Prisma CLI, the Client](https://github.com/prisma/prisma), and other tooling. [The automated publish pipeline](https://github.com/prisma/engines-wrapper/actions/workflows/publish-engines.yml) is triggered during the publish process of [`prisma-engines`](https://github.com/prisma/prisma-engines) by the [engineer CLI](https://github.com/prisma/engineer/blob/main/src/trigger/mod.rs). -This `engines-wrapper` GitHub Actions workflow informs other repositories (e.g. [`prisma/prisma`](https://github.com/prisma/prisma) and [`prisma/prisma-fmt-wasm`](https://github.com/prisma/prisma-fmt-wasm)) of these published npm packages. +This `engines-version` GitHub Actions workflow informs other repositories (e.g. [`prisma/prisma`](https://github.com/prisma/prisma) and [`prisma/prisma-fmt-wasm`](https://github.com/prisma/prisma-fmt-wasm)) of these published npm packages. diff --git a/package.json b/package.json index 17643af84..ff8af91e0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "engines-wrapper", "version": "1.0.0", - "description": "This repository contains the packages `@prisma/engines` and `@prisma/engines-version`. They are wrapping our [Rust Engines](https://github.com/prisma/prisma-engines) in npm packages.", + "description": "It is used to get the hash of the [Prisma Rust Engines](https://github.com/prisma/prisma-engines) for downloading via the [Prisma CLI, the Client](https://github.com/prisma/prisma), and other tooling.", "private": true, "devDependencies": { "@sindresorhus/slugify": "1.1.2", diff --git a/packages/engines/.gitignore b/packages/engines/.gitignore deleted file mode 100644 index 761e67834..000000000 --- a/packages/engines/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -introspection-engine* -query-engine* -migration-engine* -prisma-fmt* -libquery_engine* \ No newline at end of file diff --git a/packages/engines/README.md b/packages/engines/README.md deleted file mode 100644 index 81f520e1f..000000000 --- a/packages/engines/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# `@prisma/engines` - -This package ships the Prisma Engines, namely the Query Engine, Migration Engine, Introspection Engine and Prisma Format. -It has a one to one mapping to the engine releases in its version. -In the postinall hook of this package, all engines available for the current platform are downloaded from the Prisma CDN. - -You should probably not use this package directly, but instead use one of these: - -- [`prisma` CLI](https://www.npmjs.com/package/prisma) -- [`@prisma/client`](https://www.npmjs.com/package/@prisma/client) diff --git a/packages/engines/package.json b/packages/engines/package.json deleted file mode 100644 index 770d2a20f..000000000 --- a/packages/engines/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "@prisma/engines", - "version": "4.1.0-5.e82e1a549e41aa2c572eb3d35208d12e526c3ed0", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "license": "Apache-2.0", - "author": "Tim Suchanek ", - "devDependencies": { - "@prisma/debug": "3.15.2", - "@prisma/engines-version": "workspace:4.1.0-5.e82e1a549e41aa2c572eb3d35208d12e526c3ed0", - "@prisma/fetch-engine": "workspace:4.1.0-5.e82e1a549e41aa2c572eb3d35208d12e526c3ed0", - "@types/node": "16.11.41", - "execa": "5.1.1", - "typescript": "4.7.4" - }, - "repository": { - "type": "git", - "url": "https://github.com/prisma/engines-wrapper.git", - "directory": "packages/engines" - }, - "scripts": { - "build": "node scripts/build.js", - "prepublishOnly": "pnpm run build", - "postinstall": "node download/index.js" - }, - "files": [ - "dist", - "download" - ] -} \ No newline at end of file diff --git a/packages/engines/scripts/build.js b/packages/engines/scripts/build.js deleted file mode 100644 index edb6dd760..000000000 --- a/packages/engines/scripts/build.js +++ /dev/null @@ -1,37 +0,0 @@ -const execa = require('execa') -const chalk = require('chalk') - -async function main() { - const before = Date.now() - - // TODO: Combine download.ts and index.ts together to save space - await Promise.all([ - run('tsc -d', true), - run( - 'esbuild src/download.ts --outfile=download/index.js --bundle --platform=node --target=node14 --minify --sourcemap', - false, - ), - run( - 'esbuild src/index.ts --outfile=dist/index.js --bundle --platform=node --target=node14', - false, - ), - ]) - - const after = Date.now() - console.log( - chalk.blueBright( - `\nDone with @prisma/engines build in ${chalk.bold( - ((after - before) / 1000).toFixed(1), - )}s`, - ), - ) -} - -function run(command, preferLocal = true) { - return execa.command(command, { preferLocal, shell: true, stdio: 'inherit' }) -} - -main().catch((e) => { - console.error(e) - process.exit(1) -}) diff --git a/packages/engines/src/__tests__/all-exist.test.ts b/packages/engines/src/__tests__/all-exist.test.ts deleted file mode 100644 index 70b786d12..000000000 --- a/packages/engines/src/__tests__/all-exist.test.ts +++ /dev/null @@ -1 +0,0 @@ -// TODO diff --git a/packages/engines/src/download.ts b/packages/engines/src/download.ts deleted file mode 100644 index f75f2743f..000000000 --- a/packages/engines/src/download.ts +++ /dev/null @@ -1,80 +0,0 @@ -import Debug from '@prisma/debug' -import { enginesVersion } from '@prisma/engines-version' -import { - BinaryDownloadConfiguration, - BinaryType, - download, -} from '@prisma/fetch-engine' -import fs from 'fs' -import path from 'path' -import { getCliQueryEngineBinaryType } from '.' -const debug = Debug('prisma:download') - -const binaryDir = path.join(__dirname, '../') - -const lockFile = path.join(binaryDir, 'download-lock') - -let createdLockFile = false -async function main() { - if ( - fs.existsSync(lockFile) && - parseInt(fs.readFileSync(lockFile, 'utf-8'), 10) > Date.now() - 20000 - ) { - debug( - `Lock file already exists, so we're skipping the download of the prisma binaries`, - ) - } else { - createLockFile() - let binaryTargets = undefined - if (process.env.PRISMA_CLI_BINARY_TARGETS) { - binaryTargets = process.env.PRISMA_CLI_BINARY_TARGETS.split(',') - } - const cliQueryEngineBinaryType = getCliQueryEngineBinaryType() - - const binaries: BinaryDownloadConfiguration = { - [cliQueryEngineBinaryType]: binaryDir, - [BinaryType.migrationEngine]: binaryDir, - [BinaryType.introspectionEngine]: binaryDir, - [BinaryType.prismaFmt]: binaryDir, - } - - await download({ - binaries, - showProgress: true, - version: enginesVersion, - failSilent: true, - binaryTargets, - }).catch((e) => debug(e)) - - cleanupLockFile() - } -} - -function createLockFile() { - createdLockFile = true - fs.writeFileSync(lockFile, Date.now().toString()) -} - -function cleanupLockFile() { - if (createdLockFile) { - try { - if (fs.existsSync(lockFile)) { - fs.unlinkSync(lockFile) - } - } catch (e) { - debug(e) - } - } -} - -main().catch((e) => debug(e)) - -// if we are in a Now context, ensure that `prisma generate` is in the postinstall hook -process.on('beforeExit', () => { - cleanupLockFile() -}) - -process.once('SIGINT', () => { - cleanupLockFile() - process.exit() -}) diff --git a/packages/engines/src/index.ts b/packages/engines/src/index.ts deleted file mode 100644 index d3f6d1c26..000000000 --- a/packages/engines/src/index.ts +++ /dev/null @@ -1,107 +0,0 @@ -import Debug from '@prisma/debug' -import { enginesVersion } from '@prisma/engines-version' -import { BinaryType, download } from '@prisma/fetch-engine' -import path from 'path' -const debug = Debug('prisma:engines') -export function getEnginesPath() { - return path.join(__dirname, '../') -} -export const DEFAULT_CLI_QUERY_ENGINE_BINARY_TYPE = BinaryType.libqueryEngine // TODO: name not clear -/** - * Checks if the env override `PRISMA_CLI_QUERY_ENGINE_TYPE` is set to `library` or `binary` - * Otherwise returns the default - */ -export function getCliQueryEngineBinaryType(): - | BinaryType.libqueryEngine - | BinaryType.queryEngine { - const envCliQueryEngineType = process.env.PRISMA_CLI_QUERY_ENGINE_TYPE - if (envCliQueryEngineType) { - if (envCliQueryEngineType === 'binary') { - return BinaryType.queryEngine - } - if (envCliQueryEngineType === 'library') { - return BinaryType.libqueryEngine - } - } - return DEFAULT_CLI_QUERY_ENGINE_BINARY_TYPE -} -export async function ensureBinariesExist() { - const binaryDir = path.join(__dirname, '../') - let binaryTargets = undefined - if (process.env.PRISMA_CLI_BINARY_TARGETS) { - binaryTargets = process.env.PRISMA_CLI_BINARY_TARGETS.split(',') - } - - const cliQueryEngineBinaryType = getCliQueryEngineBinaryType() - - const binaries = { - [cliQueryEngineBinaryType]: binaryDir, - [BinaryType.migrationEngine]: binaryDir, - [BinaryType.introspectionEngine]: binaryDir, - [BinaryType.prismaFmt]: binaryDir, - } - debug(`binaries to download ${Object.keys(binaries).join(', ')}`) - await download({ - binaries: binaries, - showProgress: true, - version: enginesVersion, - failSilent: false, - binaryTargets, - }) -} - -export { enginesVersion } from '@prisma/engines-version' - -/** - * This annotation is used for `node-file-trace` - * See https://github.com/zeit/node-file-trace/issues/104 - * It's necessary to run this package standalone or within the sdk in Vercel - * And needed for https://github.com/vercel/pkg#detecting-assets-in-source-code - */ - -path.join(__dirname, '../query-engine-darwin') -path.join(__dirname, '../introspection-engine-darwin') -path.join(__dirname, '../prisma-fmt-darwin') - -path.join(__dirname, '../query-engine-darwin-arm64') -path.join(__dirname, '../introspection-engine-darwin-arm64') -path.join(__dirname, '../prisma-fmt-darwin-arm64') - -path.join(__dirname, '../query-engine-debian-openssl-1.0.x') -path.join(__dirname, '../introspection-engine-debian-openssl-1.0.x') -path.join(__dirname, '../prisma-fmt-debian-openssl-1.0.x') - -path.join(__dirname, '../query-engine-debian-openssl-1.1.x') -path.join(__dirname, '../introspection-engine-debian-openssl-1.1.x') -path.join(__dirname, '../prisma-fmt-debian-openssl-1.1.x') - -path.join(__dirname, '../query-engine-debian-openssl-3.0.x') -path.join(__dirname, '../introspection-engine-debian-openssl-3.0.x') -path.join(__dirname, '../prisma-fmt-debian-openssl-3.0.x') - -path.join(__dirname, '../query-engine-rhel-openssl-1.0.x') -path.join(__dirname, '../introspection-engine-rhel-openssl-1.0.x') -path.join(__dirname, '../prisma-fmt-rhel-openssl-1.0.x') - -path.join(__dirname, '../query-engine-rhel-openssl-1.1.x') -path.join(__dirname, '../introspection-engine-rhel-openssl-1.1.x') -path.join(__dirname, '../prisma-fmt-rhel-openssl-1.1.x') - -path.join(__dirname, '../query-engine-rhel-openssl-3.0.x') -path.join(__dirname, '../introspection-engine-rhel-openssl-3.0.x') -path.join(__dirname, '../prisma-fmt-rhel-openssl-3.0.x') - -// Node API -path.join(__dirname, '../libquery_engine-darwin.dylib.node') -path.join(__dirname, '../libquery_engine-darwin-arm64.dylib.node') -path.join(__dirname, '../libquery_engine-debian-openssl-1.0.x.so.node') -path.join(__dirname, '../libquery_engine-debian-openssl-1.1.x.so.node') -path.join(__dirname, '../libquery_engine-debian-openssl-3.0.x.so.node') -path.join(__dirname, '../libquery_engine-linux-arm64-openssl-1.0.x.so.node') -path.join(__dirname, '../libquery_engine-linux-arm64-openssl-1.1.x.so.node') -path.join(__dirname, '../libquery_engine-linux-arm64-openssl-3.0.x.so.node') -path.join(__dirname, '../libquery_engine-linux-musl.so.node') -path.join(__dirname, '../libquery_engine-rhel-openssl-1.0.x.so.node') -path.join(__dirname, '../libquery_engine-rhel-openssl-1.1.x.so.node') -path.join(__dirname, '../libquery_engine-rhel-openssl-3.0.x.so.node') -path.join(__dirname, '../query_engine-windows.dll.node') diff --git a/packages/engines/tsconfig.json b/packages/engines/tsconfig.json deleted file mode 100644 index 4e721d860..000000000 --- a/packages/engines/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "lib": ["esnext"], - "module": "commonjs", - "target": "es2018", - "strict": false, - "esModuleInterop": true, - "sourceMap": true, - "noImplicitAny": false, - "outDir": "dist", - "rootDir": "src", - "declaration": true, - "incremental": true - }, - "exclude": ["src/__tests__", "dist", "build", "scripts"] -} diff --git a/packages/fetch-engine/.eslintignore b/packages/fetch-engine/.eslintignore deleted file mode 100644 index b6e5f2b64..000000000 --- a/packages/fetch-engine/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -dist -scripts \ No newline at end of file diff --git a/packages/fetch-engine/.eslintrc.js b/packages/fetch-engine/.eslintrc.js deleted file mode 100644 index 6dace2a12..000000000 --- a/packages/fetch-engine/.eslintrc.js +++ /dev/null @@ -1,6 +0,0 @@ -const path = require('path') -const config = require('../../../.eslintrc.js') - -config.parserOptions.project.push(path.join(__dirname, 'tsconfig.eslint.json')) - -module.exports = config diff --git a/packages/fetch-engine/.gitignore b/packages/fetch-engine/.gitignore deleted file mode 100644 index 51f5db6df..000000000 --- a/packages/fetch-engine/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -node_modules -dist -build -runtime -download -cli -.DS_Store -prisma -schema-inferrer-bin -test -sandbox -pnpm-lock.yaml diff --git a/packages/fetch-engine/.prettierignore b/packages/fetch-engine/.prettierignore deleted file mode 100644 index 53c37a166..000000000 --- a/packages/fetch-engine/.prettierignore +++ /dev/null @@ -1 +0,0 @@ -dist \ No newline at end of file diff --git a/packages/fetch-engine/.prettierrc.yml b/packages/fetch-engine/.prettierrc.yml deleted file mode 100644 index bbaf47227..000000000 --- a/packages/fetch-engine/.prettierrc.yml +++ /dev/null @@ -1,5 +0,0 @@ -tabWidth: 2 -trailingComma: all -singleQuote: true -semi: false -printWidth: 80 diff --git a/packages/fetch-engine/README.md b/packages/fetch-engine/README.md deleted file mode 100644 index 92a8840f9..000000000 --- a/packages/fetch-engine/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# @prisma/fetch-engine - -Responsible for downloading and caching the latest Rust binary - -⚠️ **Warning**: This package is intended for Prisma's internal use. -Its release cycle does not follow SemVer, which means we might release breaking changes (change APIs, remove functionality) without any prior warning. - -If you are using this package, it would be helpful if you could help us gain an understanding where, how and why you are using it. Your feedback will be valuable to us to define a better API. Please share this information at https://github.com/prisma/prisma/discussions/13877 - Thanks! diff --git a/packages/fetch-engine/jest.config.js b/packages/fetch-engine/jest.config.js deleted file mode 100644 index 721c2961a..000000000 --- a/packages/fetch-engine/jest.config.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', - collectCoverage: process.env.CI ? true : false, - coverageReporters: ['clover'], - coverageDirectory: 'src/__tests__/coverage', - testMatch: ['**/src/__tests__/**/*.test.ts'], - collectCoverageFrom: ['src/**/*.ts', '!**/__tests__/**/*'], -} diff --git a/packages/fetch-engine/package.json b/packages/fetch-engine/package.json deleted file mode 100644 index 482c6dd65..000000000 --- a/packages/fetch-engine/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "@prisma/fetch-engine", - "version": "4.1.0-5.e82e1a549e41aa2c572eb3d35208d12e526c3ed0", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "license": "Apache-2.0", - "author": "Tim Suchanek ", - "homepage": "https://www.prisma.io", - "repository": "git@github.com:prisma/prisma.git", - "maintainers": [ - "Tim Suchanek ", - "Joël Galeran ", - "William Luke " - ], - "bugs": "https://github.com/prisma/prisma/issues", - "devDependencies": { - "@prisma/engines-version": "workspace:4.1.0-5.e82e1a549e41aa2c572eb3d35208d12e526c3ed0", - "@types/find-cache-dir": "3.2.1", - "@types/jest": "27.5.2", - "@types/node": "16.11.41", - "@types/node-fetch": "2.6.2", - "@types/progress": "2.0.5", - "@typescript-eslint/eslint-plugin": "5.30.0", - "@typescript-eslint/parser": "5.30.0", - "del": "6.1.1", - "eslint": "8.18.0", - "eslint-config-prettier": "8.5.0", - "eslint-plugin-eslint-comments": "3.2.0", - "eslint-plugin-jest": "25.7.0", - "eslint-plugin-prettier": "4.1.0", - "jest": "27.5.1", - "lint-staged": "11.2.6", - "prettier": "2.7.1", - "strip-ansi": "6.0.1", - "ts-jest": "27.1.5", - "typescript": "4.7.4" - }, - "dependencies": { - "@prisma/debug": "3.15.2", - "@prisma/get-platform": "workspace:4.1.0-5.e82e1a549e41aa2c572eb3d35208d12e526c3ed0", - "chalk": "4.1.2", - "execa": "5.1.1", - "find-cache-dir": "3.3.2", - "hasha": "5.2.2", - "http-proxy-agent": "5.0.0", - "https-proxy-agent": "5.0.1", - "make-dir": "3.1.0", - "node-fetch": "2.6.7", - "p-filter": "2.1.0", - "p-map": "4.0.0", - "p-retry": "4.6.2", - "progress": "2.0.3", - "rimraf": "3.0.2", - "temp-dir": "2.0.0", - "tempy": "1.0.1" - }, - "scripts": { - "build": "tsc -d", - "prepublishOnly": "pnpm run build", - "format": "prettier --write .", - "lint": "eslint --cache --fix --ext .ts .", - "lint-ci": "eslint --ext .ts .", - "test": "jest", - "precommit": "lint-staged" - }, - "files": [ - "README.md", - "dist" - ], - "lint-staged": { - "*.ts": [ - "eslint", - "prettier --write" - ] - } -} \ No newline at end of file diff --git a/packages/fetch-engine/scripts/test-getLatestAlpha.ts b/packages/fetch-engine/scripts/test-getLatestAlpha.ts deleted file mode 100644 index 54a6f2afc..000000000 --- a/packages/fetch-engine/scripts/test-getLatestAlpha.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { getLatestTag } from '../src' - -getLatestTag().then((x) => console.log(x)) diff --git a/packages/fetch-engine/scripts/test.ts b/packages/fetch-engine/scripts/test.ts deleted file mode 100644 index cdce2fc70..000000000 --- a/packages/fetch-engine/scripts/test.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { download } from '../src' -import path from 'path' - -download({ - binaries: { - 'query-engine': path.join(__dirname, '../test'), - 'migration-engine': path.join(__dirname, '../test'), - }, - binaryTargets: [ - 'darwin', - 'windows', - 'debian-openssl-1.0.x', - 'debian-openssl-1.1.x', - 'debian-openssl-3.0.x', - 'rhel-openssl-1.0.x', - 'rhel-openssl-1.1.x', - 'rhel-openssl-3.0.x', - 'linux-musl', - ], - showProgress: true, -}) diff --git a/packages/fetch-engine/src/__tests__/.gitignore b/packages/fetch-engine/src/__tests__/.gitignore deleted file mode 100644 index 251e47270..000000000 --- a/packages/fetch-engine/src/__tests__/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*engine* -prisma-fmt* \ No newline at end of file diff --git a/packages/fetch-engine/src/__tests__/__utils__/getFiles.ts b/packages/fetch-engine/src/__tests__/__utils__/getFiles.ts deleted file mode 100644 index 869892dd7..000000000 --- a/packages/fetch-engine/src/__tests__/__utils__/getFiles.ts +++ /dev/null @@ -1,10 +0,0 @@ -import fs from 'fs' -import path from 'path' -export function getFiles(dir: string): Array<{ name: string; size: number }> { - const files = fs.readdirSync(dir, 'utf8') - return files.map((name) => { - const size = fs.statSync(path.join(dir, name)).size - - return { name, size } - }) -} diff --git a/packages/fetch-engine/src/__tests__/all/.gitkeep b/packages/fetch-engine/src/__tests__/all/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/fetch-engine/src/__tests__/corruption/.gitkeep b/packages/fetch-engine/src/__tests__/corruption/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/fetch-engine/src/__tests__/download.test.ts b/packages/fetch-engine/src/__tests__/download.test.ts deleted file mode 100644 index 30cb1492f..000000000 --- a/packages/fetch-engine/src/__tests__/download.test.ts +++ /dev/null @@ -1,563 +0,0 @@ -import { enginesVersion } from '@prisma/engines-version' -import { getPlatform } from '@prisma/get-platform' -import del from 'del' -import fs from 'fs' -import path from 'path' -import stripAnsi from 'strip-ansi' -import { cleanupCache } from '../cleanupCache' -import { - checkVersionCommand, - download, - getBinaryName, - getVersion, -} from '../download' -import { getFiles } from './__utils__/getFiles' - -const CURRENT_BINARIES_HASH = enginesVersion - -const FIXED_BINARIES_HASH = 'a10084a836a379babc008c28b143dc1c7e644453' - -jest.setTimeout(120_000) - -describe('download', () => { - beforeEach(async () => { - // completely clean up the cache and keep nothing - await cleanupCache(0) - await del(__dirname + '/**/*engine*') - await del(__dirname + '/**/prisma-fmt*') - }) - afterEach(() => delete process.env.PRISMA_QUERY_ENGINE_BINARY) - test('basic download', async () => { - const platform = await getPlatform() - const queryEnginePath = path.join( - __dirname, - getBinaryName('query-engine', platform), - ) - const introspectionEnginePath = path.join( - __dirname, - getBinaryName('introspection-engine', platform), - ) - const migrationEnginePath = path.join( - __dirname, - getBinaryName('migration-engine', platform), - ) - const prismafmtPath = path.join( - __dirname, - getBinaryName('prisma-fmt', platform), - ) - - await download({ - binaries: { - 'query-engine': __dirname, - 'introspection-engine': __dirname, - 'migration-engine': __dirname, - 'prisma-fmt': __dirname, - }, - version: FIXED_BINARIES_HASH, - }) - - expect(await getVersion(queryEnginePath)).toMatchInlineSnapshot( - `"query-engine a10084a836a379babc008c28b143dc1c7e644453"`, - ) - expect(await getVersion(introspectionEnginePath)).toMatchInlineSnapshot( - `"introspection-core a10084a836a379babc008c28b143dc1c7e644453"`, - ) - expect(await getVersion(migrationEnginePath)).toMatchInlineSnapshot( - `"migration-engine-cli a10084a836a379babc008c28b143dc1c7e644453"`, - ) - expect(await getVersion(prismafmtPath)).toMatchInlineSnapshot( - `"prisma-fmt a10084a836a379babc008c28b143dc1c7e644453"`, - ) - }) - - test('basic download all current binaries', async () => { - const platform = await getPlatform() - const queryEnginePath = path.join( - __dirname, - getBinaryName('query-engine', platform), - ) - const introspectionEnginePath = path.join( - __dirname, - getBinaryName('introspection-engine', platform), - ) - const migrationEnginePath = path.join( - __dirname, - getBinaryName('migration-engine', platform), - ) - const prismafmtPath = path.join( - __dirname, - getBinaryName('prisma-fmt', platform), - ) - - await download({ - binaries: { - 'query-engine': __dirname, - 'introspection-engine': __dirname, - 'migration-engine': __dirname, - 'prisma-fmt': __dirname, - }, - binaryTargets: [ - 'darwin', - 'darwin-arm64', - 'debian-openssl-1.0.x', - 'debian-openssl-1.1.x', - 'debian-openssl-3.0.x', - 'linux-arm64-openssl-1.0.x', - 'linux-arm64-openssl-1.1.x', - 'linux-arm64-openssl-3.0.x', - 'rhel-openssl-1.0.x', - 'rhel-openssl-1.1.x', - 'rhel-openssl-3.0.x', - 'windows', - 'linux-musl', - ], - version: CURRENT_BINARIES_HASH, - }) - - // Check that all binaries git hash are the same - expect(await getVersion(queryEnginePath)).toContain(CURRENT_BINARIES_HASH) - expect(await getVersion(introspectionEnginePath)).toContain( - CURRENT_BINARIES_HASH, - ) - expect(await getVersion(migrationEnginePath)).toContain( - CURRENT_BINARIES_HASH, - ) - expect(await getVersion(prismafmtPath)).toContain(CURRENT_BINARIES_HASH) - }) - - test('auto heal corrupt binary', async () => { - const platform = await getPlatform() - const baseDir = path.join(__dirname, 'corruption') - const targetPath = path.join( - baseDir, - getBinaryName('query-engine', platform), - ) - if (fs.existsSync(targetPath)) { - try { - fs.unlinkSync(targetPath) - } catch (e) { - console.error(e) - } - } - - await download({ - binaries: { - 'query-engine': baseDir, - }, - version: FIXED_BINARIES_HASH, - }) - - fs.writeFileSync(targetPath, 'incorrect-binary') - - // please heal it - await download({ - binaries: { - 'query-engine': baseDir, - }, - version: FIXED_BINARIES_HASH, - }) - - expect(fs.existsSync(targetPath)).toBe(true) - - expect(await checkVersionCommand(targetPath)).toBe(true) - }) - - test('handle non-existent binary target', async () => { - await expect( - download({ - binaries: { - 'query-engine': __dirname, - }, - version: FIXED_BINARIES_HASH, - binaryTargets: ['darwin', 'marvin'] as any, // eslint-disable-line @typescript-eslint/no-explicit-any - }), - ).rejects.toThrowErrorMatchingInlineSnapshot( - `"Unknown binaryTarget marvin and no custom engine files were provided"`, - ) - }) - - test('handle non-existent binary target with missing custom binaries', async () => { - expect.assertions(1) - process.env.PRISMA_QUERY_ENGINE_BINARY = '../query-engine' - try { - await download({ - binaries: { - 'query-engine': __dirname, - }, - version: FIXED_BINARIES_HASH, - binaryTargets: ['darwin', 'marvin'] as any, // eslint-disable-line @typescript-eslint/no-explicit-any - }) - } catch (err: any) { - expect(stripAnsi(err.message)).toMatchInlineSnapshot( - `"Env var PRISMA_QUERY_ENGINE_BINARY is provided but provided path ../query-engine can't be resolved."`, - ) - } - }) - - test('handle non-existent binary target with custom binaries', async () => { - const e = await download({ - binaries: { - 'query-engine': __dirname, - }, - }) - const dummyPath = e['query-engine']![Object.keys(e['query-engine']!)[0]]! - const targetPath = path.join( - __dirname, - // @ts-ignore - getBinaryName('query-engine', 'marvin'), - ) - fs.copyFileSync(dummyPath, targetPath) - process.env.PRISMA_QUERY_ENGINE_BINARY = targetPath - - const testResult = await download({ - binaries: { - 'query-engine': path.join(__dirname, 'all'), - }, - binaryTargets: ['marvin'] as any, // eslint-disable-line @typescript-eslint/no-explicit-any - }) - expect(testResult['query-engine']!['marvin']).toEqual(targetPath) - }) - - test('download all binaries & cache them', async () => { - const baseDir = path.join(__dirname, 'all') - - const before0 = Date.now() - await download({ - binaries: { - 'query-engine': baseDir, - 'introspection-engine': baseDir, - 'migration-engine': baseDir, - 'prisma-fmt': baseDir, - }, - binaryTargets: [ - 'darwin', - 'darwin-arm64', - 'debian-openssl-1.0.x', - 'debian-openssl-1.1.x', - 'debian-openssl-3.0.x', - 'linux-arm64-openssl-1.0.x', - 'linux-arm64-openssl-1.1.x', - 'linux-arm64-openssl-3.0.x', - 'rhel-openssl-1.0.x', - 'rhel-openssl-1.1.x', - 'rhel-openssl-3.0.x', - 'windows', - 'linux-musl', - ], - version: FIXED_BINARIES_HASH, - }) - const after0 = Date.now() - const timeInMsToDownloadAll = after0 - before0 - console.debug( - `1 - No Cache: first time, download everything. -It took ${timeInMsToDownloadAll}ms to execute download() for all binaryTargets.`, - ) - - const files = getFiles(baseDir) - expect(files).toMatchInlineSnapshot(` - Array [ - Object { - "name": ".gitkeep", - "size": 0, - }, - Object { - "name": "introspection-engine-darwin", - "size": 24650392, - }, - Object { - "name": "introspection-engine-darwin-arm64", - "size": 22623570, - }, - Object { - "name": "introspection-engine-debian-openssl-1.0.x", - "size": 32763352, - }, - Object { - "name": "introspection-engine-debian-openssl-1.1.x", - "size": 30046976, - }, - Object { - "name": "introspection-engine-debian-openssl-3.0.x", - "size": 30042880, - }, - Object { - "name": "introspection-engine-linux-arm64-openssl-1.0.x", - "size": 30636624, - }, - Object { - "name": "introspection-engine-linux-arm64-openssl-1.1.x", - "size": 31171104, - }, - Object { - "name": "introspection-engine-linux-arm64-openssl-3.0.x", - "size": 33032912, - }, - Object { - "name": "introspection-engine-linux-musl", - "size": 31989408, - }, - Object { - "name": "introspection-engine-rhel-openssl-1.0.x", - "size": 32733872, - }, - Object { - "name": "introspection-engine-rhel-openssl-1.1.x", - "size": 30042240, - }, - Object { - "name": "introspection-engine-rhel-openssl-3.0.x", - "size": 30041920, - }, - Object { - "name": "introspection-engine-windows.exe", - "size": 21052928, - }, - Object { - "name": "migration-engine-darwin", - "size": 27220536, - }, - Object { - "name": "migration-engine-darwin-arm64", - "size": 24909118, - }, - Object { - "name": "migration-engine-debian-openssl-1.0.x", - "size": 33050208, - }, - Object { - "name": "migration-engine-debian-openssl-1.1.x", - "size": 33022816, - }, - Object { - "name": "migration-engine-debian-openssl-3.0.x", - "size": 33022816, - }, - Object { - "name": "migration-engine-linux-arm64-openssl-1.0.x", - "size": 33031376, - }, - Object { - "name": "migration-engine-linux-arm64-openssl-1.1.x", - "size": 33776744, - }, - Object { - "name": "migration-engine-linux-arm64-openssl-3.0.x", - "size": 35630536, - }, - Object { - "name": "migration-engine-linux-musl", - "size": 34831568, - }, - Object { - "name": "migration-engine-rhel-openssl-1.0.x", - "size": 33030584, - }, - Object { - "name": "migration-engine-rhel-openssl-1.1.x", - "size": 33017984, - }, - Object { - "name": "migration-engine-rhel-openssl-3.0.x", - "size": 33017464, - }, - Object { - "name": "migration-engine-windows.exe", - "size": 23660544, - }, - Object { - "name": "prisma-fmt-darwin", - "size": 4830720, - }, - Object { - "name": "prisma-fmt-darwin-arm64", - "size": 4487528, - }, - Object { - "name": "prisma-fmt-debian-openssl-1.0.x", - "size": 9253888, - }, - Object { - "name": "prisma-fmt-debian-openssl-1.1.x", - "size": 9253880, - }, - Object { - "name": "prisma-fmt-debian-openssl-3.0.x", - "size": 9253880, - }, - Object { - "name": "prisma-fmt-linux-arm64-openssl-1.0.x", - "size": 9126736, - }, - Object { - "name": "prisma-fmt-linux-arm64-openssl-1.1.x", - "size": 9126720, - }, - Object { - "name": "prisma-fmt-linux-arm64-openssl-3.0.x", - "size": 9126720, - }, - Object { - "name": "prisma-fmt-linux-musl", - "size": 8856840, - }, - Object { - "name": "prisma-fmt-rhel-openssl-1.0.x", - "size": 9253704, - }, - Object { - "name": "prisma-fmt-rhel-openssl-1.1.x", - "size": 9253688, - }, - Object { - "name": "prisma-fmt-rhel-openssl-3.0.x", - "size": 9253688, - }, - Object { - "name": "prisma-fmt-windows.exe", - "size": 3839488, - }, - Object { - "name": "query-engine-darwin", - "size": 36528712, - }, - Object { - "name": "query-engine-darwin-arm64", - "size": 33495274, - }, - Object { - "name": "query-engine-debian-openssl-1.0.x", - "size": 44315040, - }, - Object { - "name": "query-engine-debian-openssl-1.1.x", - "size": 44277288, - }, - Object { - "name": "query-engine-debian-openssl-3.0.x", - "size": 44276592, - }, - Object { - "name": "query-engine-linux-arm64-openssl-1.0.x", - "size": 43422656, - }, - Object { - "name": "query-engine-linux-arm64-openssl-1.1.x", - "size": 44142632, - }, - Object { - "name": "query-engine-linux-arm64-openssl-3.0.x", - "size": 45996360, - }, - Object { - "name": "query-engine-linux-musl", - "size": 45587904, - }, - Object { - "name": "query-engine-rhel-openssl-1.0.x", - "size": 44291688, - }, - Object { - "name": "query-engine-rhel-openssl-1.1.x", - "size": 44272184, - }, - Object { - "name": "query-engine-rhel-openssl-3.0.x", - "size": 44271560, - }, - Object { - "name": "query-engine-windows.exe", - "size": 33288704, - }, - ] - `) - - // - // Cache test 1 - // 1- We delete the artifacts locally but not from the cache folder - // 2- We measure how much time it takes to call download - // - - // Delete all artifacts - await del(baseDir + '/*engine*') - await del(baseDir + '/prisma-fmt*') - - const before = Date.now() - await download({ - binaries: { - 'query-engine': baseDir, - 'introspection-engine': baseDir, - 'migration-engine': baseDir, - 'prisma-fmt': baseDir, - }, - binaryTargets: [ - 'darwin', - 'darwin-arm64', - 'debian-openssl-1.0.x', - 'debian-openssl-1.1.x', - 'debian-openssl-3.0.x', - 'linux-arm64-openssl-1.0.x', - 'linux-arm64-openssl-1.1.x', - 'linux-arm64-openssl-3.0.x', - 'rhel-openssl-1.0.x', - 'rhel-openssl-1.1.x', - 'rhel-openssl-3.0.x', - 'windows', - 'linux-musl', - ], - version: FIXED_BINARIES_HASH, - }) - const after = Date.now() - const timeInMsToDownloadAllFromCache1 = after - before - console.debug( - `2 - With cache1: We deleted the engines locally but not from the cache folder. -It took ${timeInMsToDownloadAllFromCache1}ms to execute download() for all binaryTargets.`, - ) - - // - // Cache test 1 - // 1- We keep all artifacts from previous download - // 2- We measure how much time it takes to call download - // - const before2 = Date.now() - await download({ - binaries: { - 'query-engine': baseDir, - 'introspection-engine': baseDir, - 'migration-engine': baseDir, - 'prisma-fmt': baseDir, - }, - binaryTargets: [ - 'darwin', - 'darwin-arm64', - 'debian-openssl-1.0.x', - 'debian-openssl-1.1.x', - 'debian-openssl-3.0.x', - 'linux-arm64-openssl-1.0.x', - 'linux-arm64-openssl-1.1.x', - 'linux-arm64-openssl-3.0.x', - 'rhel-openssl-1.0.x', - 'rhel-openssl-1.1.x', - 'rhel-openssl-3.0.x', - 'windows', - 'linux-musl', - ], - version: FIXED_BINARIES_HASH, - }) - const after2 = Date.now() - const timeInMsToDownloadAllFromCache2 = after2 - before2 - console.debug( - `3 - With cache2: Engines were already present -It took ${timeInMsToDownloadAllFromCache2}ms to execute download() for all binaryTargets.`, - ) - - // This is a rather high number to avoid flakiness in CI - expect(timeInMsToDownloadAllFromCache1).toBeLessThan(40_000) - expect(timeInMsToDownloadAllFromCache2).toBeLessThan(40_000) - - // Using cache should be faster - expect(timeInMsToDownloadAllFromCache1).toBeLessThan(timeInMsToDownloadAll) - expect(timeInMsToDownloadAllFromCache2).toBeLessThan( - timeInMsToDownloadAllFromCache1, - ) - }) -}) diff --git a/packages/fetch-engine/src/__tests__/node-api.test.ts b/packages/fetch-engine/src/__tests__/node-api.test.ts deleted file mode 100644 index c779d6990..000000000 --- a/packages/fetch-engine/src/__tests__/node-api.test.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { enginesVersion } from '@prisma/engines-version' -import del from 'del' -import path from 'path' -import { cleanupCache } from '../cleanupCache' -import { download } from '../download' -import { getFiles } from './__utils__/getFiles' - -const CURRENT_BINARIES_HASH = enginesVersion - -jest.setTimeout(120_000) - -describe('download', () => { - beforeEach(async () => { - // completely clean up the cache and keep nothing - await cleanupCache(0) - await del(__dirname + '/**/*engine*') - await del(__dirname + '/**/prisma-fmt*') - }) - - afterEach(() => delete process.env.PRISMA_QUERY_ENGINE_BINARY) - - test('download all node-api libraries & cache them', async () => { - // Channel and Version are currently hardcoded - const baseDir = path.join(__dirname, 'node-api') - - await download({ - binaries: { - 'libquery-engine': baseDir, - }, - binaryTargets: [ - 'darwin', - 'darwin-arm64', - 'debian-openssl-1.0.x', - 'debian-openssl-1.1.x', - 'debian-openssl-3.0.x', - 'linux-arm64-openssl-1.0.x', - 'linux-arm64-openssl-1.1.x', - 'linux-arm64-openssl-3.0.x', - 'rhel-openssl-1.0.x', - 'rhel-openssl-1.1.x', - 'rhel-openssl-3.0.x', - 'windows', - 'linux-musl', - ], - version: CURRENT_BINARIES_HASH, - }) - - const files = getFiles(baseDir).map((f) => ({ ...f, size: 'X' })) - - expect(files).toMatchInlineSnapshot(` -Array [ - Object { - "name": ".gitkeep", - "size": "X", - }, - Object { - "name": "libquery_engine-darwin-arm64.dylib.node", - "size": "X", - }, - Object { - "name": "libquery_engine-darwin.dylib.node", - "size": "X", - }, - Object { - "name": "libquery_engine-debian-openssl-1.0.x.so.node", - "size": "X", - }, - Object { - "name": "libquery_engine-debian-openssl-1.1.x.so.node", - "size": "X", - }, - Object { - "name": "libquery_engine-debian-openssl-3.0.x.so.node", - "size": "X", - }, - Object { - "name": "libquery_engine-linux-arm64-openssl-1.0.x.so.node", - "size": "X", - }, - Object { - "name": "libquery_engine-linux-arm64-openssl-1.1.x.so.node", - "size": "X", - }, - Object { - "name": "libquery_engine-linux-arm64-openssl-3.0.x.so.node", - "size": "X", - }, - Object { - "name": "libquery_engine-linux-musl.so.node", - "size": "X", - }, - Object { - "name": "libquery_engine-rhel-openssl-1.0.x.so.node", - "size": "X", - }, - Object { - "name": "libquery_engine-rhel-openssl-1.1.x.so.node", - "size": "X", - }, - Object { - "name": "libquery_engine-rhel-openssl-3.0.x.so.node", - "size": "X", - }, - Object { - "name": "query_engine-windows.dll.node", - "size": "X", - }, -] -`) - }) -}) diff --git a/packages/fetch-engine/src/__tests__/node-api/.gitkeep b/packages/fetch-engine/src/__tests__/node-api/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/fetch-engine/src/chmod.ts b/packages/fetch-engine/src/chmod.ts deleted file mode 100644 index d9c54b80c..000000000 --- a/packages/fetch-engine/src/chmod.ts +++ /dev/null @@ -1,9 +0,0 @@ -import * as fs from 'fs' - -export default function (file): void { - const s = fs.statSync(file) - const newMode = s.mode | 64 | 8 | 1 - if (s.mode === newMode) return - const base8 = newMode.toString(8).slice(-3) - fs.chmodSync(file, base8) -} diff --git a/packages/fetch-engine/src/cleanupCache.ts b/packages/fetch-engine/src/cleanupCache.ts deleted file mode 100644 index 3c8d319bd..000000000 --- a/packages/fetch-engine/src/cleanupCache.ts +++ /dev/null @@ -1,42 +0,0 @@ -import fs from 'fs' -import path from 'path' -import { getRootCacheDir } from './util' -import rimraf from 'rimraf' -import { promisify } from 'util' -import pMap from 'p-map' - -import Debug from '@prisma/debug' -const debug = Debug('cleanupCache') -const del = promisify(rimraf) -const readdir = promisify(fs.readdir) -const stat = promisify(fs.stat) - -// TODO: why not have a n = 2 to have a smaller cache? -export async function cleanupCache(n = 5): Promise { - try { - const rootCacheDir = await getRootCacheDir() - if (!rootCacheDir) { - debug('no rootCacheDir found') - return - } - const channel = 'master' - const cacheDir = path.join(rootCacheDir, channel) - const dirs = await readdir(cacheDir) - const dirsWithMeta = await Promise.all( - dirs.map(async (dirName) => { - const dir = path.join(cacheDir, dirName) - const statResult = await stat(dir) - - return { - dir, - created: statResult.birthtime, - } - }), - ) - dirsWithMeta.sort((a, b) => (a.created < b.created ? 1 : -1)) - const dirsToRemove = dirsWithMeta.slice(n) - await pMap(dirsToRemove, (dir) => del(dir.dir), { concurrency: 20 }) - } catch (e) { - // fail silently - } -} diff --git a/packages/fetch-engine/src/download.ts b/packages/fetch-engine/src/download.ts deleted file mode 100644 index 956f3c578..000000000 --- a/packages/fetch-engine/src/download.ts +++ /dev/null @@ -1,568 +0,0 @@ -import Debug from '@prisma/debug' -import { - getNodeAPIName, - getos, - getPlatform, - isNodeAPISupported, - Platform, - platforms, -} from '@prisma/get-platform' -import chalk from 'chalk' -import execa from 'execa' -import fs from 'fs' -import makeDir from 'make-dir' -import pFilter from 'p-filter' -import path from 'path' -import tempDir from 'temp-dir' -import { promisify } from 'util' -import plusxSync from './chmod' -import { cleanupCache } from './cleanupCache' -import { downloadZip } from './downloadZip' -import { flatMap } from './flatMap' -import { getHash } from './getHash' -import { getLatestTag } from './getLatestTag' -import { getBar } from './log' -import { getCacheDir, getDownloadUrl } from './util' - -const debug = Debug('prisma:download') -const writeFile = promisify(fs.writeFile) -const exists = promisify(fs.exists) -const readFile = promisify(fs.readFile) -const copyFile = promisify(fs.copyFile) -const utimes = promisify(fs.utimes) - -const channel = 'master' -export enum BinaryType { - queryEngine = 'query-engine', - libqueryEngine = 'libquery-engine', - migrationEngine = 'migration-engine', - introspectionEngine = 'introspection-engine', - prismaFmt = 'prisma-fmt', -} -export type BinaryDownloadConfiguration = { - [binary in BinaryType]?: string // that is a path to the binary download location -} -export type BinaryPaths = { - [binary in BinaryType]?: { [binaryTarget in Platform]: string } // key: target, value: path -} -export interface DownloadOptions { - binaries: BinaryDownloadConfiguration - binaryTargets?: Platform[] - showProgress?: boolean - progressCb?: (progress: number) => void - version?: string - skipDownload?: boolean - failSilent?: boolean - ignoreCache?: boolean - printVersion?: boolean -} - -const BINARY_TO_ENV_VAR = { - [BinaryType.migrationEngine]: 'PRISMA_MIGRATION_ENGINE_BINARY', - [BinaryType.queryEngine]: 'PRISMA_QUERY_ENGINE_BINARY', - [BinaryType.libqueryEngine]: 'PRISMA_QUERY_ENGINE_LIBRARY', - [BinaryType.introspectionEngine]: 'PRISMA_INTROSPECTION_ENGINE_BINARY', - [BinaryType.prismaFmt]: 'PRISMA_FMT_BINARY', -} - -type BinaryDownloadJob = { - binaryName: string - targetFolder: string - binaryTarget: Platform - fileName: string - targetFilePath: string - envVarPath: string | null -} - -export async function download(options: DownloadOptions): Promise { - // get platform - const platform = await getPlatform() - const os = await getos() - - if (os.distro && ['nixos'].includes(os.distro)) { - console.error( - `${chalk.yellow('Warning')} Precompiled engine files are not available for ${ - os.distro - }.`, - ) - } else if ( - ['freebsd11', 'freebsd12', 'freebsd13', 'openbsd', 'netbsd'].includes( - platform, - ) - ) { - console.error( - `${chalk.yellow( - 'Warning', - )} Precompiled engine files are not available for ${platform}. Read more about building your own engines at https://pris.ly/d/build-engines`, - ) - } else if (BinaryType.libqueryEngine in options.binaries) { - await isNodeAPISupported() - } - - // no need to do anything, if there are no binaries - if (!options.binaries || Object.values(options.binaries).length === 0) { - return {} // we don't download anything if nothing is provided - } - - // merge options - const opts = { - ...options, - binaryTargets: options.binaryTargets ?? [platform], - version: options.version ?? 'latest', - binaries: mapKeys(options.binaries, (key) => - engineTypeToBinaryType(key, platform), - ), // just necessary to support both camelCase and hyphen-case - } - - // creates a matrix of binaries x binary targets - const binaryJobs = flatMap( - Object.entries(opts.binaries), - ([binaryName, targetFolder]: [string, string]) => - opts.binaryTargets.map((binaryTarget) => { - const fileName = - binaryName === BinaryType.libqueryEngine - ? getNodeAPIName(binaryTarget, 'fs') - : getBinaryName(binaryName, binaryTarget) - const targetFilePath = path.join(targetFolder, fileName) - return { - binaryName, - targetFolder, - binaryTarget, - fileName, - targetFilePath, - envVarPath: getBinaryEnvVarPath(binaryName), - } - }), - ) - - if (process.env.BINARY_DOWNLOAD_VERSION) { - opts.version = process.env.BINARY_DOWNLOAD_VERSION - } - - // TODO: look to remove latest, because we always pass a version - if (opts.version === 'latest') { - opts.version = await getLatestTag() - } - - if (opts.printVersion) { - console.log(`version: ${opts.version}`) - } - - // filter out files, which don't yet exist or have to be created - const binariesToDownload = await pFilter(binaryJobs, async (job) => { - const needsToBeDownloaded = await binaryNeedsToBeDownloaded( - job, - platform, - opts.version, - opts.failSilent, - ) - const isSupported = platforms.includes(job.binaryTarget as Platform) - const shouldDownload = - isSupported && - !job.envVarPath && // this is for custom binaries - (opts.ignoreCache || needsToBeDownloaded) // TODO: do we need ignoreCache? - if (needsToBeDownloaded && !isSupported) { - throw new Error( - `Unknown binaryTarget ${job.binaryTarget} and no custom engine files were provided`, - ) - } - return shouldDownload - }) - - if (binariesToDownload.length > 0) { - const cleanupPromise = cleanupCache() // already start cleaning up while we download - - let finishBar: undefined | (() => void) - let setProgress: - | undefined - | ((sourcePath: string) => (progress: number) => void) - - if (opts.showProgress) { - const collectiveBar = getCollectiveBar(opts) - finishBar = collectiveBar.finishBar - setProgress = collectiveBar.setProgress - } - - await Promise.all( - binariesToDownload.map((job) => - downloadBinary({ - ...job, - version: opts.version, - failSilent: opts.failSilent, - progressCb: setProgress ? setProgress(job.targetFilePath) : undefined, - }), - ), - ) - - await cleanupPromise // make sure, that cleanup finished - if (finishBar) { - finishBar() - } - } - - const binaryPaths = binaryJobsToBinaryPaths(binaryJobs) - const dir = eval('__dirname') - - // this is necessary for pkg - if (dir.startsWith('/snapshot/')) { - for (const engineType in binaryPaths) { - const binaryTargets = binaryPaths[engineType] - for (const binaryTarget in binaryTargets) { - const binaryPath = binaryTargets[binaryTarget] - binaryTargets[binaryTarget] = await maybeCopyToTmp(binaryPath) - } - } - } - - return binaryPaths -} - -function getCollectiveBar(options: DownloadOptions): { - finishBar: () => void - setProgress: (sourcePath: string) => (progress: number) => void -} { - const hasNodeAPI = 'libquery-engine' in options.binaries - const bar = getBar( - `Downloading Prisma engines${ - hasNodeAPI ? ' for Node-API' : '' - } for ${options.binaryTargets?.map((p) => chalk.bold(p)).join(' and ')}`, - ) - - const progressMap: { [key: string]: number } = {} - // Object.values is faster than Object.keys - const numDownloads = - Object.values(options.binaries).length * - Object.values(options?.binaryTargets ?? []).length - const setProgress = - (sourcePath: string) => - (progress): void => { - progressMap[sourcePath] = progress - const progressValues = Object.values(progressMap) - const totalProgress = - progressValues.reduce((acc, curr) => { - return acc + curr - }, 0) / numDownloads - if (options.progressCb) { - options.progressCb(totalProgress) - } - if (bar) { - bar.update(totalProgress) - } - } - - return { - setProgress, - finishBar: (): void => { - bar.update(1) - bar.terminate() - }, - } -} - -function binaryJobsToBinaryPaths(jobs: BinaryDownloadJob[]): BinaryPaths { - return jobs.reduce((acc, job) => { - if (!acc[job.binaryName]) { - acc[job.binaryName] = {} - } - - // if an env var path has been provided, prefer that one - acc[job.binaryName][job.binaryTarget] = job.envVarPath || job.targetFilePath - - return acc - }, {} as BinaryPaths) -} - -async function binaryNeedsToBeDownloaded( - job: BinaryDownloadJob, - nativePlatform: string, - version: string, - failSilent?: boolean, -): Promise { - // If there is an ENV Override and the file exists then it does not need to be downloaded - if (job.envVarPath && fs.existsSync(job.envVarPath)) { - return false - } - // 1. Check if file exists - const targetExists = await exists(job.targetFilePath) - // 2. If exists, check, if cached file exists and is up to date and has same hash as file. - // If not, copy cached file over - const cachedFile = await getCachedBinaryPath({ - ...job, - version, - failSilent, - }) - - if (cachedFile) { - const sha256FilePath = cachedFile + '.sha256' - if (await exists(sha256FilePath)) { - const sha256File = await readFile(sha256FilePath, 'utf-8') - const sha256Cache = await getHash(cachedFile) - if (sha256File === sha256Cache) { - if (!targetExists) { - debug(`copying ${cachedFile} to ${job.targetFilePath}`) - - // TODO Remove when https://github.com/docker/for-linux/issues/1015 is fixed - // Workaround for https://github.com/prisma/prisma/issues/7037 - await utimes(cachedFile, new Date(), new Date()) - - await copyFile(cachedFile, job.targetFilePath) - } - const targetSha256 = await getHash(job.targetFilePath) - if (sha256File !== targetSha256) { - debug( - `overwriting ${job.targetFilePath} with ${cachedFile} as hashes do not match`, - ) - await copyFile(cachedFile, job.targetFilePath) - } - return false - } else { - return true - } - } else { - return true - } - } - - // If there is no cache and the file doesn't exist, we for sure need to download it - if (!targetExists) { - debug(`file ${job.targetFilePath} does not exist and must be downloaded`) - return true - } - - // 3. If same platform, always check --version - if ( - job.binaryTarget === nativePlatform && - job.binaryName !== BinaryType.libqueryEngine - ) { - const works = await checkVersionCommand(job.targetFilePath) - return !works - } // TODO: this is probably not useful anymore - - return false -} - -export async function getVersion(enginePath: string): Promise { - const result = await execa(enginePath, ['--version']) - - return result.stdout -} - -export async function checkVersionCommand( - enginePath: string, -): Promise { - try { - const version = await getVersion(enginePath) - - return version.length > 0 - } catch (e) { - return false - } -} - -export function getBinaryName(binaryName: string, platform: Platform): string { - if (binaryName === BinaryType.libqueryEngine) { - return `${getNodeAPIName(platform, 'url')}` - } - const extension = platform === 'windows' ? '.exe' : '' - return `${binaryName}-${platform}${extension}` -} - -type GetCachedBinaryOptions = BinaryDownloadJob & { - version: string - failSilent?: boolean -} - -async function getCachedBinaryPath({ - version, - binaryTarget, - binaryName, -}: GetCachedBinaryOptions): Promise { - const cacheDir = await getCacheDir(channel, version, binaryTarget) - if (!cacheDir) { - return null - } - - const cachedTargetPath = path.join(cacheDir, binaryName) - - if (!fs.existsSync(cachedTargetPath)) { - return null - } - - // All versions not called 'latest' are unique - // only latest needs more checks - if (version !== 'latest') { - return cachedTargetPath - } - - if (await exists(cachedTargetPath)) { - return cachedTargetPath - } - - return null -} - -export function getBinaryEnvVarPath(binaryName: string): string | null { - const envVar = BINARY_TO_ENV_VAR[binaryName] - if (envVar && process.env[envVar]) { - const envVarPath = path.resolve( - process.cwd(), - process.env[envVar] as string, - ) - if (!fs.existsSync(envVarPath)) { - throw new Error( - `Env var ${chalk.bold( - envVar, - )} is provided but provided path ${chalk.underline( - process.env[envVar], - )} can't be resolved.`, - ) - } - debug( - `Using env var ${chalk.bold(envVar)} for binary ${chalk.bold( - binaryName, - )}, which points to ${chalk.underline(process.env[envVar])}`, - ) - return envVarPath - } - - return null -} - -type DownloadBinaryOptions = BinaryDownloadJob & { - version: string - progressCb?: (progress: number) => void - failSilent?: boolean -} - -async function downloadBinary(options: DownloadBinaryOptions): Promise { - const { version, progressCb, targetFilePath, binaryTarget, binaryName } = - options - const downloadUrl = getDownloadUrl( - 'all_commits', - version, - binaryTarget, - binaryName, - ) - - const targetDir = path.dirname(targetFilePath) - - try { - fs.accessSync(targetDir, fs.constants.W_OK) - await makeDir(targetDir) - } catch (e) { - if (options.failSilent || (e as NodeJS.ErrnoException).code !== 'EACCES') { - return - } else { - throw new Error( - `Can't write to ${targetDir} please make sure you install "prisma" with the right permissions.`, - ) - } - } - - debug(`Downloading ${downloadUrl} to ${targetFilePath}`) - - if (progressCb) { - progressCb(0) - } - - const { sha256, zippedSha256 } = await downloadZip( - downloadUrl, - targetFilePath, - progressCb, - ) - if (progressCb) { - progressCb(1) - } - - if (process.platform !== 'win32') { - plusxSync(targetFilePath) - } - - // Cache result - await saveFileToCache(options, version, sha256, zippedSha256) -} - -async function saveFileToCache( - job: BinaryDownloadJob, - version: string, - sha256: string, - zippedSha256: string, -): Promise { - // always fail silent, as the cache is optional - const cacheDir = await getCacheDir(channel, version, job.binaryTarget) - if (!cacheDir) { - return - } - - const cachedTargetPath = path.join(cacheDir, job.binaryName) - const cachedSha256Path = path.join(cacheDir, job.binaryName + '.sha256') - const cachedSha256ZippedPath = path.join( - cacheDir, - job.binaryName + '.gz.sha256', - ) - - try { - await copyFile(job.targetFilePath, cachedTargetPath) - await writeFile(cachedSha256Path, sha256) - await writeFile(cachedSha256ZippedPath, zippedSha256) - } catch (e) { - debug(e) - // let this fail silently - the CI system may have reached the file size limit - } -} - -function engineTypeToBinaryType( - engineType: string, - binaryTarget: string, -): string { - if (BinaryType[engineType]) { - return BinaryType[engineType] - } - if (engineType === 'native') { - return binaryTarget - } - - return engineType -} - -function mapKeys( - obj: T, - mapper: (key: K) => string, - // eslint-disable-next-line @typescript-eslint/no-explicit-any -) { - return Object.entries(obj).reduce((acc, [key, value]) => { - acc[mapper(key as K)] = value - return acc - }, {} as Record) -} - -export async function maybeCopyToTmp(file: string): Promise { - // in this case, we are in a "pkg" context with a virtual fs - // to make this work, we need to copy the binary to /tmp and execute it from there - - const dir = eval('__dirname') - if (dir.startsWith('/snapshot/')) { - const targetDir = path.join(tempDir, 'prisma-binaries') - await makeDir(targetDir) - const target = path.join(targetDir, path.basename(file)) - const data = await readFile(file) - await writeFile(target, data) - // We have to read and write until https://github.com/zeit/pkg/issues/639 - // is resolved - // await copyFile(file, target) - plusX(target) - return target - } - - return file -} - -export function plusX(file): void { - const s = fs.statSync(file) - const newMode = s.mode | 64 | 8 | 1 - if (s.mode === newMode) { - return - } - const base8 = newMode.toString(8).slice(-3) - fs.chmodSync(file, base8) -} diff --git a/packages/fetch-engine/src/downloadZip.ts b/packages/fetch-engine/src/downloadZip.ts deleted file mode 100644 index e3dc8c390..000000000 --- a/packages/fetch-engine/src/downloadZip.ts +++ /dev/null @@ -1,131 +0,0 @@ -import zlib from 'zlib' -import retry from 'p-retry' -import fetch from 'node-fetch' -import fs from 'fs' -import { getProxyAgent } from './getProxyAgent' -import tempy from 'tempy' -import path from 'path' -import Debug from '@prisma/debug' -import hasha from 'hasha' -import { promisify } from 'util' -import rimraf from 'rimraf' -const debug = Debug('prisma:downloadZip') -const del = promisify(rimraf) - -export type DownloadResult = { - lastModified: string - sha256: string - zippedSha256: string -} - -async function fetchSha256( - url: string, -): Promise<{ sha256: string; zippedSha256: string }> { - // We get a string like this: - // "3c82ee6cd9fedaec18a5e7cd3fc41f8c6b3dd32575dc13443d96aab4bd018411 query-engine.gz\n" - // So we split it by whitespace and just get the hash, as that's what we're interested in - const [zippedSha256, sha256] = [ - ( - await fetch(`${url}.sha256`, { - agent: getProxyAgent(url) as any, - }).then((res) => res.text()) - ).split(/\s+/)[0], - ( - await fetch(`${url.slice(0, url.length - 3)}.sha256`, { - agent: getProxyAgent(url.slice(0, url.length - 3)) as any, - }).then((res) => res.text()) - ).split(/\s+/)[0], - ] - - return { sha256, zippedSha256 } -} - -export async function downloadZip( - url: string, - target: string, - progressCb?: (progress: number) => void, -): Promise { - const tmpDir = tempy.directory() - const partial = path.join(tmpDir, 'partial') - const { sha256, zippedSha256 } = await fetchSha256(url) - const result = await retry( - async () => { - try { - const resp = await fetch(url, { - compress: false, - agent: getProxyAgent(url) as any, - }) - - if (resp.status !== 200) { - throw new Error(resp.statusText + ' ' + url) - } - - const lastModified = resp.headers.get('last-modified')! - const size = parseFloat(resp.headers.get('content-length') as string) - const ws = fs.createWriteStream(partial) - - // eslint-disable-next-line @typescript-eslint/no-misused-promises, no-async-promise-executor - return await new Promise(async (resolve, reject) => { - let bytesRead = 0 - - resp.body.on('error', reject).on('data', (chunk) => { - bytesRead += chunk.length - - if (size && progressCb) { - progressCb(bytesRead / size) - } - }) - - const gunzip = zlib.createGunzip() - - gunzip.on('error', reject) - - const zipStream = resp.body.pipe(gunzip) - const zippedHashPromise = hasha.fromStream(resp.body, { - algorithm: 'sha256', - }) - const hashPromise = hasha.fromStream(zipStream, { - algorithm: 'sha256', - }) - zipStream.pipe(ws) - - ws.on('error', reject).on('close', () => { - resolve({ lastModified, sha256, zippedSha256 }) - }) - - const hash = await hashPromise - const zippedHash = await zippedHashPromise - - if (zippedHash !== zippedSha256) { - throw new Error( - `sha256 of ${url} (zipped) should be ${zippedSha256} but is ${zippedHash}`, - ) - } - - if (hash !== sha256) { - throw new Error( - `sha256 of ${url} (uzipped) should be ${sha256} but is ${hash}`, - ) - } - }) - } finally { - // - } - }, - { - retries: 2, - onFailedAttempt: (err) => debug(err), - }, - ) - fs.copyFileSync(partial, target) - - // it's ok if the unlink fails - try { - await del(partial) - await del(tmpDir) - } catch (e) { - debug(e) - } - - return result as DownloadResult -} diff --git a/packages/fetch-engine/src/flatMap.ts b/packages/fetch-engine/src/flatMap.ts deleted file mode 100644 index 91671cb9e..000000000 --- a/packages/fetch-engine/src/flatMap.ts +++ /dev/null @@ -1,13 +0,0 @@ -function flatten(array: T[]): [] { - // @ts-ignore - return Array.prototype.concat.apply([], array) -} - -export function flatMap( - array: T[], - callbackFn: (value: T, index: number, array: T[]) => U[], - // eslint-disable-next-line @typescript-eslint/no-explicit-any - thisArg?: any, -): U[] { - return flatten(array.map(callbackFn, thisArg)) -} diff --git a/packages/fetch-engine/src/getHash.ts b/packages/fetch-engine/src/getHash.ts deleted file mode 100644 index b6f60e5d8..000000000 --- a/packages/fetch-engine/src/getHash.ts +++ /dev/null @@ -1,17 +0,0 @@ -import crypto from 'crypto' -import fs from 'fs' - -export function getHash(filePath: string): Promise { - const hash = crypto.createHash('sha256') - const input = fs.createReadStream(filePath) - return new Promise((resolve) => { - input.on('readable', () => { - const data = input.read() - if (data) { - hash.update(data) - } else { - resolve(hash.digest('hex')) - } - }) - }) -} diff --git a/packages/fetch-engine/src/getLatestTag.ts b/packages/fetch-engine/src/getLatestTag.ts deleted file mode 100644 index 99060dab3..000000000 --- a/packages/fetch-engine/src/getLatestTag.ts +++ /dev/null @@ -1,220 +0,0 @@ -import { platforms } from '@prisma/get-platform' -import chalk from 'chalk' -import execa from 'execa' -import fetch from 'node-fetch' -import pMap from 'p-map' -import { getProxyAgent } from './getProxyAgent' -import { getDownloadUrl } from './util' - -export async function getLatestTag(): Promise { - let branch = await getBranch() - if ( - branch !== 'main' && - !isPatchBranch(branch) && - !branch.startsWith('integration/') - ) { - branch = 'main' - } - - // remove the "integration/" part - branch = branch.replace(/^integration\//, '') - // console.log({ branch }, 'after replace') - - // first try to get the branch as it is - // if it doesn't have an equivalent in the engines repo - // default back to main - let commits = await getCommits(branch) - if ( - (!commits || !Array.isArray(commits)) && - branch !== 'main' && - !isPatchBranch(branch) - ) { - console.log( - `Overwriting branch "${branch}" with "main" as it's not a branch we have binaries for`, - ) - branch = 'main' - commits = await getCommits(branch) - } - - if (!Array.isArray(commits)) { - console.error(commits) - throw new Error( - `Could not fetch commits from github: ${JSON.stringify( - commits, - null, - 2, - )}`, - ) - } - - return getFirstFinishedCommit(branch, commits) -} - -export function getAllUrls(branch: string, commit: string): string[] { - const urls: string[] = [] - - // these are the platforms we know exists but we don't compile for. - // we need to exclude them here so that we don't try to download binaries for these. - // They are known because we don't want to block custom binary usage for them. - const excludedPlatforms = [ - 'freebsd', - 'arm', - 'linux-nixos', - 'linux-arm-openssl-1.1.x', - 'linux-arm-openssl-1.0.x', - 'linux-arm-openssl-3.0.x', - 'openbsd', - 'netbsd', - 'freebsd11', - 'freebsd12', - 'freebsd13', - ] - const relevantPlatforms = platforms.filter( - (p) => !excludedPlatforms.includes(p), - ) - for (const platform of relevantPlatforms) { - for (const engine of [ - 'query-engine', - 'introspection-engine', - 'migration-engine', - 'prisma-fmt', - ]) { - for (const extension of [ - '.gz', - '.gz.sha256', - '.gz.sig', - '.sig', - '.sha256', - ]) { - const downloadUrl = getDownloadUrl( - branch, - commit, - platform, - engine, - extension, - ) - urls.push(downloadUrl) - } - } - } - - return urls -} - -async function getFirstFinishedCommit( - branch: string, - commits: string[], -): Promise { - for (const commit of commits) { - const urls = getAllUrls(branch, commit) - // TODO: potential to speed things up - // We don't always need to wait for the last commit - const exist = await pMap(urls, urlExists, { concurrency: 10 }) - const hasMissing = exist.some((e) => !e) - - if (!hasMissing) { - return commit - } else { - const missing = urls.filter((_, i) => !exist[i]) - // if all are missing, we don't have to talk about it - // it might just be a broken commit or just still building - if (missing.length !== urls.length) { - console.log( - `${chalk.blueBright( - 'info', - )} The engine commit ${commit} is not yet done. We're skipping it as we're in dev. Missing urls: ${ - missing.length - }`, - ) - } - } - } -} - -export async function urlExists(url) { - try { - const res = await fetch(url, { - method: 'HEAD', - agent: getProxyAgent(url) as any, - }) - - const headers = fromEntries(res.headers.entries()) - if (res.status > 200) { - // console.error(res, headers) - } - if (parseInt(headers['content-length']) > 0) { - return res.status < 300 - } - } catch (e) { - // - // console.error(e) - } - return false -} - -function fromEntries( - entries: IterableIterator<[string, T]>, -): Record { - const result = {} - for (const [key, value] of entries) { - result[key] = value - } - return result -} - -async function getBranch() { - if (process.env.NODE_ENV !== 'test') { - if (process.env.PATCH_BRANCH) { - return process.env.PATCH_BRANCH - } - if (process.env.BUILDKITE_BRANCH) { - return process.env.BUILDKITE_BRANCH - } - if (process.env.GITHUB_CONTEXT) { - const context = JSON.parse(process.env.GITHUB_CONTEXT) - return context.head_ref - } - } - - // Need to be handled - // for example it's used in https://github.com/prisma/binary-tester and the environment - // is not a git repository so it fails - try { - const result = await execa.command('git rev-parse --abbrev-ref HEAD', { - shell: true, - stdio: 'pipe', - }) - return result.stdout - } catch (e) { - console.error(e) - } - - return -} - -// TODO: Adjust this for stable release -function isPatchBranch(version: string): boolean { - return /^2\.(\d+)\.x/.test(version) -} - -async function getCommits(branch: string): Promise { - // A simple cache in front of GitHub API that was implemented to avoid a rate-limit error in the past - // See https://dash.cloudflare.com/c72786e48b88e7492830a60584c2ac13/workers/services/view/github-cache/production - const url = `https://github-cache.prisma.workers.dev/repos/prisma/prisma-engines/commits?sha=${branch}` - const result = await fetch(url, { - agent: getProxyAgent(url) as any, - // Headers are not used by the worker - // headers: { - // Authorization: process.env.GITHUB_TOKEN - // ? `token ${process.env.GITHUB_TOKEN}` - // : undefined, - // }, - } as any).then((res) => res.json()) - - if (!Array.isArray(result)) { - return result - } - - const commits = result.map((r) => r.sha) - return commits -} diff --git a/packages/fetch-engine/src/getProxyAgent.ts b/packages/fetch-engine/src/getProxyAgent.ts deleted file mode 100644 index 7761f1f41..000000000 --- a/packages/fetch-engine/src/getProxyAgent.ts +++ /dev/null @@ -1,106 +0,0 @@ -import HttpsProxyAgent from 'https-proxy-agent' -import HttpProxyAgent from 'http-proxy-agent' -import Url from 'url' -;('use strict') -// code from https://raw.githubusercontent.com/request/request/5ba8eb44da7cd639ca21070ea9be20d611b85f66/lib/getProxyFromURI.js - -function formatHostname(hostname: string): string { - // canonicalize the hostname, so that 'oogle.com' won't match 'google.com' - return hostname.replace(/^\.*/, '.').toLowerCase() -} - -function parseNoProxyZone(zone: string): { - hostname: string - port: string - hasPort: boolean -} { - zone = zone.trim().toLowerCase() - - const zoneParts = zone.split(':', 2) - const zoneHost = formatHostname(zoneParts[0]) - const zonePort = zoneParts[1] - const hasPort = zone.includes(':') - - return { hostname: zoneHost, port: zonePort, hasPort: hasPort } -} - -function uriInNoProxy(uri, noProxy): boolean { - const port = uri.port || (uri.protocol === 'https:' ? '443' : '80') - const hostname = formatHostname(uri.hostname) - const noProxyList = noProxy.split(',') - - // iterate through the noProxyList until it finds a match. - return noProxyList.map(parseNoProxyZone).some(function (noProxyZone) { - const isMatchedAt = hostname.indexOf(noProxyZone.hostname) - const hostnameMatched = - isMatchedAt > -1 && - isMatchedAt === hostname.length - noProxyZone.hostname.length - - if (noProxyZone.hasPort) { - return port === noProxyZone.port && hostnameMatched - } - - return hostnameMatched - }) -} - -function getProxyFromURI(uri): string | null { - // Decide the proper request proxy to use based on the request URI object and the - // environmental variables (NO_PROXY, HTTP_PROXY, etc.) - // respect NO_PROXY environment variables (see: http://lynx.isc.org/current/breakout/lynx_help/keystrokes/environments.html) - - const noProxy = process.env.NO_PROXY || process.env.no_proxy || '' - - // if the noProxy is a wildcard then return null - - if (noProxy === '*') { - return null - } - - // if the noProxy is not empty and the uri is found return null - - if (noProxy !== '' && uriInNoProxy(uri, noProxy)) { - return null - } - - // Check for HTTP or HTTPS Proxy in environment Else default to null - - if (uri.protocol === 'http:') { - return process.env.HTTP_PROXY || process.env.http_proxy || null - } - - if (uri.protocol === 'https:') { - return ( - process.env.HTTPS_PROXY || - process.env.https_proxy || - process.env.HTTP_PROXY || - process.env.http_proxy || - null - ) - } - - // if none of that works, return null - // (What uri protocol are you using then?) - - return null -} - -export function getProxyAgent( - url: string, -): HttpProxyAgent.HttpProxyAgent | HttpsProxyAgent.HttpsProxyAgent | undefined { - const uri = Url.parse(url) - const proxy = getProxyFromURI(uri) - if (!proxy) { - return undefined - } - - if (uri.protocol === 'http:') { - return HttpProxyAgent(proxy) - } - - if (uri.protocol === 'https:') { - return HttpsProxyAgent(proxy) - } - - return undefined -} diff --git a/packages/fetch-engine/src/index.ts b/packages/fetch-engine/src/index.ts deleted file mode 100644 index 7918840a6..000000000 --- a/packages/fetch-engine/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './download' -export { getAllUrls, getLatestTag, urlExists } from './getLatestTag' -export { getProxyAgent } from './getProxyAgent' diff --git a/packages/fetch-engine/src/log.ts b/packages/fetch-engine/src/log.ts deleted file mode 100644 index 3ba9c2f95..000000000 --- a/packages/fetch-engine/src/log.ts +++ /dev/null @@ -1,13 +0,0 @@ -import Progress from 'progress' - -export function getBar(text): Progress { - return new Progress(`> ${text} [:bar] :percent`, { - stream: process.stdout, - width: 20, - complete: '=', - incomplete: ' ', - total: 100, - head: '', - clear: true, - }) -} diff --git a/packages/fetch-engine/src/util.ts b/packages/fetch-engine/src/util.ts deleted file mode 100644 index ea4a2c19a..000000000 --- a/packages/fetch-engine/src/util.ts +++ /dev/null @@ -1,76 +0,0 @@ -import Debug from '@prisma/debug' -import { getNodeAPIName, Platform } from '@prisma/get-platform' -import findCacheDir from 'find-cache-dir' -import fs from 'fs' -import makeDir from 'make-dir' -import os from 'os' -import path from 'path' -import { BinaryType } from './download' - -const debug = Debug('prisma:cache-dir') - -export async function getRootCacheDir(): Promise { - if (os.platform() === 'win32') { - const cacheDir = findCacheDir({ name: 'prisma', create: true }) - if (cacheDir) { - return cacheDir - } - if (process.env.APPDATA) { - return path.join(process.env.APPDATA, 'Prisma') - } - } - // if this is lambda, nope - if (process.env.AWS_LAMBDA_FUNCTION_VERSION) { - try { - await makeDir(`/tmp/prisma-download`) - return `/tmp/prisma-download` - } catch (e) { - return null - } - } - return path.join(os.homedir(), '.cache/prisma') -} - -export async function getCacheDir( - channel: string, - version: string, - platform: string, -): Promise { - const rootCacheDir = await getRootCacheDir() - if (!rootCacheDir) { - return null - } - const cacheDir = path.join(rootCacheDir, channel, version, platform) - try { - if (!fs.existsSync(cacheDir)) { - await makeDir(cacheDir) - } - } catch (e) { - debug('The following error is being caught and just there for debugging:') - debug(e) - return null - } - return cacheDir -} - -export function getDownloadUrl( - channel: string, - version: string, - platform: Platform, - binaryName: string, - extension = '.gz', -): string { - const baseUrl = - process.env.PRISMA_BINARIES_MIRROR || // TODO: remove this - process.env.PRISMA_ENGINES_MIRROR || - 'https://binaries.prisma.sh' - const finalExtension = - platform === 'windows' && BinaryType.libqueryEngine !== binaryName - ? `.exe${extension}` - : extension - if (binaryName === BinaryType.libqueryEngine) { - binaryName = getNodeAPIName(platform, 'url') - } - - return `${baseUrl}/${channel}/${version}/${platform}/${binaryName}${finalExtension}` -} diff --git a/packages/fetch-engine/tsconfig.eslint.json b/packages/fetch-engine/tsconfig.eslint.json deleted file mode 100644 index 2f038bd3f..000000000 --- a/packages/fetch-engine/tsconfig.eslint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig", - "include": ["src"], - "exclude": [] -} diff --git a/packages/fetch-engine/tsconfig.json b/packages/fetch-engine/tsconfig.json deleted file mode 100644 index 0685d8ff8..000000000 --- a/packages/fetch-engine/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "declaration": true, - "lib": ["esnext"], - "module": "commonjs", - "target": "es2018", - "strict": true, - "esModuleInterop": true, - "sourceMap": true, - "noImplicitAny": false, - "outDir": "dist", - "rootDir": "src", - "incremental": true - }, - "exclude": ["dist", "build", "src/__tests__", "scripts", "sandbox"] -} diff --git a/packages/get-platform/.eslintignore b/packages/get-platform/.eslintignore deleted file mode 100644 index 76add878f..000000000 --- a/packages/get-platform/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -dist \ No newline at end of file diff --git a/packages/get-platform/.eslintrc.js b/packages/get-platform/.eslintrc.js deleted file mode 100644 index 6dace2a12..000000000 --- a/packages/get-platform/.eslintrc.js +++ /dev/null @@ -1,6 +0,0 @@ -const path = require('path') -const config = require('../../../.eslintrc.js') - -config.parserOptions.project.push(path.join(__dirname, 'tsconfig.eslint.json')) - -module.exports = config diff --git a/packages/get-platform/.gitignore b/packages/get-platform/.gitignore deleted file mode 100644 index 9f2880484..000000000 --- a/packages/get-platform/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -node_modules -.DS_Store -query-engine* -yarn-error.log -pnpm-debug.log - -*.db - -dist/ - -copy-photon.sh -*.tsbuildinfo \ No newline at end of file diff --git a/packages/get-platform/.prettierignore b/packages/get-platform/.prettierignore deleted file mode 100644 index 53c37a166..000000000 --- a/packages/get-platform/.prettierignore +++ /dev/null @@ -1 +0,0 @@ -dist \ No newline at end of file diff --git a/packages/get-platform/.prettierrc.yml b/packages/get-platform/.prettierrc.yml deleted file mode 100644 index bbaf47227..000000000 --- a/packages/get-platform/.prettierrc.yml +++ /dev/null @@ -1,5 +0,0 @@ -tabWidth: 2 -trailingComma: all -singleQuote: true -semi: false -printWidth: 80 diff --git a/packages/get-platform/README.md b/packages/get-platform/README.md deleted file mode 100644 index b668cad81..000000000 --- a/packages/get-platform/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# @prisma/get-platform - -Platform detection used for Prisma 2 binaries. - -⚠️ **Warning**: This package is intended for Prisma's internal use. -Its release cycle does not follow SemVer, which means we might release breaking changes (change APIs, remove functionality) without any prior warning. - -If you are using this package, it would be helpful if you could help us gain an understanding where, how and why you are using it. Your feedback will be valuable to us to define a better API. Please share this information at https://github.com/prisma/prisma/discussions/13877 - Thanks! - -## Usage - -```ts -import { getPlatform } from '@prisma/get-platform' - -const platform = await getPlatform() -``` diff --git a/packages/get-platform/jest.config.js b/packages/get-platform/jest.config.js deleted file mode 100644 index 90066d6b0..000000000 --- a/packages/get-platform/jest.config.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', - collectCoverage: process.env.CI ? true : false, - coverageReporters: ['clover'], - coverageDirectory: 'src/__tests__/coverage', - collectCoverageFrom: ['src/**/*.ts', '!**/__tests__/**/*'], - testMatch: ['**/src/__tests__/**/*.test.ts'], -} diff --git a/packages/get-platform/package.json b/packages/get-platform/package.json deleted file mode 100644 index d85164638..000000000 --- a/packages/get-platform/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "@prisma/get-platform", - "version": "4.1.0-5.e82e1a549e41aa2c572eb3d35208d12e526c3ed0", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "license": "Apache-2.0", - "author": "Tim Suchanek ", - "homepage": "https://www.prisma.io", - "repository": "git@github.com:prisma/prisma.git", - "maintainers": [ - "Tim Suchanek ", - "Joël Galeran ", - "William Luke " - ], - "bugs": "https://github.com/prisma/prisma/issues", - "devDependencies": { - "@types/jest": "27.5.2", - "@types/node": "16.11.41", - "@typescript-eslint/eslint-plugin": "5.30.0", - "@typescript-eslint/parser": "5.30.0", - "eslint": "8.18.0", - "eslint-config-prettier": "8.5.0", - "eslint-plugin-eslint-comments": "3.2.0", - "eslint-plugin-jest": "25.7.0", - "eslint-plugin-prettier": "4.1.0", - "jest": "27.5.1", - "lint-staged": "11.2.6", - "prettier": "2.7.1", - "ts-jest": "27.1.5", - "typescript": "4.7.4" - }, - "dependencies": { - "@prisma/debug": "3.15.2" - }, - "scripts": { - "build": "tsc -d", - "prepublishOnly": "pnpm run build && npm run test", - "format": "prettier --write .", - "lint": "eslint --cache --fix --ext .ts .", - "lint-ci": "eslint --ext .ts .", - "test": "jest", - "precommit": "lint-staged" - }, - "files": [ - "README.md", - "dist" - ], - "lint-staged": { - "*.ts": [ - "eslint", - "prettier --write" - ] - } -} \ No newline at end of file diff --git a/packages/get-platform/src/__tests__/coverage/clover.xml b/packages/get-platform/src/__tests__/coverage/clover.xml deleted file mode 100644 index c709482bb..000000000 --- a/packages/get-platform/src/__tests__/coverage/clover.xml +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/get-platform/src/__tests__/parseDistro.test.ts b/packages/get-platform/src/__tests__/parseDistro.test.ts deleted file mode 100644 index daffa42e9..000000000 --- a/packages/get-platform/src/__tests__/parseDistro.test.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { parseDistro } from '../getPlatform' - -const tests = [ - { - name: 'simple', - content: ` -ID=debian - `, - expect: 'debian', - }, - { - name: 'simple with quotes', - content: ` -ID="debian" - `, - expect: 'debian', - }, - { - name: 'debian', - content: ` -PRETTY_NAME="Debian GNU/Linux 10 (buster)" -NAME="Debian GNU/Linux" -VERSION_ID="10" -VERSION="10 (buster)" -VERSION_CODENAME=buster -ID=debian - `, - expect: 'debian', - }, - { - name: 'ubuntu', - content: ` -NAME="Ubuntu" -VERSION="18.04.3 LTS (Bionic Beaver)" -ID=ubuntu -ID_LIKE=debian -PRETTY_NAME="Ubuntu 18.04.3 LTS" -VERSION_ID="18.04" -VERSION_CODENAME=bionic -UBUNTU_CODENAME=bionic - `, - expect: 'debian', - }, - { - name: 'amazon linux 1', - content: ` -NAME="Amazon Linux AMI" -VERSION="2018.03" -ID="amzn" -ID_LIKE="rhel fedora" -VERSION_ID="2018.03" -PRETTY_NAME="Amazon Linux AMI 2018.03" -ANSI_COLOR="0;33" -CPE_NAME="cpe:o:amazon:linux:2018.03:ga" - `, - expect: 'rhel', - }, - { - name: 'amazon linux 2', - content: ` -NAME="Amazon Linux" -VERSION="2" -ID="amzn" -ID_LIKE="centos rhel fedora" -VERSION_ID="2" -PRETTY_NAME="Amazon Linux 2" -ANSI_COLOR="0;33" -CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2" - `, - expect: 'rhel', - }, - { - name: 'centos', - content: ` -NAME="CentOS Linux" -VERSION="8 (Core)" -ID="centos" -ID_LIKE="rhel fedora" -VERSION_ID="8" -PLATFORM_ID="platform:el8" - `, - expect: 'rhel', - }, - { - name: 'fedora', - content: ` -NAME=Fedora -VERSION="31 (Container Image)" -ID=fedora -VERSION_ID=31 -VERSION_CODENAME="" -PLATFORM_ID="platform:f31" -PRETTY_NAME="Fedora 31 (Container Image)" -ANSI_COLOR="0;34" -LOGO=fedora-logo-icon - `, - expect: 'rhel', - }, - { - name: 'arch linux', - content: ` -NAME="Arch Linux" -PRETTY_NAME="Arch Linux" -ID=arch -BUILD_ID=rolling -ANSI_COLOR="0;36" -LOGO=archlinux - `, - expect: undefined, // this will default to debian later. - }, - { - name: 'linux mint', - content: ` -NAME="Linux Mint" -VERSION="18.2 (Sonya)" -ID=linuxmint -ID_LIKE=ubuntu -PRETTY_NAME="Linux Mint 18.2" -VERSION_ID="18.2" -VERSION_CODENAME=sonya -UBUNTU_CODENAME=xenial - `, - expect: 'debian', - }, -] - -describe('parseDistro', () => { - for (const t of tests) { - test(t.name, () => { - const actual = parseDistro(t.content) - expect(actual).toBe(t.expect) - }) - } -}) diff --git a/packages/get-platform/src/__tests__/parseOpenSSLVersion.test.ts b/packages/get-platform/src/__tests__/parseOpenSSLVersion.test.ts deleted file mode 100644 index b6c441d8a..000000000 --- a/packages/get-platform/src/__tests__/parseOpenSSLVersion.test.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { parseOpenSSLVersion } from '../getPlatform' - -const tests = [ - { - name: '1.1', - content: `OpenSSL 1.1.0d 1 Feb 2014`, - expect: '1.1.x', - }, - { - name: '1.2', - content: `OpenSSL 1.0.2g 1 Mar 2016`, - expect: '1.0.x', - }, - { - name: '3.0', - content: `OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)`, - expect: '3.0.x', - }, -] - -describe('parseOpenSSLVersion', () => { - for (const t of tests) { - test(t.name, () => { - const actual = parseOpenSSLVersion(t.content) - expect(actual).toBe(t.expect) - }) - } -}) diff --git a/packages/get-platform/src/getNodeAPIName.ts b/packages/get-platform/src/getNodeAPIName.ts deleted file mode 100644 index c2e5a6a95..000000000 --- a/packages/get-platform/src/getNodeAPIName.ts +++ /dev/null @@ -1,26 +0,0 @@ -// Why is this in getPlatform... because of our dependency tree - -import { Platform } from './platforms' - -const NODE_API_QUERY_ENGINE_URL_BASE = 'libquery_engine' - -/** - * Gets Node-API Library name depending on the platform - * @param platform - * @param type `fs` gets name used on the file system, `url` gets the name required to download the library from S3 - * @returns - */ -export function getNodeAPIName(platform: Platform, type: 'url' | 'fs') { - const isUrl = type === 'url' - if (platform.includes('windows')) { - return isUrl ? `query_engine.dll.node` : `query_engine-${platform}.dll.node` - } else if (platform.includes('darwin')) { - return isUrl - ? `${NODE_API_QUERY_ENGINE_URL_BASE}.dylib.node` - : `${NODE_API_QUERY_ENGINE_URL_BASE}-${platform}.dylib.node` - } else { - return isUrl - ? `${NODE_API_QUERY_ENGINE_URL_BASE}.so.node` - : `${NODE_API_QUERY_ENGINE_URL_BASE}-${platform}.so.node` - } -} diff --git a/packages/get-platform/src/getPlatform.ts b/packages/get-platform/src/getPlatform.ts deleted file mode 100644 index 587d5bb12..000000000 --- a/packages/get-platform/src/getPlatform.ts +++ /dev/null @@ -1,237 +0,0 @@ -import { exec } from 'child_process' -import fs from 'fs' -import os from 'os' -import { promisify } from 'util' -import { Platform } from './platforms' - -const readFile = promisify(fs.readFile) -const exists = promisify(fs.exists) - -// https://www.geeksforgeeks.org/node-js-process-arch-property/ -export type Arch = - | 'x32' - | 'x64' - | 'arm' - | 'arm64' - | 's390' - | 's390x' - | 'mipsel' - | 'ia32' - | 'mips' - | 'ppc' - | 'ppc64' -export type GetOSResult = { - platform: NodeJS.Platform - libssl?: string - arch: Arch - distro?: - | 'rhel' - | 'debian' - | 'musl' - | 'arm' - | 'nixos' - | 'freebsd11' - | 'freebsd12' - | 'freebsd13' -} - -export async function getos(): Promise { - const platform = os.platform() - const arch = process.arch as Arch - if (platform === 'freebsd') { - const version = await gracefulExec(`freebsd-version`) - if (version && version.trim().length > 0) { - const regex = /^(\d+)\.?/ - const match = regex.exec(version) - if (match) { - return { - platform: 'freebsd', - distro: `freebsd${match[1]}` as GetOSResult['distro'], - arch, - } - } - } - } - - if (platform !== 'linux') { - return { - platform, - arch, - } - } - - return { - platform: 'linux', - libssl: await getOpenSSLVersion(), - distro: await resolveDistro(), - arch, - } -} - -export function parseDistro(input: string): GetOSResult['distro'] { - const idRegex = /^ID="?([^"\n]*)"?$/im - const idLikeRegex = /^ID_LIKE="?([^"\n]*)"?$/im - - const idMatch = idRegex.exec(input) - const id = (idMatch && idMatch[1] && idMatch[1].toLowerCase()) || '' - - const idLikeMatch = idLikeRegex.exec(input) - const idLike = - (idLikeMatch && idLikeMatch[1] && idLikeMatch[1].toLowerCase()) || '' - - if (id === 'raspbian') { - return 'arm' - } - - if (id === 'nixos') { - return 'nixos' - } - - if ( - idLike.includes('centos') || - idLike.includes('fedora') || - idLike.includes('rhel') || - id === 'fedora' - ) { - return 'rhel' - } - - if ( - idLike.includes('debian') || - idLike.includes('ubuntu') || - id === 'debian' - ) { - return 'debian' - } - - return -} - -export async function resolveDistro(): Promise< - undefined | GetOSResult['distro'] -> { - // https://github.com/retrohacker/getos/blob/master/os.json - const osReleaseFile = '/etc/os-release' - const alpineReleaseFile = '/etc/alpine-release' - - if (await exists(alpineReleaseFile)) { - return 'musl' - } else if (await exists(osReleaseFile)) { - return parseDistro(await readFile(osReleaseFile, 'utf-8')) - } else { - return - } -} - -export function parseOpenSSLVersion(input: string): string | undefined { - const match = /^OpenSSL\s(\d+\.\d+)\.\d+/.exec(input) - if (match) { - return match[1] + '.x' - } - - return -} - -// getOpenSSLVersion returns the OpenSSL version excluding the patch version, e.g. "1.1.x" -export async function getOpenSSLVersion(): Promise { - const [version, ls] = await Promise.all([ - gracefulExec(`openssl version -v`), - gracefulExec(` - ls -l /lib64 | grep ssl; - ls -l /usr/lib64 | grep ssl; - `), - ]) - - if (version) { - const v = parseOpenSSLVersion(version) - if (v) { - return v - } - } - - if (ls) { - const match = /libssl\.so\.(\d+\.\d+)\.\d+/.exec(ls) - if (match) { - return match[1] + '.x' - } - } - - return undefined -} - -async function gracefulExec(cmd: string): Promise { - return new Promise((resolve) => { - try { - exec(cmd, (err, stdout) => { - resolve(String(stdout)) - }) - } catch (e) { - resolve(undefined) - return undefined - } - }) -} - -export async function getPlatform(): Promise { - const { platform, libssl, distro, arch } = await getos() - - // Apple Silicon (M1) - if (platform === 'darwin' && arch === 'arm64') { - return 'darwin-arm64' - } - - if (platform === 'darwin') { - return 'darwin' - } - - if (platform === 'win32') { - return 'windows' - } - - if (platform === 'freebsd') { - return distro as Platform - } - - if (platform === 'openbsd') { - return 'openbsd' - } - - if (platform === 'netbsd') { - return 'netbsd' - } - if (platform === 'linux' && arch === 'arm64') { - // 64 bit ARM - return `linux-arm64-openssl-${libssl}` as Platform - } - - if (platform === 'linux' && arch === 'arm') { - // 32 bit ARM - return `linux-arm-openssl-${libssl}` as Platform - } - - if (platform === 'linux' && distro === 'nixos') { - return 'linux-nixos' - } - - if (platform === 'linux' && distro === 'musl') { - return 'linux-musl' - } - - // when the platform is linux - if (platform === 'linux' && distro && libssl) { - return (distro + '-openssl-' + libssl) as Platform - } - - // if just OpenSSL is known, fallback to debian with a specific libssl version - if (libssl) { - return ('debian-openssl-' + libssl) as Platform - } - - // if just the distro is known, fallback to latest OpenSSL 1.1 - if (distro) { - return (distro + '-openssl-1.1.x') as Platform - } - - // use the debian build with OpenSSL 1.1 as a last resort - return 'debian-openssl-1.1.x' -} diff --git a/packages/get-platform/src/index.ts b/packages/get-platform/src/index.ts deleted file mode 100644 index 87b11fe58..000000000 --- a/packages/get-platform/src/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { getNodeAPIName } from './getNodeAPIName' -export { getos, getPlatform } from './getPlatform' -export { isNodeAPISupported } from './isNodeAPISupported' -export { Platform, platforms } from './platforms' diff --git a/packages/get-platform/src/isNodeAPISupported.ts b/packages/get-platform/src/isNodeAPISupported.ts deleted file mode 100644 index bfbd399b6..000000000 --- a/packages/get-platform/src/isNodeAPISupported.ts +++ /dev/null @@ -1,17 +0,0 @@ -import fs from 'fs' -import { getos } from '.' - -/** - * Determines whether Node API is supported on the current platform and throws if not - */ -export async function isNodeAPISupported() { - const customLibraryPath = process.env.PRISMA_QUERY_ENGINE_LIBRARY - const customLibraryExists = - customLibraryPath && fs.existsSync(customLibraryPath) - const os = await getos() - if (!customLibraryExists && (os.arch === 'x32' || os.arch === 'ia32')) { - throw new Error( - `The default query engine type (Node-API, "library") is currently not supported for 32bit Node. Please set \`engineType = "binary"\` in the "generator" block of your "schema.prisma" file (or use the environment variables "PRISMA_CLIENT_ENGINE_TYPE=binary" and/or "PRISMA_CLI_QUERY_ENGINE_TYPE=binary".)`, - ) - } -} diff --git a/packages/get-platform/src/platforms.ts b/packages/get-platform/src/platforms.ts deleted file mode 100644 index f081c1e28..000000000 --- a/packages/get-platform/src/platforms.ts +++ /dev/null @@ -1,51 +0,0 @@ -export type Platform = - | 'native' - | 'darwin' - | 'darwin-arm64' - | 'debian-openssl-1.0.x' - | 'debian-openssl-1.1.x' - | 'debian-openssl-3.0.x' - | 'rhel-openssl-1.0.x' - | 'rhel-openssl-1.1.x' - | 'rhel-openssl-3.0.x' - | 'linux-arm64-openssl-1.1.x' - | 'linux-arm64-openssl-1.0.x' - | 'linux-arm64-openssl-3.0.x' - | 'linux-arm-openssl-1.1.x' - | 'linux-arm-openssl-1.0.x' - | 'linux-arm-openssl-3.0.x' - | 'linux-musl' - | 'linux-nixos' - | 'windows' - | 'freebsd11' - | 'freebsd12' - | 'freebsd13' - | 'openbsd' - | 'netbsd' - | 'arm' - -export const platforms: Array = [ - 'darwin', - 'darwin-arm64', - 'debian-openssl-1.0.x', - 'debian-openssl-1.1.x', - 'debian-openssl-3.0.x', - 'rhel-openssl-1.0.x', - 'rhel-openssl-1.1.x', - 'rhel-openssl-3.0.x', - 'linux-arm64-openssl-1.1.x', - 'linux-arm64-openssl-1.0.x', - 'linux-arm64-openssl-3.0.x', - 'linux-arm-openssl-1.1.x', - 'linux-arm-openssl-1.0.x', - 'linux-arm-openssl-3.0.x', - 'linux-musl', - 'linux-nixos', - 'windows', - 'freebsd11', - 'freebsd12', - 'freebsd13', - 'openbsd', - 'netbsd', - 'arm', -] diff --git a/packages/get-platform/tsconfig.eslint.json b/packages/get-platform/tsconfig.eslint.json deleted file mode 100644 index 2f038bd3f..000000000 --- a/packages/get-platform/tsconfig.eslint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "./tsconfig", - "include": ["src"], - "exclude": [] -} diff --git a/packages/get-platform/tsconfig.json b/packages/get-platform/tsconfig.json deleted file mode 100644 index 2ac950ec2..000000000 --- a/packages/get-platform/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "lib": ["esnext"], - "module": "commonjs", - "target": "es2018", - "strict": true, - "esModuleInterop": true, - "sourceMap": true, - "noImplicitAny": false, - "outDir": "dist", - "rootDir": "src", - "declaration": true, - "incremental": true - }, - "exclude": ["dist", "build", "src/__tests__", "scripts"] -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0b2c8e4fe..40ec2e9fd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,22 +30,6 @@ importers: ts-node: 10.8.1_841f2a74d64cdda652a10d589e346265 typescript: 4.7.4 - packages/engines: - specifiers: - '@prisma/debug': 3.15.2 - '@prisma/engines-version': workspace:4.1.0-5.e82e1a549e41aa2c572eb3d35208d12e526c3ed0 - '@prisma/fetch-engine': workspace:4.1.0-5.e82e1a549e41aa2c572eb3d35208d12e526c3ed0 - '@types/node': 16.11.41 - execa: 5.1.1 - typescript: 4.7.4 - devDependencies: - '@prisma/debug': 3.15.2 - '@prisma/engines-version': link:../engines-version - '@prisma/fetch-engine': link:../fetch-engine - '@types/node': 16.11.41 - execa: 5.1.1 - typescript: 4.7.4 - packages/engines-version: specifiers: '@types/node': 16.11.41 @@ -54,3706 +38,324 @@ importers: '@types/node': 16.11.41 typescript: 4.7.4 - packages/fetch-engine: - specifiers: - '@prisma/debug': 3.15.2 - '@prisma/engines-version': workspace:4.1.0-5.e82e1a549e41aa2c572eb3d35208d12e526c3ed0 - '@prisma/get-platform': workspace:4.1.0-5.e82e1a549e41aa2c572eb3d35208d12e526c3ed0 - '@types/find-cache-dir': 3.2.1 - '@types/jest': 27.5.2 - '@types/node': 16.11.41 - '@types/node-fetch': 2.6.2 - '@types/progress': 2.0.5 - '@typescript-eslint/eslint-plugin': 5.30.0 - '@typescript-eslint/parser': 5.30.0 - chalk: 4.1.2 - del: 6.1.1 - eslint: 8.18.0 - eslint-config-prettier: 8.5.0 - eslint-plugin-eslint-comments: 3.2.0 - eslint-plugin-jest: 25.7.0 - eslint-plugin-prettier: 4.1.0 - execa: 5.1.1 - find-cache-dir: 3.3.2 - hasha: 5.2.2 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - jest: 27.5.1 - lint-staged: 11.2.6 - make-dir: 3.1.0 - node-fetch: 2.6.7 - p-filter: 2.1.0 - p-map: 4.0.0 - p-retry: 4.6.2 - prettier: 2.7.1 - progress: 2.0.3 - rimraf: 3.0.2 - strip-ansi: 6.0.1 - temp-dir: 2.0.0 - tempy: 1.0.1 - ts-jest: 27.1.5 - typescript: 4.7.4 - dependencies: - '@prisma/debug': 3.15.2 - '@prisma/get-platform': link:../get-platform - chalk: 4.1.2 - execa: 5.1.1 - find-cache-dir: 3.3.2 - hasha: 5.2.2 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - make-dir: 3.1.0 - node-fetch: 2.6.7 - p-filter: 2.1.0 - p-map: 4.0.0 - p-retry: 4.6.2 - progress: 2.0.3 - rimraf: 3.0.2 - temp-dir: 2.0.0 - tempy: 1.0.1 - devDependencies: - '@prisma/engines-version': link:../engines-version - '@types/find-cache-dir': 3.2.1 - '@types/jest': 27.5.2 - '@types/node': 16.11.41 - '@types/node-fetch': 2.6.2 - '@types/progress': 2.0.5 - '@typescript-eslint/eslint-plugin': 5.30.0_eb27092288e495ddbd8abfd1fa139db3 - '@typescript-eslint/parser': 5.30.0_eslint@8.18.0+typescript@4.7.4 - del: 6.1.1 - eslint: 8.18.0 - eslint-config-prettier: 8.5.0_eslint@8.18.0 - eslint-plugin-eslint-comments: 3.2.0_eslint@8.18.0 - eslint-plugin-jest: 25.7.0_b009ba930106794f2cc338846fe32295 - eslint-plugin-prettier: 4.1.0_bd3c4b21319ad16ec3ab54a1da22f60e - jest: 27.5.1_ts-node@10.8.1 - lint-staged: 11.2.6 - prettier: 2.7.1 - strip-ansi: 6.0.1 - ts-jest: 27.1.5_6400e448c8ce26641831d9829b55a941 - typescript: 4.7.4 - - packages/get-platform: - specifiers: - '@prisma/debug': 3.15.2 - '@types/jest': 27.5.2 - '@types/node': 16.11.41 - '@typescript-eslint/eslint-plugin': 5.30.0 - '@typescript-eslint/parser': 5.30.0 - eslint: 8.18.0 - eslint-config-prettier: 8.5.0 - eslint-plugin-eslint-comments: 3.2.0 - eslint-plugin-jest: 25.7.0 - eslint-plugin-prettier: 4.1.0 - jest: 27.5.1 - lint-staged: 11.2.6 - prettier: 2.7.1 - ts-jest: 27.1.5 - typescript: 4.7.4 - dependencies: - '@prisma/debug': 3.15.2 - devDependencies: - '@types/jest': 27.5.2 - '@types/node': 16.11.41 - '@typescript-eslint/eslint-plugin': 5.30.0_eb27092288e495ddbd8abfd1fa139db3 - '@typescript-eslint/parser': 5.30.0_eslint@8.18.0+typescript@4.7.4 - eslint: 8.18.0 - eslint-config-prettier: 8.5.0_eslint@8.18.0 - eslint-plugin-eslint-comments: 3.2.0_eslint@8.18.0 - eslint-plugin-jest: 25.7.0_b009ba930106794f2cc338846fe32295 - eslint-plugin-prettier: 4.1.0_bd3c4b21319ad16ec3ab54a1da22f60e - jest: 27.5.1_ts-node@10.8.1 - lint-staged: 11.2.6 - prettier: 2.7.1 - ts-jest: 27.1.5_6400e448c8ce26641831d9829b55a941 - typescript: 4.7.4 - packages: - /@babel/code-frame/7.14.5: - resolution: {integrity: sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.14.5 - dev: true - - /@babel/compat-data/7.14.7: - resolution: {integrity: sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/core/7.14.6: - resolution: {integrity: sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.14.5 - '@babel/generator': 7.14.5 - '@babel/helper-compilation-targets': 7.14.5_@babel+core@7.14.6 - '@babel/helper-module-transforms': 7.14.5 - '@babel/helpers': 7.14.6 - '@babel/parser': 7.14.7 - '@babel/template': 7.14.5 - '@babel/traverse': 7.14.7 - '@babel/types': 7.14.5 - convert-source-map: 1.8.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.0 - semver: 6.3.0 - source-map: 0.5.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/generator/7.14.5: - resolution: {integrity: sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.5 - jsesc: 2.5.2 - source-map: 0.5.7 - dev: true - - /@babel/helper-compilation-targets/7.14.5_@babel+core@7.14.6: - resolution: {integrity: sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': 7.14.7 - '@babel/core': 7.14.6 - '@babel/helper-validator-option': 7.14.5 - browserslist: 4.16.6 - semver: 6.3.0 - dev: true - - /@babel/helper-function-name/7.14.5: - resolution: {integrity: sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-get-function-arity': 7.14.5 - '@babel/template': 7.14.5 - '@babel/types': 7.14.5 - dev: true - - /@babel/helper-get-function-arity/7.14.5: - resolution: {integrity: sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.5 - dev: true - - /@babel/helper-hoist-variables/7.14.5: - resolution: {integrity: sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.5 - dev: true - - /@babel/helper-member-expression-to-functions/7.14.7: - resolution: {integrity: sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.5 - dev: true - - /@babel/helper-module-imports/7.14.5: - resolution: {integrity: sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.5 - dev: true - - /@babel/helper-module-transforms/7.14.5: - resolution: {integrity: sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-module-imports': 7.14.5 - '@babel/helper-replace-supers': 7.14.5 - '@babel/helper-simple-access': 7.14.5 - '@babel/helper-split-export-declaration': 7.14.5 - '@babel/helper-validator-identifier': 7.14.5 - '@babel/template': 7.14.5 - '@babel/traverse': 7.14.7 - '@babel/types': 7.14.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-optimise-call-expression/7.14.5: - resolution: {integrity: sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.5 - dev: true - - /@babel/helper-plugin-utils/7.14.5: - resolution: {integrity: sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-replace-supers/7.14.5: - resolution: {integrity: sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-member-expression-to-functions': 7.14.7 - '@babel/helper-optimise-call-expression': 7.14.5 - '@babel/traverse': 7.14.7 - '@babel/types': 7.14.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-simple-access/7.14.5: - resolution: {integrity: sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.5 - dev: true - - /@babel/helper-split-export-declaration/7.14.5: - resolution: {integrity: sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.14.5 - dev: true - - /@babel/helper-validator-identifier/7.14.5: - resolution: {integrity: sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-option/7.14.5: - resolution: {integrity: sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helpers/7.14.6: - resolution: {integrity: sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.14.5 - '@babel/traverse': 7.14.7 - '@babel/types': 7.14.5 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/highlight/7.14.5: - resolution: {integrity: sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==} - engines: {node: '>=6.9.0'} + /@cspotcode/source-map-support/0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} dependencies: - '@babel/helper-validator-identifier': 7.14.5 - chalk: 2.4.2 - js-tokens: 4.0.0 + '@jridgewell/trace-mapping': 0.3.9 dev: true - /@babel/parser/7.14.7: - resolution: {integrity: sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==} + /@jridgewell/resolve-uri/3.0.7: + resolution: {integrity: sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==} engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.14.5 - dev: true - - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.14.6: - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.6 - '@babel/helper-plugin-utils': 7.14.5 - dev: true - - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.14.6: - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.6 - '@babel/helper-plugin-utils': 7.14.5 - dev: true - - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.14.6: - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.6 - '@babel/helper-plugin-utils': 7.14.5 - dev: true - - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.14.6: - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.6 - '@babel/helper-plugin-utils': 7.14.5 - dev: true - - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.14.6: - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.6 - '@babel/helper-plugin-utils': 7.14.5 - dev: true - - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.14.6: - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.6 - '@babel/helper-plugin-utils': 7.14.5 - dev: true - - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.14.6: - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.6 - '@babel/helper-plugin-utils': 7.14.5 - dev: true - - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.14.6: - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.6 - '@babel/helper-plugin-utils': 7.14.5 - dev: true - - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.14.6: - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.6 - '@babel/helper-plugin-utils': 7.14.5 - dev: true - - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.14.6: - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.6 - '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.14.6: - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.14.6 - '@babel/helper-plugin-utils': 7.14.5 + /@jridgewell/sourcemap-codec/1.4.13: + resolution: {integrity: sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==} dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.14.6: - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@jridgewell/trace-mapping/0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@babel/core': 7.14.6 - '@babel/helper-plugin-utils': 7.14.5 + '@jridgewell/resolve-uri': 3.0.7 + '@jridgewell/sourcemap-codec': 1.4.13 dev: true - /@babel/plugin-syntax-typescript/7.14.5_@babel+core@7.14.6: - resolution: {integrity: sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@sindresorhus/slugify/1.1.2: + resolution: {integrity: sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==} + engines: {node: '>=10'} dependencies: - '@babel/core': 7.14.6 - '@babel/helper-plugin-utils': 7.14.5 + '@sindresorhus/transliterate': 0.1.1 + escape-string-regexp: 4.0.0 dev: true - /@babel/template/7.14.5: - resolution: {integrity: sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==} - engines: {node: '>=6.9.0'} + /@sindresorhus/transliterate/0.1.1: + resolution: {integrity: sha512-QSdIQ5keUFAZ3KLbfbsntW39ox0Ym8183RqTwBq/ZEFoN3NQAtGV+qWaNdzKpIDHgj9J2CQ2iNDRVU11Zyr7MQ==} + engines: {node: '>=10'} dependencies: - '@babel/code-frame': 7.14.5 - '@babel/parser': 7.14.7 - '@babel/types': 7.14.5 + escape-string-regexp: 2.0.0 + lodash.deburr: 4.1.0 dev: true - /@babel/traverse/7.14.7: - resolution: {integrity: sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.14.5 - '@babel/generator': 7.14.5 - '@babel/helper-function-name': 7.14.5 - '@babel/helper-hoist-variables': 7.14.5 - '@babel/helper-split-export-declaration': 7.14.5 - '@babel/parser': 7.14.7 - '@babel/types': 7.14.5 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + /@tsconfig/node10/1.0.7: + resolution: {integrity: sha512-aBvUmXLQbayM4w3A8TrjwrXs4DZ8iduJnuJLLRGdkWlyakCf1q6uHZJBzXoRA/huAEknG5tcUyQxN3A+In5euQ==} dev: true - /@babel/types/7.14.5: - resolution: {integrity: sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.14.5 - to-fast-properties: 2.0.0 + /@tsconfig/node12/1.0.7: + resolution: {integrity: sha512-dgasobK/Y0wVMswcipr3k0HpevxFJLijN03A8mYfEPvWvOs14v0ZlYTR4kIgMx8g4+fTyTFv8/jLCIfRqLDJ4A==} dev: true - /@bcoe/v8-coverage/0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + /@tsconfig/node14/1.0.0: + resolution: {integrity: sha512-RKkL8eTdPv6t5EHgFKIVQgsDapugbuOptNd9OOunN/HAkzmmTnZELx1kNCK0rSdUYGmiFMM3rRQMAWiyp023LQ==} dev: true - /@cspotcode/source-map-support/0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 + /@tsconfig/node16/1.0.2: + resolution: {integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==} dev: true - /@eslint/eslintrc/1.3.0: - resolution: {integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@types/node-fetch/2.6.2: + resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.3.2 - globals: 13.15.0 - ignore: 5.2.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color + '@types/node': 16.11.41 + form-data: 3.0.0 dev: true - /@humanwhocodes/config-array/0.9.2: - resolution: {integrity: sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + /@types/node/16.11.41: + resolution: {integrity: sha512-mqoYK2TnVjdkGk8qXAVGc/x9nSaTpSrFaGFm43BUH3IdoBV0nta6hYaGmdOvIMlbHJbUEVen3gvwpwovAZKNdQ==} dev: true - /@humanwhocodes/object-schema/1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /acorn-walk/8.1.1: + resolution: {integrity: sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==} + engines: {node: '>=0.4.0'} dev: true - /@istanbuljs/load-nyc-config/1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 + /acorn/8.7.1: + resolution: {integrity: sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==} + engines: {node: '>=0.4.0'} + hasBin: true dev: true - /@istanbuljs/schema/0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - dev: true - - /@jest/console/27.5.1: - resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 27.5.1 - '@types/node': 16.11.41 - chalk: 4.1.2 - jest-message-util: 27.5.1 - jest-util: 27.5.1 - slash: 3.0.0 + color-convert: 2.0.1 dev: true - /@jest/core/27.5.1_ts-node@10.8.1: - resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/console': 27.5.1 - '@jest/reporters': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.11.41 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - emittery: 0.8.1 - exit: 0.1.2 - graceful-fs: 4.2.9 - jest-changed-files: 27.5.1 - jest-config: 27.5.1_ts-node@10.8.1 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-resolve-dependencies: 27.5.1 - jest-runner: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - jest-watcher: 27.5.1 - micromatch: 4.0.4 - rimraf: 3.0.2 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate + /arg/4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true - /@jest/environment/27.5.1: - resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.11.41 - jest-mock: 27.5.1 + /arg/5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} dev: true - /@jest/fake-timers/27.5.1: - resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@sinonjs/fake-timers': 8.0.1 - '@types/node': 16.11.41 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-util: 27.5.1 + /asynckit/0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /@jest/globals/27.5.1: - resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} dependencies: - '@jest/environment': 27.5.1 - '@jest/types': 27.5.1 - expect: 27.5.1 + ansi-styles: 4.3.0 + supports-color: 7.2.0 dev: true - /@jest/reporters/27.5.1: - resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.11.41 - chalk: 4.1.2 - collect-v8-coverage: 1.0.1 - exit: 0.1.2 - glob: 7.1.6 - graceful-fs: 4.2.9 - istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 5.1.0 - istanbul-lib-report: 3.0.0 - istanbul-lib-source-maps: 4.0.0 - istanbul-reports: 3.1.3 - jest-haste-map: 27.5.1 - jest-resolve: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - slash: 3.0.0 - source-map: 0.6.1 - string-length: 4.0.2 - terminal-link: 2.1.1 - v8-to-istanbul: 8.1.0 - transitivePeerDependencies: - - supports-color + /ci-info/3.2.0: + resolution: {integrity: sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==} dev: true - /@jest/source-map/27.5.1: - resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: - callsites: 3.1.0 - graceful-fs: 4.2.9 - source-map: 0.6.1 + color-name: 1.1.4 dev: true - /@jest/test-result/27.5.1: - resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/console': 27.5.1 - '@jest/types': 27.5.1 - '@types/istanbul-lib-coverage': 2.0.3 - collect-v8-coverage: 1.0.1 + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true - /@jest/test-sequencer/27.5.1: - resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} dependencies: - '@jest/test-result': 27.5.1 - graceful-fs: 4.2.9 - jest-haste-map: 27.5.1 - jest-runtime: 27.5.1 - transitivePeerDependencies: - - supports-color + delayed-stream: 1.0.0 dev: true - /@jest/transform/27.5.1: - resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/core': 7.14.6 - '@jest/types': 27.5.1 - babel-plugin-istanbul: 6.1.1 - chalk: 4.1.2 - convert-source-map: 1.8.0 - fast-json-stable-stringify: 2.1.0 - graceful-fs: 4.2.9 - jest-haste-map: 27.5.1 - jest-regex-util: 27.5.1 - jest-util: 27.5.1 - micromatch: 4.0.4 - pirates: 4.0.4 - slash: 3.0.0 - source-map: 0.6.1 - write-file-atomic: 3.0.3 - transitivePeerDependencies: - - supports-color + /create-require/1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true - /@jest/types/27.5.1: - resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /cross-spawn/7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} dependencies: - '@types/istanbul-lib-coverage': 2.0.3 - '@types/istanbul-reports': 3.0.1 - '@types/node': 16.11.41 - '@types/yargs': 16.0.3 - chalk: 4.1.2 - dev: true - - /@jridgewell/resolve-uri/3.0.7: - resolution: {integrity: sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==} - engines: {node: '>=6.0.0'} + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 dev: true - /@jridgewell/sourcemap-codec/1.4.13: - resolution: {integrity: sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==} - dev: true - - /@jridgewell/trace-mapping/0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.0.7 - '@jridgewell/sourcemap-codec': 1.4.13 - dev: true - - /@nodelib/fs.scandir/2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - /@nodelib/fs.stat/2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - /@nodelib/fs.walk/1.2.7: - resolution: {integrity: sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.11.0 - - /@prisma/debug/3.15.2: - resolution: {integrity: sha512-Uw6RkJmHolxXNifohIY9TIBRNWR2ciDY9LErPm6jymBs3mevLCUWm4m5AlyWyhKFWl0crUtwbAWE8Z79JiNRcw==} - dependencies: - '@types/debug': 4.1.7 - debug: 4.3.4 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - supports-color - - /@sindresorhus/slugify/1.1.2: - resolution: {integrity: sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==} - engines: {node: '>=10'} - dependencies: - '@sindresorhus/transliterate': 0.1.1 - escape-string-regexp: 4.0.0 - dev: true - - /@sindresorhus/transliterate/0.1.1: - resolution: {integrity: sha512-QSdIQ5keUFAZ3KLbfbsntW39ox0Ym8183RqTwBq/ZEFoN3NQAtGV+qWaNdzKpIDHgj9J2CQ2iNDRVU11Zyr7MQ==} - engines: {node: '>=10'} - dependencies: - escape-string-regexp: 2.0.0 - lodash.deburr: 4.1.0 - dev: true - - /@sinonjs/commons/1.8.3: - resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==} - dependencies: - type-detect: 4.0.8 - dev: true - - /@sinonjs/fake-timers/8.0.1: - resolution: {integrity: sha512-AU7kwFxreVd6OAXcAFlKSmZquiRUU0FvYm44k1Y1QbK7Co4m0aqfGMhjykIeQp/H6rcl+nFmj0zfdUcGVs9Dew==} - dependencies: - '@sinonjs/commons': 1.8.3 - dev: true - - /@tootallnate/once/1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: true - - /@tootallnate/once/2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: false - - /@tsconfig/node10/1.0.7: - resolution: {integrity: sha512-aBvUmXLQbayM4w3A8TrjwrXs4DZ8iduJnuJLLRGdkWlyakCf1q6uHZJBzXoRA/huAEknG5tcUyQxN3A+In5euQ==} - dev: true - - /@tsconfig/node12/1.0.7: - resolution: {integrity: sha512-dgasobK/Y0wVMswcipr3k0HpevxFJLijN03A8mYfEPvWvOs14v0ZlYTR4kIgMx8g4+fTyTFv8/jLCIfRqLDJ4A==} - dev: true - - /@tsconfig/node14/1.0.0: - resolution: {integrity: sha512-RKkL8eTdPv6t5EHgFKIVQgsDapugbuOptNd9OOunN/HAkzmmTnZELx1kNCK0rSdUYGmiFMM3rRQMAWiyp023LQ==} - dev: true - - /@tsconfig/node16/1.0.2: - resolution: {integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==} - dev: true - - /@types/babel__core/7.1.14: - resolution: {integrity: sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==} - dependencies: - '@babel/parser': 7.14.7 - '@babel/types': 7.14.5 - '@types/babel__generator': 7.6.2 - '@types/babel__template': 7.4.0 - '@types/babel__traverse': 7.14.0 - dev: true - - /@types/babel__generator/7.6.2: - resolution: {integrity: sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==} - dependencies: - '@babel/types': 7.14.5 - dev: true - - /@types/babel__template/7.4.0: - resolution: {integrity: sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==} - dependencies: - '@babel/parser': 7.14.7 - '@babel/types': 7.14.5 - dev: true - - /@types/babel__traverse/7.14.0: - resolution: {integrity: sha512-IilJZ1hJBUZwMOVDNTdflOOLzJB/ZtljYVa7k3gEZN/jqIJIPkWHC6dvbX+DD2CwZDHB9wAKzZPzzqMIkW37/w==} - dependencies: - '@babel/types': 7.14.5 - dev: true - - /@types/debug/4.1.7: - resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} - dependencies: - '@types/ms': 0.7.31 - - /@types/find-cache-dir/3.2.1: - resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==} - dev: true - - /@types/graceful-fs/4.1.5: - resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} - dependencies: - '@types/node': 16.11.41 - dev: true - - /@types/istanbul-lib-coverage/2.0.3: - resolution: {integrity: sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==} - dev: true - - /@types/istanbul-lib-report/3.0.0: - resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} - dependencies: - '@types/istanbul-lib-coverage': 2.0.3 - dev: true - - /@types/istanbul-reports/3.0.1: - resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} - dependencies: - '@types/istanbul-lib-report': 3.0.0 - dev: true - - /@types/jest/27.5.2: - resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==} - dependencies: - jest-matcher-utils: 27.5.1 - pretty-format: 27.5.1 - dev: true - - /@types/json-schema/7.0.9: - resolution: {integrity: sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==} - dev: true - - /@types/ms/0.7.31: - resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} - - /@types/node-fetch/2.6.2: - resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} - dependencies: - '@types/node': 16.11.41 - form-data: 3.0.0 - dev: true - - /@types/node/16.11.41: - resolution: {integrity: sha512-mqoYK2TnVjdkGk8qXAVGc/x9nSaTpSrFaGFm43BUH3IdoBV0nta6hYaGmdOvIMlbHJbUEVen3gvwpwovAZKNdQ==} - dev: true - - /@types/parse-json/4.0.0: - resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} - dev: true - - /@types/prettier/2.3.1: - resolution: {integrity: sha512-NVkb4p4YjI8E3O6+1m8I+8JlMpFZwfSbPGdaw0wXuyPRTEz0SLKwBUWNSO7Maoi8tQMPC8JLZNWkrcKPI7/sLA==} - dev: true - - /@types/progress/2.0.5: - resolution: {integrity: sha512-ZYYVc/kSMkhH9W/4dNK/sLNra3cnkfT2nJyOAIDY+C2u6w72wa0s1aXAezVtbTsnN8HID1uhXCrLwDE2ZXpplg==} - dependencies: - '@types/node': 16.11.41 - dev: true - - /@types/retry/0.12.0: - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - dev: false - - /@types/stack-utils/2.0.0: - resolution: {integrity: sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==} - dev: true - - /@types/yargs-parser/20.2.0: - resolution: {integrity: sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==} - dev: true - - /@types/yargs/16.0.3: - resolution: {integrity: sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==} - dependencies: - '@types/yargs-parser': 20.2.0 - dev: true - - /@typescript-eslint/eslint-plugin/5.30.0_eb27092288e495ddbd8abfd1fa139db3: - resolution: {integrity: sha512-lvhRJ2pGe2V9MEU46ELTdiHgiAFZPKtLhiU5wlnaYpMc2+c1R8fh8i80ZAa665drvjHKUJyRRGg3gEm1If54ow==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/parser': 5.30.0_eslint@8.18.0+typescript@4.7.4 - '@typescript-eslint/scope-manager': 5.30.0 - '@typescript-eslint/type-utils': 5.30.0_eslint@8.18.0+typescript@4.7.4 - '@typescript-eslint/utils': 5.30.0_eslint@8.18.0+typescript@4.7.4 - debug: 4.3.4 - eslint: 8.18.0 - functional-red-black-tree: 1.0.1 - ignore: 5.2.0 - regexpp: 3.2.0 - semver: 7.3.7 - tsutils: 3.21.0_typescript@4.7.4 - typescript: 4.7.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/experimental-utils/5.8.1_eslint@8.18.0+typescript@4.7.4: - resolution: {integrity: sha512-fbodVnjIDU4JpeXWRDsG5IfIjYBxEvs8EBO8W1+YVdtrc2B9ppfof5sZhVEDOtgTfFHnYQJDI8+qdqLYO4ceww==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@types/json-schema': 7.0.9 - '@typescript-eslint/scope-manager': 5.8.1 - '@typescript-eslint/types': 5.8.1 - '@typescript-eslint/typescript-estree': 5.8.1_typescript@4.7.4 - eslint: 8.18.0 - eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.18.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/parser/5.30.0_eslint@8.18.0+typescript@4.7.4: - resolution: {integrity: sha512-2oYYUws5o2liX6SrFQ5RB88+PuRymaM2EU02/9Ppoyu70vllPnHVO7ioxDdq/ypXHA277R04SVjxvwI8HmZpzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.30.0 - '@typescript-eslint/types': 5.30.0 - '@typescript-eslint/typescript-estree': 5.30.0_typescript@4.7.4 - debug: 4.3.4 - eslint: 8.18.0 - typescript: 4.7.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/scope-manager/5.30.0: - resolution: {integrity: sha512-3TZxvlQcK5fhTBw5solQucWSJvonXf5yua5nx8OqK94hxdrT7/6W3/CS42MLd/f1BmlmmbGEgQcTHHCktUX5bQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.30.0 - '@typescript-eslint/visitor-keys': 5.30.0 - dev: true - - /@typescript-eslint/scope-manager/5.8.1: - resolution: {integrity: sha512-DGxJkNyYruFH3NIZc3PwrzwOQAg7vvgsHsHCILOLvUpupgkwDZdNq/cXU3BjF4LNrCsVg0qxEyWasys5AiJ85Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.8.1 - '@typescript-eslint/visitor-keys': 5.8.1 - dev: true - - /@typescript-eslint/type-utils/5.30.0_eslint@8.18.0+typescript@4.7.4: - resolution: {integrity: sha512-GF8JZbZqSS+azehzlv/lmQQ3EU3VfWYzCczdZjJRxSEeXDQkqFhCBgFhallLDbPwQOEQ4MHpiPfkjKk7zlmeNg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/utils': 5.30.0_eslint@8.18.0+typescript@4.7.4 - debug: 4.3.4 - eslint: 8.18.0 - tsutils: 3.21.0_typescript@4.7.4 - typescript: 4.7.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/types/5.30.0: - resolution: {integrity: sha512-vfqcBrsRNWw/LBXyncMF/KrUTYYzzygCSsVqlZ1qGu1QtGs6vMkt3US0VNSQ05grXi5Yadp3qv5XZdYLjpp8ag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@typescript-eslint/types/5.8.1: - resolution: {integrity: sha512-L/FlWCCgnjKOLefdok90/pqInkomLnAcF9UAzNr+DSqMC3IffzumHTQTrINXhP1gVp9zlHiYYjvozVZDPleLcA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@typescript-eslint/typescript-estree/5.30.0_typescript@4.7.4: - resolution: {integrity: sha512-hDEawogreZB4n1zoqcrrtg/wPyyiCxmhPLpZ6kmWfKF5M5G0clRLaEexpuWr31fZ42F96SlD/5xCt1bT5Qm4Nw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.30.0 - '@typescript-eslint/visitor-keys': 5.30.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.3.7 - tsutils: 3.21.0_typescript@4.7.4 - typescript: 4.7.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/typescript-estree/5.8.1_typescript@4.7.4: - resolution: {integrity: sha512-26lQ8l8tTbG7ri7xEcCFT9ijU5Fk+sx/KRRyyzCv7MQ+rZZlqiDPtMKWLC8P7o+dtCnby4c+OlxuX1tp8WfafQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.8.1 - '@typescript-eslint/visitor-keys': 5.8.1 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.3.7 - tsutils: 3.21.0_typescript@4.7.4 - typescript: 4.7.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils/5.30.0_eslint@8.18.0+typescript@4.7.4: - resolution: {integrity: sha512-0bIgOgZflLKIcZsWvfklsaQTM3ZUbmtH0rJ1hKyV3raoUYyeZwcjQ8ZUJTzS7KnhNcsVT1Rxs7zeeMHEhGlltw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@types/json-schema': 7.0.9 - '@typescript-eslint/scope-manager': 5.30.0 - '@typescript-eslint/types': 5.30.0 - '@typescript-eslint/typescript-estree': 5.30.0_typescript@4.7.4 - eslint: 8.18.0 - eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.18.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/visitor-keys/5.30.0: - resolution: {integrity: sha512-6WcIeRk2DQ3pHKxU1Ni0qMXJkjO/zLjBymlYBy/53qxe7yjEFSvzKLDToJjURUhSl2Fzhkl4SMXQoETauF74cw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.30.0 - eslint-visitor-keys: 3.3.0 - dev: true - - /@typescript-eslint/visitor-keys/5.8.1: - resolution: {integrity: sha512-SWgiWIwocK6NralrJarPZlWdr0hZnj5GXHIgfdm8hNkyKvpeQuFyLP6YjSIe9kf3YBIfU6OHSZLYkQ+smZwtNg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.8.1 - eslint-visitor-keys: 3.3.0 - dev: true - - /abab/2.0.5: - resolution: {integrity: sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==} - dev: true - - /acorn-globals/6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - dev: true - - /acorn-jsx/5.3.2_acorn@8.7.1: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.7.1 - dev: true - - /acorn-walk/7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn-walk/8.1.1: - resolution: {integrity: sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w==} - engines: {node: '>=0.4.0'} - dev: true - - /acorn/7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /acorn/8.7.1: - resolution: {integrity: sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /agent-base/6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.2 - transitivePeerDependencies: - - supports-color - - /aggregate-error/3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - - /ajv/6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - - /ansi-colors/4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} - engines: {node: '>=6'} - dev: true - - /ansi-escapes/4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.21.3 - dev: true - - /ansi-regex/5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - /ansi-styles/3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: true - - /ansi-styles/4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - - /ansi-styles/5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - dev: true - - /anymatch/3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.0 - dev: true - - /arg/4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true - - /arg/5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true - - /argparse/1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: true - - /argparse/2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /array-union/2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - /astral-regex/2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - dev: true - - /asynckit/0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true - - /babel-jest/27.5.1_@babel+core@7.14.6: - resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.8.0 - dependencies: - '@babel/core': 7.14.6 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__core': 7.1.14 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1_@babel+core@7.14.6 - chalk: 4.1.2 - graceful-fs: 4.2.9 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-istanbul/6.1.1: - resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} - engines: {node: '>=8'} - dependencies: - '@babel/helper-plugin-utils': 7.14.5 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.1.0 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-plugin-jest-hoist/27.5.1: - resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/template': 7.14.5 - '@babel/types': 7.14.5 - '@types/babel__core': 7.1.14 - '@types/babel__traverse': 7.14.0 - dev: true - - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.14.6: - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.14.6 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.14.6 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.14.6 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.14.6 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.14.6 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.14.6 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.14.6 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.14.6 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.14.6 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.14.6 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.14.6 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.14.6 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.14.6 - dev: true - - /babel-preset-jest/27.5.1_@babel+core@7.14.6: - resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.14.6 - babel-plugin-jest-hoist: 27.5.1 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.14.6 - dev: true - - /balanced-match/1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - /brace-expansion/1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - /braces/3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - - /browser-process-hrtime/1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: true - - /browserslist/4.16.6: - resolution: {integrity: sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001241 - colorette: 1.4.0 - electron-to-chromium: 1.3.765 - escalade: 3.1.1 - node-releases: 1.1.73 - dev: true - - /bs-logger/0.2.6: - resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} - engines: {node: '>= 6'} - dependencies: - fast-json-stable-stringify: 2.1.0 - dev: true - - /bser/2.1.1: - resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} - dependencies: - node-int64: 0.4.0 - dev: true - - /buffer-from/1.1.1: - resolution: {integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==} - dev: true - - /callsites/3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true - - /camelcase/5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true - - /camelcase/6.2.0: - resolution: {integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==} - engines: {node: '>=10'} - dev: true - - /caniuse-lite/1.0.30001241: - resolution: {integrity: sha512-1uoSZ1Pq1VpH0WerIMqwptXHNNGfdl7d1cJUFs80CwQ/lVzdhTvsFZCeNFslze7AjsQnb4C85tzclPa1VShbeQ==} - dev: true - - /chalk/2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: true - - /chalk/4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - /char-regex/1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - dev: true - - /ci-info/3.2.0: - resolution: {integrity: sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==} - dev: true - - /cjs-module-lexer/1.2.1: - resolution: {integrity: sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==} - dev: true - - /clean-stack/2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - - /cli-cursor/3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - dependencies: - restore-cursor: 3.1.0 - dev: true - - /cli-truncate/2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.2 - dev: true - - /cliui/7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.2 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - - /co/4.6.0: - resolution: {integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true - - /collect-v8-coverage/1.0.1: - resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} - dev: true - - /color-convert/1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: true - - /color-convert/2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - - /color-name/1.1.3: - resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} - dev: true - - /color-name/1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - /colorette/1.4.0: - resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} - dev: true - - /combined-stream/1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: true - - /commander/8.2.0: - resolution: {integrity: sha512-LLKxDvHeL91/8MIyTAD5BFMNtoIwztGPMiM/7Bl8rIPmHCZXRxmSWr91h57dpOpnQ6jIUqEWdXE/uBYMfiVZDA==} - engines: {node: '>= 12'} - dev: true - - /commondir/1.0.1: - resolution: {integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=} - dev: false - - /concat-map/0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - /convert-source-map/1.8.0: - resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} - dependencies: - safe-buffer: 5.1.2 - dev: true - - /cosmiconfig/7.0.1: - resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} - engines: {node: '>=10'} - dependencies: - '@types/parse-json': 4.0.0 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.0 - dev: true - - /create-require/1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true - - /cross-spawn/7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - /crypto-random-string/2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: false - - /cssom/0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: true - - /cssom/0.4.4: - resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} - dev: true - - /cssstyle/2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} - dependencies: - cssom: 0.3.8 - dev: true - - /data-urls/2.0.0: - resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} - engines: {node: '>=10'} - dependencies: - abab: 2.0.5 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - dev: true - - /debug/4.3.2: - resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - - /debug/4.3.2_supports-color@8.1.1: - resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - supports-color: 8.1.1 - dev: true - - /debug/4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - - /decimal.js/10.3.1: - resolution: {integrity: sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==} - dev: true - - /dedent/0.7.0: - resolution: {integrity: sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=} - dev: true - - /deep-is/0.1.3: - resolution: {integrity: sha512-GtxAN4HvBachZzm4OnWqc45ESpUCMwkYcsjnsPs23FwJbsO+k4t0k9bQCgOmzIlpHO28+WPK/KRbRk0DDHuuDw==} - dev: true - - /deepmerge/4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} - engines: {node: '>=0.10.0'} - dev: true - - /del/6.1.1: - resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} - engines: {node: '>=10'} - dependencies: - globby: 11.1.0 - graceful-fs: 4.2.9 - is-glob: 4.0.3 - is-path-cwd: 2.2.0 - is-path-inside: 3.0.3 - p-map: 4.0.0 - rimraf: 3.0.2 - slash: 3.0.0 - - /delayed-stream/1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: true - - /detect-newline/3.1.0: - resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} - engines: {node: '>=8'} - dev: true - - /diff-sequences/27.5.1: - resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true - - /diff/4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true - - /dir-glob/3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - - /doctrine/3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /domexception/2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} - engines: {node: '>=8'} - dependencies: - webidl-conversions: 5.0.0 - dev: true - - /electron-to-chromium/1.3.765: - resolution: {integrity: sha512-4NhcsfZYlr1x4FehYkK+R9CNNTOZ8vLcIu8Y1uWehxYp5r/jlCGAfBqChIubEfdtX+rBQpXx4yJuX/dzILH/nw==} - dev: true - - /emittery/0.8.1: - resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} - engines: {node: '>=10'} - dev: true - - /emoji-regex/8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true - - /enquirer/2.3.6: - resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} - engines: {node: '>=8.6'} - dependencies: - ansi-colors: 4.1.1 - dev: true - - /error-ex/1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - dev: true - - /escalade/3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /escape-string-regexp/1.0.5: - resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} - engines: {node: '>=0.8.0'} - dev: true - - /escape-string-regexp/2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true - - /escape-string-regexp/4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /escodegen/2.0.0: - resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.2.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 - dev: true - - /eslint-config-prettier/8.5.0_eslint@8.18.0: - resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.18.0 - dev: true - - /eslint-plugin-eslint-comments/3.2.0_eslint@8.18.0: - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' - dependencies: - escape-string-regexp: 1.0.5 - eslint: 8.18.0 - ignore: 5.1.8 - dev: true - - /eslint-plugin-jest/25.7.0_b009ba930106794f2cc338846fe32295: - resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^4.0.0 || ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - dependencies: - '@typescript-eslint/eslint-plugin': 5.30.0_eb27092288e495ddbd8abfd1fa139db3 - '@typescript-eslint/experimental-utils': 5.8.1_eslint@8.18.0+typescript@4.7.4 - eslint: 8.18.0 - jest: 27.5.1_ts-node@10.8.1 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /eslint-plugin-prettier/4.1.0_bd3c4b21319ad16ec3ab54a1da22f60e: - resolution: {integrity: sha512-A3AXIEfTnq3D5qDFjWJdQ9c4BLhw/TqhSR+6+SVaoPJBAWciFEuJiNQh275OnjRrAi7yssZzuWBRw66VG2g6UA==} - engines: {node: '>=12.0.0'} - peerDependencies: - eslint: '>=7.28.0' - eslint-config-prettier: '*' - prettier: '>=2.0.0' - peerDependenciesMeta: - eslint-config-prettier: - optional: true - dependencies: - eslint: 8.18.0 - eslint-config-prettier: 8.5.0_eslint@8.18.0 - prettier: 2.7.1 - prettier-linter-helpers: 1.0.0 - dev: true - - /eslint-scope/5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - dev: true - - /eslint-scope/7.1.1: - resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.2.0 - dev: true - - /eslint-utils/3.0.0_eslint@8.18.0: - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.18.0 - eslint-visitor-keys: 2.1.0 - dev: true - - /eslint-visitor-keys/2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - - /eslint-visitor-keys/3.3.0: - resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /eslint/8.18.0: - resolution: {integrity: sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint/eslintrc': 1.3.0 - '@humanwhocodes/config-array': 0.9.2 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.18.0 - eslint-visitor-keys: 3.3.0 - espree: 9.3.2 - esquery: 1.4.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - functional-red-black-tree: 1.0.1 - glob-parent: 6.0.2 - globals: 13.15.0 - ignore: 5.2.0 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.1 - regexpp: 3.2.0 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - text-table: 0.2.0 - v8-compile-cache: 2.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /espree/9.3.2: - resolution: {integrity: sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.7.1 - acorn-jsx: 5.3.2_acorn@8.7.1 - eslint-visitor-keys: 3.3.0 - dev: true - - /esprima/4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /esquery/1.4.0: - resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.2.0 - dev: true - - /esrecurse/4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.2.0 - dev: true - - /estraverse/4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true - - /estraverse/5.2.0: - resolution: {integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==} - engines: {node: '>=4.0'} - dev: true - - /esutils/2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true - - /execa/5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.0 - human-signals: 2.1.0 - is-stream: 2.0.0 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.3 - strip-final-newline: 2.0.0 - - /exit/0.1.2: - resolution: {integrity: sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=} - engines: {node: '>= 0.8.0'} - dev: true - - /expect/27.5.1: - resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - jest-get-type: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - dev: true - - /fast-deep-equal/3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - - /fast-diff/1.2.0: - resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} - dev: true - - /fast-glob/3.2.11: - resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.7 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.4 - - /fast-json-stable-stringify/2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true - - /fast-levenshtein/2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true - - /fastq/1.11.0: - resolution: {integrity: sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==} - dependencies: - reusify: 1.0.4 - - /fb-watchman/2.0.1: - resolution: {integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==} - dependencies: - bser: 2.1.1 - dev: true - - /file-entry-cache/6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.0.4 - dev: true - - /fill-range/7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - - /find-cache-dir/3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - dev: false - - /find-up/4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - - /flat-cache/3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.2 - rimraf: 3.0.2 - dev: true - - /flatted/3.2.2: - resolution: {integrity: sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==} - dev: true - - /form-data/3.0.0: - resolution: {integrity: sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.27 - dev: true - - /fs.realpath/1.0.0: - resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} - - /fsevents/2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /function-bind/1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true - - /functional-red-black-tree/1.0.1: - resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} - dev: true - - /gensync/1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true - - /get-caller-file/2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true - - /get-own-enumerable-property-symbols/3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - dev: true - - /get-package-type/0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - dev: true - - /get-stream/6.0.0: - resolution: {integrity: sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==} - engines: {node: '>=10'} - - /glob-parent/5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - - /glob-parent/6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob/7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.0.4 - once: 1.4.0 - path-is-absolute: 1.0.1 - - /globals/11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true - - /globals/13.15.0: - resolution: {integrity: sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - - /globby/11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.2.11 - ignore: 5.2.0 - merge2: 1.4.1 - slash: 3.0.0 - - /graceful-fs/4.2.9: - resolution: {integrity: sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==} - - /has-flag/3.0.0: - resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} - engines: {node: '>=4'} - dev: true - - /has-flag/4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - /has/1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - dependencies: - function-bind: 1.1.1 - dev: true - - /hasha/5.2.2: - resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} - engines: {node: '>=8'} - dependencies: - is-stream: 2.0.0 - type-fest: 0.8.1 - dev: false - - /html-encoding-sniffer/2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} - engines: {node: '>=10'} - dependencies: - whatwg-encoding: 1.0.5 - dev: true - - /html-escaper/2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true - - /http-proxy-agent/4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /http-proxy-agent/5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.3.2 - transitivePeerDependencies: - - supports-color - dev: false - - /https-proxy-agent/5.0.0: - resolution: {integrity: sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - - /https-proxy-agent/5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.2 - transitivePeerDependencies: - - supports-color - dev: false - - /human-signals/2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - /husky/7.0.4: - resolution: {integrity: sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==} - engines: {node: '>=12'} - hasBin: true - dev: true - - /iconv-lite/0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: true - - /ignore/5.1.8: - resolution: {integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==} - engines: {node: '>= 4'} - dev: true - - /ignore/5.2.0: - resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} - engines: {node: '>= 4'} - - /import-fresh/3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true - - /import-local/3.0.2: - resolution: {integrity: sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==} - engines: {node: '>=8'} - hasBin: true - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - dev: true - - /imurmurhash/0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true - - /indent-string/4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - /inflight/1.0.6: - resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - /inherits/2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - /is-arrayish/0.2.1: - resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} - dev: true - - /is-ci/3.0.1: - resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true - dependencies: - ci-info: 3.2.0 - dev: true - - /is-core-module/2.4.0: - resolution: {integrity: sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==} - dependencies: - has: 1.0.3 - dev: true - - /is-extglob/2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - /is-fullwidth-code-point/3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true - - /is-generator-fn/2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - dev: true - - /is-glob/4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - - /is-number/7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - /is-obj/1.0.1: - resolution: {integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8=} - engines: {node: '>=0.10.0'} - dev: true - - /is-path-cwd/2.2.0: - resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} - engines: {node: '>=6'} - - /is-path-inside/3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - /is-potential-custom-element-name/1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - dev: true - - /is-regexp/1.0.0: - resolution: {integrity: sha1-/S2INUXEa6xaYz57mgnof6LLUGk=} - engines: {node: '>=0.10.0'} - dev: true - - /is-stream/2.0.0: - resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} - engines: {node: '>=8'} - - /is-typedarray/1.0.0: - resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} - dev: true - - /isexe/2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - /istanbul-lib-coverage/3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} - engines: {node: '>=8'} - dev: true - - /istanbul-lib-instrument/5.1.0: - resolution: {integrity: sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==} - engines: {node: '>=8'} - dependencies: - '@babel/core': 7.14.6 - '@babel/parser': 7.14.7 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-lib-report/3.0.0: - resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} - engines: {node: '>=8'} - dependencies: - istanbul-lib-coverage: 3.2.0 - make-dir: 3.1.0 - supports-color: 7.2.0 - dev: true - - /istanbul-lib-source-maps/4.0.0: - resolution: {integrity: sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==} - engines: {node: '>=8'} - dependencies: - debug: 4.3.4 - istanbul-lib-coverage: 3.2.0 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-reports/3.1.3: - resolution: {integrity: sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==} - engines: {node: '>=8'} - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.0 - dev: true - - /jest-changed-files/27.5.1: - resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - execa: 5.1.1 - throat: 6.0.1 - dev: true - - /jest-circus/27.5.1: - resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.11.41 - chalk: 4.1.2 - co: 4.6.0 - dedent: 0.7.0 - expect: 27.5.1 - is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - slash: 3.0.0 - stack-utils: 2.0.3 - throat: 6.0.1 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-cli/27.5.1_ts-node@10.8.1: - resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 27.5.1_ts-node@10.8.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.9 - import-local: 3.0.2 - jest-config: 27.5.1_ts-node@10.8.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - prompts: 2.4.1 - yargs: 16.2.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - - /jest-config/27.5.1_ts-node@10.8.1: - resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - peerDependencies: - ts-node: '>=9.0.0' - peerDependenciesMeta: - ts-node: - optional: true - dependencies: - '@babel/core': 7.14.6 - '@jest/test-sequencer': 27.5.1 - '@jest/types': 27.5.1 - babel-jest: 27.5.1_@babel+core@7.14.6 - chalk: 4.1.2 - ci-info: 3.2.0 - deepmerge: 4.2.2 - glob: 7.1.6 - graceful-fs: 4.2.9 - jest-circus: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-get-type: 27.5.1 - jest-jasmine2: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runner: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - micromatch: 4.0.4 - parse-json: 5.2.0 - pretty-format: 27.5.1 - slash: 3.0.0 - strip-json-comments: 3.1.1 - ts-node: 10.8.1_841f2a74d64cdda652a10d589e346265 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: true - - /jest-diff/27.5.1: - resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - chalk: 4.1.2 - diff-sequences: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: true - - /jest-docblock/27.5.1: - resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - detect-newline: 3.1.0 - dev: true - - /jest-each/27.5.1: - resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - chalk: 4.1.2 - jest-get-type: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - dev: true - - /jest-environment-jsdom/27.5.1: - resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.11.41 - jest-mock: 27.5.1 - jest-util: 27.5.1 - jsdom: 16.6.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: true - - /jest-environment-node/27.5.1: - resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.11.41 - jest-mock: 27.5.1 - jest-util: 27.5.1 - dev: true - - /jest-get-type/27.5.1: - resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true - - /jest-haste-map/27.5.1: - resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/graceful-fs': 4.1.5 - '@types/node': 16.11.41 - anymatch: 3.1.2 - fb-watchman: 2.0.1 - graceful-fs: 4.2.9 - jest-regex-util: 27.5.1 - jest-serializer: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - micromatch: 4.0.4 - walker: 1.0.7 - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /jest-jasmine2/27.5.1: - resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.11.41 - chalk: 4.1.2 - co: 4.6.0 - expect: 27.5.1 - is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - throat: 6.0.1 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-leak-detector/27.5.1: - resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: true - - /jest-matcher-utils/27.5.1: - resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - chalk: 4.1.2 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 - dev: true - - /jest-message-util/27.5.1: - resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/code-frame': 7.14.5 - '@jest/types': 27.5.1 - '@types/stack-utils': 2.0.0 - chalk: 4.1.2 - graceful-fs: 4.2.9 - micromatch: 4.0.4 - pretty-format: 27.5.1 - slash: 3.0.0 - stack-utils: 2.0.3 - dev: true - - /jest-mock/27.5.1: - resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 16.11.41 - dev: true - - /jest-pnp-resolver/1.2.2_jest-resolve@27.5.1: - resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} - engines: {node: '>=6'} - peerDependencies: - jest-resolve: '*' - peerDependenciesMeta: - jest-resolve: - optional: true - dependencies: - jest-resolve: 27.5.1 - dev: true - - /jest-regex-util/27.5.1: - resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true - - /jest-resolve-dependencies/27.5.1: - resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - jest-regex-util: 27.5.1 - jest-snapshot: 27.5.1 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-resolve/27.5.1: - resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - chalk: 4.1.2 - graceful-fs: 4.2.9 - jest-haste-map: 27.5.1 - jest-pnp-resolver: 1.2.2_jest-resolve@27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - resolve: 1.20.0 - resolve.exports: 1.1.0 - slash: 3.0.0 - dev: true - - /jest-runner/27.5.1: - resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/console': 27.5.1 - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.11.41 - chalk: 4.1.2 - emittery: 0.8.1 - graceful-fs: 4.2.9 - jest-docblock: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-haste-map: 27.5.1 - jest-leak-detector: 27.5.1 - jest-message-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runtime: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - source-map-support: 0.5.19 - throat: 6.0.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate - dev: true - - /jest-runtime/27.5.1: - resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/globals': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - chalk: 4.1.2 - cjs-module-lexer: 1.2.1 - collect-v8-coverage: 1.0.1 - execa: 5.1.1 - glob: 7.1.6 - graceful-fs: 4.2.9 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - slash: 3.0.0 - strip-bom: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-serializer/27.5.1: - resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/node': 16.11.41 - graceful-fs: 4.2.9 - dev: true - - /jest-snapshot/27.5.1: - resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@babel/core': 7.14.6 - '@babel/generator': 7.14.5 - '@babel/plugin-syntax-typescript': 7.14.5_@babel+core@7.14.6 - '@babel/traverse': 7.14.7 - '@babel/types': 7.14.5 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__traverse': 7.14.0 - '@types/prettier': 2.3.1 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.14.6 - chalk: 4.1.2 - expect: 27.5.1 - graceful-fs: 4.2.9 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - jest-haste-map: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-util: 27.5.1 - natural-compare: 1.4.0 - pretty-format: 27.5.1 - semver: 7.3.7 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-util/27.5.1: - resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - '@types/node': 16.11.41 - chalk: 4.1.2 - ci-info: 3.2.0 - graceful-fs: 4.2.9 - picomatch: 2.3.0 - dev: true - - /jest-validate/27.5.1: - resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/types': 27.5.1 - camelcase: 6.2.0 - chalk: 4.1.2 - jest-get-type: 27.5.1 - leven: 3.1.0 - pretty-format: 27.5.1 - dev: true - - /jest-watcher/27.5.1: - resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 16.11.41 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - jest-util: 27.5.1 - string-length: 4.0.2 - dev: true - - /jest-worker/27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': 16.11.41 - merge-stream: 2.0.0 - supports-color: 8.1.1 - dev: true - - /jest/27.5.1_ts-node@10.8.1: - resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 27.5.1_ts-node@10.8.1 - import-local: 3.0.2 - jest-cli: 27.5.1_ts-node@10.8.1 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - ts-node - - utf-8-validate - dev: true - - /js-tokens/4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true - - /js-yaml/3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: true - - /js-yaml/4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - - /jsdom/16.6.0: - resolution: {integrity: sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==} - engines: {node: '>=10'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - dependencies: - abab: 2.0.5 - acorn: 8.7.1 - acorn-globals: 6.0.0 - cssom: 0.4.4 - cssstyle: 2.3.0 - data-urls: 2.0.0 - decimal.js: 10.3.1 - domexception: 2.0.1 - escodegen: 2.0.0 - form-data: 3.0.0 - html-encoding-sniffer: 2.0.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.0 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.0 - parse5: 6.0.1 - saxes: 5.0.1 - symbol-tree: 3.2.4 - tough-cookie: 4.0.0 - w3c-hr-time: 1.0.2 - w3c-xmlserializer: 2.0.0 - webidl-conversions: 6.1.0 - whatwg-encoding: 1.0.5 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - ws: 7.5.1 - xml-name-validator: 3.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /jsesc/2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /json-parse-even-better-errors/2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true - - /json-schema-traverse/0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true - - /json-stable-stringify-without-jsonify/1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true - - /json5/2.2.0: - resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==} - engines: {node: '>=6'} - hasBin: true - dependencies: - minimist: 1.2.5 - dev: true - - /kleur/3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - dev: true - - /leven/3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - dev: true - - /levn/0.3.0: - resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - type-check: 0.3.2 - dev: true - - /levn/0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /lines-and-columns/1.1.6: - resolution: {integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=} - dev: true - - /lint-staged/11.2.6: - resolution: {integrity: sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg==} - hasBin: true - dependencies: - cli-truncate: 2.1.0 - colorette: 1.4.0 - commander: 8.2.0 - cosmiconfig: 7.0.1 - debug: 4.3.2_supports-color@8.1.1 - enquirer: 2.3.6 - execa: 5.1.1 - listr2: 3.12.2_enquirer@2.3.6 - micromatch: 4.0.4 - normalize-path: 3.0.0 - please-upgrade-node: 3.2.0 - string-argv: 0.3.1 - stringify-object: 3.3.0 - supports-color: 8.1.1 - dev: true - - /listr2/3.12.2_enquirer@2.3.6: - resolution: {integrity: sha512-64xC2CJ/As/xgVI3wbhlPWVPx0wfTqbUAkpb7bjDi0thSWMqrf07UFhrfsGoo8YSXmF049Rp9C0cjLC8rZxK9A==} - engines: {node: '>=10.0.0'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - dependencies: - cli-truncate: 2.1.0 - colorette: 1.4.0 - enquirer: 2.3.6 - log-update: 4.0.0 - p-map: 4.0.0 - rxjs: 6.6.7 - through: 2.3.8 - wrap-ansi: 7.0.0 - dev: true - - /locate-path/5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - dependencies: - p-locate: 4.1.0 - - /lodash.deburr/4.1.0: - resolution: {integrity: sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=} - dev: true - - /lodash.memoize/4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - dev: true - - /lodash.merge/4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true - - /lodash/4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true - - /log-update/4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} - dependencies: - ansi-escapes: 4.3.2 - cli-cursor: 3.1.0 - slice-ansi: 4.0.0 - wrap-ansi: 6.2.0 - dev: true - - /lru-cache/6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: true - - /make-dir/3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.0 - - /make-error/1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - - /makeerror/1.0.11: - resolution: {integrity: sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=} - dependencies: - tmpl: 1.0.4 - dev: true - - /merge-stream/2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - /merge2/1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - /micromatch/4.0.4: - resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.0 - - /mime-db/1.44.0: - resolution: {integrity: sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==} - engines: {node: '>= 0.6'} - dev: true - - /mime-types/2.1.27: - resolution: {integrity: sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.44.0 - dev: true - - /mimic-fn/2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - /minimatch/3.0.4: - resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} - dependencies: - brace-expansion: 1.1.11 - - /minimatch/3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimist/1.2.5: - resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} - dev: true - - /ms/2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - /natural-compare/1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true - - /node-fetch/2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - - /node-int64/0.4.0: - resolution: {integrity: sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=} - dev: true - - /node-releases/1.1.73: - resolution: {integrity: sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==} - dev: true - - /normalize-path/3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - - /npm-run-path/4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - - /nwsapi/2.2.0: - resolution: {integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==} - dev: true - - /once/1.4.0: - resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} - dependencies: - wrappy: 1.0.2 - - /onetime/5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - - /optionator/0.8.3: - resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.3 - fast-levenshtein: 2.0.6 - levn: 0.3.0 - prelude-ls: 1.1.2 - type-check: 0.3.2 - word-wrap: 1.2.3 - dev: true - - /optionator/0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.3 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.3 - dev: true - - /p-filter/2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} - engines: {node: '>=8'} - dependencies: - p-map: 2.1.0 - dev: false - - /p-limit/2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - dependencies: - p-try: 2.2.0 - - /p-locate/4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - dependencies: - p-limit: 2.3.0 - - /p-map/2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - dev: false - - /p-map/4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - dependencies: - aggregate-error: 3.1.0 - - /p-retry/4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - dependencies: - '@types/retry': 0.12.0 - retry: 0.13.1 - dev: false - - /p-try/2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - /parent-module/1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: true - - /parse-json/5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - dependencies: - '@babel/code-frame': 7.14.5 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.1.6 - dev: true - - /parse5/6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: true - - /path-exists/4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - /path-is-absolute/1.0.1: - resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} - engines: {node: '>=0.10.0'} - - /path-key/3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - /path-parse/1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - - /path-type/4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - /picomatch/2.3.0: - resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} - engines: {node: '>=8.6'} - - /pirates/4.0.4: - resolution: {integrity: sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==} - engines: {node: '>= 6'} - dev: true - - /pkg-dir/4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - - /please-upgrade-node/3.2.0: - resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} - dependencies: - semver-compare: 1.0.0 - dev: true - - /prelude-ls/1.1.2: - resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} - engines: {node: '>= 0.8.0'} - dev: true - - /prelude-ls/1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true - - /prettier-linter-helpers/1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - dependencies: - fast-diff: 1.2.0 - dev: true - - /prettier/2.7.1: - resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true - - /pretty-format/27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 - dev: true - - /progress/2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + /delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - dev: false - - /prompts/2.4.1: - resolution: {integrity: sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==} - engines: {node: '>= 6'} - dependencies: - kleur: 3.0.3 - sisteransi: 1.0.5 - dev: true - - /psl/1.8.0: - resolution: {integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==} - dev: true - - /punycode/2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} - engines: {node: '>=6'} - dev: true - - /queue-microtask/1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - /react-is/17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - dev: true - - /regexpp/3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true - - /require-directory/2.1.1: - resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} - engines: {node: '>=0.10.0'} - dev: true - - /resolve-cwd/3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} - dependencies: - resolve-from: 5.0.0 - dev: true - - /resolve-from/4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true - - /resolve-from/5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true - - /resolve.exports/1.1.0: - resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} - engines: {node: '>=10'} - dev: true - - /resolve/1.20.0: - resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} - dependencies: - is-core-module: 2.4.0 - path-parse: 1.0.7 - dev: true - - /restore-cursor/3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.3 - dev: true - - /retry/0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: false - - /reusify/1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - /rimraf/3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.1.6 - - /run-parallel/1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - - /rxjs/6.6.7: - resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} - engines: {npm: '>=2.0.0'} - dependencies: - tslib: 1.14.1 - dev: true - - /safe-buffer/5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true - - /safer-buffer/2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true - - /saxes/5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} - engines: {node: '>=10'} - dependencies: - xmlchars: 2.2.0 - dev: true - - /semver-compare/1.0.0: - resolution: {integrity: sha1-De4hahyUGrN+nvsXiPavxf9VN/w=} - dev: true - - /semver/6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true - - /semver/7.3.5: - resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - - /semver/7.3.7: - resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - - /shebang-command/2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - - /shebang-regex/3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - /signal-exit/3.0.3: - resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} - - /sisteransi/1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - dev: true - - /slash/3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - /slice-ansi/3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - - /slice-ansi/4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - - /source-map-support/0.5.19: - resolution: {integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==} - dependencies: - buffer-from: 1.1.1 - source-map: 0.6.1 - dev: true - - /source-map/0.5.7: - resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=} - engines: {node: '>=0.10.0'} dev: true - /source-map/0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} + /diff/4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} dev: true - /source-map/0.7.3: - resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} - engines: {node: '>= 8'} + /escape-string-regexp/2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} dev: true - /sprintf-js/1.0.3: - resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} + /escape-string-regexp/4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} dev: true - /stack-utils/2.0.3: - resolution: {integrity: sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==} + /execa/5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} dependencies: - escape-string-regexp: 2.0.0 + cross-spawn: 7.0.3 + get-stream: 6.0.0 + human-signals: 2.1.0 + is-stream: 2.0.0 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.3 + strip-final-newline: 2.0.0 dev: true - /string-argv/0.3.1: - resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} - engines: {node: '>=0.6.19'} + /form-data/3.0.0: + resolution: {integrity: sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.27 dev: true - /string-length/4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + /get-stream/6.0.0: + resolution: {integrity: sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==} engines: {node: '>=10'} - dependencies: - char-regex: 1.0.2 - strip-ansi: 6.0.1 dev: true - /string-width/4.2.2: - resolution: {integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==} + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 dev: true - /stringify-object/3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} - engines: {node: '>=4'} - dependencies: - get-own-enumerable-property-symbols: 3.0.2 - is-obj: 1.0.1 - is-regexp: 1.0.0 + /human-signals/2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} dev: true - /strip-ansi/6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + /husky/7.0.4: + resolution: {integrity: sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==} + engines: {node: '>=12'} + hasBin: true + dev: true + + /is-ci/3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true dependencies: - ansi-regex: 5.0.1 + ci-info: 3.2.0 + dev: true - /strip-bom/4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + /is-stream/2.0.0: + resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} engines: {node: '>=8'} dev: true - /strip-final-newline/2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true - /strip-json-comments/3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} + /lodash.deburr/4.1.0: + resolution: {integrity: sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=} dev: true - /supports-color/5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 + /make-error/1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /supports-color/7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 + /merge-stream/2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true - /supports-color/8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - dependencies: - has-flag: 4.0.0 + /mime-db/1.44.0: + resolution: {integrity: sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==} + engines: {node: '>= 0.6'} dev: true - /supports-hyperlinks/2.2.0: - resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} - engines: {node: '>=8'} + /mime-types/2.1.27: + resolution: {integrity: sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==} + engines: {node: '>= 0.6'} dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 + mime-db: 1.44.0 dev: true - /symbol-tree/3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + /mimic-fn/2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} dev: true - /temp-dir/2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - dev: false - - /tempy/1.0.1: - resolution: {integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==} - engines: {node: '>=10'} + /node-fetch/2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true dependencies: - del: 6.1.1 - is-stream: 2.0.0 - temp-dir: 2.0.0 - type-fest: 0.16.0 - unique-string: 2.0.0 - dev: false + whatwg-url: 5.0.0 + dev: true - /terminal-link/2.1.1: - resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + /npm-run-path/4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} dependencies: - ansi-escapes: 4.3.2 - supports-hyperlinks: 2.2.0 + path-key: 3.1.1 dev: true - /test-exclude/6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} + /onetime/5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.1.6 - minimatch: 3.1.2 + mimic-fn: 2.1.0 dev: true - /text-table/0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} dev: true - /throat/6.0.1: - resolution: {integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==} + /prettier/2.7.1: + resolution: {integrity: sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==} + engines: {node: '>=10.13.0'} + hasBin: true dev: true - /through/2.3.8: - resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=} + /shebang-command/2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 dev: true - /tmpl/1.0.4: - resolution: {integrity: sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=} + /shebang-regex/3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} dev: true - /to-fast-properties/2.0.0: - resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} - engines: {node: '>=4'} + /signal-exit/3.0.3: + resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} dev: true - /to-regex-range/5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - - /tough-cookie/4.0.0: - resolution: {integrity: sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==} + /strip-final-newline/2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - dependencies: - psl: 1.8.0 - punycode: 2.1.1 - universalify: 0.1.2 dev: true - /tr46/0.0.3: - resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=} - - /tr46/2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: - punycode: 2.1.1 + has-flag: 4.0.0 dev: true - /ts-jest/27.1.5_6400e448c8ce26641831d9829b55a941: - resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@types/jest': ^27.0.0 - babel-jest: '>=27.0.0 <28' - esbuild: '*' - jest: ^27.0.0 - typescript: '>=3.8 <5.0' - peerDependenciesMeta: - '@babel/core': - optional: true - '@types/jest': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - dependencies: - '@types/jest': 27.5.2 - bs-logger: 0.2.6 - fast-json-stable-stringify: 2.1.0 - jest: 27.5.1_ts-node@10.8.1 - jest-util: 27.5.1 - json5: 2.2.0 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.3.5 - typescript: 4.7.4 - yargs-parser: 20.2.9 + /tr46/0.0.3: + resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=} dev: true /ts-node/10.8.1_841f2a74d64cdda652a10d589e346265: @@ -3787,146 +389,18 @@ packages: yn: 3.1.1 dev: true - /tslib/1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true - - /tsutils/3.21.0_typescript@4.7.4: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 4.7.4 - dev: true - - /type-check/0.3.2: - resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.1.2 - dev: true - - /type-check/0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - dev: true - - /type-detect/4.0.8: - resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} - engines: {node: '>=4'} - dev: true - - /type-fest/0.16.0: - resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} - engines: {node: '>=10'} - dev: false - - /type-fest/0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - - /type-fest/0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true - - /type-fest/0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: false - - /typedarray-to-buffer/3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - dev: true - /typescript/4.7.4: resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} engines: {node: '>=4.2.0'} hasBin: true dev: true - /unique-string/2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: false - - /universalify/0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true - - /uri-js/4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.1.1 - dev: true - /v8-compile-cache-lib/3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-compile-cache/2.3.0: - resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} - dev: true - - /v8-to-istanbul/8.1.0: - resolution: {integrity: sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA==} - engines: {node: '>=10.12.0'} - dependencies: - '@types/istanbul-lib-coverage': 2.0.3 - convert-source-map: 1.8.0 - source-map: 0.7.3 - dev: true - - /w3c-hr-time/1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - dependencies: - browser-process-hrtime: 1.0.0 - dev: true - - /w3c-xmlserializer/2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} - engines: {node: '>=10'} - dependencies: - xml-name-validator: 3.0.0 - dev: true - - /walker/1.0.7: - resolution: {integrity: sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=} - dependencies: - makeerror: 1.0.11 - dev: true - /webidl-conversions/3.0.1: resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=} - - /webidl-conversions/5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} - engines: {node: '>=8'} - dev: true - - /webidl-conversions/6.1.0: - resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} - engines: {node: '>=10.4'} - dev: true - - /whatwg-encoding/1.0.5: - resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} - dependencies: - iconv-lite: 0.4.24 - dev: true - - /whatwg-mimetype/2.3.0: - resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} dev: true /whatwg-url/5.0.0: @@ -3934,14 +408,6 @@ packages: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - - /whatwg-url/8.7.0: - resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} - engines: {node: '>=10'} - dependencies: - lodash: 4.17.21 - tr46: 2.1.0 - webidl-conversions: 6.1.0 dev: true /which/2.0.2: @@ -3950,93 +416,6 @@ packages: hasBin: true dependencies: isexe: 2.0.0 - - /word-wrap/1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} - dev: true - - /wrap-ansi/6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.2 - strip-ansi: 6.0.1 - dev: true - - /wrap-ansi/7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.2 - strip-ansi: 6.0.1 - dev: true - - /wrappy/1.0.2: - resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} - - /write-file-atomic/3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.3 - typedarray-to-buffer: 3.1.5 - dev: true - - /ws/7.5.1: - resolution: {integrity: sha512-2c6faOUH/nhoQN6abwMloF7Iyl0ZS2E9HGtsiLrWn0zOOMWlhtDmdf/uihDt6jnuCxgtwGBNy6Onsoy2s2O2Ow==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - - /xml-name-validator/3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - dev: true - - /xmlchars/2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - dev: true - - /y18n/5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true - - /yallist/4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true - - /yaml/1.10.0: - resolution: {integrity: sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==} - engines: {node: '>= 6'} - dev: true - - /yargs-parser/20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true - - /yargs/16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.2 - y18n: 5.0.8 - yargs-parser: 20.2.9 dev: true /yn/3.1.1: diff --git a/renovate.json b/renovate.json index 137292dea..1ed24a59a 100644 --- a/renovate.json +++ b/renovate.json @@ -12,5 +12,5 @@ } ], "schedule": ["before 8am on Wednesday"], - "reviewers": ["@jolg42", "@millsp"] + "reviewers": ["@jolg42", "@millsp", "@aqrln"] } diff --git a/scripts/publish.ts b/scripts/publish.ts index 3c592a10b..6a12ed952 100644 --- a/scripts/publish.ts +++ b/scripts/publish.ts @@ -74,57 +74,6 @@ async function main(dryRun = false) { `pnpm publish --no-git-checks --tag ${npmDistTag}`, dryRun, ) - - // @prisma/get-platform - adjustPkgJson('packages/get-platform/package.json', (pkg) => { - pkg.version = newVersion - }) - - await run('packages/get-platform', `pnpm run build`, dryRun) - - await run( - 'packages/get-platform', - `pnpm publish --no-git-checks --tag ${npmDistTag}`, - dryRun, - ) - - // @prisma/fetch-engine - adjustPkgJson('packages/fetch-engine/package.json', (pkg) => { - pkg.version = newVersion - }) - - await run( - 'packages/fetch-engine', - `pnpm i @prisma/engines-version@${newVersion} @prisma/get-platform@${newVersion}`, - dryRun, - ) - - await run('packages/fetch-engine', `pnpm run build`, dryRun) - - await run( - 'packages/fetch-engine', - `pnpm publish --no-git-checks --tag ${npmDistTag}`, - dryRun, - ) - - // @prisma/engines - adjustPkgJson('packages/engines/package.json', (pkg) => { - pkg.version = newVersion - }) - - await run( - 'packages/engines', - `pnpm i @prisma/fetch-engine@${newVersion} @prisma/engines-version@${newVersion}`, - dryRun, - ) - - await run('packages/engines', `pnpm run build`, dryRun) - - await run( - 'packages/engines', - `pnpm publish --no-git-checks --tag ${npmDistTag}`, - dryRun, - ) } /** Apply call back function to content of file and write it back */