diff --git a/.github/workflows/deploy-contracts.yml b/.github/workflows/deploy-contracts.yml new file mode 100644 index 00000000000..f74b0f47afa --- /dev/null +++ b/.github/workflows/deploy-contracts.yml @@ -0,0 +1,32 @@ +name: deploy-contracts +on: + schedule: + - cron: "*/15 * * * *" + workflow_dispatch: + +jobs: + deploy-contracts: + runs-on: ubuntu-latest + env: + API_SERVER: https://stacks-node-api.blockstack.org + CONTRACT_PRIVATE_KEY: ${{ secrets.CONTRACT_PRIVATE_KEY }} + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Set Node Version + uses: actions/setup-node@v2-beta + with: + node-version: 12.16.1 + - name: Restore lerna cache + id: lerna-cache + uses: actions/cache@v2 + with: + path: | + node_modules + */*/node_modules + key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }} + - name: Install monorepo deps + run: yarn --frozen-lockfile + if: steps.lerna-cache.outputs.cache-hit != 'true' + - name: Deploy contracts + run: yarn deploy-contracts \ No newline at end of file diff --git a/package.json b/package.json index 7c667e26962..2949b3a892b 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "build:app": "yarn build:connect-ui && lerna run prod:web --scope @stacks/app", "build:test-app": "lerna run prod:web --scope test-app", "build:extension": "lerna run prod:ext", + "deploy-contracts": "lerna run deploy-contracts --stream", "lint": "yarn lint:eslint && yarn lint:prettier", "lint:eslint": "eslint \"packages/**/src/**/*.{ts,tsx}\" -f unix", "lint:fix": "eslint \"packages/**/src/**/*.{ts,tsx}\" -f unix --fix", diff --git a/packages/rpc-client/src/index.ts b/packages/rpc-client/src/index.ts index 628f00799e0..201625f4825 100644 --- a/packages/rpc-client/src/index.ts +++ b/packages/rpc-client/src/index.ts @@ -1,6 +1,7 @@ import BN from 'bn.js'; import { serializeCV, ClarityValue } from '@blockstack/stacks-transactions'; import { TransactionResults } from '@blockstack/stacks-blockchain-sidecar-types'; +import fetch from 'cross-fetch'; export interface Account { balance: BN; diff --git a/packages/test-app/contracts/faker.clar b/packages/test-app/contracts/faker.clar new file mode 100644 index 00000000000..f283dad8ed0 --- /dev/null +++ b/packages/test-app/contracts/faker.clar @@ -0,0 +1,15 @@ +;; A component with a function that accepts all argument types. +;; Use for testing. + +(define-public + (rawr + (arg-uint uint) + (arg-int int) + (arg-buff (buff 20)) + (arg-string-ascii (string-ascii 20)) + (arg-string-utf8 (string-utf8 20)) + (arg-principal principal) + (arg-bool bool) + ) + (ok u0) +) diff --git a/packages/test-app/contracts/status.clar b/packages/test-app/contracts/status.clar index 76c2094660f..fce424bc783 100644 --- a/packages/test-app/contracts/status.clar +++ b/packages/test-app/contracts/status.clar @@ -1,30 +1,23 @@ -(define-map statuses - ( - (author principal) - ) - ( - (status (buff 512)) - ) -) +(define-map statuses { author: principal } { status: (buff 128) }) (define-read-only (get-status (author principal)) (begin (print author) - (default-to "" - (get status (map-get? statuses {author: author})) + (default-to 0x01 + (get status (map-get? statuses { author: author })) ) ) ) (define-public (write-status! - (status (buff 512)) + (status (buff 128)) ) (begin (print tx-sender) (print status) (map-set statuses - ((author tx-sender)) - ((status status)) + { author: tx-sender } + { status: status } ) (ok status) ) diff --git a/packages/test-app/contracts/token.clar b/packages/test-app/contracts/token.clar new file mode 100644 index 00000000000..4a66e82c3d3 --- /dev/null +++ b/packages/test-app/contracts/token.clar @@ -0,0 +1,14 @@ + +(define-fungible-token connect-token) +(begin (ft-mint? connect-token u10000000 tx-sender)) + +(define-public (transfer + (recipient principal) + (amount uint) + ) + (ok (ft-transfer? connect-token amount tx-sender recipient)) +) + +(define-public (faucet) + (ok (ft-mint? connect-token u100 tx-sender)) +) diff --git a/packages/test-app/package.json b/packages/test-app/package.json index 4eb708fca45..44db4485981 100755 --- a/packages/test-app/package.json +++ b/packages/test-app/package.json @@ -7,6 +7,7 @@ "clean": "rm -rf ./dist", "clean:all": "rm -rf ./dist && rm -rf ./coverage && rm -rf ./node_modules", "dev": "cross-env NODE_ENV=development webpack-dev-server --hot --mode development", + "deploy-contracts": "ts-node scripts/deploy-contracts.ts -T --project ./tsconfig.json", "lint": "yarn lint:eslint && yarn lint:prettier", "lint:eslint": "eslint \"src/**/*.{ts,tsx}\" -f unix", "lint:fix": "eslint \"src/**/*.{ts,tsx}\" -f unix --fix", @@ -88,6 +89,7 @@ "html-webpack-plugin": "^4.2.0", "jest": "^25.3.0", "jest-puppeteer": "^4.3.0", + "nodemon": "^2.0.6", "prettier": "^2.0.5", "puppeteer": "^3.0.0", "react-dev-utils": "^10.2.1", @@ -95,6 +97,7 @@ "terser-webpack-plugin": "^2.3.5", "ts-jest": "^25.3.1", "ts-loader": "^7.0.0", + "ts-node": "^9.1.1", "webpack": "^4.42.1", "webpack-bundle-analyzer": "^3.7.0", "webpack-chrome-extension-reloader": "^1.3.0", diff --git a/packages/test-app/scripts/deploy-contracts.ts b/packages/test-app/scripts/deploy-contracts.ts new file mode 100644 index 00000000000..33968045d13 --- /dev/null +++ b/packages/test-app/scripts/deploy-contracts.ts @@ -0,0 +1,110 @@ +import { readFile as readFileFn } from 'fs'; +import { promisify } from 'util'; +import { RPCClient } from '@stacks/rpc-client'; +import { + getAddressFromPrivateKey, + TransactionVersion, + makeContractDeploy, + StacksTestnet, +} from '@blockstack/stacks-transactions'; +import * as BN from 'bn.js'; +import * as dotenv from 'dotenv'; +dotenv.config(); + +const readFile = promisify(readFileFn); + +interface Contract { + name: string; + file?: string; +} + +const contracts: Contract[] = [ + { + name: 'connect-token', + file: 'token', + }, + { + name: 'counter', + }, + { + name: 'faker', + }, + { + name: 'status-2', + file: 'status', + }, +]; + +const rpcClient = new RPCClient(process.env.API_SERVER || 'http://localhost:3999'); +const privateKey = process.env.CONTRACT_PRIVATE_KEY; +if (!privateKey) { + console.error('Provide a private key with `process.env.CONTRACT_PRIVATE_KEY`'); + process.exit(1); +} +const address = getAddressFromPrivateKey(privateKey, TransactionVersion.Testnet); + +const network = new StacksTestnet(); +network.coreApiUrl = rpcClient.url; + +const run = async () => { + const account = await rpcClient.fetchAccount(address); + console.log(`Account balance: ${account.balance.toString()} mSTX`); + console.log(`Account nonce: ${account.nonce}`); + + const txResults: string[] = []; + let index = 0; + for (const contract of contracts) { + let exists: boolean; + const contractId = `${address}.${contract.name}`; + try { + await rpcClient.fetchContractInterface({ + contractAddress: address, + contractName: contract.name, + }); + exists = true; + } catch (error) { + // console.error(error); + exists = false; + } + if (exists) { + console.log(`Contract ${contractId} already exists.`); + continue; + } + + console.log(`Deploying ${contractId}`); + + const source = await readFile(`./contracts/${contract.file || contract.name}.clar`); + const tx = await makeContractDeploy({ + contractName: contract.name, + codeBody: source.toString('utf8'), + senderKey: privateKey, + nonce: new BN(account.nonce + index, 10), + network, + }); + + const result = await rpcClient.broadcastTX(tx.serialize()); + if (result.ok) { + index += 1; + txResults.push((await result.text()).replace(/"/g, '')); + } else { + const errorMsg = await result.text(); + throw new Error(errorMsg); + } + } + + if (txResults.length > 0) console.log('Broadcasted transactions:'); + txResults.forEach(txId => { + console.log(`${rpcClient.url}/extended/v1/tx/0x${txId}`); + }); +}; + +run() + .then(() => { + console.log('Finished successfully.'); + process.exit(); + }) + .catch(error => { + console.error('Error while running:'); + console.error(error); + process.exit(1); + }); diff --git a/yarn.lock b/yarn.lock index 0ce547405b5..31bc40f18e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2736,6 +2736,7 @@ "@types/eslint-visitor-keys@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== "@types/estree@*": version "0.0.45" @@ -2868,6 +2869,7 @@ "@types/node@*", "@types/node@10.12.18", "@types/node@11.11.6", "@types/node@12.7.12", "@types/node@>= 8", "@types/node@^12.7.12", "@types/node@^13.11.1", "@types/node@^13.13.10", "@types/node@^14.6.0", "@types/node@^8.0.0": version "12.7.12" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.12.tgz#7c6c571cc2f3f3ac4a59a5f2bd48f5bdbc8653cc" + integrity sha512-KPYGmfD0/b1eXurQ59fXD1GBzhSQfz6/lKBxkaHX9dKTzjXbK68Zt7yGUxUsCS1jeTy/8aL+d9JEr+S54mpkWQ== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -3097,6 +3099,7 @@ "@typescript-eslint/eslint-plugin@3.0.2": version "3.0.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.0.2.tgz#4a114a066e2f9659b25682ee59d4866e15a17ec3" + integrity sha512-ER3bSS/A/pKQT/hjMGCK8UQzlL0yLjuCZ/G8CDFJFVTfl3X65fvq2lNYqOG8JPTfrPa2RULCdwfOyFjZEMNExQ== dependencies: "@typescript-eslint/experimental-utils" "3.0.2" functional-red-black-tree "^1.0.1" @@ -3107,6 +3110,7 @@ "@typescript-eslint/eslint-plugin@^2.12.0": version "2.34.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" + integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ== dependencies: "@typescript-eslint/experimental-utils" "2.34.0" functional-red-black-tree "^1.0.1" @@ -3125,6 +3129,7 @@ "@typescript-eslint/experimental-utils@3.0.2": version "3.0.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.0.2.tgz#bb2131baede8df28ec5eacfa540308ca895e5fee" + integrity sha512-4Wc4EczvoY183SSEnKgqAfkj1eLtRgBQ04AAeG+m4RhTVyaazxc1uI8IHf0qLmu7xXe9j1nn+UoDJjbmGmuqXQ== dependencies: "@types/json-schema" "^7.0.3" "@typescript-eslint/typescript-estree" "3.0.2" @@ -3134,6 +3139,7 @@ "@typescript-eslint/parser@3.0.2": version "3.0.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.0.2.tgz#a92ef339added9bf7fb92605ac99c93ef243e834" + integrity sha512-80Z7s83e8QXHNUspqVlWwb4t5gdz/1bBBmafElbK1wwAwiD/yvJsFyHRxlEpNrt4rdK6eB3p+2WEFkEDHAKk9w== dependencies: "@types/eslint-visitor-keys" "^1.0.0" "@typescript-eslint/experimental-utils" "3.0.2" @@ -3164,6 +3170,7 @@ "@typescript-eslint/typescript-estree@3.0.2": version "3.0.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.0.2.tgz#67a1ce4307ebaea43443fbf3f3be7e2627157293" + integrity sha512-cs84mxgC9zQ6viV8MEcigfIKQmKtBkZNDYf8Gru2M+MhnA6z9q0NFMZm2IEzKqAwN8lY5mFVd1Z8DiHj6zQ3Tw== dependencies: debug "^4.1.1" eslint-visitor-keys "^1.1.0" @@ -3673,6 +3680,11 @@ arg@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arg/-/arg-2.0.0.tgz#c06e7ff69ab05b3a4a03ebe0407fac4cba657545" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -4641,6 +4653,7 @@ buffer-xor@^1.0.3: buffer@5.6.0, buffer@^4.3.0, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" + integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -5003,9 +5016,10 @@ chokidar@^2.0.4, chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.3.0, chokidar@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" +chokidar@^3.2.2, chokidar@^3.4.1: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -5013,14 +5027,13 @@ chokidar@^3.3.0, chokidar@^3.4.0: is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.4.0" + readdirp "~3.5.0" optionalDependencies: fsevents "~2.1.2" -chokidar@^3.4.1: - version "3.4.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" - integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== +chokidar@^3.3.0, chokidar@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -5028,7 +5041,7 @@ chokidar@^3.4.1: is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.5.0" + readdirp "~3.4.0" optionalDependencies: fsevents "~2.1.2" @@ -5691,6 +5704,11 @@ create-hmac@^1.1.0, create-hmac@^1.1.3, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-env@6.0.3, cross-env@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-6.0.3.tgz#4256b71e49b3a40637a0ce70768a6ef5c72ae941" @@ -5926,6 +5944,13 @@ debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: dependencies: ms "^2.1.1" +debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -6161,6 +6186,11 @@ diff-sequences@^25.2.6: version "25.2.6" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -6649,6 +6679,7 @@ eslint-plugin-flowtype@^4.7.0: eslint-plugin-import@2.21.2, eslint-plugin-import@>=2.20.2, eslint-plugin-import@^2.18.2, "eslint-plugin-import@^2.21.2 ": version "2.21.2" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.21.2.tgz#8fef77475cc5510801bedc95f84b932f7f334a7c" + integrity sha512-FEmxeGI6yaz+SnEB6YgNHlQK1Bs2DKLM+YF+vuTk5H8J9CLbJLtlPvRFgZZ2+sXiKAlN5dpdlrWOjK8ZoZJpQA== dependencies: array-includes "^3.1.1" array.prototype.flat "^1.2.3" @@ -8521,6 +8552,11 @@ iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= + ignore-walk@3.0.3, ignore-walk@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" @@ -8951,6 +8987,11 @@ is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" +is-npm@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== + is-npm@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" @@ -10670,7 +10711,7 @@ make-dir@^3.0.0, make-dir@^3.0.2: dependencies: semver "^6.0.0" -make-error@1.x: +make-error@1.x, make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" @@ -11374,6 +11415,22 @@ node-sass-tilde-importer@^1.0.2: dependencies: find-parent-dir "^0.3.0" +nodemon@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.6.tgz#1abe1937b463aaf62f0d52e2b7eaadf28cc2240d" + integrity sha512-4I3YDSKXg6ltYpcnZeHompqac4E6JeAMpGm8tJnB9Y3T0ehasLa4139dJOcCrB93HHrUMsCrKtoAlXTqT5n4AQ== + dependencies: + chokidar "^3.2.2" + debug "^3.2.6" + ignore-by-default "^1.0.1" + minimatch "^3.0.4" + pstree.remy "^1.1.7" + semver "^5.7.1" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.3" + update-notifier "^4.1.0" + noop-logger@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" @@ -11385,6 +11442,13 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= + dependencies: + abbrev "1" + normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -12531,6 +12595,11 @@ psl@^1.1.28: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" +pstree.remy@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -13995,7 +14064,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@0.5.19, source-map-support@^0.5.3, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.4: +source-map-support@0.5.19, source-map-support@^0.5.17, source-map-support@^0.5.3, source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.4: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" dependencies: @@ -14795,6 +14864,13 @@ tosource@1.0.0: resolved "https://registry.yarnpkg.com/tosource/-/tosource-1.0.0.tgz#42d88dd116618bcf00d6106dd5446f3427902ff1" integrity sha1-QtiN0RZhi88A1hBt1URvNCeQL/E= +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -14913,6 +14989,18 @@ ts-loader@^7.0.0: micromatch "^4.0.0" semver "^6.0.0" +ts-node@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" + integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== + dependencies: + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + tsconfig-paths-webpack-plugin@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.2.0.tgz#6e70bd42915ad0efb64d3385163f0c1270f3e04d" @@ -15322,6 +15410,13 @@ unbzip2-stream@^1.3.3: buffer "^5.2.1" through "^2.3.8" +undefsafe@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" + integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== + dependencies: + debug "^2.2.0" + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -15442,6 +15537,25 @@ update-notifier@5.0.0: semver-diff "^3.1.1" xdg-basedir "^4.0.0" +update-notifier@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" + integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== + dependencies: + boxen "^4.2.0" + chalk "^3.0.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.3.1" + is-npm "^4.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.0.0" + pupa "^2.0.1" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + upper-case-first@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" @@ -16459,6 +16573,11 @@ yauzl@2.10.0, yauzl@^2.10.0: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + zip-dir@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/zip-dir/-/zip-dir-1.0.2.tgz#253f907aead62a21acd8721d8b88032b2411c051"