From 4f2d0af10a4bf5aa3597da8a4e110c42ed6c2f18 Mon Sep 17 00:00:00 2001
From: Christopher Henn <56489932+christopher-stripe@users.noreply.github.com>
Date: Mon, 1 Nov 2021 05:28:33 -0700
Subject: [PATCH] Improve type testing for older versions of TypeScript (#254)
* Run types tests with multiple versions of TypeScript
* Test older versions of TypeScript by separate @ts-expect-error tests
* Remove old versions test from GitHub actions workflow
* Add comment
---
.github/workflows/test.yml | 1 -
package.json | 6 +-
tests/types/.eslintignore | 1 +
tests/{versions => types}/.gitignore | 0
tests/types/scripts/test.mjs | 48 ++++++
tests/types/src/invalid.ts | 91 ++++++++++
tests/types/{index.ts => src/valid.ts} | 96 +----------
tests/types/tsconfig.json | 10 --
tests/versions/.eslintrc.yml | 2 -
tests/versions/scripts/test.sh | 30 ----
tests/versions/src/index.ts | 33 ----
tests/versions/tsconfig.json | 10 --
yarn.lock | 226 ++++++++++++++++++++++++-
13 files changed, 367 insertions(+), 187 deletions(-)
create mode 100644 tests/types/.eslintignore
rename tests/{versions => types}/.gitignore (100%)
create mode 100644 tests/types/scripts/test.mjs
create mode 100644 tests/types/src/invalid.ts
rename tests/types/{index.ts => src/valid.ts} (96%)
delete mode 100644 tests/types/tsconfig.json
delete mode 100644 tests/versions/.eslintrc.yml
delete mode 100755 tests/versions/scripts/test.sh
delete mode 100644 tests/versions/src/index.ts
delete mode 100644 tests/versions/tsconfig.json
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index ae6c9064..352fc6c5 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -16,5 +16,4 @@ jobs:
- run: yarn run lint
- run: yarn run typecheck
- run: yarn run test:unit
- - run: yarn run test:versions
- run: yarn run test:types
diff --git a/package.json b/package.json
index 5ead4800..6455acd9 100644
--- a/package.json
+++ b/package.json
@@ -10,8 +10,7 @@
"scripts": {
"test": "yarn lint && yarn test:unit && yarn test:versions && yarn test:types && yarn typecheck",
"test:unit": "jest",
- "test:versions": "./tests/versions/scripts/test.sh",
- "test:types": "tsc -p ./tests/types",
+ "test:types": "zx --quiet ./tests/types/scripts/test.mjs",
"lint": "eslint '{src,types}/**/*.{ts,js}' && yarn prettier-check",
"typecheck": "tsc",
"build": "yarn clean && yarn rollup -c",
@@ -57,6 +56,7 @@
"rollup-plugin-babel": "^4.3.3",
"rollup-plugin-typescript2": "^0.25.3",
"ts-jest": "^24.3.0",
- "typescript": "^4.1.2"
+ "typescript": "^4.1.2",
+ "zx": "^4.2.0"
}
}
diff --git a/tests/types/.eslintignore b/tests/types/.eslintignore
new file mode 100644
index 00000000..85de9cf9
--- /dev/null
+++ b/tests/types/.eslintignore
@@ -0,0 +1 @@
+src
diff --git a/tests/versions/.gitignore b/tests/types/.gitignore
similarity index 100%
rename from tests/versions/.gitignore
rename to tests/types/.gitignore
diff --git a/tests/types/scripts/test.mjs b/tests/types/scripts/test.mjs
new file mode 100644
index 00000000..53fb110e
--- /dev/null
+++ b/tests/types/scripts/test.mjs
@@ -0,0 +1,48 @@
+#!/usr/bin/env zx
+
+import fs from 'fs';
+import 'zx/globals';
+
+const VERSIONS = [
+ 'next',
+ 'beta',
+ 'latest',
+ '3.9.7',
+ '3.8.3',
+ '3.7.4',
+ '3.6.3',
+ '3.5.1',
+ '3.4.4',
+ '3.3.3',
+ '3.2.1',
+
+ // Attempting to test on 3.1.1 currently fails. I believe it is not a
+ // fundamental incompability with the types, just some tsconfig.json changes
+ // that are needed. Skipping for now
+ // '3.1.1',
+];
+
+const TYPE_TESTS_DIR = `${__dirname}/..`;
+
+// Ensure working directory is test directory
+cd(TYPE_TESTS_DIR);
+
+if (fs.existsSync(`${TYPE_TESTS_DIR}/package.json`)) {
+ await $`rm package.json`;
+}
+
+await $`yarn init -sy`;
+
+for (const version of VERSIONS) {
+ console.log(`--- Testing with TypeScript version ${version}`);
+ await $`yarn add -s --no-progress typescript@${version}`;
+ await $`yarn run tsc --strict --noEmit src/valid.ts`;
+
+ // TypeScript versions >= 3.9.0 support [@ts-expect-error][0], which lets us
+ // write tests for types that we expect to cause errors
+ //
+ // [0]: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-9.html#-ts-expect-error-comments
+ if (version >= '3.9.0') {
+ await $`yarn run tsc --strict --noEmit src/invalid.ts`;
+ }
+}
diff --git a/tests/types/src/invalid.ts b/tests/types/src/invalid.ts
new file mode 100644
index 00000000..02ec234f
--- /dev/null
+++ b/tests/types/src/invalid.ts
@@ -0,0 +1,91 @@
+///
+
+import {
+ Stripe,
+ StripeElements,
+ StripeCardElement,
+ StripeIbanElement,
+ StripePaymentElement,
+} from '@stripe/stripe-js';
+
+declare const stripe: Stripe;
+declare const elements: StripeElements;
+declare const cardElement: StripeCardElement;
+declare const ibanElement: StripeIbanElement;
+declare const paymentElement: StripePaymentElement;
+
+elements.update({
+ // @ts-expect-error: `clientSecret` is not updatable
+ clientSecret: 'pk_foo_secret_bar',
+});
+
+elements.update({
+ // @ts-expect-error: `fonts` is not updatable
+ fonts: [],
+});
+
+paymentElement.on('change', (e) => {
+ // @ts-expect-error: `error` is not present on PaymentElement "change" event.
+ if (e.error) {
+ }
+});
+
+stripe
+ .confirmPayment({elements, confirmParams: {return_url: ''}})
+ .then((res) => {
+ if (res.error) {
+ }
+
+ // @ts-expect-error redirect only, no paymentIntent expected
+ if (res.paymentIntent) {
+ }
+ });
+
+stripe
+ .confirmPayment({
+ elements,
+ confirmParams: {return_url: ''},
+ redirect: 'always',
+ })
+ .then((res) => {
+ if (res.error) {
+ }
+
+ // @ts-expect-error redirect only, no paymentIntent expected
+ if (res.paymentIntent) {
+ }
+ });
+
+stripe.confirmSetup({elements, confirmParams: {return_url: ''}}).then((res) => {
+ if (res.error) {
+ }
+
+ // @ts-expect-error redirect only, no paymentIntent expected
+ if (res.paymentIntent) {
+ }
+});
+
+stripe
+ .confirmSetup({elements, confirmParams: {return_url: ''}, redirect: 'always'})
+ .then((res) => {
+ if (res.error) {
+ }
+
+ // @ts-expect-error redirect only, no paymentIntent expected
+ if (res.paymentIntent) {
+ }
+ });
+
+stripe.createToken(cardElement, {
+ currency: '',
+ name: '',
+ // @ts-expect-error: `extra_property` is not valid
+ extra_property: '',
+});
+
+// @ts-expect-error: `extra_property` is not valid
+stripe.createToken(ibanElement, {
+ currency: '',
+ account_holder_name: '',
+ extra_property: '',
+});
diff --git a/tests/types/index.ts b/tests/types/src/valid.ts
similarity index 96%
rename from tests/types/index.ts
rename to tests/types/src/valid.ts
index 0608baf4..118b5b96 100644
--- a/tests/types/index.ts
+++ b/tests/types/src/valid.ts
@@ -1,4 +1,4 @@
-///
+///
import {assert, Has} from 'conditional-type-checks';
@@ -51,12 +51,12 @@ const stripePromise: Promise = loadStripe('');
const stripeConnectPromise = loadStripe('', {stripeAccount: '', locale: 'en'});
type TypeModule = typeof import('@stripe/stripe-js');
-type SrcModule = typeof import('../../src/index');
+type SrcModule = typeof import('../../../src/index');
// Makes sure that the implementation matches the type definitions
// Checking for compatibility both ways ensures that the exports
// are equivalent with nothing missing on either side.
-import('../../src/index').then((srcModule: TypeModule) => {});
+import('../../../src/index').then((srcModule: TypeModule) => {});
import('@stripe/stripe-js').then((typeModule: SrcModule) => {});
const stripe: Stripe = window.Stripe!('pk_123');
@@ -134,14 +134,6 @@ elements.update({
},
},
});
-elements.update({
- // @ts-expect-error: `clientSecret` is not updatable
- clientSecret: 'pk_foo_secret_bar',
-});
-elements.update({
- // @ts-expect-error: `fonts` is not updatable
- fonts: [],
-});
const auBankAccountElement = elements.create('auBankAccount', {});
@@ -198,13 +190,6 @@ const retrievedCardCvcElement: StripeCardCvcElement | null = elements.getElement
'cardCvc'
);
-stripe.createToken(cardElement, {
- currency: '',
- name: '',
- // @ts-expect-error: `extra_property` is not valid
- extra_property: '',
-});
-
const fpxBankElement = elements.create('fpxBank', {
style: MY_STYLE,
value: '',
@@ -227,13 +212,6 @@ const retrievedIbanElement: StripeIbanElement | null = elements.getElement(
'iban'
);
-// @ts-expect-error: `extra_property` is not valid
-stripe.createToken(ibanElement, {
- currency: '',
- account_holder_name: '',
- extra_property: '',
-});
-
const idealBankElement = elements.create('idealBank', {
style: MY_STYLE,
value: '',
@@ -330,12 +308,6 @@ paymentElement
}) => {}
);
-paymentElement.on('change', (e) => {
- // @ts-expect-error: `error` is not present on PaymentElement "change" event.
- if (e.error) {
- }
-});
-
paymentElement.collapse();
affirmMessageElement.on('ready', (e: {elementType: 'affirmMessage'}) => {});
@@ -1908,37 +1880,6 @@ stripe
}) => null
);
-stripe
- .confirmPayment({
- elements,
- confirmParams: {
- return_url: '',
- },
- })
- .then((res) => {
- if (res.error) {
- }
- // @ts-expect-error redirect only, no paymentIntent expected
- if (res.paymentIntent) {
- }
- });
-
-stripe
- .confirmPayment({
- elements,
- confirmParams: {
- return_url: '',
- },
- redirect: 'always',
- })
- .then((res) => {
- if (res.error) {
- }
- // @ts-expect-error redirect only, no paymentIntent expected
- if (res.paymentIntent) {
- }
- });
-
stripe
.confirmPayment({
elements,
@@ -1963,37 +1904,6 @@ stripe
}
});
-stripe
- .confirmSetup({
- elements,
- confirmParams: {
- return_url: '',
- },
- })
- .then((res) => {
- if (res.error) {
- }
- // @ts-expect-error redirect only, no paymentIntent expected
- if (res.paymentIntent) {
- }
- });
-
-stripe
- .confirmSetup({
- elements,
- confirmParams: {
- return_url: '',
- },
- redirect: 'always',
- })
- .then((res) => {
- if (res.error) {
- }
- // @ts-expect-error redirect only, no paymentIntent expected
- if (res.paymentIntent) {
- }
- });
-
stripe
.confirmSetup({
elements,
diff --git a/tests/types/tsconfig.json b/tests/types/tsconfig.json
deleted file mode 100644
index fa2cb8bf..00000000
--- a/tests/types/tsconfig.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "compilerOptions": {
- "target": "es5",
- "module": "esnext",
- "moduleResolution": "node",
- "noEmit": true,
- "strict": true
- },
- "include": ["./index.ts"]
-}
diff --git a/tests/versions/.eslintrc.yml b/tests/versions/.eslintrc.yml
deleted file mode 100644
index 3478d998..00000000
--- a/tests/versions/.eslintrc.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-rules:
- '@typescript-eslint/no-non-null-assertion': 0
diff --git a/tests/versions/scripts/test.sh b/tests/versions/scripts/test.sh
deleted file mode 100755
index f9cbe731..00000000
--- a/tests/versions/scripts/test.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/bash
-set -euo pipefail
-IFS=$'\n\t'
-
-# Ensure working directory is test directory
-cd "$(dirname "$0")/.."
-
-[ -f package.json ] && rm package.json
-yarn init -sy
-
-versions=(
- "next"
- "beta"
- "latest"
- "3.9.7"
- "3.8.3"
- "3.7.4"
- "3.6.3"
- "3.5.1"
- "3.4.4"
- "3.3.3"
- "3.2.1"
- "3.1.1"
-)
-
-for version in ${versions[@]}; do
- echo "--- Testing with TypeScript version $version"
- yarn add -s --no-progress typescript@$version
- yarn run tsc
-done
diff --git a/tests/versions/src/index.ts b/tests/versions/src/index.ts
deleted file mode 100644
index 8e4ab087..00000000
--- a/tests/versions/src/index.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import {loadStripe} from '@stripe/stripe-js';
-
-const main = async (): Promise => {
- // setup DOM
- const rootNode = document.getElementById('root')!;
- const form = document.createElement('form');
- const cardWrapper = document.createElement('div');
- const button = document.createElement('button');
- button.innerText = 'Pay';
- form.appendChild(cardWrapper);
- form.appendChild(button);
- rootNode.appendChild(form);
-
- // setup Stripe.js and Elements
- const stripe = (await loadStripe('pk_test_TYooMQauvdEDq54NiTphI7jx'))!;
- const elements = stripe.elements();
-
- // setup Card Element
- const cardElement = elements.create('card', {});
- cardElement.mount(cardWrapper);
-
- // handle form submit
- form.addEventListener('submit', async (e) => {
- e.preventDefault();
- const payload = await stripe.createPaymentMethod({
- type: 'card',
- card: cardElement,
- });
- console.log('[PaymentMethod]', payload);
- });
-};
-
-main();
diff --git a/tests/versions/tsconfig.json b/tests/versions/tsconfig.json
deleted file mode 100644
index a7990d61..00000000
--- a/tests/versions/tsconfig.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "compilerOptions": {
- "target": "esnext",
- "module": "esnext",
- "noEmit": true,
- "strict": true,
- "moduleResolution": "node",
- "types": ["../.."]
- }
-}
diff --git a/yarn.lock b/yarn.lock
index e8b26c4d..e273c6e7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1029,6 +1029,13 @@
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
+"@types/fs-extra@^9.0.12":
+ version "9.0.13"
+ resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45"
+ integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==
+ dependencies:
+ "@types/node" "*"
+
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
version "2.0.3"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762"
@@ -1066,11 +1073,29 @@
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
+"@types/minimist@^1.2.2":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c"
+ integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==
+
+"@types/node-fetch@^2.5.12":
+ version "2.5.12"
+ resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66"
+ integrity sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==
+ dependencies:
+ "@types/node" "*"
+ form-data "^3.0.0"
+
"@types/node@*":
version "14.0.26"
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.26.tgz#22a3b8a46510da8944b67bfc27df02c34a35331c"
integrity sha512-W+fpe5s91FBGE0pEa0lnqGLL4USgpLgs4nokw16SrBBco/gQxuua7KnArSEOd5iaMqbbSHV10vUDkJYJJqpXKA==
+"@types/node@^16.6":
+ version "16.11.6"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.6.tgz#6bef7a2a0ad684cf6e90fcfe31cecabd9ce0a3ae"
+ integrity sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==
+
"@types/stack-utils@^1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
@@ -1314,6 +1339,11 @@ array-union@^2.1.0:
resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+array-union@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-3.0.1.tgz#da52630d327f8b88cfbfb57728e2af5cd9b6b975"
+ integrity sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==
+
array-unique@^0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
@@ -1600,6 +1630,14 @@ chalk@^4.1.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
+chalk@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
chardet@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
@@ -1683,7 +1721,7 @@ colorette@^1.2.2:
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
-combined-stream@^1.0.6, combined-stream@~1.0.6:
+combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
version "1.0.8"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
@@ -1881,6 +1919,11 @@ domexception@^1.0.1:
dependencies:
webidl-conversions "^4.0.2"
+duplexer@~0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
+ integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
+
ecc-jsbn@~0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
@@ -2158,6 +2201,19 @@ esutils@^2.0.2:
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+event-stream@=3.3.4:
+ version "3.3.4"
+ resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571"
+ integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=
+ dependencies:
+ duplexer "~0.1.1"
+ from "~0"
+ map-stream "~0.1.0"
+ pause-stream "0.0.11"
+ split "0.3"
+ stream-combiner "~0.0.4"
+ through "~2.3.1"
+
exec-sh@^0.3.2:
version "0.3.4"
resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5"
@@ -2281,6 +2337,17 @@ fast-glob@^3.1.1:
micromatch "^4.0.2"
picomatch "^2.2.1"
+fast-glob@^3.2.7:
+ version "3.2.7"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1"
+ integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
@@ -2396,6 +2463,15 @@ forever-agent@~0.6.1:
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
+form-data@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"
+ integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
form-data@~2.3.2:
version "2.3.3"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
@@ -2412,6 +2488,11 @@ fragment-cache@^0.2.1:
dependencies:
map-cache "^0.2.2"
+from@~0:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
+ integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=
+
fs-extra@8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
@@ -2421,6 +2502,15 @@ fs-extra@8.1.0:
jsonfile "^4.0.0"
universalify "^0.1.0"
+fs-extra@^10.0.0:
+ version "10.0.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1"
+ integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -2478,7 +2568,7 @@ getpass@^0.1.1:
dependencies:
assert-plus "^1.0.0"
-glob-parent@^5.0.0, glob-parent@^5.1.0:
+glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.2:
version "5.1.2"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
@@ -2521,6 +2611,18 @@ globby@^11.0.1:
merge2 "^1.3.0"
slash "^3.0.0"
+globby@^12.0.1:
+ version "12.0.2"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-12.0.2.tgz#53788b2adf235602ed4cabfea5c70a1139e1ab11"
+ integrity sha512-lAsmb/5Lww4r7MM9nCCliDZVIKbZTavrsunAsHLr9oHthrZP1qi7/gAnHOsUs9bLvEt2vKVJhHmxuL7QbDuPdQ==
+ dependencies:
+ array-union "^3.0.1"
+ dir-glob "^3.0.1"
+ fast-glob "^3.2.7"
+ ignore "^5.1.8"
+ merge2 "^1.4.1"
+ slash "^4.0.0"
+
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
version "4.2.4"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
@@ -2635,7 +2737,7 @@ ignore@^4.0.6:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
-ignore@^5.1.4:
+ignore@^5.1.4, ignore@^5.1.8:
version "5.1.8"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
@@ -3402,6 +3504,15 @@ jsonfile@^4.0.0:
optionalDependencies:
graceful-fs "^4.1.6"
+jsonfile@^6.0.1:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+ integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+ dependencies:
+ universalify "^2.0.0"
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -3575,6 +3686,11 @@ map-cache@^0.2.2:
resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+map-stream@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
+ integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=
+
map-visit@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
@@ -3587,7 +3703,7 @@ merge-stream@^2.0.0:
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-merge2@^1.3.0:
+merge2@^1.3.0, merge2@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
@@ -3619,6 +3735,14 @@ micromatch@^4.0.2:
braces "^3.0.1"
picomatch "^2.0.5"
+micromatch@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
+ integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.2.3"
+
mime-db@1.44.0:
version "1.44.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
@@ -3710,6 +3834,13 @@ nice-try@^1.0.4:
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
+node-fetch@^2.6.1:
+ version "2.6.5"
+ resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.5.tgz#42735537d7f080a7e5f78b6c549b7146be1742fd"
+ integrity sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==
+ dependencies:
+ whatwg-url "^5.0.0"
+
node-int64@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
@@ -4000,6 +4131,13 @@ path-type@^4.0.0:
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+pause-stream@0.0.11:
+ version "0.0.11"
+ resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
+ integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=
+ dependencies:
+ through "~2.3"
+
performance-now@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
@@ -4010,6 +4148,11 @@ picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2:
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
+picomatch@^2.2.3:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
+ integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
+
pify@^2.0.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
@@ -4103,6 +4246,13 @@ prompts@^2.0.1:
kleur "^3.0.3"
sisteransi "^1.0.4"
+ps-tree@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd"
+ integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==
+ dependencies:
+ event-stream "=3.3.4"
+
psl@^1.1.28:
version "1.8.0"
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
@@ -4568,6 +4718,11 @@ slash@^3.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+slash@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
+ integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
+
slice-ansi@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
@@ -4679,6 +4834,13 @@ split-string@^3.0.1, split-string@^3.0.2:
dependencies:
extend-shallow "^3.0.0"
+split@0.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
+ integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=
+ dependencies:
+ through "2"
+
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
@@ -4717,6 +4879,13 @@ stealthy-require@^1.1.1:
resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
+stream-combiner@~0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14"
+ integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=
+ dependencies:
+ duplexer "~0.1.1"
+
string-length@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed"
@@ -4851,7 +5020,7 @@ throat@^4.0.0:
resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=
-through@^2.3.6:
+through@2, through@^2.3.6, through@~2.3, through@~2.3.1:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
@@ -4920,6 +5089,11 @@ tr46@^1.0.1:
dependencies:
punycode "^2.1.0"
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+ integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
+
ts-jest@^24.3.0:
version "24.3.0"
resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.3.0.tgz#b97814e3eab359ea840a1ac112deae68aa440869"
@@ -5035,6 +5209,11 @@ universalify@^0.1.0:
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+universalify@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
+ integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+
unset-value@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
@@ -5111,6 +5290,11 @@ walker@^1.0.7, walker@~1.0.5:
dependencies:
makeerror "1.0.x"
+webidl-conversions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+ integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
+
webidl-conversions@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
@@ -5128,6 +5312,14 @@ whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0:
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+whatwg-url@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+ integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0=
+ dependencies:
+ tr46 "~0.0.3"
+ webidl-conversions "^3.0.0"
+
whatwg-url@^6.4.1:
version "6.5.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8"
@@ -5158,6 +5350,13 @@ which@^1.2.9, which@^1.3.0:
dependencies:
isexe "^2.0.0"
+which@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
word-wrap@~1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
@@ -5240,3 +5439,20 @@ yargs@^13.3.0:
which-module "^2.0.0"
y18n "^4.0.0"
yargs-parser "^13.1.2"
+
+zx@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/zx/-/zx-4.2.0.tgz#5f7c15f4446ad33ae23717e5aba4c0199aa90851"
+ integrity sha512-/4f7FaJecA9I655KXKXIHO3CFNYjAz2uSmTz6v2eNlKdrQKyz4VyF3RjqFuP6nQG+Hd3+NjOvrVNBkv8Ne9d4Q==
+ dependencies:
+ "@types/fs-extra" "^9.0.12"
+ "@types/minimist" "^1.2.2"
+ "@types/node" "^16.6"
+ "@types/node-fetch" "^2.5.12"
+ chalk "^4.1.2"
+ fs-extra "^10.0.0"
+ globby "^12.0.1"
+ minimist "^1.2.5"
+ node-fetch "^2.6.1"
+ ps-tree "^1.2.0"
+ which "^2.0.2"