diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 49ae67cdf1e0..dd1531632eb1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -613,3 +613,35 @@ jobs: run: | cd packages/remix yarn test:integration:ci + + job_e2e_tests: + name: E2E Tests + needs: [job_get_metadata, job_build] + runs-on: ubuntu-latest + timeout-minutes: 10 + continue-on-error: true + steps: + - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) + uses: actions/checkout@v2 + with: + ref: ${{ env.HEAD_COMMIT }} + - name: Set up Node + uses: actions/setup-node@v1 + with: + node-version: ${{ env.DEFAULT_NODE_VERSION }} + - name: Check dependency cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_DEPENDENCY_PATHS }} + key: ${{ needs.job_build.outputs.dependency_cache_key }} + - name: Check build cache + uses: actions/cache@v2 + with: + path: ${{ env.CACHED_BUILD_PATHS }} + key: ${{ env.BUILD_CACHE_KEY }} + - name: Run E2E tests + env: + E2E_TEST_PUBLISH_SCRIPT_NODE_VERSION: ${{ env.DEFAULT_NODE_VERSION }} + run: | + cd packages/e2e-tests + yarn test:e2e diff --git a/package.json b/package.json index 19b1888e6dcc..4c1239c7b8ce 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "packages/angular", "packages/browser", "packages/core", + "packages/e2e-tests", "packages/ember", "packages/eslint-config-sdk", "packages/eslint-plugin-sdk", diff --git a/packages/e2e-tests/.eslintrc.js b/packages/e2e-tests/.eslintrc.js new file mode 100644 index 000000000000..5b0457483479 --- /dev/null +++ b/packages/e2e-tests/.eslintrc.js @@ -0,0 +1,10 @@ +module.exports = { + env: { + node: true, + }, + extends: ['../../.eslintrc.js'], + ignorePatterns: [], + parserOptions: { + sourceType: 'module', + }, +}; diff --git a/packages/e2e-tests/Dockerfile.publish-packages b/packages/e2e-tests/Dockerfile.publish-packages new file mode 100644 index 000000000000..e9b6eac59741 --- /dev/null +++ b/packages/e2e-tests/Dockerfile.publish-packages @@ -0,0 +1,6 @@ +# This Dockerfile exists for the purpose of using a specific node/npm version (ie. the same we use in CI) to run npm publish with +ARG NODE_VERSION=16.15.1 +FROM node:${NODE_VERSION} + +WORKDIR /sentry-javascript/packages/e2e-tests +CMD [ "yarn", "ts-node", "publish-packages.ts" ] diff --git a/packages/e2e-tests/LICENSE b/packages/e2e-tests/LICENSE new file mode 100644 index 000000000000..81b248b1b42e --- /dev/null +++ b/packages/e2e-tests/LICENSE @@ -0,0 +1,29 @@ +MIT License + +Copyright (c) 2022, Sentry +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/packages/e2e-tests/package.json b/packages/e2e-tests/package.json new file mode 100644 index 000000000000..ecfc217aa901 --- /dev/null +++ b/packages/e2e-tests/package.json @@ -0,0 +1,27 @@ +{ + "name": "@sentry-internal/e2e-tests", + "version": "7.13.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "private": true, + "scripts": { + "fix": "run-s fix:eslint fix:prettier", + "fix:eslint": "eslint . --format stylish --fix", + "fix:prettier": "prettier --config ../../.prettierrc.json --write . ", + "lint": "run-s lint:prettier lint:eslint", + "lint:eslint": "eslint . --cache --cache-location '../../eslintcache/' --format stylish", + "lint:prettier": "prettier --config ../../.prettierrc.json --check .", + "test:e2e": "run-s test:validate-configuration test:run", + "test:run": "ts-node run.ts", + "test:validate-configuration": "ts-node validate-verdaccio-configuration.ts" + }, + "devDependencies": { + "@types/glob": "8.0.0", + "glob": "8.0.3", + "ts-node": "10.9.1", + "typescript": "3.8.3", + "yaml": "2.1.1" + } +} diff --git a/packages/e2e-tests/publish-packages.ts b/packages/e2e-tests/publish-packages.ts new file mode 100644 index 000000000000..38a034d7e9eb --- /dev/null +++ b/packages/e2e-tests/publish-packages.ts @@ -0,0 +1,25 @@ +/* eslint-disable no-console */ +import * as childProcess from 'child_process'; +import * as glob from 'glob'; +import * as path from 'path'; + +const repositoryRoot = path.resolve(__dirname, '../..'); + +// Create tarballs +childProcess.execSync('yarn build:npm', { encoding: 'utf8', cwd: repositoryRoot, stdio: 'inherit' }); + +// Get absolute paths of all the packages we want to publish to the fake registry +const packageTarballPaths = glob.sync('packages/*/sentry-*.tgz', { + cwd: repositoryRoot, + absolute: true, +}); + +// Publish built packages to the fake registry +packageTarballPaths.forEach(tarballPath => { + // `--userconfig` flag needs to be before `publish` + childProcess.execSync(`npm --userconfig ${__dirname}/test-registry.npmrc publish ${tarballPath}`, { + cwd: repositoryRoot, // Can't use __dirname here because npm would try to publish `@sentry-internal/e2e-tests` + encoding: 'utf8', + stdio: 'inherit', + }); +}); diff --git a/packages/e2e-tests/run.ts b/packages/e2e-tests/run.ts new file mode 100644 index 000000000000..4a752e15a294 --- /dev/null +++ b/packages/e2e-tests/run.ts @@ -0,0 +1,52 @@ +/* eslint-disable no-console */ +import * as childProcess from 'child_process'; +import * as path from 'path'; + +const repositoryRoot = path.resolve(__dirname, '../..'); + +const TEST_REGISTRY_CONTAINER_NAME = 'verdaccio-e2e-test-registry'; +const VERDACCIO_VERSION = '5.15.3'; + +const PUBLISH_PACKAGES_DOCKER_IMAGE_NAME = 'publish-packages'; + +const publishScriptNodeVersion = process.env.E2E_TEST_PUBLISH_SCRIPT_NODE_VERSION; + +try { + // Stop test registry container (Verdaccio) if it was already running + childProcess.execSync(`docker stop ${TEST_REGISTRY_CONTAINER_NAME}`, { stdio: 'ignore' }); + console.log('Stopped previously running test registry'); +} catch (e) { + // Don't throw if container wasn't running +} + +// Start test registry (Verdaccio) +childProcess.execSync( + `docker run --detach --rm --name ${TEST_REGISTRY_CONTAINER_NAME} -p 4873:4873 -v ${__dirname}/verdaccio-config:/verdaccio/conf verdaccio/verdaccio:${VERDACCIO_VERSION}`, + { encoding: 'utf8', stdio: 'inherit' }, +); + +// Build container image that is uploading our packages to fake registry with specific Node.js/npm version +childProcess.execSync( + `docker build --tag ${PUBLISH_PACKAGES_DOCKER_IMAGE_NAME} --file ./Dockerfile.publish-packages ${ + publishScriptNodeVersion ? `--build-arg NODE_VERSION=${publishScriptNodeVersion}` : '' + } .`, + { + encoding: 'utf8', + stdio: 'inherit', + }, +); + +// Run container that uploads our packages to fake registry +childProcess.execSync( + `docker run --rm -v ${repositoryRoot}:/sentry-javascript --network host ${PUBLISH_PACKAGES_DOCKER_IMAGE_NAME}`, + { + encoding: 'utf8', + stdio: 'inherit', + }, +); + +// TODO: Run e2e tests here + +// Stop test registry +childProcess.execSync(`docker stop ${TEST_REGISTRY_CONTAINER_NAME}`, { encoding: 'utf8', stdio: 'ignore' }); +console.log('Successfully stopped test registry container'); // Output from command above is not good so we `ignore` it and emit our own diff --git a/packages/e2e-tests/test-registry.npmrc b/packages/e2e-tests/test-registry.npmrc new file mode 100644 index 000000000000..c35d987cca9f --- /dev/null +++ b/packages/e2e-tests/test-registry.npmrc @@ -0,0 +1,3 @@ +@sentry:registry=http://localhost:4873 +@sentry-internal:registry=http://localhost:4873 +//localhost:4873/:_authToken=some-token diff --git a/packages/e2e-tests/tsconfig.json b/packages/e2e-tests/tsconfig.json new file mode 100644 index 000000000000..2e051315981a --- /dev/null +++ b/packages/e2e-tests/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "types": ["node"] + } +} diff --git a/packages/e2e-tests/validate-verdaccio-configuration.ts b/packages/e2e-tests/validate-verdaccio-configuration.ts new file mode 100644 index 000000000000..ca0b20f7213e --- /dev/null +++ b/packages/e2e-tests/validate-verdaccio-configuration.ts @@ -0,0 +1,45 @@ +import * as assert from 'assert'; +import * as fs from 'fs'; +import * as glob from 'glob'; +import * as path from 'path'; +import * as YAML from 'yaml'; + +/* + * This file is a quick automatic check to confirm that the packages in the Verdaccio configuration always match the + * packages we defined in our monorepo. This is to ensure that the E2E tests do not use the packages that live on NPM + * but the local ones instead. + */ + +const repositoryRoot = path.resolve(__dirname, '../..'); + +const verdaccioConfigContent = fs.readFileSync('./verdaccio-config/config.yaml', { encoding: 'utf8' }); +const verdaccioConfig = YAML.parse(verdaccioConfigContent); +// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access +const sentryScopedPackagesInVerdaccioConfig = Object.keys(verdaccioConfig.packages).filter(packageName => + packageName.startsWith('@sentry/'), +); + +const packageJsonPaths = glob.sync('packages/*/package.json', { + cwd: repositoryRoot, + absolute: true, +}); +const packageJsons = packageJsonPaths.map(packageJsonPath => require(packageJsonPath)); +const sentryScopedPackageNames = packageJsons + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + .filter(packageJson => packageJson.name.startsWith('@sentry/')) + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + .map(packageJson => packageJson.name); + +const extraPackagesInVerdaccioConfig = sentryScopedPackagesInVerdaccioConfig.filter( + x => !sentryScopedPackageNames.includes(x), +); +const extraPackagesInMonoRepo = sentryScopedPackageNames.filter( + x => !sentryScopedPackagesInVerdaccioConfig.includes(x), +); + +assert.ok( + extraPackagesInVerdaccioConfig.length === 0 && extraPackagesInMonoRepo.length === 0, + `Packages in Verdaccio configuration do not match the "@sentry"-scoped packages in monorepo. Make sure they match!\nPackages missing in Verdaccio configuration: ${JSON.stringify( + extraPackagesInMonoRepo, + )}\nPackages missing in monorepo: ${JSON.stringify(extraPackagesInVerdaccioConfig)}`, +); diff --git a/packages/e2e-tests/verdaccio-config/config.yaml b/packages/e2e-tests/verdaccio-config/config.yaml new file mode 100644 index 000000000000..d0e5eab87ddf --- /dev/null +++ b/packages/e2e-tests/verdaccio-config/config.yaml @@ -0,0 +1,186 @@ +# Taken from https://github.com/babel/babel/blob/624c78d99e8f42b2543b8943ab1b62bd71cf12d8/scripts/integration-tests/verdaccio-config.yml + +# +# This is the default config file. It allows all users to do anything, +# so don't use it on production systems. +# +# Look here for more config file examples: +# https://github.com/verdaccio/verdaccio/tree/master/conf +# + +# path to a directory with all packages +storage: /verdaccio/storage/data + +# https://verdaccio.org/docs/configuration#authentication +auth: + htpasswd: + file: /verdaccio/storage/htpasswd + +# https://verdaccio.org/docs/configuration#uplinks +# a list of other known repositories we can talk to +uplinks: + npmjs: + url: https://registry.npmjs.org/ + +# Learn how to protect your packages +# https://verdaccio.org/docs/protect-your-dependencies/ +# https://verdaccio.org/docs/configuration#packages +packages: + # To not use a proxy (e.g. npm) but instead use verdaccio for package hosting we need to define rules here without the + # `proxy` field. Sadly we can't use a wildcard like "@sentry/*" because we have some dependencies (@sentry/cli, + # @sentry/webpack-plugin) that fall under that wildcard but don't live in this repository. If we were to use that + # wildcard, we would get a 404 when attempting to install them, since they weren't uploaded to verdaccio, and also + # don't have a proxy configuration. + + '@sentry/angular': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/browser': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/core': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/ember': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/gatsby': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/hub': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/integrations': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/nextjs': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/node': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/react': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/remix': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/serverless': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/svelte': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/tracing': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/types': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/utils': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/vue': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry/wasm': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@sentry-internal/*': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + + '@*/*': + # scoped packages + access: $all + publish: $all + unpublish: $all + proxy: npmjs + + '**': + # allow all users (including non-authenticated users) to read and + # publish all packages + # + # you can specify usernames/groupnames (depending on your auth plugin) + # and three keywords: "$all", "$anonymous", "$authenticated" + access: $all + + # allow all known users to publish/publish packages + # (anyone can register by default, remember?) + publish: $all + unpublish: $all + proxy: npmjs + +# https://verdaccio.org/docs/configuration#server +# You can specify HTTP/1.1 server keep alive timeout in seconds for incoming connections. +# A value of 0 makes the http server behave similarly to Node.js versions prior to 8.0.0, which did not have a keep-alive timeout. +# WORKAROUND: Through given configuration you can workaround following issue https://github.com/verdaccio/verdaccio/issues/301. Set to 0 in case 60 is not enough. +server: + keepAliveTimeout: 60 + +middlewares: + audit: + enabled: false + +# https://verdaccio.org/docs/logger +# log settings +logs: { type: stdout, format: pretty, level: http } +#experiments: +# # support for npm token command +# token: false diff --git a/yarn.lock b/yarn.lock index e2215f03ff14..8233926a6fa5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2524,6 +2524,13 @@ dependencies: "@cspotcode/source-map-consumer" "0.8.0" +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@ember-data/rfc395-data@^0.0.4": version "0.0.4" resolved "https://registry.yarnpkg.com/@ember-data/rfc395-data/-/rfc395-data-0.0.4.tgz#ecb86efdf5d7733a76ff14ea651a1b0ed1f8a843" @@ -3286,6 +3293,14 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping@^0.3.0": version "0.3.4" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" @@ -5153,6 +5168,14 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/glob@8.0.0": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.0.0.tgz#321607e9cbaec54f687a0792b2d1d370739455d2" + integrity sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + "@types/graceful-fs@^4.1.2": version "4.1.5" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" @@ -7962,6 +7985,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -14139,6 +14169,17 @@ glob@7.2.0, glob@^7.0.0, glob@^7.0.3, glob@^7.0.4, glob@^7.0.5, glob@^7.1.1, glo once "^1.3.0" path-is-absolute "^1.0.0" +glob@8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + glob@^5.0.10, glob@^5.0.15: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -18571,6 +18612,13 @@ minimalistic-crypto-utils@^1.0.1: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -25262,6 +25310,25 @@ ts-jest@^27.1.4: semver "7.x" yargs-parser "20.x" +ts-node@10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + ts-node@^10.7.0: version "10.7.0" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.7.0.tgz#35d503d0fab3e2baa672a0e94f4b40653c2463f5" @@ -25936,7 +26003,7 @@ uuid@^8.0.0, uuid@^8.3.0, uuid@^8.3.1, uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache-lib@^3.0.0: +v8-compile-cache-lib@^3.0.0, v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== @@ -26841,6 +26908,11 @@ yam@^1.0.0: fs-extra "^4.0.2" lodash.merge "^4.6.0" +yaml@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.1.1.tgz#1e06fb4ca46e60d9da07e4f786ea370ed3c3cfec" + integrity sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw== + yargs-parser@13.1.2, yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"