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"