From 7bccbcc6be2c74cecf602656f857b62198320641 Mon Sep 17 00:00:00 2001 From: Brian Faust Date: Thu, 27 Aug 2020 05:27:47 +0300 Subject: [PATCH] chore: replace tslint with eslint-typescript (#94) --- .editorconfig | 3 +- .eslintignore | 9 + .eslintrc.json | 41 + .gitignore | 1 - .prettierignore | 2 + .prettierrc.json | 10 +- __tests__/__mocks__/transaction.ts | 20 +- __tests__/__support__/index.ts | 10 +- __tests__/server/server.test.ts | 86 +- __tests__/server/transactions.test.ts | 598 ++- __tests__/server/utils.test.ts | 37 +- jest.config.js | 20 +- lerna.json | 7 - package.json | 243 +- renovate.json | 2 +- src/app/index.ts | 24 +- src/app/interfaces.ts | 8 +- src/app/plugins/cors-headers.ts | 58 +- src/app/plugins/server-type.ts | 24 +- src/app/server/enums.ts | 4 +- src/app/server/handlers.ts | 89 +- src/app/server/index.ts | 175 +- src/app/server/transaction-schema-verifier.ts | 82 +- src/app/server/utils.ts | 64 +- src/app/services/logger.ts | 66 +- src/app/services/memory.ts | 211 +- src/app/services/storage.ts | 127 +- src/commands/command.ts | 181 +- src/commands/log.ts | 56 +- src/commands/restart.ts | 43 +- src/commands/run.ts | 22 +- src/commands/start.ts | 99 +- src/commands/status.ts | 65 +- src/commands/stop.ts | 63 +- src/commands/update.ts | 125 +- src/helpers/prompts.ts | 24 +- src/helpers/update.ts | 118 +- src/hooks/command_not_found/suggest.ts | 61 +- src/hooks/init/update.ts | 39 +- src/utils.ts | 12 +- tsconfig.eslint.json | 29 + tsconfig.json | 47 +- tslint-config.json | 4 - tslint.json | 11 - yarn.lock | 3261 +++-------------- 45 files changed, 2043 insertions(+), 4238 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.json delete mode 100644 lerna.json create mode 100644 tsconfig.eslint.json delete mode 100644 tslint-config.json delete mode 100644 tslint.json diff --git a/.editorconfig b/.editorconfig index cf80b4e..00bef08 100644 --- a/.editorconfig +++ b/.editorconfig @@ -4,6 +4,5 @@ root = true charset = utf-8 end_of_line = lf insert_final_newline = true -indent_style = space -indent_size = 4 +indent_style = tab trim_trailing_whitespace = true diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..31eb1ee --- /dev/null +++ b/.eslintignore @@ -0,0 +1,9 @@ +/__tests__/**/*.spec.ts +/__tests__/unit/coverage/ +/*.js +/build/ +/config/ +/dist/ +/docs/ +/node_modules/** +env.json diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..8be0e26 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,41 @@ +{ + "parser": "@typescript-eslint/parser", + "parserOptions": { + "project": "./tsconfig.eslint.json", + "extraFileExtensions": [".json"] + }, + "plugins": ["@typescript-eslint", "jest", "prettier", "simple-import-sort"], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended-requiring-type-checking", + "plugin:@typescript-eslint/recommended", + "plugin:jest/recommended", + "plugin:prettier/recommended", + "prettier/@typescript-eslint" + ], + "rules": { + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/naming-convention": "off", + "@typescript-eslint/no-empty-interface": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-return": "off", + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/require-await": "off", + "@typescript-eslint/restrict-plus-operands": "off", + "@typescript-eslint/restrict-template-expressions": "off", + "prefer-const": [ + "error", + { + "destructuring": "all" + } + ], + "prettier/prettier": "error", + "simple-import-sort/sort": "error" + } +} diff --git a/.gitignore b/.gitignore index 3b633ec..a81ac86 100644 --- a/.gitignore +++ b/.gitignore @@ -52,7 +52,6 @@ bundle.min.js # Build dist -packages/**/dist/ # Microsoft Visual Studio settings .vs diff --git a/.prettierignore b/.prettierignore index ccd28dd..29d6519 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,5 @@ .coverage +.pnp.js +.yarn/** dist docs diff --git a/.prettierrc.json b/.prettierrc.json index 3149fcc..a793415 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,7 +1,7 @@ { - "printWidth": 120, - "singleQuote": false, - "tabWidth": 4, - "trailingComma": "all", - "useTabs": false + "printWidth": 120, + "singleQuote": false, + "tabWidth": 4, + "trailingComma": "all", + "useTabs": true } diff --git a/__tests__/__mocks__/transaction.ts b/__tests__/__mocks__/transaction.ts index f4aa4cc..89e1f1a 100644 --- a/__tests__/__mocks__/transaction.ts +++ b/__tests__/__mocks__/transaction.ts @@ -2,24 +2,24 @@ export const passphrase = "passphrase 1"; export const passphrases = [passphrase, "passphrase 2", "passphrase 3"]; export const publicKey = "03e8021105a6c202097e97e6c6d650942d913099bf6c9f14a6815df1023dde3b87"; export const participants = [ - publicKey, - "03dfdaaa7fd28bc9359874b7e33138f4d0afe9937e152c59b83a99fae7eeb94899", - "03de72ef9d3ebf1b374f1214f5b8dde823690ab2aa32b4b8b3226cc568aaed1562", + publicKey, + "03dfdaaa7fd28bc9359874b7e33138f4d0afe9937e152c59b83a99fae7eeb94899", + "03de72ef9d3ebf1b374f1214f5b8dde823690ab2aa32b4b8b3226cc568aaed1562", ]; export const multisigAsset = { - min: 2, - publicKeys: participants, + min: 2, + publicKeys: participants, }; export const passphrase2 = "passphrase 4"; export const passphrases2 = [passphrase2, "passphrase 5", passphrase]; export const publicKey2 = "038accc28123025d0b1dd306fcc192be42cbb44105e2bc9b61fe4509469aacb8c4"; export const participants2 = [ - publicKey2, - "02589e70ae55be9cef04ef8ef1591a96721c8b2fbf082bd3521b4f248f5befb3b7", - publicKey, + publicKey2, + "02589e70ae55be9cef04ef8ef1591a96721c8b2fbf082bd3521b4f248f5befb3b7", + publicKey, ]; export const multisigAsset2 = { - min: 2, - publicKeys: participants2, + min: 2, + publicKeys: participants2, }; diff --git a/__tests__/__support__/index.ts b/__tests__/__support__/index.ts index 6c95a8d..4227712 100644 --- a/__tests__/__support__/index.ts +++ b/__tests__/__support__/index.ts @@ -4,9 +4,9 @@ import { startServer } from "../../src/app/server"; jest.setTimeout(10000); export const launchServer = async (): Promise => { - return startServer({ - host: "0.0.0.0", - port: 8080, - network: "testnet", - }); + return startServer({ + host: "0.0.0.0", + port: 8080, + network: "testnet", + }); }; diff --git a/__tests__/server/server.test.ts b/__tests__/server/server.test.ts index 12cb450..1400f74 100644 --- a/__tests__/server/server.test.ts +++ b/__tests__/server/server.test.ts @@ -11,53 +11,53 @@ import { launchServer } from "../__support__"; const sqliteName = "transactions-storage-testnet.sqlite"; let server: Server; beforeAll(async () => { - fs.removeSync(sqliteName); + fs.removeSync(sqliteName); - server = await launchServer(); - Managers.configManager.setFromPreset("testnet"); + server = await launchServer(); + Managers.configManager.setFromPreset("testnet"); }); afterAll(async () => { - await server.stop(); - fs.removeSync(sqliteName); + await server.stop(); + fs.removeSync(sqliteName); }); describe("Server", () => { - describe("Server stop and restart", () => { - it("should save the transactions to the disk when stopping and restore them when restarting", async () => { - const transaction = Transactions.BuilderFactory.multiSignature() - .multiSignatureAsset(mocks.multisigAsset) - .network(23) - .sign(mocks.passphrase) - .multiSign(mocks.passphrase, 0) - .multiSign(mocks.passphrases[1], 1) - .getStruct(); - await got.post(`http://localhost:8080/transaction`, { - body: JSON.stringify({ - data: transaction, - multisigAsset: mocks.multisigAsset, - }), - }); - - const response = await got.get(`http://localhost:8080/transactions?publicKey=${mocks.publicKey}`); - const body = JSON.parse(response.body); - expect(body).toBeArrayOfSize(1); - expect(body[0].data).toEqual(JSON.parse(JSON.stringify(transaction))); - expect(body[0].multisigAsset).toEqual(mocks.multisigAsset); - expect(body[0]).toHaveProperty("timestamp"); - - await server.stop(); - - expect(fs.existsSync(sqliteName)).toBeTrue(); // transactions should be saved here - - server = await launchServer(); - const responseAfterRestart = await got.get( - `http://localhost:8080/transactions?publicKey=${mocks.publicKey}`, - ); - const bodyAfterRestart = JSON.parse(responseAfterRestart.body); - expect(bodyAfterRestart).toBeArrayOfSize(1); - expect(bodyAfterRestart[0].data).toEqual(JSON.parse(JSON.stringify(transaction))); - expect(bodyAfterRestart[0].multisigAsset).toEqual(mocks.multisigAsset); - expect(bodyAfterRestart[0]).toHaveProperty("timestamp"); - }); - }); + describe("Server stop and restart", () => { + it("should save the transactions to the disk when stopping and restore them when restarting", async () => { + const transaction = Transactions.BuilderFactory.multiSignature() + .multiSignatureAsset(mocks.multisigAsset) + .network(23) + .sign(mocks.passphrase) + .multiSign(mocks.passphrase, 0) + .multiSign(mocks.passphrases[1], 1) + .getStruct(); + await got.post(`http://localhost:8080/transaction`, { + body: JSON.stringify({ + data: transaction, + multisigAsset: mocks.multisigAsset, + }), + }); + + const response = await got.get(`http://localhost:8080/transactions?publicKey=${mocks.publicKey}`); + const body = JSON.parse(response.body); + expect(body).toBeArrayOfSize(1); + expect(body[0].data).toEqual(JSON.parse(JSON.stringify(transaction))); + expect(body[0].multisigAsset).toEqual(mocks.multisigAsset); + expect(body[0]).toHaveProperty("timestamp"); + + await server.stop(); + + expect(fs.existsSync(sqliteName)).toBeTrue(); // transactions should be saved here + + server = await launchServer(); + const responseAfterRestart = await got.get( + `http://localhost:8080/transactions?publicKey=${mocks.publicKey}`, + ); + const bodyAfterRestart = JSON.parse(responseAfterRestart.body); + expect(bodyAfterRestart).toBeArrayOfSize(1); + expect(bodyAfterRestart[0].data).toEqual(JSON.parse(JSON.stringify(transaction))); + expect(bodyAfterRestart[0].multisigAsset).toEqual(mocks.multisigAsset); + expect(bodyAfterRestart[0]).toHaveProperty("timestamp"); + }); + }); }); diff --git a/__tests__/server/transactions.test.ts b/__tests__/server/transactions.test.ts index 8c1b150..852007d 100644 --- a/__tests__/server/transactions.test.ts +++ b/__tests__/server/transactions.test.ts @@ -9,312 +9,306 @@ import { launchServer } from "../__support__"; let server: Server; beforeAll(async () => { - server = await launchServer(); - Managers.configManager.setFromPreset("testnet"); + server = await launchServer(); + Managers.configManager.setFromPreset("testnet"); }); afterAll(async () => server.stop()); let transaction; describe("Transactions", () => { - describe("GET transactions", () => { - beforeEach(async () => { - await got.delete("http://localhost:8080/transactions"); - transaction = Transactions.BuilderFactory.multiSignature() - .multiSignatureAsset(mocks.multisigAsset) - .network(23); - }); - - it("should return no transaction when the given public key doesnt exist", async () => { - const response = await got.get( - `http://localhost:8080/transactions?publicKey=035b63b4668ee261c16ca91443f3371e2fe349e131cb7bf5f8a3e93a3ddfdfc788`, - ); - - expect(JSON.parse(response.body)).toEqual([]); - }); - - it("should return the transaction associated with the sender publicKey provided", async () => { - const data = transaction - .sign(mocks.passphrase) - .multiSign(mocks.passphrase, 0) - .multiSign(mocks.passphrases[1], 1) - .getStruct(); - await got.post(`http://localhost:8080/transaction`, { - body: JSON.stringify({ - data, - multisigAsset: mocks.multisigAsset, - }), - }); - - const response = await got.get(`http://localhost:8080/transactions?publicKey=${mocks.publicKey}`); - const body = JSON.parse(response.body); - expect(body).toBeArrayOfSize(1); - expect(body[0].data).toEqual(JSON.parse(JSON.stringify(data))); - expect(body[0].multisigAsset).toEqual(mocks.multisigAsset); - expect(body[0]).toHaveProperty("timestamp"); - }); - - it("should filter transactions by state = pending/ready", async () => { - const tx1Response = await got.post(`http://localhost:8080/transaction`, { - body: JSON.stringify({ - data: transaction - .sign(mocks.passphrase) - .multiSign(mocks.passphrase, 0) - .getStruct(), - multisigAsset: mocks.multisigAsset, - }), - }); - - const transaction2 = Transactions.BuilderFactory.multiSignature() - .multiSignatureAsset(mocks.multisigAsset2) - .network(23); - - const tx2Response = await got.post(`http://localhost:8080/transaction`, { - body: JSON.stringify({ - data: transaction2 - .sign(mocks.passphrase2) - .multiSign(mocks.passphrase2, 0) - .multiSign(mocks.passphrases2[1], 1) - .multiSign(mocks.passphrases2[2], 2) - .getStruct(), - multisigAsset: mocks.multisigAsset2, - }), - }); - - const responsePending = await got.get( - `http://localhost:8080/transactions?publicKey=${mocks.publicKey}&state=pending`, - ); - const bodyPending = JSON.parse(responsePending.body); - expect(bodyPending).toBeArrayOfSize(1); - expect(bodyPending[0].id).toEqual(JSON.parse(tx1Response.body).id); - expect(bodyPending[0].multisigAsset).toEqual(mocks.multisigAsset); - expect(bodyPending[0]).toHaveProperty("timestamp"); - - const responseReady = await got.get( - `http://localhost:8080/transactions?publicKey=${mocks.publicKey2}&state=ready`, - ); - const bodyReady = JSON.parse(responseReady.body); - expect(bodyReady).toBeArrayOfSize(1); - expect(bodyReady[0].id).toEqual(JSON.parse(tx2Response.body).id); - expect(bodyReady[0].multisigAsset).toEqual(mocks.multisigAsset2); - expect(bodyReady[0]).toHaveProperty("timestamp"); - - const responseAll = await got.get(`http://localhost:8080/transactions?publicKey=${mocks.publicKey}`); - const bodyAll = JSON.parse(responseAll.body); - expect(bodyAll).toBeArrayOfSize(2); - }); - }); - - describe("MultiSignatureRegistration", () => { - beforeEach(async () => { - await got.delete("http://localhost:8080/transactions"); - transaction = Transactions.BuilderFactory.multiSignature() - .multiSignatureAsset(mocks.multisigAsset) - .network(23); - }); - - describe("POST transaction", () => { - it("should store multisignature registration without signatures", async () => { - const data = transaction.sign(mocks.passphrase).getStruct(); - - const response = await got.post(`http://localhost:8080/transaction`, { - body: JSON.stringify({ - data, - multisigAsset: mocks.multisigAsset, - }), - }); - - expect(JSON.parse(response.body)).toHaveProperty("id"); - }); - - it("should store multisignature registration with one signature", async () => { - const data = transaction - .sign(mocks.passphrase) - .multiSign(mocks.passphrase, 0) - .getStruct(); - const response = await got.post(`http://localhost:8080/transaction`, { - body: JSON.stringify({ - data, - multisigAsset: mocks.multisigAsset, - }), - }); - - expect(JSON.parse(response.body)).toHaveProperty("id"); - }); - - it("should not store the same multisignature registration twice", async () => { - const data = transaction - .sign(mocks.passphrase) - .multiSign(mocks.passphrase, 0) - .getStruct(); - - const response = await got.post(`http://localhost:8080/transaction`, { - body: JSON.stringify({ - data, - multisigAsset: mocks.multisigAsset, - }), - }); - - expect(JSON.parse(response.body)).toHaveProperty("id"); - }); - - it("should update the transaction", async () => { - const data = transaction - .senderPublicKey(mocks.publicKey) - .multiSign(mocks.passphrase, 0) - .multiSign(mocks.passphrases[1], 1) - .getStruct(); - - const responsePostTx = await got.post(`http://localhost:8080/transaction`, { - body: JSON.stringify({ - data, - multisigAsset: mocks.multisigAsset, - }), - }); - - const responsePostBody = JSON.parse(responsePostTx.body); - expect(responsePostBody).toHaveProperty("id"); - - const data2ndSigned = transaction - .multiSign(mocks.passphrases[2], 2) - .sign(mocks.passphrase) - .getStruct(); - - await got.post("http://localhost:8080/transaction", { - body: JSON.stringify({ - data: data2ndSigned, - multisigAsset: mocks.multisigAsset, - }), - }); - const responseGetTx = await got.get(`http://localhost:8080/transaction/${responsePostBody.id}`); - - const body = JSON.parse(responseGetTx.body); - expect(body).toBeObject(); - expect(body.data).toEqual(JSON.parse(JSON.stringify(data2ndSigned))); - expect(body.multisigAsset).toEqual(mocks.multisigAsset); - expect(body.id).toEqual(responsePostBody.id); - expect(body).toHaveProperty("timestamp"); - }); - }); - }); - - describe.each([ - [ - "transfer", - Transactions.BuilderFactory.transfer() - .recipientId("ARwS7GvSqkaJsGXU1qoREt86UPf2KLbGKd") - .amount("1") as any, - ], - [ - "business registration", - new Builders.BusinessRegistrationBuilder() - .senderPublicKey(Identities.PublicKey.fromMultiSignatureAsset(mocks.multisigAsset)) - .businessRegistrationAsset({ - name: "newbusiness", - website: "http://business.new", - }) as any, - ], - ])("%s multisigned", (name, builder) => { - beforeAll(async () => { - await got.delete("http://localhost:8080/transactions"); - }); - - describe("POST transaction", () => { - let transactionStoreId: string; - it(`should store multisignature ${name} with one signature`, async () => { - const data = builder - .network(23) - .senderPublicKey(Identities.PublicKey.fromMultiSignatureAsset(mocks.multisigAsset)) - .multiSign(mocks.passphrase, 0) - .getStruct(); - - const response = await got.post(`http://localhost:8080/transaction`, { - body: JSON.stringify({ - data, - multisigAsset: mocks.multisigAsset, - }), - }); - - const responseBody = JSON.parse(response.body); - expect(responseBody).toHaveProperty("id"); - transactionStoreId = responseBody.id; - }); - - it("should update the transaction", async () => { - // Should not be READY - let readyResponse = JSON.parse( - (await got.get( - "http://localhost:8080/transactions?publicKey=02a942252b20b1069eec7d677cafb6e40d1b6c5ca2f72b5fb88388b340e86a47e8&state=ready", - )).body, - ); - expect(readyResponse).toBeArray(); - expect(readyResponse).toBeEmpty(); - - let pendingResponse = JSON.parse( - (await got.get( - "http://localhost:8080/transactions?publicKey=02a942252b20b1069eec7d677cafb6e40d1b6c5ca2f72b5fb88388b340e86a47e8&state=pending", - )).body, - ); - expect(pendingResponse).toBeArray(); - expect(pendingResponse).toHaveLength(1); - - // update second signature - builder.multiSign(mocks.passphrases[1], 1); - - const transactionTwoSignatures = builder.getStruct(); - await got.post("http://localhost:8080/transaction", { - body: JSON.stringify({ - data: transactionTwoSignatures, - multisigAsset: mocks.multisigAsset, - }), - }); - - let responseGetTx = await got.get(`http://localhost:8080/transaction/${transactionStoreId}`); - - const expectResponse = transaction => { - expect(body).toBeObject(); - expect(body.data).toEqual(JSON.parse(JSON.stringify(transaction))); - expect(body.multisigAsset).toEqual(mocks.multisigAsset); - expect(body.id).toEqual(transactionStoreId); - expect(body).toHaveProperty("timestamp"); - }; - - let body = JSON.parse(responseGetTx.body); - expectResponse(transactionTwoSignatures); - - // update third signature - builder.multiSign(mocks.passphrases[2], 2); - - const transactionThreeSignatures = builder.getStruct(); - - await got.post("http://localhost:8080/transaction", { - body: JSON.stringify({ - data: transactionThreeSignatures, - multisigAsset: mocks.multisigAsset, - }), - }); - - responseGetTx = await got.get(`http://localhost:8080/transaction/${transactionStoreId}`); - body = JSON.parse(responseGetTx.body); - expectResponse(transactionThreeSignatures); - - // Should be READY - readyResponse = JSON.parse( - (await got.get( - "http://localhost:8080/transactions?publicKey=02a942252b20b1069eec7d677cafb6e40d1b6c5ca2f72b5fb88388b340e86a47e8&state=ready", - )).body, - ); - expect(readyResponse).toBeArray(); - expect(readyResponse).toHaveLength(1); - - pendingResponse = JSON.parse( - (await got.get( - "http://localhost:8080/transactions?publicKey=02a942252b20b1069eec7d677cafb6e40d1b6c5ca2f72b5fb88388b340e86a47e8&state=pending", - )).body, - ); - expect(pendingResponse).toBeArray(); - expect(pendingResponse).toBeEmpty(); - }); - }); - }); + describe("GET transactions", () => { + beforeEach(async () => { + await got.delete("http://localhost:8080/transactions"); + transaction = Transactions.BuilderFactory.multiSignature() + .multiSignatureAsset(mocks.multisigAsset) + .network(23); + }); + + it("should return no transaction when the given public key doesnt exist", async () => { + const response = await got.get( + `http://localhost:8080/transactions?publicKey=035b63b4668ee261c16ca91443f3371e2fe349e131cb7bf5f8a3e93a3ddfdfc788`, + ); + + expect(JSON.parse(response.body)).toEqual([]); + }); + + it("should return the transaction associated with the sender publicKey provided", async () => { + const data = transaction + .sign(mocks.passphrase) + .multiSign(mocks.passphrase, 0) + .multiSign(mocks.passphrases[1], 1) + .getStruct(); + await got.post(`http://localhost:8080/transaction`, { + body: JSON.stringify({ + data, + multisigAsset: mocks.multisigAsset, + }), + }); + + const response = await got.get(`http://localhost:8080/transactions?publicKey=${mocks.publicKey}`); + const body = JSON.parse(response.body); + expect(body).toBeArrayOfSize(1); + expect(body[0].data).toEqual(JSON.parse(JSON.stringify(data))); + expect(body[0].multisigAsset).toEqual(mocks.multisigAsset); + expect(body[0]).toHaveProperty("timestamp"); + }); + + it("should filter transactions by state = pending/ready", async () => { + const tx1Response = await got.post(`http://localhost:8080/transaction`, { + body: JSON.stringify({ + data: transaction.sign(mocks.passphrase).multiSign(mocks.passphrase, 0).getStruct(), + multisigAsset: mocks.multisigAsset, + }), + }); + + const transaction2 = Transactions.BuilderFactory.multiSignature() + .multiSignatureAsset(mocks.multisigAsset2) + .network(23); + + const tx2Response = await got.post(`http://localhost:8080/transaction`, { + body: JSON.stringify({ + data: transaction2 + .sign(mocks.passphrase2) + .multiSign(mocks.passphrase2, 0) + .multiSign(mocks.passphrases2[1], 1) + .multiSign(mocks.passphrases2[2], 2) + .getStruct(), + multisigAsset: mocks.multisigAsset2, + }), + }); + + const responsePending = await got.get( + `http://localhost:8080/transactions?publicKey=${mocks.publicKey}&state=pending`, + ); + const bodyPending = JSON.parse(responsePending.body); + expect(bodyPending).toBeArrayOfSize(1); + expect(bodyPending[0].id).toEqual(JSON.parse(tx1Response.body).id); + expect(bodyPending[0].multisigAsset).toEqual(mocks.multisigAsset); + expect(bodyPending[0]).toHaveProperty("timestamp"); + + const responseReady = await got.get( + `http://localhost:8080/transactions?publicKey=${mocks.publicKey2}&state=ready`, + ); + const bodyReady = JSON.parse(responseReady.body); + expect(bodyReady).toBeArrayOfSize(1); + expect(bodyReady[0].id).toEqual(JSON.parse(tx2Response.body).id); + expect(bodyReady[0].multisigAsset).toEqual(mocks.multisigAsset2); + expect(bodyReady[0]).toHaveProperty("timestamp"); + + const responseAll = await got.get(`http://localhost:8080/transactions?publicKey=${mocks.publicKey}`); + const bodyAll = JSON.parse(responseAll.body); + expect(bodyAll).toBeArrayOfSize(2); + }); + }); + + describe("MultiSignatureRegistration", () => { + beforeEach(async () => { + await got.delete("http://localhost:8080/transactions"); + transaction = Transactions.BuilderFactory.multiSignature() + .multiSignatureAsset(mocks.multisigAsset) + .network(23); + }); + + describe("POST transaction", () => { + it("should store multisignature registration without signatures", async () => { + const data = transaction.sign(mocks.passphrase).getStruct(); + + const response = await got.post(`http://localhost:8080/transaction`, { + body: JSON.stringify({ + data, + multisigAsset: mocks.multisigAsset, + }), + }); + + expect(JSON.parse(response.body)).toHaveProperty("id"); + }); + + it("should store multisignature registration with one signature", async () => { + const data = transaction.sign(mocks.passphrase).multiSign(mocks.passphrase, 0).getStruct(); + const response = await got.post(`http://localhost:8080/transaction`, { + body: JSON.stringify({ + data, + multisigAsset: mocks.multisigAsset, + }), + }); + + expect(JSON.parse(response.body)).toHaveProperty("id"); + }); + + it("should not store the same multisignature registration twice", async () => { + const data = transaction.sign(mocks.passphrase).multiSign(mocks.passphrase, 0).getStruct(); + + const response = await got.post(`http://localhost:8080/transaction`, { + body: JSON.stringify({ + data, + multisigAsset: mocks.multisigAsset, + }), + }); + + expect(JSON.parse(response.body)).toHaveProperty("id"); + }); + + it("should update the transaction", async () => { + const data = transaction + .senderPublicKey(mocks.publicKey) + .multiSign(mocks.passphrase, 0) + .multiSign(mocks.passphrases[1], 1) + .getStruct(); + + const responsePostTx = await got.post(`http://localhost:8080/transaction`, { + body: JSON.stringify({ + data, + multisigAsset: mocks.multisigAsset, + }), + }); + + const responsePostBody = JSON.parse(responsePostTx.body); + expect(responsePostBody).toHaveProperty("id"); + + const data2ndSigned = transaction.multiSign(mocks.passphrases[2], 2).sign(mocks.passphrase).getStruct(); + + await got.post("http://localhost:8080/transaction", { + body: JSON.stringify({ + data: data2ndSigned, + multisigAsset: mocks.multisigAsset, + }), + }); + const responseGetTx = await got.get(`http://localhost:8080/transaction/${responsePostBody.id}`); + + const body = JSON.parse(responseGetTx.body); + expect(body).toBeObject(); + expect(body.data).toEqual(JSON.parse(JSON.stringify(data2ndSigned))); + expect(body.multisigAsset).toEqual(mocks.multisigAsset); + expect(body.id).toEqual(responsePostBody.id); + expect(body).toHaveProperty("timestamp"); + }); + }); + }); + + describe.each([ + [ + "transfer", + Transactions.BuilderFactory.transfer().recipientId("ARwS7GvSqkaJsGXU1qoREt86UPf2KLbGKd").amount("1") as any, + ], + [ + "business registration", + new Builders.BusinessRegistrationBuilder() + .senderPublicKey(Identities.PublicKey.fromMultiSignatureAsset(mocks.multisigAsset)) + .businessRegistrationAsset({ + name: "newbusiness", + website: "http://business.new", + }) as any, + ], + ])("%s multisigned", (name, builder) => { + beforeAll(async () => { + await got.delete("http://localhost:8080/transactions"); + }); + + describe("POST transaction", () => { + let transactionStoreId: string; + it(`should store multisignature ${name} with one signature`, async () => { + const data = builder + .network(23) + .senderPublicKey(Identities.PublicKey.fromMultiSignatureAsset(mocks.multisigAsset)) + .multiSign(mocks.passphrase, 0) + .getStruct(); + + const response = await got.post(`http://localhost:8080/transaction`, { + body: JSON.stringify({ + data, + multisigAsset: mocks.multisigAsset, + }), + }); + + const responseBody = JSON.parse(response.body); + expect(responseBody).toHaveProperty("id"); + transactionStoreId = responseBody.id; + }); + + it("should update the transaction", async () => { + // Should not be READY + let readyResponse = JSON.parse( + ( + await got.get( + "http://localhost:8080/transactions?publicKey=02a942252b20b1069eec7d677cafb6e40d1b6c5ca2f72b5fb88388b340e86a47e8&state=ready", + ) + ).body, + ); + expect(readyResponse).toBeArray(); + expect(readyResponse).toBeEmpty(); + + let pendingResponse = JSON.parse( + ( + await got.get( + "http://localhost:8080/transactions?publicKey=02a942252b20b1069eec7d677cafb6e40d1b6c5ca2f72b5fb88388b340e86a47e8&state=pending", + ) + ).body, + ); + expect(pendingResponse).toBeArray(); + expect(pendingResponse).toHaveLength(1); + + // update second signature + builder.multiSign(mocks.passphrases[1], 1); + + const transactionTwoSignatures = builder.getStruct(); + await got.post("http://localhost:8080/transaction", { + body: JSON.stringify({ + data: transactionTwoSignatures, + multisigAsset: mocks.multisigAsset, + }), + }); + + let responseGetTx = await got.get(`http://localhost:8080/transaction/${transactionStoreId}`); + + const expectResponse = (transaction) => { + expect(body).toBeObject(); + expect(body.data).toEqual(JSON.parse(JSON.stringify(transaction))); + expect(body.multisigAsset).toEqual(mocks.multisigAsset); + expect(body.id).toEqual(transactionStoreId); + expect(body).toHaveProperty("timestamp"); + }; + + let body = JSON.parse(responseGetTx.body); + expectResponse(transactionTwoSignatures); + + // update third signature + builder.multiSign(mocks.passphrases[2], 2); + + const transactionThreeSignatures = builder.getStruct(); + + await got.post("http://localhost:8080/transaction", { + body: JSON.stringify({ + data: transactionThreeSignatures, + multisigAsset: mocks.multisigAsset, + }), + }); + + responseGetTx = await got.get(`http://localhost:8080/transaction/${transactionStoreId}`); + body = JSON.parse(responseGetTx.body); + expectResponse(transactionThreeSignatures); + + // Should be READY + readyResponse = JSON.parse( + ( + await got.get( + "http://localhost:8080/transactions?publicKey=02a942252b20b1069eec7d677cafb6e40d1b6c5ca2f72b5fb88388b340e86a47e8&state=ready", + ) + ).body, + ); + expect(readyResponse).toBeArray(); + expect(readyResponse).toHaveLength(1); + + pendingResponse = JSON.parse( + ( + await got.get( + "http://localhost:8080/transactions?publicKey=02a942252b20b1069eec7d677cafb6e40d1b6c5ca2f72b5fb88388b340e86a47e8&state=pending", + ) + ).body, + ); + expect(pendingResponse).toBeArray(); + expect(pendingResponse).toBeEmpty(); + }); + }); + }); }); diff --git a/__tests__/server/utils.test.ts b/__tests__/server/utils.test.ts index 8240924..53bb625 100644 --- a/__tests__/server/utils.test.ts +++ b/__tests__/server/utils.test.ts @@ -1,31 +1,32 @@ import "jest-extended"; import { Managers, Transactions } from "@arkecosystem/crypto"; -import { getBaseTransactionId } from "../../packages/server/src/server/utils"; + import { multisigAsset, passphrase, passphrases, publicKey } from "../__mocks__/transaction"; +import { getBaseTransactionId } from "../../src/app/server/utils"; beforeAll(async () => { - Managers.configManager.setFromPreset("testnet"); - Managers.configManager.setHeight(2); // aip11 from height 2 + Managers.configManager.setFromPreset("testnet"); + Managers.configManager.setHeight(2); // aip11 from height 2 }); describe("Utils", () => { - describe("getBaseTransactionId", () => { - it("should return the base transaction id", () => { - const transactionBuilder = Transactions.BuilderFactory.multiSignature() - .multiSignatureAsset(multisigAsset) - .network(23) - .senderPublicKey(publicKey); + describe("getBaseTransactionId", () => { + it("should return the base transaction id", () => { + const transactionBuilder = Transactions.BuilderFactory.multiSignature() + .multiSignatureAsset(multisigAsset) + .network(23) + .senderPublicKey(publicKey); - const baseTransactionId = Transactions.Utils.getId(transactionBuilder.data); + const baseTransactionId = Transactions.Utils.getId(transactionBuilder.data); - const transaction = transactionBuilder - .multiSign(passphrase, 0) - .multiSign(passphrases[1], 1) - .sign(passphrase) - .getStruct(); + const transaction = transactionBuilder + .multiSign(passphrase, 0) + .multiSign(passphrases[1], 1) + .sign(passphrase) + .getStruct(); - expect(getBaseTransactionId(transaction)).toBe(baseTransactionId); - }); - }); + expect(getBaseTransactionId(transaction)).toBe(baseTransactionId); + }); + }); }); diff --git a/jest.config.js b/jest.config.js index c7ab0bb..d57d993 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,12 +1,12 @@ module.exports = { - testEnvironment: "node", - bail: true, - verbose: true, - transform: { - "^.+\\.tsx?$": "ts-jest", - }, - testMatch: ["**/*.test.ts"], - moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"], - watchman: false, - setupFilesAfterEnv: ["jest-extended"], + testEnvironment: "node", + bail: true, + verbose: true, + transform: { + "^.+\\.tsx?$": "ts-jest", + }, + testMatch: ["**/*.test.ts"], + moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"], + watchman: false, + setupFilesAfterEnv: ["jest-extended"], }; diff --git a/lerna.json b/lerna.json deleted file mode 100644 index 2433615..0000000 --- a/lerna.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "lerna": "3.5.0", - "npmClient": "yarn", - "packages": ["packages/*"], - "useWorkspaces": true, - "version": "1.0.0" -} diff --git a/package.json b/package.json index cd81024..0f355ea 100644 --- a/package.json +++ b/package.json @@ -1,120 +1,127 @@ { - "private": true, - "name": "multisig-server", - "description": "A JSON-RPC 2.0 specification compliant server for Exchanges to interact with the ARK Blockchain.", - "license": "MIT", - "author": "Brian Faust ", - "files": [ - "/dist" - ], - "main": "dist/index", - "types": "dist/index", - "bin": { - "multisig-server": "./bin/run" - }, - "scripts": { - "build": "yarn clean && yarn compile", - "build:watch": "yarn clean && yarn compile -w", - "clean": "del dist", - "compile": "./node_modules/typescript/bin/tsc", - "multisig-server": "./bin/run", - "format": "yarn lint && yarn prettier", - "lint": "../../node_modules/tslint/bin/tslint -c ../../tslint.json -p ../../tslint-config.json './src/**/*.ts' --fix", - "prepublishOnly": "yarn build", - "prettier": "prettier --write \"./*.{ts,js,json,md}\" \"./src/**/*.{ts,js,json,md}\" \"./__tests__/**/*.{ts,js,json,md}\"", - "test": "jest --forceExit --runInBand" - }, - "dependencies": { - "@arkecosystem/core-magistrate-crypto": "^2.6.52", - "@arkecosystem/crypto": "^2.6.52", - "@hapi/boom": "^9.1.0", - "@hapi/hapi": "^20.0.0", - "@hapi/joi": "17.1.1", - "@kodekeep/foreman": "^1.0.0", - "@oclif/command": "^1.8.0", - "@oclif/config": "^1.17.0", - "@oclif/plugin-autocomplete": "^0.2.0", - "@oclif/plugin-commands": "^1.3.0", - "@oclif/plugin-help": "^3.2.0", - "@oclif/plugin-not-found": "^1.2.4", - "@oclif/plugin-plugins": "^1.9.0", - "better-sqlite3": "^7.1.0", - "chalk": "^4.1.0", - "clear": "^0.1.0", - "cli-table3": "^0.6.0", - "cli-ux": "^5.4.10", - "dayjs": "^1.8.34", - "env-paths": "^2.2.0", - "execa": "^4.0.3", - "fast-levenshtein": "^3.0.0", - "fs-extra": "^9.0.1", - "got": "^11.5.2", - "latest-version": "^5.1.0", - "lodash.minby": "^4.6.0", - "nodejs-tail": "^1.1.0", - "pino-pretty": "^4.1.0", - "pino": "^6.5.1", - "pretty-bytes": "^5.3.0", - "pretty-ms": "^7.0.0", - "prompts": "^2.3.2", - "read-last-lines": "^1.7.2", - "semver": "^7.3.2", - "uuid": "^8.3.0", - "wif": "^2.0.6" - }, - "devDependencies": { - "@oclif/dev-cli": "^1.22.2", - "@sindresorhus/tsconfig": "^0.7.0", - "@types/execa": "^2.0.0", - "@types/fast-levenshtein": "^0.0.1", - "@types/fs-extra": "^9.0.1", - "@types/got": "^9.6.11", - "@types/hapi__boom": "^9.0.1", - "@types/hapi__hapi": "^20.0.0", - "@types/jest": "^26.0.10", - "@types/lodash.minby": "^4.6.6", - "@types/lodash.sample": "^4.2.6", - "@types/node": "^14.6.0", - "@types/pino": "^6.3.0", - "@types/prettier": "^2.0.2", - "@types/pretty-bytes": "^5.2.0", - "@types/pretty-ms": "^5.0.1", - "@types/prompts": "^2.4.0", - "@types/rimraf": "^3.0.0", - "@types/semver": "^7.3.3", - "@types/uuid": "^8.3.0", - "@types/wif": "^2.0.1", - "codecov": "^3.7.2", - "cross-env": "^7.0.2", - "del-cli": "^3.0.1", - "jest-extended": "^0.11.5", - "jest": "^26.4.2", - "lerna": "^3.22.1", - "prettier": "^2.1.1", - "rimraf": "^3.0.2", - "ts-jest": "^26.3.0", - "tslint-config-prettier": "^1.18.0", - "tslint": "^6.1.3", - "typescript": "^4.0.2" - }, - "publishConfig": { - "access": "public" - }, - "oclif": { - "commands": "./dist/commands", - "hooks": { - "init": [ - "./dist/hooks/init/update" - ], - "command_not_found": [ - "./dist/hooks/command_not_found/suggest" - ] - }, - "bin": "multisig-server", - "plugins": [ - "@oclif/plugin-autocomplete", - "@oclif/plugin-commands", - "@oclif/plugin-help" - ] - } + "private": true, + "name": "multisig-server", + "description": "A JSON-RPC 2.0 specification compliant server for Exchanges to interact with the ARK Blockchain.", + "license": "MIT", + "author": "Brian Faust ", + "files": [ + "/dist" + ], + "main": "dist/index", + "types": "dist/index", + "bin": { + "multisig-server": "./bin/run" + }, + "scripts": { + "build": "yarn clean && yarn compile", + "build:watch": "yarn clean && yarn compile -w", + "clean": "del dist", + "compile": "./node_modules/typescript/bin/tsc", + "multisig-server": "./bin/run", + "format": "yarn lint && yarn prettier", + "lint": "eslint ./src/** --ext .ts --fix", + "lint:tests": "eslint ./__tests__/** --ext .ts --fix", + "prettier": "prettier --write \"./*.{ts,js,json,md}\" \"./**/*.{ts,js,json,md}\"", + "prepublishOnly": "yarn build", + "test": "jest --forceExit --runInBand" + }, + "dependencies": { + "@arkecosystem/core-magistrate-crypto": "^2.6.52", + "@arkecosystem/crypto": "^2.6.52", + "@hapi/boom": "^9.1.0", + "@hapi/hapi": "^20.0.0", + "@hapi/joi": "17.1.1", + "@kodekeep/foreman": "^1.0.0", + "@oclif/command": "^1.8.0", + "@oclif/config": "^1.17.0", + "@oclif/plugin-autocomplete": "^0.2.0", + "@oclif/plugin-commands": "^1.3.0", + "@oclif/plugin-help": "^3.2.0", + "@oclif/plugin-not-found": "^1.2.4", + "@oclif/plugin-plugins": "^1.9.0", + "@types/eslint-plugin-prettier": "^3.1.0", + "@types/eslint": "^7.2.0", + "@typescript-eslint/eslint-plugin": "^3.9.1", + "@typescript-eslint/parser": "^3.9.1", + "better-sqlite3": "^7.1.0", + "chalk": "^4.1.0", + "clear": "^0.1.0", + "cli-table3": "^0.6.0", + "cli-ux": "^5.4.10", + "dayjs": "^1.8.34", + "env-paths": "^2.2.0", + "eslint-config-prettier": "^6.11.0", + "eslint-plugin-jest": "^23.20.0", + "eslint-plugin-prettier": "^3.1.4", + "eslint-plugin-simple-import-sort": "^5.0.3", + "eslint": "^7.7.0", + "execa": "^4.0.3", + "fast-levenshtein": "^3.0.0", + "fs-extra": "^9.0.1", + "got": "^11.5.2", + "latest-version": "^5.1.0", + "lodash.minby": "^4.6.0", + "nodejs-tail": "^1.1.0", + "pino-pretty": "^4.1.0", + "pino": "^6.5.1", + "pretty-bytes": "^5.3.0", + "pretty-ms": "^7.0.0", + "prompts": "^2.3.2", + "read-last-lines": "^1.7.2", + "semver": "^7.3.2", + "uuid": "^8.3.0", + "wif": "^2.0.6" + }, + "devDependencies": { + "@oclif/dev-cli": "^1.22.2", + "@sindresorhus/tsconfig": "^0.7.0", + "@types/execa": "^2.0.0", + "@types/fast-levenshtein": "^0.0.1", + "@types/fs-extra": "^9.0.1", + "@types/got": "^9.6.11", + "@types/hapi__boom": "^9.0.1", + "@types/hapi__hapi": "^20.0.0", + "@types/jest": "^26.0.10", + "@types/lodash.minby": "^4.6.6", + "@types/lodash.sample": "^4.2.6", + "@types/node": "^14.6.0", + "@types/pino": "^6.3.0", + "@types/prettier": "^2.0.2", + "@types/pretty-bytes": "^5.2.0", + "@types/pretty-ms": "^5.0.1", + "@types/prompts": "^2.4.0", + "@types/rimraf": "^3.0.0", + "@types/semver": "^7.3.3", + "@types/uuid": "^8.3.0", + "@types/wif": "^2.0.1", + "codecov": "^3.7.2", + "cross-env": "^7.0.2", + "del-cli": "^3.0.1", + "jest-extended": "^0.11.5", + "jest": "^26.4.2", + "prettier": "^2.1.1", + "rimraf": "^3.0.2", + "ts-jest": "^26.3.0", + "typescript": "^4.0.2" + }, + "publishConfig": { + "access": "public" + }, + "oclif": { + "commands": "./dist/commands", + "hooks": { + "init": [ + "./dist/hooks/init/update" + ], + "command_not_found": [ + "./dist/hooks/command_not_found/suggest" + ] + }, + "bin": "multisig-server", + "plugins": [ + "@oclif/plugin-autocomplete", + "@oclif/plugin-commands", + "@oclif/plugin-help" + ] + } } diff --git a/renovate.json b/renovate.json index 042ab22..7fc4c7a 100644 --- a/renovate.json +++ b/renovate.json @@ -1,3 +1,3 @@ { - "extends": ["config:base", ":preserveSemverRanges"] + "extends": ["config:base", ":preserveSemverRanges"] } diff --git a/src/app/index.ts b/src/app/index.ts index 74c9bad..b95d2b0 100644 --- a/src/app/index.ts +++ b/src/app/index.ts @@ -1,22 +1,24 @@ import { Server } from "@hapi/hapi"; + import { exitHandler, startServer } from "./server"; import { logger } from "./services/logger"; export * from "./interfaces"; export const start = async (options: { server: Record; logger?: any }): Promise => { - if (options.logger) { - logger.setLogger(options.logger); - } + if (options.logger) { + logger.setLogger(options.logger); + } - const server = await startServer(options.server); + const server = await startServer(options.server); - const exit = () => { - exitHandler(options.server.network); - server.stop(); - }; - process.on("exit", exit); - process.on("SIGINT", () => process.exit()); + const exit = async () => { + exitHandler(options.server.network); + await server.stop(); + }; + // eslint-disable-next-line @typescript-eslint/no-misused-promises + process.on("exit", exit); + process.on("SIGINT", () => process.exit()); - return server; + return server; }; diff --git a/src/app/interfaces.ts b/src/app/interfaces.ts index 3cc887a..386d35c 100644 --- a/src/app/interfaces.ts +++ b/src/app/interfaces.ts @@ -1,8 +1,8 @@ import { Interfaces } from "@arkecosystem/crypto"; export interface IStoreTransaction { - data: Interfaces.ITransactionData; - multisigAsset: Interfaces.IMultiSignatureAsset; - timestamp?: number; - id?: string; + data: Interfaces.ITransactionData; + multisigAsset: Interfaces.IMultiSignatureAsset; + timestamp?: number; + id?: string; } diff --git a/src/app/plugins/cors-headers.ts b/src/app/plugins/cors-headers.ts index 5ba0c14..c2a5527 100644 --- a/src/app/plugins/cors-headers.ts +++ b/src/app/plugins/cors-headers.ts @@ -1,37 +1,37 @@ export const corsHeaders = { - name: "cors-headers", - version: "0.1.0", - register(server, options) { - server.ext({ - type: "onPreResponse", - method: (request, h) => { - if (!request.headers.origin) { - return h.continue; - } + name: "cors-headers", + version: "0.1.0", + register(server, options) { + server.ext({ + type: "onPreResponse", + method: (request, h) => { + if (!request.headers.origin) { + return h.continue; + } - const response = request.response.isBoom ? request.response.output : request.response; - response.headers["access-control-allow-origin"] = request.headers.origin; - response.headers["access-control-allow-credentials"] = "true"; + const response = request.response.isBoom ? request.response.output : request.response; + response.headers["access-control-allow-origin"] = request.headers.origin; + response.headers["access-control-allow-credentials"] = "true"; - if (request.method !== "options") { - return h.continue; - } + if (request.method !== "options") { + return h.continue; + } - response.statusCode = 200; - response.headers["access-control-expose-headers"] = "content-type, content-length, etag"; - response.headers["access-control-max-age"] = options.maxAge || 60 * 10; + response.statusCode = 200; + response.headers["access-control-expose-headers"] = "content-type, content-length, etag"; + response.headers["access-control-max-age"] = options.maxAge || 60 * 10; - if (request.headers["access-control-request-headers"]) { - response.headers["access-control-allow-headers"] = - request.headers["access-control-request-headers"]; - } + if (request.headers["access-control-request-headers"]) { + response.headers["access-control-allow-headers"] = + request.headers["access-control-request-headers"]; + } - if (request.headers["access-control-request-method"]) { - response.headers["access-control-allow-methods"] = request.headers["access-control-request-method"]; - } + if (request.headers["access-control-request-method"]) { + response.headers["access-control-allow-methods"] = request.headers["access-control-request-method"]; + } - return h.continue; - }, - }); - }, + return h.continue; + }, + }); + }, }; diff --git a/src/app/plugins/server-type.ts b/src/app/plugins/server-type.ts index c24f834..1ce69ad 100644 --- a/src/app/plugins/server-type.ts +++ b/src/app/plugins/server-type.ts @@ -1,15 +1,15 @@ export const serverType = { - name: "server-type", - version: "0.1.0", - register(server, options) { - server.ext({ - type: "onPreResponse", - method: (request, h) => { - const response = request.response.isBoom ? request.response.output : request.response; - response.headers["X-Server-Type"] = "MultiSignature"; + name: "server-type", + version: "0.1.0", + register(server, options) { + server.ext({ + type: "onPreResponse", + method: (request, h) => { + const response = request.response.isBoom ? request.response.output : request.response; + response.headers["X-Server-Type"] = "MultiSignature"; - return h.continue; - }, - }); - }, + return h.continue; + }, + }); + }, }; diff --git a/src/app/server/enums.ts b/src/app/server/enums.ts index 3b3d4d4..e91e445 100644 --- a/src/app/server/enums.ts +++ b/src/app/server/enums.ts @@ -1,4 +1,4 @@ export enum TransactionStatus { - Ready = "ready", - Pending = "pending", + Ready = "ready", + Pending = "pending", } diff --git a/src/app/server/handlers.ts b/src/app/server/handlers.ts index 36181fb..f6136e9 100644 --- a/src/app/server/handlers.ts +++ b/src/app/server/handlers.ts @@ -1,71 +1,72 @@ import Boom from "@hapi/boom"; + import { IStoreTransaction } from "../interfaces"; import { memory } from "../services/memory"; import { TransactionStatus } from "./enums"; import { getBaseTransactionId, verifySignatures } from "./utils"; export const getTransactions = (request, h) => { - try { - const storeTransactions = memory.getTransactionsByPublicKey(request.query.publicKey); + try { + const storeTransactions = memory.getTransactionsByPublicKey(request.query.publicKey); - if (request.query.state === TransactionStatus.Pending) { - return storeTransactions.filter((t) => t.data.signatures.length < t.multisigAsset.min); - } + if (request.query.state === TransactionStatus.Pending) { + return storeTransactions.filter((t) => t.data.signatures.length < t.multisigAsset.min); + } - if (request.query.state === TransactionStatus.Ready) { - return storeTransactions.filter((t) => t.data.signatures.length >= t.multisigAsset.min); - } + if (request.query.state === TransactionStatus.Ready) { + return storeTransactions.filter((t) => t.data.signatures.length >= t.multisigAsset.min); + } - return storeTransactions; - } catch (error) { - return Boom.badImplementation(error.message); - } + return storeTransactions; + } catch (error) { + return Boom.badImplementation(error.message); + } }; export const getTransaction = (request, h) => { - try { - const transaction = memory.getTransactionById(request.params.id); + try { + const transaction = memory.getTransactionById(request.params.id); - if (transaction === undefined) { - return Boom.notFound(`Failed to find transaction [${request.params.id}]`); - } + if (transaction === undefined) { + return Boom.notFound(`Failed to find transaction [${request.params.id}]`); + } - return transaction; - } catch (error) { - return Boom.badImplementation(error.message); - } + return transaction; + } catch (error) { + return Boom.badImplementation(error.message); + } }; export const postTransaction = (request, h) => { - try { - const transaction: IStoreTransaction = request.payload; + try { + const transaction: IStoreTransaction = request.payload; - if (transaction.data.signatures && transaction.data.signatures.length) { - if (!verifySignatures(transaction.data, transaction.multisigAsset)) { - return Boom.badData("Transaction signatures are not valid"); - } - } + if (transaction.data.signatures && transaction.data.signatures.length) { + if (!verifySignatures(transaction.data, transaction.multisigAsset)) { + return Boom.badData("Transaction signatures are not valid"); + } + } - const baseTransactionId = getBaseTransactionId(transaction.data); - const storeTransaction = memory.getTransactionById(baseTransactionId); - if (storeTransaction) { - memory.updateTransaction(transaction.data); + const baseTransactionId = getBaseTransactionId(transaction.data); + const storeTransaction = memory.getTransactionById(baseTransactionId); + if (storeTransaction) { + memory.updateTransaction(transaction.data); - return { id: baseTransactionId }; - } + return { id: baseTransactionId }; + } - return { id: memory.saveTransaction(transaction) }; - } catch (error) { - return Boom.badImplementation(error.message); - } + return { id: memory.saveTransaction(transaction) }; + } catch (error) { + return Boom.badImplementation(error.message); + } }; export const deleteTransactions = (request, h) => { - try { - memory.removeById(request.params.id); + try { + memory.removeById(request.params.id); - return h.response().code(204); - } catch (error) { - return Boom.badImplementation(error.message); - } + return h.response().code(204); + } catch (error) { + return Boom.badImplementation(error.message); + } }; diff --git a/src/app/server/index.ts b/src/app/server/index.ts index e76de81..79105b6 100755 --- a/src/app/server/index.ts +++ b/src/app/server/index.ts @@ -1,5 +1,6 @@ import { Managers, Types, Validation } from "@arkecosystem/crypto"; import { Server } from "@hapi/hapi"; + import { IStoreTransaction } from "../interfaces"; import { corsHeaders, serverType } from "../plugins"; import { logger } from "../services/logger"; @@ -10,101 +11,101 @@ import * as handlers from "./handlers"; import { transactionSchemaVerifier } from "./transaction-schema-verifier"; const initDatabaseSync = (network: string) => { - const storage = new Storage(); - storage.connect(`transactions-storage-${network}.sqlite`); + const storage = new Storage(); + storage.connect(`transactions-storage-${network}.sqlite`); - const transactions = storage.loadAll(); - memory.loadTransactions(transactions); + const transactions = storage.loadAll(); + memory.loadTransactions(transactions); - storage.disconnect(); + storage.disconnect(); }; export async function startServer(options: Record): Promise { - const server = new Server({ - host: options.host as string, - port: options.port as number, - }); - - await server.register({ - plugin: corsHeaders, - }); - - await server.register({ - plugin: serverType, - }); - - Managers.configManager.setFromPreset(options.network as Types.NetworkName); - Managers.configManager.setHeight(options.height as number); - Managers.configManager.getMilestone().aip11 = true; - - server.route({ - method: "GET", - path: "/transactions", - handler: handlers.getTransactions, - options: { - auth: false, - validate: { - async query(data: object, options: object) { - const schema = { - type: "object", - properties: { - publicKey: { - $ref: "publicKey", - }, - state: { enum: [TransactionStatus.Ready, TransactionStatus.Pending] }, - }, - }; - const { error } = Validation.validator.validate(schema, data); - if (error) { - throw new Error(error); - } - }, - }, - }, - }); - - server.route({ - method: "GET", - path: "/transaction/{id}", - handler: handlers.getTransaction, - }); - - server.route({ - method: "POST", - path: "/transaction", - handler: handlers.postTransaction, - options: { - auth: false, - validate: { - async payload(data: IStoreTransaction, options: object) { - transactionSchemaVerifier.verifySchema(data.data); - }, - }, - }, - }); - - server.route({ - method: "DELETE", - path: "/transactions/{id}", - handler: handlers.deleteTransactions, - }); - - initDatabaseSync(options.network as string); - - await server.start(); - - logger.info(`MultiSignature server running on ${server.info.uri}`); - - return server; + const server = new Server({ + host: options.host as string, + port: options.port as number, + }); + + await server.register({ + plugin: corsHeaders, + }); + + await server.register({ + plugin: serverType, + }); + + Managers.configManager.setFromPreset(options.network as Types.NetworkName); + Managers.configManager.setHeight(options.height as number); + Managers.configManager.getMilestone().aip11 = true; + + server.route({ + method: "GET", + path: "/transactions", + handler: handlers.getTransactions, + options: { + auth: false, + validate: { + async query(data: object, options: object) { + const schema = { + type: "object", + properties: { + publicKey: { + $ref: "publicKey", + }, + state: { enum: [TransactionStatus.Ready, TransactionStatus.Pending] }, + }, + }; + const { error } = Validation.validator.validate(schema, data); + if (error) { + throw new Error(error); + } + }, + }, + }, + }); + + server.route({ + method: "GET", + path: "/transaction/{id}", + handler: handlers.getTransaction, + }); + + server.route({ + method: "POST", + path: "/transaction", + handler: handlers.postTransaction, + options: { + auth: false, + validate: { + async payload(data: IStoreTransaction, options: object) { + transactionSchemaVerifier.verifySchema(data.data); + }, + }, + }, + }); + + server.route({ + method: "DELETE", + path: "/transactions/{id}", + handler: handlers.deleteTransactions, + }); + + initDatabaseSync(options.network as string); + + await server.start(); + + logger.info(`MultiSignature server running on ${server.info.uri}`); + + return server; } export const exitHandler = (network: string) => { - const storage = new Storage(); - storage.connect(`transactions-storage-${network}.sqlite`); + const storage = new Storage(); + storage.connect(`transactions-storage-${network}.sqlite`); - const memTransactions = memory.getAllTransactions(); - storage.deleteAll(); - storage.bulkAdd(memTransactions); + const memTransactions = memory.getAllTransactions(); + storage.deleteAll(); + storage.bulkAdd(memTransactions); - storage.disconnect(); + storage.disconnect(); }; diff --git a/src/app/server/transaction-schema-verifier.ts b/src/app/server/transaction-schema-verifier.ts index 8d8af2c..5554674 100644 --- a/src/app/server/transaction-schema-verifier.ts +++ b/src/app/server/transaction-schema-verifier.ts @@ -2,47 +2,47 @@ import { Transactions as MagistrateTransactions } from "@arkecosystem/core-magis import { Enums, Interfaces, Transactions, Validation } from "@arkecosystem/crypto"; class TransactionSchemaVerifier { - public constructor() { - for (const schemaName of Object.keys(Transactions.schemas)) { - this.extendTransaction(Transactions.schemas[schemaName], schemaName); - } - - for (const MagistrateTransaction of Object.values(MagistrateTransactions)) { - Transactions.TransactionRegistry.registerTransactionType(MagistrateTransaction); - this.extendTransaction(MagistrateTransaction.getSchema()); - } - } - - public verifySchema(data: Interfaces.ITransactionData) { - if (!data.signatures) { - data.signatures = []; - } - - const isMultiSignatureRegistration = - data.type === Enums.TransactionType.MultiSignature && - (!data.typeGroup || data.typeGroup === Enums.TransactionTypeGroup.Core); - - const { error } = Transactions.Verifier.verifySchema(data, !isMultiSignatureRegistration); - - if (error) { - throw new Error(error); - } - } - - private extendTransaction(schema, schemaName?) { - if (typeof schema !== "object" || !schema.properties.signatures.minItems || !schema.$id) { - return; - } - - Validation.validator.extendTransaction(schema, true); - schema.properties.signatures.minItems = 0; - - if (schemaName && schemaName === "multiSignature") { - (schema as any).required = ["asset"]; - } - - Validation.validator.extendTransaction(schema); - } + public constructor() { + for (const schemaName of Object.keys(Transactions.schemas)) { + this.extendTransaction(Transactions.schemas[schemaName], schemaName); + } + + for (const MagistrateTransaction of Object.values(MagistrateTransactions)) { + Transactions.TransactionRegistry.registerTransactionType(MagistrateTransaction); + this.extendTransaction(MagistrateTransaction.getSchema()); + } + } + + public verifySchema(data: Interfaces.ITransactionData) { + if (!data.signatures) { + data.signatures = []; + } + + const isMultiSignatureRegistration = + data.type === Enums.TransactionType.MultiSignature && + (!data.typeGroup || data.typeGroup === Enums.TransactionTypeGroup.Core); + + const { error } = Transactions.Verifier.verifySchema(data, !isMultiSignatureRegistration); + + if (error) { + throw new Error(error); + } + } + + private extendTransaction(schema, schemaName?) { + if (typeof schema !== "object" || !schema.properties.signatures.minItems || !schema.$id) { + return; + } + + Validation.validator.extendTransaction(schema, true); + schema.properties.signatures.minItems = 0; + + if (schemaName && schemaName === "multiSignature") { + schema.required = ["asset"]; + } + + Validation.validator.extendTransaction(schema); + } } export const transactionSchemaVerifier = new TransactionSchemaVerifier(); diff --git a/src/app/server/utils.ts b/src/app/server/utils.ts index 79838de..9e24b49 100644 --- a/src/app/server/utils.ts +++ b/src/app/server/utils.ts @@ -2,42 +2,42 @@ import { Crypto, Interfaces, Transactions } from "@arkecosystem/crypto"; // Get base transaction id without signatures export const getBaseTransactionId = (transaction: Interfaces.ITransactionData): string => { - const baseTransaction: Interfaces.ITransactionData = { - ...transaction, - signature: null, - signatures: [], - }; + const baseTransaction: Interfaces.ITransactionData = { + ...transaction, + signature: null, + signatures: [], + }; - return Transactions.Utils.getId(baseTransaction); + return Transactions.Utils.getId(baseTransaction); }; // Verifies that all signatures are valid export const verifySignatures = ( - transaction: Interfaces.ITransactionData, - multiSignature: Interfaces.IMultiSignatureAsset, + transaction: Interfaces.ITransactionData, + multiSignature: Interfaces.IMultiSignatureAsset, ): boolean => { - const { publicKeys }: Interfaces.IMultiSignatureAsset = multiSignature; - const { signatures }: Interfaces.ITransactionData = transaction; - - if (!signatures.length) { - return false; - } - - const hash: Buffer = Transactions.Utils.toHash(transaction, { - excludeSignature: true, - excludeSecondSignature: true, - excludeMultiSignature: true, - }); - - for (const signature of signatures) { - const publicKeyIndex: number = parseInt(signature.slice(0, 2), 16); - const partialSignature: string = signature.slice(2, 130); - const publicKey: string = publicKeys[publicKeyIndex]; - - if (!Crypto.Hash.verifySchnorr(hash, partialSignature, publicKey)) { - return false; - } - } - - return true; + const { publicKeys }: Interfaces.IMultiSignatureAsset = multiSignature; + const { signatures }: Interfaces.ITransactionData = transaction; + + if (!signatures.length) { + return false; + } + + const hash: Buffer = Transactions.Utils.toHash(transaction, { + excludeSignature: true, + excludeSecondSignature: true, + excludeMultiSignature: true, + }); + + for (const signature of signatures) { + const publicKeyIndex: number = parseInt(signature.slice(0, 2), 16); + const partialSignature: string = signature.slice(2, 130); + const publicKey: string = publicKeys[publicKeyIndex]; + + if (!Crypto.Hash.verifySchnorr(hash, partialSignature, publicKey)) { + return false; + } + } + + return true; }; diff --git a/src/app/services/logger.ts b/src/app/services/logger.ts index 00834e0..ceb4dfb 100644 --- a/src/app/services/logger.ts +++ b/src/app/services/logger.ts @@ -1,39 +1,39 @@ import pino from "pino"; class Logger { - private logger: any; - - public constructor() { - this.logger = pino({ - name: "multisig-server", - safe: true, - prettyPrint: true, - }); - } - - public setLogger(logger: any): void { - this.logger = logger; - } - - public error(message: any): void { - this.logger.error(message); - } - - public warn(message: any): void { - this.logger.warn(message); - } - - public info(message: any): void { - this.logger.info(message); - } - - public debug(message: any): void { - this.logger.debug(message); - } - - public verbose(message: any): void { - this.logger.verbose(message); - } + private logger: any; + + public constructor() { + this.logger = pino({ + name: "multisig-server", + safe: true, + prettyPrint: true, + }); + } + + public setLogger(logger: any): void { + this.logger = logger; + } + + public error(message: any): void { + this.logger.error(message); + } + + public warn(message: any): void { + this.logger.warn(message); + } + + public info(message: any): void { + this.logger.info(message); + } + + public debug(message: any): void { + this.logger.debug(message); + } + + public verbose(message: any): void { + this.logger.verbose(message); + } } export const logger = new Logger(); diff --git a/src/app/services/memory.ts b/src/app/services/memory.ts index b2e7427..f9a158a 100644 --- a/src/app/services/memory.ts +++ b/src/app/services/memory.ts @@ -1,113 +1,114 @@ import { Interfaces, Transactions } from "@arkecosystem/crypto"; + import { IStoreTransaction } from "../interfaces"; import { getBaseTransactionId } from "../server/utils"; class Memory { - private transactions: { [storeId: string]: IStoreTransaction } = {}; - private lastPurged: number = Date.now(); - - // indexes on storeId - private txStoreIdsBySender: { [senderPublicKey: string]: string[] } = {}; - private txStoreIdsByPublicKey: { [senderPublicKey: string]: string[] } = {}; - - public saveTransaction(transaction: IStoreTransaction): string { - const storeId = getBaseTransactionId(transaction.data); - transaction.timestamp = Date.now(); - transaction.id = storeId; - this.transactions[storeId] = transaction; - this.txStoreIdsBySender[transaction.data.senderPublicKey] = - this.txStoreIdsBySender[transaction.data.senderPublicKey] || []; - this.txStoreIdsBySender[transaction.data.senderPublicKey].push(storeId); - - for (const publicKey of transaction.multisigAsset.publicKeys) { - this.txStoreIdsByPublicKey[publicKey] = this.txStoreIdsByPublicKey[publicKey] || []; - this.txStoreIdsByPublicKey[publicKey].push(storeId); - } - - return storeId; - } - - public updateTransaction(transaction: Interfaces.ITransactionData): void { - const storeId = getBaseTransactionId(transaction); - const storeTxToUpdate = this.transactions[storeId]; - if (!storeTxToUpdate) { - throw new Error(`No transaction found for store ID ${storeId}`); - } - - for (const signatureIndex of Object.keys(transaction.signatures)) { - storeTxToUpdate.data.signatures[signatureIndex] = transaction.signatures[signatureIndex]; - } - - if (transaction.signature) { - storeTxToUpdate.data.signature = transaction.signature; - } - - this.transactions[storeId].data.id = Transactions.Utils.getId(storeTxToUpdate.data); - - // TODO check signature is valid - } - - public getTransactionById(storeId: string): IStoreTransaction { - if (Date.now() - this.lastPurged > 60 * 60 * 1000) { - // launch purge every hour - this.purgeExpiredTransactions(); - this.lastPurged = Date.now(); - } - return this.transactions[storeId]; - } - - public getTransactionsByPublicKey(publicKey: string): IStoreTransaction[] { - const storeIdsBySender = this.txStoreIdsBySender[publicKey] || []; - const storeIdsByPublicKey = this.txStoreIdsByPublicKey[publicKey] || []; - - const allById = {}; - for (const id of storeIdsBySender.concat(storeIdsByPublicKey)) { - allById[id] = this.getTransactionById(id); - } - - return Object.values(allById); - } - - public getAllTransactions(): IStoreTransaction[] { - return Object.values(this.transactions); - } - - public deleteAllTransactions(): void { - for (const id of Object.keys(this.transactions)) { - this.removeById(id); - } - } - - public loadTransactions(transactions: IStoreTransaction[]) { - for (const transaction of transactions) { - this.saveTransaction(transaction); - } - } - - public removeById(storeId: string): void { - const { data, multisigAsset } = this.transactions[storeId]; - - // removes indexes - this.txStoreIdsBySender[data.senderPublicKey] = this.txStoreIdsBySender[data.senderPublicKey].filter( - (id) => id !== storeId, - ); - for (const publicKey of multisigAsset.publicKeys) { - this.txStoreIdsByPublicKey[publicKey] = this.txStoreIdsByPublicKey[publicKey].filter( - (id) => id !== storeId, - ); - } - - // remove actual transaction - delete this.transactions[storeId]; - } - - private purgeExpiredTransactions(): void { - for (const id of Object.keys(this.transactions)) { - if (Date.now() - this.transactions[id].timestamp > 24 * 60 * 60 * 1000) { - this.removeById(id); - } - } - } + private transactions: { [storeId: string]: IStoreTransaction } = {}; + private lastPurged: number = Date.now(); + + // indexes on storeId + private txStoreIdsBySender: { [senderPublicKey: string]: string[] } = {}; + private txStoreIdsByPublicKey: { [senderPublicKey: string]: string[] } = {}; + + public saveTransaction(transaction: IStoreTransaction): string { + const storeId = getBaseTransactionId(transaction.data); + transaction.timestamp = Date.now(); + transaction.id = storeId; + this.transactions[storeId] = transaction; + this.txStoreIdsBySender[transaction.data.senderPublicKey] = + this.txStoreIdsBySender[transaction.data.senderPublicKey] || []; + this.txStoreIdsBySender[transaction.data.senderPublicKey].push(storeId); + + for (const publicKey of transaction.multisigAsset.publicKeys) { + this.txStoreIdsByPublicKey[publicKey] = this.txStoreIdsByPublicKey[publicKey] || []; + this.txStoreIdsByPublicKey[publicKey].push(storeId); + } + + return storeId; + } + + public updateTransaction(transaction: Interfaces.ITransactionData): void { + const storeId = getBaseTransactionId(transaction); + const storeTxToUpdate = this.transactions[storeId]; + if (!storeTxToUpdate) { + throw new Error(`No transaction found for store ID ${storeId}`); + } + + for (const signatureIndex of Object.keys(transaction.signatures)) { + storeTxToUpdate.data.signatures[signatureIndex] = transaction.signatures[signatureIndex]; + } + + if (transaction.signature) { + storeTxToUpdate.data.signature = transaction.signature; + } + + this.transactions[storeId].data.id = Transactions.Utils.getId(storeTxToUpdate.data); + + // TODO check signature is valid + } + + public getTransactionById(storeId: string): IStoreTransaction { + if (Date.now() - this.lastPurged > 60 * 60 * 1000) { + // launch purge every hour + this.purgeExpiredTransactions(); + this.lastPurged = Date.now(); + } + return this.transactions[storeId]; + } + + public getTransactionsByPublicKey(publicKey: string): IStoreTransaction[] { + const storeIdsBySender = this.txStoreIdsBySender[publicKey] || []; + const storeIdsByPublicKey = this.txStoreIdsByPublicKey[publicKey] || []; + + const allById = {}; + for (const id of storeIdsBySender.concat(storeIdsByPublicKey)) { + allById[id] = this.getTransactionById(id); + } + + return Object.values(allById); + } + + public getAllTransactions(): IStoreTransaction[] { + return Object.values(this.transactions); + } + + public deleteAllTransactions(): void { + for (const id of Object.keys(this.transactions)) { + this.removeById(id); + } + } + + public loadTransactions(transactions: IStoreTransaction[]) { + for (const transaction of transactions) { + this.saveTransaction(transaction); + } + } + + public removeById(storeId: string): void { + const { data, multisigAsset } = this.transactions[storeId]; + + // removes indexes + this.txStoreIdsBySender[data.senderPublicKey] = this.txStoreIdsBySender[data.senderPublicKey].filter( + (id) => id !== storeId, + ); + for (const publicKey of multisigAsset.publicKeys) { + this.txStoreIdsByPublicKey[publicKey] = this.txStoreIdsByPublicKey[publicKey].filter( + (id) => id !== storeId, + ); + } + + // remove actual transaction + delete this.transactions[storeId]; + } + + private purgeExpiredTransactions(): void { + for (const id of Object.keys(this.transactions)) { + if (Date.now() - this.transactions[id].timestamp > 24 * 60 * 60 * 1000) { + this.removeById(id); + } + } + } } export const memory = new Memory(); diff --git a/src/app/services/storage.ts b/src/app/services/storage.ts index 50855d6..5b991bf 100644 --- a/src/app/services/storage.ts +++ b/src/app/services/storage.ts @@ -1,96 +1,97 @@ import BetterSqlite3 from "better-sqlite3"; import { ensureFileSync } from "fs-extra"; + import { IStoreTransaction } from "../interfaces"; export class Storage { - private readonly table: string = "transactions"; - private database: BetterSqlite3.Database; + private readonly table: string = "transactions"; + private database: BetterSqlite3.Database; - public connect(file: string) { - ensureFileSync(file); + public connect(file: string) { + ensureFileSync(file); - this.database = new BetterSqlite3(file); + this.database = new BetterSqlite3(file); - this.database.exec(` + this.database.exec(` PRAGMA journal_mode=WAL; CREATE TABLE IF NOT EXISTS ${this.table} ( "id" VARCHAR(64) PRIMARY KEY, "json" BLOB NOT NULL ); `); - } + } - public disconnect(): void { - this.database.close(); - this.database = undefined; - } + public disconnect(): void { + this.database.close(); + this.database = undefined; + } - public bulkAdd(data: IStoreTransaction[]): void { - if (data.length === 0) { - return; - } + public bulkAdd(data: IStoreTransaction[]): void { + if (data.length === 0) { + return; + } - const insertStatement: BetterSqlite3.Statement = this.database.prepare( - `INSERT INTO ${this.table} ` + "(id, json) VALUES " + "(:id, :json);", - ); + const insertStatement: BetterSqlite3.Statement = this.database.prepare( + `INSERT INTO ${this.table} ` + "(id, json) VALUES " + "(:id, :json);", + ); - try { - this.database.prepare("BEGIN;").run(); + try { + this.database.prepare("BEGIN;").run(); - for (const transaction of data) { - insertStatement.run({ id: transaction.id, json: JSON.stringify(transaction) }); - } + for (const transaction of data) { + insertStatement.run({ id: transaction.id, json: JSON.stringify(transaction) }); + } - this.database.prepare("COMMIT;").run(); - } finally { - if (this.database.inTransaction) { - this.database.prepare("ROLLBACK;").run(); - } - } - } + this.database.prepare("COMMIT;").run(); + } finally { + if (this.database.inTransaction) { + this.database.prepare("ROLLBACK;").run(); + } + } + } - public bulkRemoveById(ids: string[]): void { - if (ids.length === 0) { - return; - } + public bulkRemoveById(ids: string[]): void { + if (ids.length === 0) { + return; + } - const deleteStatement: BetterSqlite3.Statement = this.database.prepare( - `DELETE FROM ${this.table} WHERE id = :id;`, - ); + const deleteStatement: BetterSqlite3.Statement = this.database.prepare( + `DELETE FROM ${this.table} WHERE id = :id;`, + ); - this.database.prepare("BEGIN;").run(); + this.database.prepare("BEGIN;").run(); - for (const id of ids) { - deleteStatement.run({ id }); - } + for (const id of ids) { + deleteStatement.run({ id }); + } - this.database.prepare("COMMIT;").run(); - } + this.database.prepare("COMMIT;").run(); + } - public loadAll(): IStoreTransaction[] { - const rows: Array<{ id: string; json: string }> = this.database - .prepare(`SELECT id, json FROM ${this.table};`) - .all(); + public loadAll(): IStoreTransaction[] { + const rows: Array<{ id: string; json: string }> = this.database + .prepare(`SELECT id, json FROM ${this.table};`) + .all(); - const transactions: IStoreTransaction[] = []; + const transactions: IStoreTransaction[] = []; - const invalidIds: string[] = []; - for (const row of rows) { - try { - const transaction: IStoreTransaction = JSON.parse(row.json); + const invalidIds: string[] = []; + for (const row of rows) { + try { + const transaction: IStoreTransaction = JSON.parse(row.json); - transactions.push(transaction); - } catch { - invalidIds.push(row.id); - } - } + transactions.push(transaction); + } catch { + invalidIds.push(row.id); + } + } - this.bulkRemoveById(invalidIds); + this.bulkRemoveById(invalidIds); - return transactions; - } + return transactions; + } - public deleteAll(): void { - this.database.exec(`DELETE FROM ${this.table};`); - } + public deleteAll(): void { + this.database.exec(`DELETE FROM ${this.table};`); + } } diff --git a/src/commands/command.ts b/src/commands/command.ts index ff3ddbc..3a18ec9 100644 --- a/src/commands/command.ts +++ b/src/commands/command.ts @@ -1,112 +1,113 @@ import { Networks } from "@arkecosystem/crypto"; import Command, { flags } from "@oclif/command"; import cli from "cli-ux"; + import { confirm } from "../helpers/prompts"; import { processManager } from "../process-manager"; import { CommandFlags } from "../types"; export abstract class BaseCommand extends Command { - public static flagsConfiguration: Record = { - host: flags.string({ - description: "the host that should be used to expose the API", - default: "0.0.0.0", - }), - port: flags.integer({ - description: "the port that should be used to expose the API", - default: 8080, - }), - network: flags.string({ - description: "the network for which the multisignature server is used", - default: "testnet", - options: Object.keys(Networks), - }), - height: flags.integer({ - description: "the height to load in the network milestone(s)", - default: 1, - }), - }; + public static flagsConfiguration: Record = { + host: flags.string({ + description: "the host that should be used to expose the API", + default: "0.0.0.0", + }), + port: flags.integer({ + description: "the port that should be used to expose the API", + default: 8080, + }), + network: flags.string({ + description: "the network for which the multisignature server is used", + default: "testnet", + options: Object.keys(Networks), + }), + height: flags.integer({ + description: "the height to load in the network milestone(s)", + default: 1, + }), + }; - protected flagsToStrings(flags: CommandFlags, ignoreKeys: string[] = []): string { - const mappedFlags = []; + protected flagsToStrings(flags: CommandFlags, ignoreKeys: string[] = []): string { + const mappedFlags = []; - for (const [key, value] of Object.entries(flags)) { - if (!ignoreKeys.includes(key) && value !== undefined) { - if (value === false) { - continue; - } else if (value === true) { - mappedFlags.push(`--${key}`); - } else if (typeof value === "string") { - mappedFlags.push(value.includes(" ") ? `--${key}="${value}"` : `--${key}=${value}`); - } else { - mappedFlags.push(`--${key}=${value}`); - } - } - } + for (const [key, value] of Object.entries(flags)) { + if (!ignoreKeys.includes(key) && value !== undefined) { + if (value === false) { + continue; + } else if (value === true) { + mappedFlags.push(`--${key}`); + } else if (typeof value === "string") { + mappedFlags.push(value.includes(" ") ? `--${key}="${value}"` : `--${key}=${value}`); + } else { + mappedFlags.push(`--${key}=${value}`); + } + } + } - return mappedFlags.join(" "); - } + return mappedFlags.join(" "); + } - protected abortWithInvalidInput(): void { - this.error("Please enter valid data and try again!"); - } + protected abortWithInvalidInput(): void { + this.error("Please enter valid data and try again!"); + } - protected async restartRunningProcessPrompt(processName: string, showPrompt: boolean = true) { - if (processManager.isOnline(processName)) { - if (showPrompt) { - await confirm(`Would you like to restart the ${processName} process?`, () => { - this.restartProcess(processName); - }); - } else { - this.restartProcess(processName); - } - } - } + protected async restartRunningProcessPrompt(processName: string, showPrompt = true) { + if (processManager.isOnline(processName)) { + if (showPrompt) { + await confirm(`Would you like to restart the ${processName} process?`, () => { + this.restartProcess(processName); + }); + } else { + this.restartProcess(processName); + } + } + } - protected restartProcess(processName: string): void { - try { - cli.action.start(`Restarting ${processName}`); + protected restartProcess(processName: string): void { + try { + cli.action.start(`Restarting ${processName}`); - processManager.restart(processName); - } catch (error) { - error.stderr ? this.error(`${error.message}: ${error.stderr}`) : this.error(error.message); - } finally { - cli.action.stop(); - } - } + processManager.restart(processName); + } catch (error) { + error.stderr ? this.error(`${error.message}: ${error.stderr}`) : this.error(error.message); + } finally { + cli.action.stop(); + } + } - protected abortRunningProcess(processName: string) { - if (processManager.isOnline(processName)) { - this.error(`The "${processName}" process is already running.`); - } - } + protected abortRunningProcess(processName: string) { + if (processManager.isOnline(processName)) { + this.error(`The "${processName}" process is already running.`); + } + } - protected abortStoppedProcess(processName: string) { - if (processManager.isStopped(processName)) { - this.error(`The "${processName}" process is not running.`); - } - } + protected abortStoppedProcess(processName: string) { + if (processManager.isStopped(processName)) { + this.error(`The "${processName}" process is not running.`); + } + } - protected abortErroredProcess(processName: string) { - if (processManager.isErrored(processName)) { - this.error(`The "${processName}" process has errored.`); - } - } + protected abortErroredProcess(processName: string) { + if (processManager.isErrored(processName)) { + this.error(`The "${processName}" process has errored.`); + } + } - protected abortUnknownProcess(processName: string) { - if (processManager.isUnknown(processName)) { - this.error( - `The "${processName}" process has entered an unknown state. (${processManager.status(processName)})`, - ); - } - } + protected abortUnknownProcess(processName: string) { + if (processManager.isUnknown(processName)) { + this.error( + `The "${processName}" process has entered an unknown state. (${processManager.status(processName)})`, + ); + } + } - protected abortMissingProcess(processName: string) { - if (processManager.missing(processName)) { - this.error(`The "${processName}" process does not exist.`); - } - } + protected abortMissingProcess(processName: string) { + if (processManager.missing(processName)) { + this.error(`The "${processName}" process does not exist.`); + } + } - protected getProcessName(network: string): string { - return `multisig-server-${network}`; - } + protected getProcessName(network: string): string { + return `multisig-server-${network}`; + } } diff --git a/src/commands/log.ts b/src/commands/log.ts index 64eac35..672415c 100644 --- a/src/commands/log.ts +++ b/src/commands/log.ts @@ -2,49 +2,51 @@ import { flags } from "@oclif/command"; import clear from "clear"; import Tail from "nodejs-tail"; import readLastLines from "read-last-lines"; + import { processManager } from "../process-manager"; import { CommandFlags } from "../types"; import { BaseCommand } from "./command"; export class LogCommand extends BaseCommand { - public static description: string = "Show the log"; + public static description = "Show the log"; - public static examples: string[] = [`$ multisig-server log`]; + public static examples: string[] = [`$ multisig-server log`]; - public static flags: CommandFlags = { - ...BaseCommand.flagsConfiguration, - error: flags.boolean({ - description: "only show error output", - }), - lines: flags.integer({ - description: "number of lines to tail", - default: 15, - }), - }; + public static flags: CommandFlags = { + ...BaseCommand.flagsConfiguration, + error: flags.boolean({ + description: "only show error output", + }), + lines: flags.integer({ + description: "number of lines to tail", + default: 15, + }), + }; - public async run(): Promise { - const { flags } = this.parse(LogCommand); + public async run(): Promise { + const { flags } = this.parse(LogCommand); - const processName: string = this.getProcessName(flags.network as string); + const processName: string = this.getProcessName(flags.network as string); - this.abortMissingProcess(processName); + this.abortMissingProcess(processName); - const { pm2_env } = processManager.describe(processName); + const { pm2_env } = processManager.describe(processName); - const file = flags.error ? pm2_env.pm_err_log_path : pm2_env.pm_out_log_path; + const file = flags.error ? pm2_env.pm_err_log_path : pm2_env.pm_out_log_path; - clear(); + clear(); - this.log( - `Tailing last ${flags.lines} lines for [${processName}] process (change the value with --lines option)`, - ); + this.log( + `Tailing last ${flags.lines} lines for [${processName}] process (change the value with --lines option)`, + ); - this.log((await readLastLines.read(file, flags.lines)).trim()); + this.log((await readLastLines.read(file, flags.lines)).trim()); - const log = new Tail(file); + const log = new Tail(file); - log.on("line", this.log); + // eslint-disable-next-line @typescript-eslint/unbound-method + log.on("line", this.log); - log.watch(); - } + log.watch(); + } } diff --git a/src/commands/restart.ts b/src/commands/restart.ts index cf527bd..b4919da 100644 --- a/src/commands/restart.ts +++ b/src/commands/restart.ts @@ -1,37 +1,38 @@ import cli from "cli-ux"; + import { processManager } from "../process-manager"; import { CommandFlags } from "../types"; import { BaseCommand } from "./command"; export class RestartCommand extends BaseCommand { - public static description: string = "Restart the MultiSignature server"; + public static description = "Restart the MultiSignature server"; - public static examples: string[] = [ - `Restart the MultiSignature server + public static examples: string[] = [ + `Restart the MultiSignature server $ multisig-server restart `, - ]; + ]; - public static flags: CommandFlags = { - ...BaseCommand.flagsConfiguration, - }; + public static flags: CommandFlags = { + ...BaseCommand.flagsConfiguration, + }; - public async run(): Promise { - const { flags } = this.parse(RestartCommand); + public async run(): Promise { + const { flags } = this.parse(RestartCommand); - const processName: string = this.getProcessName(flags.network as string); + const processName: string = this.getProcessName(flags.network as string); - try { - this.abortMissingProcess(processName); - this.abortStoppedProcess(processName); + try { + this.abortMissingProcess(processName); + this.abortStoppedProcess(processName); - cli.action.start(`Restarting ${processName}`); + cli.action.start(`Restarting ${processName}`); - processManager.restart(processName); - } catch (error) { - error.stderr ? this.error(`${error.message}: ${error.stderr}`) : this.error(error.message); - } finally { - cli.action.stop(); - } - } + processManager.restart(processName); + } catch (error) { + error.stderr ? this.error(`${error.message}: ${error.stderr}`) : this.error(error.message); + } finally { + cli.action.stop(); + } + } } diff --git a/src/commands/run.ts b/src/commands/run.ts index 3533459..ebe8cd7 100644 --- a/src/commands/run.ts +++ b/src/commands/run.ts @@ -3,21 +3,21 @@ import { CommandFlags } from "../types"; import { BaseCommand } from "./command"; export class RunCommand extends BaseCommand { - public static description: string = "Run the MultiSignature server (without pm2)"; + public static description = "Run the MultiSignature server (without pm2)"; - public static examples: string[] = [ - `Run the MultiSignature server + public static examples: string[] = [ + `Run the MultiSignature server $ multisig-server run `, - ]; + ]; - public static flags: CommandFlags = { - ...BaseCommand.flagsConfiguration, - }; + public static flags: CommandFlags = { + ...BaseCommand.flagsConfiguration, + }; - public async run(): Promise { - const { flags } = this.parse(RunCommand); + public async run(): Promise { + const { flags } = this.parse(RunCommand); - await start({ server: flags }); - } + await start({ server: flags }); + } } diff --git a/src/commands/start.ts b/src/commands/start.ts index 17486d0..2801742 100644 --- a/src/commands/start.ts +++ b/src/commands/start.ts @@ -1,72 +1,73 @@ import { flags } from "@oclif/command"; import cli from "cli-ux"; + import { processManager } from "../process-manager"; import { CommandFlags, ProcessOptions } from "../types"; import { BaseCommand } from "./command"; export class StartCommand extends BaseCommand { - public static description: string = "Start the MultiSignature server"; + public static description = "Start the MultiSignature server"; - public static examples: string[] = [ - `Run a MultiSignature server with a pm2 daemon + public static examples: string[] = [ + `Run a MultiSignature server with a pm2 daemon $ multisig-server start `, - ]; + ]; - public static flags: CommandFlags = { - ...BaseCommand.flagsConfiguration, - daemon: flags.boolean({ - description: "start the process as a daemon", - default: true, - allowNo: true, - }), - }; + public static flags: CommandFlags = { + ...BaseCommand.flagsConfiguration, + daemon: flags.boolean({ + description: "start the process as a daemon", + default: true, + allowNo: true, + }), + }; - public async run(): Promise { - const { flags } = this.parse(StartCommand); + public async run(): Promise { + const { flags } = this.parse(StartCommand); - const processName: string = this.getProcessName(flags.network as string); + const processName: string = this.getProcessName(flags.network as string); - this.abortRunningProcess(processName); + this.abortRunningProcess(processName); - await this.runWithPm2( - { - name: processName, - // @ts-ignore - script: this.config.options.root, - args: `run ${this.flagsToStrings(flags, ["daemon"])}`, - }, - flags, - ); - } + await this.runWithPm2( + { + name: processName, + // @ts-ignore + script: this.config.options.root, + args: `run ${this.flagsToStrings(flags, ["daemon"])}`, + }, + flags, + ); + } - protected async runWithPm2(options: ProcessOptions, flags: CommandFlags) { - const processName = options.name; + protected async runWithPm2(options: ProcessOptions, flags: CommandFlags) { + const processName = options.name; - try { - if (processManager.has(processName)) { - this.abortUnknownProcess(processName); - this.abortRunningProcess(processName); - } + try { + if (processManager.has(processName)) { + this.abortUnknownProcess(processName); + this.abortRunningProcess(processName); + } - cli.action.start(`Starting ${processName}`); + cli.action.start(`Starting ${processName}`); - const flagsProcess: Record = { - "max-restarts": 5, - "kill-timeout": 30000, - }; + const flagsProcess: Record = { + "max-restarts": 5, + "kill-timeout": 30000, + }; - if (flags.daemon === false) { - flagsProcess["no-daemon"] = true; - } + if (flags.daemon === false) { + flagsProcess["no-daemon"] = true; + } - flagsProcess.name = processName; + flagsProcess.name = processName; - processManager.start(options, flagsProcess); - } catch (error) { - error.stderr ? this.error(`${error.message}: ${error.stderr}`) : this.error(error.message); - } finally { - cli.action.stop(); - } - } + processManager.start(options, flagsProcess); + } catch (error) { + error.stderr ? this.error(`${error.message}: ${error.stderr}`) : this.error(error.message); + } finally { + cli.action.stop(); + } + } } diff --git a/src/commands/status.ts b/src/commands/status.ts index 15fd1d5..65b4599 100644 --- a/src/commands/status.ts +++ b/src/commands/status.ts @@ -2,42 +2,43 @@ import Table from "cli-table3"; import dayjs from "dayjs"; import prettyBytes from "pretty-bytes"; import prettyMs from "pretty-ms"; + import { processManager } from "../process-manager"; import { CommandFlags, ProcessDescription } from "../types"; import { renderTable } from "../utils"; import { BaseCommand } from "./command"; export class StatusCommand extends BaseCommand { - public static description: string = "Show the MultiSignature server status"; - - public static examples: string[] = [`$ multisig-server status`]; - - public static flags: CommandFlags = { - ...BaseCommand.flagsConfiguration, - }; - - public async run(): Promise { - const { flags } = this.parse(StatusCommand); - - const processName: string = this.getProcessName(flags.network as string); - - this.abortMissingProcess(processName); - - renderTable(["ID", "Name", "Version", "Status", "Uptime", "CPU", "RAM"], (table: Table.Table) => { - const app: ProcessDescription = processManager.describe(processName); - - // @ts-ignore - table.push([ - app.pid, - app.name, - // @ts-ignore - app.pm2_env.version, - app.pm2_env.status, - // @ts-ignore - prettyMs(dayjs().diff(app.pm2_env.pm_uptime)), - `${app.monit.cpu}%`, - prettyBytes(app.monit.memory), - ]); - }); - } + public static description = "Show the MultiSignature server status"; + + public static examples: string[] = [`$ multisig-server status`]; + + public static flags: CommandFlags = { + ...BaseCommand.flagsConfiguration, + }; + + public async run(): Promise { + const { flags } = this.parse(StatusCommand); + + const processName: string = this.getProcessName(flags.network as string); + + this.abortMissingProcess(processName); + + renderTable(["ID", "Name", "Version", "Status", "Uptime", "CPU", "RAM"], (table: Table.Table) => { + const app: ProcessDescription = processManager.describe(processName); + + // @ts-ignore + table.push([ + app.pid, + app.name, + // @ts-ignore + app.pm2_env.version, + app.pm2_env.status, + // @ts-ignore + prettyMs(dayjs().diff(app.pm2_env.pm_uptime)), + `${app.monit.cpu}%`, + prettyBytes(app.monit.memory), + ]); + }); + } } diff --git a/src/commands/stop.ts b/src/commands/stop.ts index 0df7fd0..8cfa877 100644 --- a/src/commands/stop.ts +++ b/src/commands/stop.ts @@ -1,42 +1,43 @@ import { flags } from "@oclif/command"; import cli from "cli-ux"; + import { processManager } from "../process-manager"; import { CommandFlags } from "../types"; import { BaseCommand } from "./command"; export class StopCommand extends BaseCommand { - public static description: string = "Stop the MultiSignature server"; + public static description = "Stop the MultiSignature server"; - public static examples: string[] = [ - `Stop the MultiSignature server + public static examples: string[] = [ + `Stop the MultiSignature server $ multisig-server stop `, - ]; - - public static flags: CommandFlags = { - ...BaseCommand.flagsConfiguration, - kill: flags.boolean({ - description: "kill the process or daemon", - }), - }; - - public async run(): Promise { - const { flags } = this.parse(StopCommand); - - const processName: string = this.getProcessName(flags.network as string); - - try { - this.abortMissingProcess(processName); - this.abortUnknownProcess(processName); - this.abortStoppedProcess(processName); - - cli.action.start(`Stopping ${processName}`); - - processManager[flags.kill ? "delete" : "stop"](processName); - } catch (error) { - this.error(error.message); - } finally { - cli.action.stop(); - } - } + ]; + + public static flags: CommandFlags = { + ...BaseCommand.flagsConfiguration, + kill: flags.boolean({ + description: "kill the process or daemon", + }), + }; + + public async run(): Promise { + const { flags } = this.parse(StopCommand); + + const processName: string = this.getProcessName(flags.network as string); + + try { + this.abortMissingProcess(processName); + this.abortUnknownProcess(processName); + this.abortStoppedProcess(processName); + + cli.action.start(`Stopping ${processName}`); + + processManager[flags.kill ? "delete" : "stop"](processName); + } catch (error) { + this.error(error.message); + } finally { + cli.action.stop(); + } + } } diff --git a/src/commands/update.ts b/src/commands/update.ts index ea2f6fe..6a0256d 100644 --- a/src/commands/update.ts +++ b/src/commands/update.ts @@ -2,72 +2,73 @@ import { flags } from "@oclif/command"; import Chalk from "chalk"; import cli from "cli-ux"; import { removeSync } from "fs-extra"; + import { confirm } from "../helpers/prompts"; import { checkForUpdates, installFromChannel } from "../helpers/update"; import { CommandFlags } from "../types"; import { BaseCommand } from "./command"; export class UpdateCommand extends BaseCommand { - public static description: string = "Update the MultiSignature server installation"; - - public static flags: CommandFlags = { - ...BaseCommand.flagsConfiguration, - force: flags.boolean({ - description: "force an update", - }), - restart: flags.boolean({ - description: "restart all running processes", - allowNo: true, - }), - }; - - public async run(): Promise { - const state = await checkForUpdates(this); - - if (!state.ready) { - this.log(`You already have the latest version (${state.currentVersion})`); - - return; - } - - const { flags } = this.parse(UpdateCommand); - - if (flags.force) { - return this.performUpdate(flags, state); - } - - try { - this.warn( - `${state.name} update available from ${Chalk.greenBright(state.currentVersion)} to ${Chalk.greenBright( - state.updateVersion, - )}.`, - ); - - await confirm("Would you like to update?", async () => { - try { - await this.performUpdate(flags, state); - } catch (err) { - this.error(err.message); - } finally { - cli.action.stop(); - } - }); - } catch (err) { - this.error(err.message); - } - } - - private async performUpdate(flags: CommandFlags, state: Record): Promise { - cli.action.start(`Updating from ${state.currentVersion} to ${state.updateVersion}`); - - await installFromChannel(state.name, state.updateVersion); - - cli.action.stop(); - - removeSync(state.cache); - - this.warn(`Version ${state.updateVersion} has been installed.`); - - await this.restartRunningProcessPrompt(this.getProcessName(flags.network), !flags.restart); - } + public static description = "Update the MultiSignature server installation"; + + public static flags: CommandFlags = { + ...BaseCommand.flagsConfiguration, + force: flags.boolean({ + description: "force an update", + }), + restart: flags.boolean({ + description: "restart all running processes", + allowNo: true, + }), + }; + + public async run(): Promise { + const state = await checkForUpdates(this); + + if (!state.ready) { + this.log(`You already have the latest version (${state.currentVersion})`); + + return; + } + + const { flags } = this.parse(UpdateCommand); + + if (flags.force) { + return this.performUpdate(flags, state); + } + + try { + this.warn( + `${state.name} update available from ${Chalk.greenBright(state.currentVersion)} to ${Chalk.greenBright( + state.updateVersion, + )}.`, + ); + + await confirm("Would you like to update?", async () => { + try { + await this.performUpdate(flags, state); + } catch (err) { + this.error(err.message); + } finally { + cli.action.stop(); + } + }); + } catch (err) { + this.error(err.message); + } + } + + private async performUpdate(flags: CommandFlags, state: Record): Promise { + cli.action.start(`Updating from ${state.currentVersion} to ${state.updateVersion}`); + + await installFromChannel(state.name, state.updateVersion); + + cli.action.stop(); + + removeSync(state.cache); + + this.warn(`Version ${state.updateVersion} has been installed.`); + + await this.restartRunningProcessPrompt(this.getProcessName(flags.network), !flags.restart); + } } diff --git a/src/helpers/prompts.ts b/src/helpers/prompts.ts index 5f2c904..491df27 100644 --- a/src/helpers/prompts.ts +++ b/src/helpers/prompts.ts @@ -1,17 +1,17 @@ import prompts from "prompts"; export async function confirm(message: string, yesCallback: any, noCallback?: any): Promise { - const { confirm } = await prompts([ - { - type: "confirm", - name: "confirm", - message, - }, - ]); + const { confirm } = await prompts([ + { + type: "confirm", + name: "confirm", + message, + }, + ]); - if (confirm) { - await yesCallback(); - } else if (noCallback) { - await noCallback(); - } + if (confirm) { + await yesCallback(); + } else if (noCallback) { + await noCallback(); + } } diff --git a/src/helpers/update.ts b/src/helpers/update.ts index 7b0d957..8ec4874 100644 --- a/src/helpers/update.ts +++ b/src/helpers/update.ts @@ -8,83 +8,83 @@ import { join } from "path"; import semver from "semver"; async function getLatestVersion(name: string): Promise { - try { - const version: string = await latestVersion(name); + try { + const version: string = await latestVersion(name); - return version; - } catch (error) { - return undefined; - } + return version; + } catch (error) { + return undefined; + } } function ensureCacheFile(config: IConfig): string { - ensureDirSync(config.cacheDir); + ensureDirSync(config.cacheDir); - const fileName = join(config.cacheDir, "update"); + const fileName = join(config.cacheDir, "update"); - closeSync(openSync(fileName, "w")); + closeSync(openSync(fileName, "w")); - return fileName; + return fileName; } export async function installFromChannel(pkg, tag) { - const { stdout, stderr } = await sync(`yarn global add ${pkg}@${tag}`, { shell: true }); + const { stdout, stderr } = sync(`yarn global add ${pkg}@${tag}`, { shell: true }); - if (stderr) { - console.error(stderr); - } + if (stderr) { + console.error(stderr); + } - console.log(stdout); + console.log(stdout); } export function needsRefresh(config: IConfig): boolean { - const cacheFile: string = ensureCacheFile(config); + const cacheFile: string = ensureCacheFile(config); - try { - const { mtime } = statSync(cacheFile); - const staleAt: Date = new Date(mtime.valueOf() + 1000 * 60 * 60 * 24 * 1); + try { + const { mtime } = statSync(cacheFile); + const staleAt: Date = new Date(mtime.valueOf() + 1000 * 60 * 60 * 24 * 1); - return staleAt < new Date(); - } catch (err) { - return true; - } + return staleAt < new Date(); + } catch (err) { + return true; + } } export async function checkForUpdates({ config, error, warn }): Promise { - const state = { - ready: false, - name: config.name, - currentVersion: config.version, - }; - - try { - const cacheFile: string = ensureCacheFile(config); - - cli.action.start(`Checking for updates`); - const latestVersion = await getLatestVersion(state.name); - cli.action.stop(); - - if (latestVersion === undefined) { - error(`We were unable to find any releases.`); - - return state; - } - - if (semver.gt(latestVersion, config.version)) { - return { - ...state, - ...{ - ready: true, - updateVersion: latestVersion, - cache: cacheFile, - }, - }; - } - } catch (err) { - error(err.message); - } finally { - cli.action.stop(); - } - - return state; + const state = { + ready: false, + name: config.name, + currentVersion: config.version, + }; + + try { + const cacheFile: string = ensureCacheFile(config); + + cli.action.start(`Checking for updates`); + const latestVersion = await getLatestVersion(state.name); + cli.action.stop(); + + if (latestVersion === undefined) { + error(`We were unable to find any releases.`); + + return state; + } + + if (semver.gt(latestVersion, config.version)) { + return { + ...state, + ...{ + ready: true, + updateVersion: latestVersion, + cache: cacheFile, + }, + }; + } + } catch (err) { + error(err.message); + } finally { + cli.action.stop(); + } + + return state; } diff --git a/src/hooks/command_not_found/suggest.ts b/src/hooks/command_not_found/suggest.ts index 4fee527..43e3ab2 100644 --- a/src/hooks/command_not_found/suggest.ts +++ b/src/hooks/command_not_found/suggest.ts @@ -4,39 +4,40 @@ import { Hook } from "@oclif/config"; import Chalk from "chalk"; import * as Levenshtein from "fast-levenshtein"; import minBy from "lodash.minby"; + import { confirm } from "../../helpers/prompts"; function closest(commandIDs: string[], cmd: string) { - return minBy(commandIDs, c => Levenshtein.get(cmd, c))!; + return minBy(commandIDs, (c) => Levenshtein.get(cmd, c))!; } -export const init: Hook<"init"> = async function(opts) { - const commandIDs = opts.config.commandIDs; - - if (!commandIDs.length) { - return; - } - - let binHelp = `${opts.config.bin} help`; - const idSplit = opts.id.split(":"); - if (await opts.config.findTopic(idSplit[0])) { - // if valid topic, update binHelp with topic - binHelp = `${binHelp} ${idSplit[0]}`; - } - - const suggestion: string = closest(commandIDs, opts.id); - this.warn(`${Chalk.redBright(opts.id)} is not a ${opts.config.bin} command.`); - - await confirm( - `Did you mean ${Chalk.blueBright(suggestion)}?`, - async () => { - try { - const argv = process.argv; - await this.config.runCommand(suggestion, argv.slice(3, argv.length)); - } catch (err) { - this.error(err.message); - } - }, - this.error(`Run ${Chalk.blueBright(binHelp)} for a list of available commands.`, { exit: 127 }), - ); +export const init: Hook<"init"> = async function (opts) { + const commandIDs = opts.config.commandIDs; + + if (!commandIDs.length) { + return; + } + + let binHelp = `${opts.config.bin} help`; + const idSplit = opts.id.split(":"); + if (opts.config.findTopic(idSplit[0])) { + // if valid topic, update binHelp with topic + binHelp = `${binHelp} ${idSplit[0]}`; + } + + const suggestion: string = closest(commandIDs, opts.id); + this.warn(`${Chalk.redBright(opts.id)} is not a ${opts.config.bin} command.`); + + await confirm( + `Did you mean ${Chalk.blueBright(suggestion)}?`, + async () => { + try { + const argv = process.argv; + await this.config.runCommand(suggestion, argv.slice(3, argv.length)); + } catch (err) { + this.error(err.message); + } + }, + this.error(`Run ${Chalk.blueBright(binHelp)} for a list of available commands.`, { exit: 127 }), + ); }; diff --git a/src/hooks/init/update.ts b/src/hooks/init/update.ts index 6fe44c8..765d0fd 100644 --- a/src/hooks/init/update.ts +++ b/src/hooks/init/update.ts @@ -1,30 +1,31 @@ import { Hook } from "@oclif/config"; import Chalk from "chalk"; import cli from "cli-ux"; + import { checkForUpdates, needsRefresh } from "../../helpers/update"; // tslint:disable-next-line:only-arrow-functions -export const init: Hook<"init"> = async function({ id, config }) { - if (id === "update") { - return; - } +export const init: Hook<"init"> = async function ({ id, config }) { + if (id === "update") { + return; + } - if (!needsRefresh(config)) { - return; - } + if (!needsRefresh(config)) { + return; + } - const state = await checkForUpdates(this); + const state = await checkForUpdates(this); - if (!state.ready) { - this.warn( - `${state.name} update available from ${Chalk.greenBright(state.currentVersion)} to ${Chalk.greenBright( - state.updateVersion, - )}. Review the latest release and run "multisig-server update" once you wish to update.`, - ); + if (!state.ready) { + this.warn( + `${state.name} update available from ${Chalk.greenBright(state.currentVersion)} to ${Chalk.greenBright( + state.updateVersion, + )}. Review the latest release and run "multisig-server update" once you wish to update.`, + ); - await cli.url( - `Click here to read the changelog for ${state.currentVersion}.`, - `https://github.com/ARKEcosystem/multisig-server/blob/master/CHANGELOG.md`, - ); - } + cli.url( + `Click here to read the changelog for ${state.currentVersion}.`, + `https://github.com/ARKEcosystem/multisig-server/blob/master/CHANGELOG.md`, + ); + } }; diff --git a/src/utils.ts b/src/utils.ts index 7ef2b1e..22cc75a 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,12 +1,12 @@ import Table from "cli-table3"; export function renderTable(head: string[], callback: any): void { - const table = new Table({ - head, - chars: { mid: "", "left-mid": "", "mid-mid": "", "right-mid": "" }, - }); + const table = new Table({ + head, + chars: { mid: "", "left-mid": "", "mid-mid": "", "right-mid": "" }, + }); - callback(table); + callback(table); - console.log(table.toString()); + console.log(table.toString()); } diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json new file mode 100644 index 0000000..5d4fad2 --- /dev/null +++ b/tsconfig.eslint.json @@ -0,0 +1,29 @@ +{ + "extends": "@sindresorhus/tsconfig", + "compilerOptions": { + "declaration": true, + "emitDecoratorMetadata": true, + "esModuleInterop": true, + "experimentalDecorators": true, + "forceConsistentCasingInFileNames": true, + "lib": ["es2019", "dom"], + "module": "commonjs", + "moduleResolution": "node", + "newLine": "lf", + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noImplicitAny": false, + "noImplicitReturns": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "outDir": "dist", + "pretty": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "stripInternal": true, + "target": "es2019" + }, + "exclude": ["dist"] +} diff --git a/tsconfig.json b/tsconfig.json index 49a46fa..7572100 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,21 +1,30 @@ { - "extends": "@sindresorhus/tsconfig", - "compilerOptions": { - "alwaysStrict": false, - "esModuleInterop": true, - "incremental": true, - "lib": ["es2018"], - "module": "commonjs", - "moduleResolution": "node", - "noUnusedLocals": true, - "noUnusedParameters": false, - "outDir": "dist", - "resolveJsonModule": true, - "sourceMap": true, - "strict": false, - "target": "es2018", - "typeRoots": ["node_modules/@types"] - }, - "include": ["src/**/**.ts"], - "exclude": ["node_modules", "**/*.spec.ts", "**/*.test.ts"] + "extends": "@sindresorhus/tsconfig", + "compilerOptions": { + "declaration": true, + "emitDecoratorMetadata": true, + "esModuleInterop": true, + "experimentalDecorators": true, + "forceConsistentCasingInFileNames": true, + "lib": ["es2019", "dom"], + "module": "commonjs", + "moduleResolution": "node", + "newLine": "lf", + "noEmitOnError": true, + "noFallthroughCasesInSwitch": true, + "noImplicitAny": false, + "noImplicitReturns": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "outDir": "dist", + "pretty": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "stripInternal": true, + "target": "es2019" + }, + "include": ["src/**/**.ts"], + "exclude": ["node_modules", "**/*.spec.ts", "**/*.test.ts"] } diff --git a/tslint-config.json b/tslint-config.json deleted file mode 100644 index 856f27d..0000000 --- a/tslint-config.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "exclude": ["node_modules", "dist"] -} diff --git a/tslint.json b/tslint.json deleted file mode 100644 index e8563dc..0000000 --- a/tslint.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": ["tslint:recommended", "tslint-config-prettier"], - "rules": { - "interface-name": false, - "no-console": false, - "no-default-export": true, - "no-shadowed-variable": false, - "object-literal-sort-keys": false, - "radix": false - } -} diff --git a/yarn.lock b/yarn.lock index e40beb1..03264c7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -387,76 +387,6 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@evocateur/libnpmaccess@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845" - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - npm-package-arg "^6.1.0" - -"@evocateur/libnpmpublish@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz#55df09d2dca136afba9c88c759ca272198db9f1a" - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - aproba "^2.0.0" - figgy-pudding "^3.5.1" - get-stream "^4.0.0" - lodash.clonedeep "^4.5.0" - normalize-package-data "^2.4.0" - npm-package-arg "^6.1.0" - semver "^5.5.1" - ssri "^6.0.1" - -"@evocateur/npm-registry-fetch@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#8c4c38766d8d32d3200fcb0a83f064b57365ed66" - dependencies: - JSONStream "^1.3.4" - bluebird "^3.5.1" - figgy-pudding "^3.4.1" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - npm-package-arg "^6.1.0" - safe-buffer "^5.1.2" - -"@evocateur/pacote@^9.6.3": - version "9.6.5" - resolved "https://registry.yarnpkg.com/@evocateur/pacote/-/pacote-9.6.5.tgz#33de32ba210b6f17c20ebab4d497efc6755f4ae5" - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - bluebird "^3.5.3" - cacache "^12.0.3" - chownr "^1.1.2" - figgy-pudding "^3.5.1" - get-stream "^4.1.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - make-fetch-happen "^5.0.0" - minimatch "^3.0.4" - minipass "^2.3.5" - mississippi "^3.0.0" - mkdirp "^0.5.1" - normalize-package-data "^2.5.0" - npm-package-arg "^6.1.0" - npm-packlist "^1.4.4" - npm-pick-manifest "^3.0.0" - osenv "^0.1.5" - promise-inflight "^1.0.1" - promise-retry "^1.1.1" - protoduck "^5.0.1" - rimraf "^2.6.3" - safe-buffer "^5.2.0" - semver "^5.7.0" - ssri "^6.0.1" - tar "^4.4.10" - unique-filename "^1.1.1" - which "^1.3.1" - "@hapi/accept@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-5.0.1.tgz#068553e867f0f63225a506ed74e899441af53e10" @@ -977,658 +907,6 @@ dependencies: execa "^4.0.0" -"@lerna/add@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.21.0.tgz#27007bde71cc7b0a2969ab3c2f0ae41578b4577b" - integrity sha512-vhUXXF6SpufBE1EkNEXwz1VLW03f177G9uMOFMQkp6OJ30/PWg4Ekifuz9/3YfgB2/GH8Tu4Lk3O51P2Hskg/A== - dependencies: - "@evocateur/pacote" "^9.6.3" - "@lerna/bootstrap" "3.21.0" - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - npm-package-arg "^6.1.0" - p-map "^2.1.0" - semver "^6.2.0" - -"@lerna/bootstrap@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.21.0.tgz#bcd1b651be5b0970b20d8fae04c864548123aed6" - integrity sha512-mtNHlXpmvJn6JTu0KcuTTPl2jLsDNud0QacV/h++qsaKbhAaJr/FElNZ5s7MwZFUM3XaDmvWzHKaszeBMHIbBw== - dependencies: - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/has-npm-version" "3.16.5" - "@lerna/npm-install" "3.16.5" - "@lerna/package-graph" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.16.5" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/symlink-binary" "3.17.0" - "@lerna/symlink-dependencies" "3.17.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - get-port "^4.2.0" - multimatch "^3.0.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - p-finally "^1.0.0" - p-map "^2.1.0" - p-map-series "^1.0.0" - p-waterfall "^1.0.0" - read-package-tree "^5.1.6" - semver "^6.2.0" - -"@lerna/changed@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.21.0.tgz#108e15f679bfe077af500f58248c634f1044ea0b" - integrity sha512-hzqoyf8MSHVjZp0gfJ7G8jaz+++mgXYiNs9iViQGA8JlN/dnWLI5sWDptEH3/B30Izo+fdVz0S0s7ydVE3pWIw== - dependencies: - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.21.0" - "@lerna/listable" "3.18.5" - "@lerna/output" "3.13.0" - -"@lerna/check-working-tree@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-3.16.5.tgz#b4f8ae61bb4523561dfb9f8f8d874dd46bb44baa" - dependencies: - "@lerna/collect-uncommitted" "3.16.5" - "@lerna/describe-ref" "3.16.5" - "@lerna/validation-error" "3.13.0" - -"@lerna/child-process@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.16.5.tgz#38fa3c18064aa4ac0754ad80114776a7b36a69b2" - dependencies: - chalk "^2.3.1" - execa "^1.0.0" - strong-log-transformer "^2.0.0" - -"@lerna/clean@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.21.0.tgz#c0b46b5300cc3dae2cda3bec14b803082da3856d" - integrity sha512-b/L9l+MDgE/7oGbrav6rG8RTQvRiZLO1zTcG17zgJAAuhlsPxJExMlh2DFwJEVi2les70vMhHfST3Ue1IMMjpg== - dependencies: - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/rimraf-dir" "3.16.5" - p-map "^2.1.0" - p-map-series "^1.0.0" - p-waterfall "^1.0.0" - -"@lerna/cli@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.18.5.tgz#c90c461542fcd35b6d5b015a290fb0dbfb41d242" - dependencies: - "@lerna/global-options" "3.13.0" - dedent "^0.7.0" - npmlog "^4.1.2" - yargs "^14.2.2" - -"@lerna/collect-uncommitted@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-3.16.5.tgz#a494d61aac31cdc7aec4bbe52c96550274132e63" - dependencies: - "@lerna/child-process" "3.16.5" - chalk "^2.3.1" - figgy-pudding "^3.5.1" - npmlog "^4.1.2" - -"@lerna/collect-updates@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.20.0.tgz#62f9d76ba21a25b7d9fbf31c02de88744a564bd1" - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/describe-ref" "3.16.5" - minimatch "^3.0.4" - npmlog "^4.1.2" - slash "^2.0.0" - -"@lerna/command@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.21.0.tgz#9a2383759dc7b700dacfa8a22b2f3a6e190121f7" - integrity sha512-T2bu6R8R3KkH5YoCKdutKv123iUgUbW8efVjdGCDnCMthAQzoentOJfDeodBwn0P2OqCl3ohsiNVtSn9h78fyQ== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/package-graph" "3.18.5" - "@lerna/project" "3.21.0" - "@lerna/validation-error" "3.13.0" - "@lerna/write-log-file" "3.13.0" - clone-deep "^4.0.1" - dedent "^0.7.0" - execa "^1.0.0" - is-ci "^2.0.0" - npmlog "^4.1.2" - -"@lerna/conventional-commits@3.22.0": - version "3.22.0" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.22.0.tgz#2798f4881ee2ef457bdae027ab7d0bf0af6f1e09" - integrity sha512-z4ZZk1e8Mhz7+IS8NxHr64wyklHctCJyWpJKEZZPJiLFJ8yKto/x38O80R10pIzC0rr8Sy/OsjSH4bl0TbbgqA== - dependencies: - "@lerna/validation-error" "3.13.0" - conventional-changelog-angular "^5.0.3" - conventional-changelog-core "^3.1.6" - conventional-recommended-bump "^5.0.0" - fs-extra "^8.1.0" - get-stream "^4.0.0" - lodash.template "^4.5.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - pify "^4.0.1" - semver "^6.2.0" - -"@lerna/create-symlink@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.16.2.tgz#412cb8e59a72f5a7d9463e4e4721ad2070149967" - dependencies: - "@zkochan/cmd-shim" "^3.1.0" - fs-extra "^8.1.0" - npmlog "^4.1.2" - -"@lerna/create@3.22.0": - version "3.22.0" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.22.0.tgz#d6bbd037c3dc5b425fe5f6d1b817057c278f7619" - integrity sha512-MdiQQzCcB4E9fBF1TyMOaAEz9lUjIHp1Ju9H7f3lXze5JK6Fl5NYkouAvsLgY6YSIhXMY8AHW2zzXeBDY4yWkw== - dependencies: - "@evocateur/pacote" "^9.6.3" - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.21.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/validation-error" "3.13.0" - camelcase "^5.0.0" - dedent "^0.7.0" - fs-extra "^8.1.0" - globby "^9.2.0" - init-package-json "^1.10.3" - npm-package-arg "^6.1.0" - p-reduce "^1.0.0" - pify "^4.0.1" - semver "^6.2.0" - slash "^2.0.0" - validate-npm-package-license "^3.0.3" - validate-npm-package-name "^3.0.0" - whatwg-url "^7.0.0" - -"@lerna/describe-ref@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-3.16.5.tgz#a338c25aaed837d3dc70b8a72c447c5c66346ac0" - dependencies: - "@lerna/child-process" "3.16.5" - npmlog "^4.1.2" - -"@lerna/diff@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.21.0.tgz#e6df0d8b9916167ff5a49fcb02ac06424280a68d" - integrity sha512-5viTR33QV3S7O+bjruo1SaR40m7F2aUHJaDAC7fL9Ca6xji+aw1KFkpCtVlISS0G8vikUREGMJh+c/VMSc8Usw== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.21.0" - "@lerna/validation-error" "3.13.0" - npmlog "^4.1.2" - -"@lerna/exec@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.21.0.tgz#17f07533893cb918a17b41bcc566dc437016db26" - integrity sha512-iLvDBrIE6rpdd4GIKTY9mkXyhwsJ2RvQdB9ZU+/NhR3okXfqKc6py/24tV111jqpXTtZUW6HNydT4dMao2hi1Q== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/profiler" "3.20.0" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - p-map "^2.1.0" - -"@lerna/filter-options@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.20.0.tgz#0f0f5d5a4783856eece4204708cc902cbc8af59b" - dependencies: - "@lerna/collect-updates" "3.20.0" - "@lerna/filter-packages" "3.18.0" - dedent "^0.7.0" - figgy-pudding "^3.5.1" - npmlog "^4.1.2" - -"@lerna/filter-packages@3.18.0": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.18.0.tgz#6a7a376d285208db03a82958cfb8172e179b4e70" - dependencies: - "@lerna/validation-error" "3.13.0" - multimatch "^3.0.0" - npmlog "^4.1.2" - -"@lerna/get-npm-exec-opts@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.13.0.tgz#d1b552cb0088199fc3e7e126f914e39a08df9ea5" - dependencies: - npmlog "^4.1.2" - -"@lerna/get-packed@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-3.16.0.tgz#1b316b706dcee86c7baa55e50b087959447852ff" - dependencies: - fs-extra "^8.1.0" - ssri "^6.0.1" - tar "^4.4.8" - -"@lerna/github-client@3.22.0": - version "3.22.0" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-3.22.0.tgz#5d816aa4f76747ed736ae64ff962b8f15c354d95" - integrity sha512-O/GwPW+Gzr3Eb5bk+nTzTJ3uv+jh5jGho9BOqKlajXaOkMYGBELEAqV5+uARNGWZFvYAiF4PgqHb6aCUu7XdXg== - dependencies: - "@lerna/child-process" "3.16.5" - "@octokit/plugin-enterprise-rest" "^6.0.1" - "@octokit/rest" "^16.28.4" - git-url-parse "^11.1.2" - npmlog "^4.1.2" - -"@lerna/gitlab-client@3.15.0": - version "3.15.0" - resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz#91f4ec8c697b5ac57f7f25bd50fe659d24aa96a6" - dependencies: - node-fetch "^2.5.0" - npmlog "^4.1.2" - whatwg-url "^7.0.0" - -"@lerna/global-options@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.13.0.tgz#217662290db06ad9cf2c49d8e3100ee28eaebae1" - -"@lerna/has-npm-version@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-3.16.5.tgz#ab83956f211d8923ea6afe9b979b38cc73b15326" - dependencies: - "@lerna/child-process" "3.16.5" - semver "^6.2.0" - -"@lerna/import@3.22.0": - version "3.22.0" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.22.0.tgz#1a5f0394f38e23c4f642a123e5e1517e70d068d2" - integrity sha512-uWOlexasM5XR6tXi4YehODtH9Y3OZrFht3mGUFFT3OIl2s+V85xIGFfqFGMTipMPAGb2oF1UBLL48kR43hRsOg== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.21.0" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/validation-error" "3.13.0" - dedent "^0.7.0" - fs-extra "^8.1.0" - p-map-series "^1.0.0" - -"@lerna/info@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/info/-/info-3.21.0.tgz#76696b676fdb0f35d48c83c63c1e32bb5e37814f" - integrity sha512-0XDqGYVBgWxUquFaIptW2bYSIu6jOs1BtkvRTWDDhw4zyEdp6q4eaMvqdSap1CG+7wM5jeLCi6z94wS0AuiuwA== - dependencies: - "@lerna/command" "3.21.0" - "@lerna/output" "3.13.0" - envinfo "^7.3.1" - -"@lerna/init@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.21.0.tgz#1e810934dc8bf4e5386c031041881d3b4096aa5c" - integrity sha512-6CM0z+EFUkFfurwdJCR+LQQF6MqHbYDCBPyhu/d086LRf58GtYZYj49J8mKG9ktayp/TOIxL/pKKjgLD8QBPOg== - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/command" "3.21.0" - fs-extra "^8.1.0" - p-map "^2.1.0" - write-json-file "^3.2.0" - -"@lerna/link@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.21.0.tgz#8be68ff0ccee104b174b5bbd606302c2f06e9d9b" - integrity sha512-tGu9GxrX7Ivs+Wl3w1+jrLi1nQ36kNI32dcOssij6bg0oZ2M2MDEFI9UF2gmoypTaN9uO5TSsjCFS7aR79HbdQ== - dependencies: - "@lerna/command" "3.21.0" - "@lerna/package-graph" "3.18.5" - "@lerna/symlink-dependencies" "3.17.0" - p-map "^2.1.0" - slash "^2.0.0" - -"@lerna/list@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.21.0.tgz#42f76fafa56dea13b691ec8cab13832691d61da2" - integrity sha512-KehRjE83B1VaAbRRkRy6jLX1Cin8ltsrQ7FHf2bhwhRHK0S54YuA6LOoBnY/NtA8bHDX/Z+G5sMY78X30NS9tg== - dependencies: - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/listable" "3.18.5" - "@lerna/output" "3.13.0" - -"@lerna/listable@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.18.5.tgz#e82798405b5ed8fc51843c8ef1e7a0e497388a1a" - dependencies: - "@lerna/query-graph" "3.18.5" - chalk "^2.3.1" - columnify "^1.5.4" - -"@lerna/log-packed@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.16.0.tgz#f83991041ee77b2495634e14470b42259fd2bc16" - dependencies: - byte-size "^5.0.1" - columnify "^1.5.4" - has-unicode "^2.0.1" - npmlog "^4.1.2" - -"@lerna/npm-conf@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.16.0.tgz#1c10a89ae2f6c2ee96962557738685300d376827" - dependencies: - config-chain "^1.1.11" - pify "^4.0.1" - -"@lerna/npm-dist-tag@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.18.5.tgz#9ef9abb7c104077b31f6fab22cc73b314d54ac55" - dependencies: - "@evocateur/npm-registry-fetch" "^4.0.0" - "@lerna/otplease" "3.18.5" - figgy-pudding "^3.5.1" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - -"@lerna/npm-install@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.16.5.tgz#d6bfdc16f81285da66515ae47924d6e278d637d3" - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/get-npm-exec-opts" "3.13.0" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - signal-exit "^3.0.2" - write-pkg "^3.1.0" - -"@lerna/npm-publish@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.18.5.tgz#240e4039959fd9816b49c5b07421e11b5cb000af" - dependencies: - "@evocateur/libnpmpublish" "^1.2.2" - "@lerna/otplease" "3.18.5" - "@lerna/run-lifecycle" "3.16.2" - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - pify "^4.0.1" - read-package-json "^2.0.13" - -"@lerna/npm-run-script@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.16.5.tgz#9c2ec82453a26c0b46edc0bb7c15816c821f5c15" - dependencies: - "@lerna/child-process" "3.16.5" - "@lerna/get-npm-exec-opts" "3.13.0" - npmlog "^4.1.2" - -"@lerna/otplease@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-3.18.5.tgz#b77b8e760b40abad9f7658d988f3ea77d4fd0231" - dependencies: - "@lerna/prompt" "3.18.5" - figgy-pudding "^3.5.1" - -"@lerna/output@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.13.0.tgz#3ded7cc908b27a9872228a630d950aedae7a4989" - dependencies: - npmlog "^4.1.2" - -"@lerna/pack-directory@3.16.4": - version "3.16.4" - resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-3.16.4.tgz#3eae5f91bdf5acfe0384510ed53faddc4c074693" - dependencies: - "@lerna/get-packed" "3.16.0" - "@lerna/package" "3.16.0" - "@lerna/run-lifecycle" "3.16.2" - figgy-pudding "^3.5.1" - npm-packlist "^1.4.4" - npmlog "^4.1.2" - tar "^4.4.10" - temp-write "^3.4.0" - -"@lerna/package-graph@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.18.5.tgz#c740e2ea3578d059e551633e950690831b941f6b" - dependencies: - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/validation-error" "3.13.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - semver "^6.2.0" - -"@lerna/package@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.16.0.tgz#7e0a46e4697ed8b8a9c14d59c7f890e0d38ba13c" - dependencies: - load-json-file "^5.3.0" - npm-package-arg "^6.1.0" - write-pkg "^3.1.0" - -"@lerna/prerelease-id-from-version@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz#b24bfa789f5e1baab914d7b08baae9b7bd7d83a1" - dependencies: - semver "^6.2.0" - -"@lerna/profiler@3.20.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-3.20.0.tgz#0f6dc236f4ea8f9ea5f358c6703305a4f32ad051" - dependencies: - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npmlog "^4.1.2" - upath "^1.2.0" - -"@lerna/project@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.21.0.tgz#5d784d2d10c561a00f20320bcdb040997c10502d" - integrity sha512-xT1mrpET2BF11CY32uypV2GPtPVm6Hgtha7D81GQP9iAitk9EccrdNjYGt5UBYASl4CIDXBRxwmTTVGfrCx82A== - dependencies: - "@lerna/package" "3.16.0" - "@lerna/validation-error" "3.13.0" - cosmiconfig "^5.1.0" - dedent "^0.7.0" - dot-prop "^4.2.0" - glob-parent "^5.0.0" - globby "^9.2.0" - load-json-file "^5.3.0" - npmlog "^4.1.2" - p-map "^2.1.0" - resolve-from "^4.0.0" - write-json-file "^3.2.0" - -"@lerna/prompt@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.18.5.tgz#628cd545f225887d060491ab95df899cfc5218a1" - dependencies: - inquirer "^6.2.0" - npmlog "^4.1.2" - -"@lerna/publish@3.22.1": - version "3.22.1" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.22.1.tgz#b4f7ce3fba1e9afb28be4a1f3d88222269ba9519" - integrity sha512-PG9CM9HUYDreb1FbJwFg90TCBQooGjj+n/pb3gw/eH5mEDq0p8wKdLFe0qkiqUkm/Ub5C8DbVFertIo0Vd0zcw== - dependencies: - "@evocateur/libnpmaccess" "^3.1.2" - "@evocateur/npm-registry-fetch" "^4.0.0" - "@evocateur/pacote" "^9.6.3" - "@lerna/check-working-tree" "3.16.5" - "@lerna/child-process" "3.16.5" - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.21.0" - "@lerna/describe-ref" "3.16.5" - "@lerna/log-packed" "3.16.0" - "@lerna/npm-conf" "3.16.0" - "@lerna/npm-dist-tag" "3.18.5" - "@lerna/npm-publish" "3.18.5" - "@lerna/otplease" "3.18.5" - "@lerna/output" "3.13.0" - "@lerna/pack-directory" "3.16.4" - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.18.5" - "@lerna/pulse-till-done" "3.13.0" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - "@lerna/version" "3.22.1" - figgy-pudding "^3.5.1" - fs-extra "^8.1.0" - npm-package-arg "^6.1.0" - npmlog "^4.1.2" - p-finally "^1.0.0" - p-map "^2.1.0" - p-pipe "^1.2.0" - semver "^6.2.0" - -"@lerna/pulse-till-done@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-3.13.0.tgz#c8e9ce5bafaf10d930a67d7ed0ccb5d958fe0110" - dependencies: - npmlog "^4.1.2" - -"@lerna/query-graph@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-3.18.5.tgz#df4830bb5155273003bf35e8dda1c32d0927bd86" - dependencies: - "@lerna/package-graph" "3.18.5" - figgy-pudding "^3.5.1" - -"@lerna/resolve-symlink@3.16.0": - version "3.16.0" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz#37fc7095fabdbcf317c26eb74e0d0bde8efd2386" - dependencies: - fs-extra "^8.1.0" - npmlog "^4.1.2" - read-cmd-shim "^1.0.1" - -"@lerna/rimraf-dir@3.16.5": - version "3.16.5" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.16.5.tgz#04316ab5ffd2909657aaf388ea502cb8c2f20a09" - dependencies: - "@lerna/child-process" "3.16.5" - npmlog "^4.1.2" - path-exists "^3.0.0" - rimraf "^2.6.2" - -"@lerna/run-lifecycle@3.16.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz#67b288f8ea964db9ea4fb1fbc7715d5bbb0bce00" - dependencies: - "@lerna/npm-conf" "3.16.0" - figgy-pudding "^3.5.1" - npm-lifecycle "^3.1.2" - npmlog "^4.1.2" - -"@lerna/run-topologically@3.18.5": - version "3.18.5" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-3.18.5.tgz#3cd639da20e967d7672cb88db0f756b92f2fdfc3" - dependencies: - "@lerna/query-graph" "3.18.5" - figgy-pudding "^3.5.1" - p-queue "^4.0.0" - -"@lerna/run@3.21.0": - version "3.21.0" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.21.0.tgz#2a35ec84979e4d6e42474fe148d32e5de1cac891" - integrity sha512-fJF68rT3veh+hkToFsBmUJ9MHc9yGXA7LSDvhziAojzOb0AI/jBDp6cEcDQyJ7dbnplba2Lj02IH61QUf9oW0Q== - dependencies: - "@lerna/command" "3.21.0" - "@lerna/filter-options" "3.20.0" - "@lerna/npm-run-script" "3.16.5" - "@lerna/output" "3.13.0" - "@lerna/profiler" "3.20.0" - "@lerna/run-topologically" "3.18.5" - "@lerna/timer" "3.13.0" - "@lerna/validation-error" "3.13.0" - p-map "^2.1.0" - -"@lerna/symlink-binary@3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.17.0.tgz#8f8031b309863814883d3f009877f82e38aef45a" - dependencies: - "@lerna/create-symlink" "3.16.2" - "@lerna/package" "3.16.0" - fs-extra "^8.1.0" - p-map "^2.1.0" - -"@lerna/symlink-dependencies@3.17.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.17.0.tgz#48d6360e985865a0e56cd8b51b308a526308784a" - dependencies: - "@lerna/create-symlink" "3.16.2" - "@lerna/resolve-symlink" "3.16.0" - "@lerna/symlink-binary" "3.17.0" - fs-extra "^8.1.0" - p-finally "^1.0.0" - p-map "^2.1.0" - p-map-series "^1.0.0" - -"@lerna/timer@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-3.13.0.tgz#bcd0904551db16e08364d6c18e5e2160fc870781" - -"@lerna/validation-error@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.13.0.tgz#c86b8f07c5ab9539f775bd8a54976e926f3759c3" - dependencies: - npmlog "^4.1.2" - -"@lerna/version@3.22.1": - version "3.22.1" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.22.1.tgz#9805a9247a47ee62d6b81bd9fa5fb728b24b59e2" - integrity sha512-PSGt/K1hVqreAFoi3zjD0VEDupQ2WZVlVIwesrE5GbrL2BjXowjCsTDPqblahDUPy0hp6h7E2kG855yLTp62+g== - dependencies: - "@lerna/check-working-tree" "3.16.5" - "@lerna/child-process" "3.16.5" - "@lerna/collect-updates" "3.20.0" - "@lerna/command" "3.21.0" - "@lerna/conventional-commits" "3.22.0" - "@lerna/github-client" "3.22.0" - "@lerna/gitlab-client" "3.15.0" - "@lerna/output" "3.13.0" - "@lerna/prerelease-id-from-version" "3.16.0" - "@lerna/prompt" "3.18.5" - "@lerna/run-lifecycle" "3.16.2" - "@lerna/run-topologically" "3.18.5" - "@lerna/validation-error" "3.13.0" - chalk "^2.3.1" - dedent "^0.7.0" - load-json-file "^5.3.0" - minimatch "^3.0.4" - npmlog "^4.1.2" - p-map "^2.1.0" - p-pipe "^1.2.0" - p-reduce "^1.0.0" - p-waterfall "^1.0.0" - semver "^6.2.0" - slash "^2.0.0" - temp-write "^3.4.0" - write-json-file "^3.2.0" - -"@lerna/write-log-file@3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.13.0.tgz#b78d9e4cfc1349a8be64d91324c4c8199e822a26" - dependencies: - npmlog "^4.1.2" - write-file-atomic "^2.3.0" - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - "@nodelib/fs.scandir@2.1.1": version "2.1.1" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.1.tgz#7fa8fed654939e1a39753d286b48b4836d00e0eb" @@ -1653,10 +931,6 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - "@nodelib/fs.walk@^1.2.1": version "1.2.2" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.2.tgz#6a6450c5e17012abd81450eb74949a4d970d2807" @@ -1898,89 +1172,6 @@ version "1.0.4" resolved "https://registry.yarnpkg.com/@oclif/screen/-/screen-1.0.4.tgz#b740f68609dfae8aa71c3a6cab15d816407ba493" -"@octokit/auth-token@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.0.tgz#b64178975218b99e4dfe948253f0673cbbb59d9f" - dependencies: - "@octokit/types" "^2.0.0" - -"@octokit/endpoint@^5.5.0": - version "5.5.2" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-5.5.2.tgz#ed19d01fe85ac58bc2b774661658f9e5429b8164" - dependencies: - "@octokit/types" "^2.0.0" - is-plain-object "^3.0.0" - universal-user-agent "^4.0.0" - -"@octokit/plugin-enterprise-rest@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz#e07896739618dab8da7d4077c658003775f95437" - integrity sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw== - -"@octokit/plugin-paginate-rest@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" - dependencies: - "@octokit/types" "^2.0.1" - -"@octokit/plugin-request-log@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e" - -"@octokit/plugin-rest-endpoint-methods@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" - dependencies: - "@octokit/types" "^2.0.1" - deprecation "^2.3.1" - -"@octokit/request-error@^1.0.1", "@octokit/request-error@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.0.4.tgz#15e1dc22123ba4a9a4391914d80ec1e5303a23be" - dependencies: - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^5.2.0": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.3.1.tgz#3a1ace45e6f88b1be4749c5da963b3a3b4a2f120" - dependencies: - "@octokit/endpoint" "^5.5.0" - "@octokit/request-error" "^1.0.1" - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - is-plain-object "^3.0.0" - node-fetch "^2.3.0" - once "^1.4.0" - universal-user-agent "^4.0.0" - -"@octokit/rest@^16.28.4": - version "16.43.1" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.1.tgz#3b11e7d1b1ac2bbeeb23b08a17df0b20947eda6b" - dependencies: - "@octokit/auth-token" "^2.4.0" - "@octokit/plugin-paginate-rest" "^1.1.1" - "@octokit/plugin-request-log" "^1.0.0" - "@octokit/plugin-rest-endpoint-methods" "2.4.0" - "@octokit/request" "^5.2.0" - "@octokit/request-error" "^1.0.2" - atob-lite "^2.0.0" - before-after-hook "^2.0.0" - btoa-lite "^1.0.0" - deprecation "^2.0.0" - lodash.get "^4.4.2" - lodash.set "^4.3.2" - lodash.uniq "^4.5.0" - octokit-pagination-methods "^1.1.0" - once "^1.4.0" - universal-user-agent "^4.0.0" - -"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.1.1.tgz#77e80d1b663c5f1f829e5377b728fa3c4fe5a97d" - dependencies: - "@types/node" ">= 8" - "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -2088,6 +1279,31 @@ version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" +"@types/eslint-plugin-prettier@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz#451b5e1e5f148a38dc41e9c5b61d45cd2e97af2c" + integrity sha512-6/UIuz99F0IvtDez4U3bRwAmN4VKnuw10Ibblf0iZhtNbmbonMSLqs/qqsXrGIAWvjy+vXqYwOljgtLhrETSMg== + dependencies: + "@types/eslint" "*" + +"@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/eslint@*", "@types/eslint@^7.2.0": + version "7.2.1" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.1.tgz#fcfbcccaecfb487b0fc5d44686807cc625f358b6" + integrity sha512-WjKivjZyeL65Qt8HLLGwyhC3NkhoPVgCvxPcCMb02k8fCSJH1vvDRefXmSHA4U9TcjOj024yCOxFgCPKC0gMXQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "0.0.45" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" + integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== + "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" @@ -2217,6 +1433,11 @@ resolved "https://registry.yarnpkg.com/@types/joi/-/joi-14.3.4.tgz#eed1e14cbb07716079c814138831a520a725a1e0" integrity sha512-1TQNDJvIKlgYXGNIABfgFp9y0FziDpuGrd799Q5RcnsDu+krD+eeW/0Fs5PHARvWWFelOhIG2OPCo6KbadBM4A== +"@types/json-schema@*", "@types/json-schema@^7.0.3": + version "7.0.5" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" + integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== + "@types/keyv@*": version "3.1.1" resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.1.tgz#e45a45324fca9dab716ab1230ee249c9fb52cfa7" @@ -2270,10 +1491,6 @@ version "11.11.6" resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a" -"@types/node@>= 8": - version "13.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.7.0.tgz#b417deda18cf8400f278733499ad5547ed1abec4" - "@types/node@^14.6.0": version "14.6.0" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.0.tgz#7d4411bf5157339337d7cff864d9ff45f177b499" @@ -2386,20 +1603,88 @@ dependencies: "@types/yargs-parser" "*" -"@zkochan/cmd-shim@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" +"@typescript-eslint/eslint-plugin@^3.9.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.10.1.tgz#7e061338a1383f59edc204c605899f93dc2e2c8f" + integrity sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ== + dependencies: + "@typescript-eslint/experimental-utils" "3.10.1" + debug "^4.1.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686" + integrity sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/types" "3.10.1" + "@typescript-eslint/typescript-estree" "3.10.1" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/experimental-utils@^2.5.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" + integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.34.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^3.9.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.10.1.tgz#1883858e83e8b442627e1ac6f408925211155467" + integrity sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "3.10.1" + "@typescript-eslint/types" "3.10.1" + "@typescript-eslint/typescript-estree" "3.10.1" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/types@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" + integrity sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ== + +"@typescript-eslint/typescript-estree@2.34.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" + integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg== dependencies: - is-windows "^1.0.0" - mkdirp-promise "^5.0.1" - mz "^2.5.0" + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" -JSONStream@^1.0.4, JSONStream@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" +"@typescript-eslint/typescript-estree@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.10.1.tgz#fd0061cc38add4fad45136d654408569f365b853" + integrity sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w== + dependencies: + "@typescript-eslint/types" "3.10.1" + "@typescript-eslint/visitor-keys" "3.10.1" + debug "^4.1.1" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@typescript-eslint/visitor-keys@3.10.1": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" + integrity sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ== dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" + eslint-visitor-keys "^1.1.0" abab@^2.0.3: version "2.0.3" @@ -2418,6 +1703,11 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" +acorn-jsx@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" + integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== + acorn-walk@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" @@ -2428,11 +1718,10 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== -agent-base@4, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - dependencies: - es6-promisify "^5.0.0" +acorn@^7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" + integrity sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w== agent-base@5: version "5.1.1" @@ -2446,18 +1735,6 @@ agent-base@6: dependencies: debug "4" -agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - dependencies: - es6-promisify "^5.0.0" - -agentkeepalive@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" - dependencies: - humanize-ms "^1.2.1" - aggregate-error@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.0.tgz#5b5a3c95e9095f311c9ab16c19fb4f3527cd3f79" @@ -2469,6 +1746,16 @@ ajv-keywords@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" +ajv@^6.10.0: + version "6.12.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" + integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ajv@^6.10.2, ajv@^6.5.5: version "6.10.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" @@ -2478,7 +1765,12 @@ ajv@^6.10.2, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-escapes@^3.1.0, ansi-escapes@^3.2.0: +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -2553,14 +1845,10 @@ anymatch@^3.0.3: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" -aproba@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -2601,32 +1889,10 @@ arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" -array-differ@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-2.1.0.tgz#4b9c1c3f14b906757082925769e8ab904f4801b1" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - -array-union@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -2635,10 +1901,6 @@ arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -2653,6 +1915,11 @@ assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + async-each@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" @@ -2666,10 +1933,6 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -atob-lite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" - atob@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" @@ -2783,10 +2046,6 @@ bcrypto@^5.2.0: bufio "~1.0.7" loady "~0.0.5" -before-after-hook@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" - better-sqlite3@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-7.1.0.tgz#4894d0fa4002bd7859a0a539577f14f24b245f6a" @@ -2833,10 +2092,6 @@ bl@^3.0.0: dependencies: readable-stream "^3.0.1" -bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: - version "3.5.5" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" - bn.js@^4.11.8, bn.js@^4.4.0: version "4.11.9" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" @@ -2930,10 +2185,6 @@ bstring@^0.3.9: loady "~0.0.1" nan "^2.13.1" -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -2953,48 +2204,12 @@ bufio@~1.0.7: resolved "https://registry.yarnpkg.com/bufio/-/bufio-1.0.7.tgz#b7f63a1369a0829ed64cc14edf0573b3e382a33e" integrity sha512-bd1dDQhiC+bEbEfg56IdBv7faWa6OipMs/AFFFvtFnB3wAYjlwQpQRZ0pm6ZkgtfL0pILRXhKxOiQj6UzoMR7A== -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -builtins@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - -byline@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - -byte-size@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" - bytebuffer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" dependencies: long "~3" -cacache@^12.0.0, cacache@^12.0.3: - version "12.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -3039,45 +2254,10 @@ cacheable-request@^7.0.1: normalize-url "^4.1.0" responselike "^2.0.0" -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - dependencies: - caller-callsite "^2.0.0" - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - camelcase-keys@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" @@ -3091,14 +2271,6 @@ camelcase@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -3125,7 +2297,7 @@ caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" dependencies: @@ -3161,10 +2333,6 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - chokidar@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.2.tgz#9c23ea40b01638439e0513864d362aeacc5ad058" @@ -3187,10 +2355,6 @@ chownr@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" -chownr@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -3230,12 +2394,6 @@ clear@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/clear/-/clear-0.1.0.tgz#b81b1e03437a716984fd7ac97c87d73bdfe7048a" -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - dependencies: - restore-cursor "^2.0.0" - cli-progress@^3.4.0: version "3.8.2" resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.8.2.tgz#abaf1fc6d6401351f16f068117a410554a0eb8c7" @@ -3341,18 +2499,6 @@ cli-ux@^5.4.10, cli-ux@^5.4.5: supports-hyperlinks "^2.1.0" tslib "^2.0.0" -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - cliui@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" @@ -3361,24 +2507,12 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" dependencies: mimic-response "^1.0.0" -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -3433,35 +2567,12 @@ colors@^1.1.2: version "1.3.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" -columnify@^1.5.4: - version "1.5.4" - resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" - dependencies: - strip-ansi "^3.0.0" - wcwidth "^1.0.0" - combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" dependencies: delayed-stream "~1.0.0" -commander@^2.12.1: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - -commander@~2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -compare-func@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" - dependencies: - array-ify "^1.0.0" - dot-prop "^3.0.0" - component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -3471,31 +2582,6 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -config-chain@^1.1.11: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -3504,94 +2590,6 @@ content-type@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" -conventional-changelog-angular@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz#299fdd43df5a1f095283ac16aeedfb0a682ecab0" - dependencies: - compare-func "^1.3.1" - q "^1.5.1" - -conventional-changelog-core@^3.1.6: - version "3.2.2" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-3.2.2.tgz#de41e6b4a71011a18bcee58e744f6f8f0e7c29c0" - dependencies: - conventional-changelog-writer "^4.0.5" - conventional-commits-parser "^3.0.2" - dateformat "^3.0.0" - get-pkg-repo "^1.0.0" - git-raw-commits "2.0.0" - git-remote-origin-url "^2.0.0" - git-semver-tags "^2.0.2" - lodash "^4.2.1" - normalize-package-data "^2.3.5" - q "^1.5.1" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - through2 "^3.0.0" - -conventional-changelog-preset-loader@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.1.1.tgz#65bb600547c56d5627d23135154bcd9a907668c4" - -conventional-changelog-writer@^4.0.5: - version "4.0.6" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.6.tgz#24db578ac8e7c89a409ef9bba12cf3c095990148" - dependencies: - compare-func "^1.3.1" - conventional-commits-filter "^2.0.2" - dateformat "^3.0.0" - handlebars "^4.1.0" - json-stringify-safe "^5.0.1" - lodash "^4.2.1" - meow "^4.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^3.0.0" - -conventional-commits-filter@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1" - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.3.tgz#c3f972fd4e056aa8b9b4f5f3d0e540da18bf396d" - dependencies: - JSONStream "^1.0.4" - is-text-path "^2.0.0" - lodash "^4.2.1" - meow "^4.0.0" - split2 "^2.0.0" - through2 "^3.0.0" - trim-off-newlines "^1.0.0" - -conventional-commits-parser@^3.0.3: - version "3.0.8" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.8.tgz#23310a9bda6c93c874224375e72b09fb275fe710" - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^5.0.0" - split2 "^2.0.0" - through2 "^3.0.0" - trim-off-newlines "^1.0.0" - -conventional-recommended-bump@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz#5af63903947b6e089e77767601cb592cabb106ba" - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.1.1" - conventional-commits-filter "^2.0.2" - conventional-commits-parser "^3.0.3" - git-raw-commits "2.0.0" - git-semver-tags "^2.0.3" - meow "^4.0.0" - q "^1.5.1" - convert-source-map@^1.1.0, convert-source-map@^1.4.0: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" @@ -3604,17 +2602,6 @@ convert-source-map@^1.6.0, convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -3623,15 +2610,6 @@ core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -cosmiconfig@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -3687,6 +2665,15 @@ cross-spawn@^7.0.1: shebang-command "^2.0.0" which "^2.0.1" +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" @@ -3703,22 +2690,6 @@ cssstyle@^2.2.0: dependencies: cssom "~0.3.6" -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" - -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - -dargs@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" - dependencies: - number-is-nan "^1.0.0" - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -3734,7 +2705,7 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -dateformat@^3.0.0, dateformat@^3.0.3: +dateformat@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" @@ -3747,13 +2718,7 @@ dayjs@^1.8.34: resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.8.34.tgz#d3ad33cc43d6b0f24cb8686b90aad2c653708069" integrity sha512-Olb+E6EoMvdPmAMq2QoucuyZycKHjTlBXmRx8Ada+wGtq4SIXuDCdtoaX4KkK0yjf1fJLnwXQURr8gQKWKaybw== -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1: +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" dependencies: @@ -3765,17 +2730,13 @@ debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@^3.1.0, debug@^3.2.6: +debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 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" - -decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: +decamelize-keys@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= @@ -3783,7 +2744,7 @@ decamelize-keys@^1.0.0, decamelize-keys@^1.1.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -3815,17 +2776,14 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" -deep-is@~0.1.3: +deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= deepmerge@^4.0.0: version "4.0.0" @@ -3836,12 +2794,6 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - dependencies: - clone "^1.0.2" - defer-to-connect@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.0.2.tgz#4bae758a314b034ae33902b5aac25a8dd6a8633e" @@ -3851,12 +2803,6 @@ defer-to-connect@^2.0.0: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.0.tgz#83d6b199db041593ac84d781b5222308ccf4c2c1" integrity sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg== -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - dependencies: - object-keys "^1.0.12" - define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" @@ -3905,14 +2851,6 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - detect-indent@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" @@ -3925,13 +2863,6 @@ detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" -dezalgo@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - dependencies: - asap "^2.0.0" - wrappy "1" - diff-sequences@^24.3.0: version "24.3.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" @@ -3946,23 +2877,19 @@ diff-sequences@^26.3.0: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.3.0.tgz#62a59b1b29ab7fd27cef2a33ae52abe73042d0a2" integrity sha512-5j5vdRcw3CNctePNYN0Wy2e/JbWT6cAYnXv5OuqPhDpyCGc0uLu2TK0zOCJWNB9kOIfYMSpIulRaDgIi4HJ6Ig== -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== - -dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - dependencies: - path-type "^3.0.0" - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" dependencies: path-type "^4.0.0" +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + domexception@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" @@ -3970,35 +2897,10 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -dot-prop@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" - dependencies: - is-obj "^1.0.0" - -dot-prop@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - dependencies: - is-obj "^1.0.0" - duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" -duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -4036,65 +2938,29 @@ emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - dependencies: - iconv-lite "~0.4.13" - -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" dependencies: once "^1.4.0" +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + env-paths@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" -envinfo@^7.3.1: - version "7.5.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.0.tgz#91410bb6db262fb4f1409bd506e9ff57e91023f4" - -err-code@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" dependencies: is-arrayish "^0.2.1" -es-abstract@^1.5.1: - version "1.13.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-keys "^1.0.12" - -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - dependencies: - es6-promise "^4.0.3" - escape-string-regexp@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -4121,22 +2987,139 @@ escodegen@^1.14.1: optionalDependencies: source-map "~0.6.1" +eslint-config-prettier@^6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz#f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1" + integrity sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA== + dependencies: + get-stdin "^6.0.0" + +eslint-plugin-jest@^23.20.0: + version "23.20.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-23.20.0.tgz#e1d69c75f639e99d836642453c4e75ed22da4099" + integrity sha512-+6BGQt85OREevBDWCvhqj1yYA4+BFK4XnRZSGJionuEYmcglMZYLNNBBemwzbqUAckURaHdJSBcjHPyrtypZOw== + dependencies: + "@typescript-eslint/experimental-utils" "^2.5.0" + +eslint-plugin-prettier@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz#168ab43154e2ea57db992a2cd097c828171f75c2" + integrity sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-plugin-simple-import-sort@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-5.0.3.tgz#9ae258ddada6efffc55e47a134afbd279eb31fc6" + integrity sha512-1rf3AWiHeWNCQdAq0iXNnlccnH1UDnelGgrPbjBBHE8d2hXVtOudcmy0vTF4hri3iJ0MKz8jBhmH6lJ0ZWZLHQ== + +eslint-scope@^5.0.0, eslint-scope@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" + integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^2.0.0, eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint@^7.7.0: + version "7.7.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.7.0.tgz#18beba51411927c4b64da0a8ceadefe4030d6073" + integrity sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.0" + eslint-utils "^2.1.0" + eslint-visitor-keys "^1.3.0" + espree "^7.2.0" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.19" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.2.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" + integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.3.0" + esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" +esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" +estraverse@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -eventemitter3@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" @@ -4262,14 +3245,6 @@ extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -4309,21 +3284,15 @@ fast-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" -fast-deep-equal@^3.1.3: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^3.0.3: version "3.0.4" @@ -4399,15 +3368,12 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== dependencies: - escape-string-regexp "^1.0.5" + flat-cache "^2.0.1" file-uri-to-path@1.0.0: version "1.0.0" @@ -4428,25 +3394,6 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - dependencies: - locate-path "^3.0.0" - find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -4454,17 +3401,24 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + flatstr@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/flatstr/-/flatstr-1.0.12.tgz#c2ba6a08173edbb6c9640e3055b95e287ceb5931" integrity sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw== -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== for-in@^1.0.2: version "1.0.2" @@ -4496,13 +3450,6 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -4523,14 +3470,6 @@ fs-extra@^7.0.0, fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-extra@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" @@ -4547,15 +3486,6 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.2.1" -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -4571,9 +3501,10 @@ fsevents@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= gauge@~2.7.3: version "2.7.4" @@ -4588,10 +3519,6 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -genfun@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" - gensync@^1.0.0-beta.1: version "1.0.0-beta.1" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" @@ -4600,23 +3527,10 @@ get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" -get-pkg-repo@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz#c73b489c06d80cc5536c2c853f9e05232056972d" - dependencies: - hosted-git-info "^2.1.4" - meow "^3.3.0" - normalize-package-data "^2.3.0" - parse-github-repo-url "^1.3.0" - through2 "^2.0.0" - -get-port@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== get-stream@^3.0.0: version "3.0.0" @@ -4644,56 +3558,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -git-raw-commits@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.0.tgz#d92addf74440c14bcc5c83ecce3fb7f8a79118b5" - dependencies: - dargs "^4.0.1" - lodash.template "^4.0.2" - meow "^4.0.0" - split2 "^2.0.0" - through2 "^2.0.0" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.2.tgz#f506ec07caade191ac0c8d5a21bdb8131b4934e3" - dependencies: - meow "^4.0.0" - semver "^5.5.0" - -git-semver-tags@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-2.0.3.tgz#48988a718acf593800f99622a952a77c405bfa34" - dependencies: - meow "^4.0.0" - semver "^6.0.0" - -git-up@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0" - dependencies: - is-ssh "^1.3.0" - parse-url "^5.0.0" - -git-url-parse@^11.1.2: - version "11.1.2" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.1.2.tgz#aff1a897c36cc93699270587bea3dbcbbb95de67" - dependencies: - git-up "^4.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - dependencies: - ini "^1.3.2" - github-from-package@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" @@ -4724,10 +3588,6 @@ glob-parent@^5.1.0: dependencies: is-glob "^4.0.1" -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" @@ -4739,10 +3599,29 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + globalyzer@^0.1.0: version "0.1.4" resolved "https://registry.yarnpkg.com/globalyzer/-/globalyzer-0.1.4.tgz#bc8e273afe1ac7c24eea8def5b802340c5cc534f" @@ -4772,19 +3651,6 @@ globby@^11.0.1: merge2 "^1.3.0" slash "^3.0.0" -globby@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" - globrex@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/globrex/-/globrex-0.1.2.tgz#dd5d9ec826232730cd6793a5e33a9302985e6098" @@ -4839,22 +3705,11 @@ growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" -handlebars@^4.1.0: - version "4.7.3" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.3.tgz#8ece2797826886cf8082d1726ff21d2a022550ee" - integrity sha512-SRGwSYuNfx8DwHD/6InAPzD6RgeruWLT+B8e8a7gGs8FWgHzlExpTFMEq2IA6QpAfOClpKHy6+8IqTjeBCu6Kg== - dependencies: - neo-async "^2.6.0" - optimist "^0.6.1" - source-map "^0.6.1" - optionalDependencies: - uglify-js "^3.1.4" - har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" -har-validator@~5.1.0, har-validator@~5.1.3: +har-validator@~5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== @@ -4879,11 +3734,7 @@ has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - -has-unicode@^2.0.0, has-unicode@^2.0.1: +has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -4914,12 +3765,6 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - dependencies: - function-bind "^1.1.1" - hash-base@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" @@ -4944,7 +3789,7 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: +hosted-git-info@^2.1.4: version "2.7.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" @@ -4959,10 +3804,6 @@ html-escaper@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.0.tgz#71e87f931de3fe09e56661ab9a29aadec707b491" -http-cache-semantics@^3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - http-cache-semantics@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz#495704773277eeef6e43f9ab2c2c7d259dda25c5" @@ -4978,13 +3819,6 @@ http-call@^5.1.2, http-call@^5.2.2: parse-json "^4.0.0" tunnel-agent "^0.6.0" -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - dependencies: - agent-base "4" - debug "3.1.0" - http-proxy-agent@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" @@ -5010,13 +3844,6 @@ http2-wrapper@^1.0.0-beta.5.0: quick-lru "^5.1.1" resolve-alpn "^1.0.0" -https-proxy-agent@^2.2.3: - version "2.2.4" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - https-proxy-agent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" @@ -5029,35 +3856,26 @@ human-signals@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - dependencies: - ms "^2.0.0" - hyperlinker@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hyperlinker/-/hyperlinker-1.0.0.tgz#23dc9e38a206b208ee49bc2d6c8ef47027df0c0e" -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" dependencies: safer-buffer ">= 2.1.2 < 3" -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - 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" dependencies: minimatch "^3.0.4" -ignore@^4.0.3: +ignore@^4.0.6: version "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.1: version "5.1.2" @@ -5068,19 +3886,13 @@ ignore@^5.1.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" +import-fresh@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" + parent-module "^1.0.0" + resolve-from "^4.0.0" import-local@^3.0.2: version "3.0.2" @@ -5093,13 +3905,7 @@ imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - dependencies: - repeating "^2.0.0" - -indent-string@^3.0.0, indent-string@^3.2.0: +indent-string@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" @@ -5108,10 +3914,6 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infer-owner@^1.0.3, infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -5123,49 +3925,14 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" -ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: +ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" -init-package-json@^1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" - dependencies: - glob "^7.1.1" - npm-package-arg "^4.0.0 || ^5.0.0 || ^6.0.0" - promzard "^0.3.0" - read "~1.0.1" - read-package-json "1 || 2" - semver "2.x || 3.x || 4 || 5" - validate-npm-package-license "^3.0.1" - validate-npm-package-name "^3.0.0" - -inquirer@^6.2.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" -ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - ipaddr.js@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -5196,10 +3963,6 @@ is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -5218,10 +3981,6 @@ is-data-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -5238,10 +3997,6 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-data-descriptor "^1.0.0" kind-of "^6.0.2" -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - is-docker@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" @@ -5261,12 +4016,6 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" -is-finite@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" - dependencies: - number-is-nan "^1.0.0" - is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -5307,10 +4056,6 @@ is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - is-path-cwd@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" @@ -5319,7 +4064,7 @@ is-path-inside@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.1.tgz#7417049ed551d053ab82bba3fdd6baa6b3a81e89" -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: +is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -5333,37 +4078,15 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-plain-object@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" - dependencies: - isobject "^4.0.0" - is-potential-custom-element-name@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - is-retry-allowed@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" -is-ssh@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" - dependencies: - protocols "^1.1.0" - is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -5372,33 +4095,11 @@ is-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - dependencies: - has-symbols "^1.0.0" - -is-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - dependencies: - text-extensions "^1.0.0" - -is-text-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-2.0.0.tgz#b2484e2b720a633feb2e85b67dc193ff72c75636" - dependencies: - text-extensions "^2.0.0" - is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -is-windows@^1.0.0, is-windows@^1.0.2: +is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -5435,10 +4136,6 @@ isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" -isobject@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" - isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -6007,7 +4704,7 @@ json-buffer@3.0.1: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== -json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.1: +json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -6019,7 +4716,12 @@ json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -6044,10 +4746,6 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -6105,30 +4803,6 @@ latest-version@^5.1.0: dependencies: package-json "^6.3.0" -lerna@^3.22.1: - version "3.22.1" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.22.1.tgz#82027ac3da9c627fd8bf02ccfeff806a98e65b62" - integrity sha512-vk1lfVRFm+UuEFA7wkLKeSF7Iz13W+N/vFd48aW2yuS7Kv0RbNm2/qcDPV863056LMfkRlsEe+QYOw3palj5Lg== - dependencies: - "@lerna/add" "3.21.0" - "@lerna/bootstrap" "3.21.0" - "@lerna/changed" "3.21.0" - "@lerna/clean" "3.21.0" - "@lerna/cli" "3.18.5" - "@lerna/create" "3.22.0" - "@lerna/diff" "3.21.0" - "@lerna/exec" "3.21.0" - "@lerna/import" "3.22.0" - "@lerna/info" "3.21.0" - "@lerna/init" "3.21.0" - "@lerna/link" "3.21.0" - "@lerna/list" "3.21.0" - "@lerna/publish" "3.22.1" - "@lerna/run" "3.21.0" - "@lerna/version" "3.22.1" - import-local "^2.0.0" - npmlog "^4.1.2" - leven@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" @@ -6137,6 +4811,14 @@ leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -6148,26 +4830,7 @@ lines-and-columns@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -load-json-file@^5.2.0, load-json-file@^5.3.0: +load-json-file@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" dependencies: @@ -6195,20 +4858,6 @@ loady@~0.0.5: resolved "https://registry.yarnpkg.com/loady/-/loady-0.0.5.tgz#b17adb52d2fb7e743f107b0928ba0b591da5d881" integrity sha512-uxKD2HIj042/HBx77NBcmEPsD+hxCgAtjEWlYNScuUjIsh/62Uyu39GOR68TBR68v+jqDL9zfftCWoUo4y03sQ== -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - locate-path@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" @@ -6219,18 +4868,10 @@ lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - lodash.memoize@4.x: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -6252,7 +4893,7 @@ lodash.sumby@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.sumby/-/lodash.sumby-4.6.0.tgz#7d87737ddb216da2f7e5e7cd2dd9c403a7887346" -lodash.template@^4.0.2, lodash.template@^4.4.0, lodash.template@^4.5.0: +lodash.template@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" dependencies: @@ -6265,11 +4906,7 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.15, lodash@^4.2.1: +lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -6278,13 +4915,6 @@ long@~3: version "3.2.0" resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -6293,29 +4923,6 @@ lowercase-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - dependencies: - yallist "^3.0.2" - -macos-release@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f" - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - dependencies: - pify "^3.0.0" - -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - dependencies: - pify "^4.0.1" - semver "^5.6.0" - make-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" @@ -6326,22 +4933,6 @@ make-error@1.x: version "1.3.5" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" -make-fetch-happen@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" - dependencies: - agentkeepalive "^3.4.1" - cacache "^12.0.0" - http-cache-semantics "^3.8.1" - http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - node-fetch-npm "^2.0.2" - promise-retry "^1.1.1" - socks-proxy-agent "^4.0.0" - ssri "^6.0.0" - makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -6352,14 +4943,10 @@ map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" -map-obj@^1.0.0, map-obj@^1.0.1: +map-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - map-obj@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5" @@ -6379,49 +4966,6 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -meow@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.1.tgz#d48598f6f4b1472f35bf6317a95945ace347f975" - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist "^1.1.3" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - -meow@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" - meow@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/meow/-/meow-6.1.1.tgz#1ad64c4b76b2a24dfb2f635fddcadf320d251467" @@ -6487,10 +5031,6 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.40.0" -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -6530,13 +5070,6 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - minimist-options@^4.0.2: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -6550,20 +5083,10 @@ minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: +minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= - minipass@^2.2.1, minipass@^2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" @@ -6571,34 +5094,12 @@ minipass@^2.2.1, minipass@^2.3.5: safe-buffer "^5.1.2" yallist "^3.0.0" -minipass@^2.8.6: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - minizlib@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" dependencies: minipass "^2.2.1" -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -6606,16 +5107,6 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - dependencies: - mkdirp "*" - -mkdirp@*: - version "1.0.3" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" - mkdirp@1.x: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" @@ -6627,32 +5118,10 @@ mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "0.0.8" -mkdirp@^0.5.3: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - moment@^2.22.1: version "2.24.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - mri@1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" @@ -6661,29 +5130,12 @@ ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -ms@^2.0.0, ms@^2.1.1: +ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -multimatch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-3.0.0.tgz#0e2534cc6bc238d9ab67e1b9cd5fcd85a6dbf70b" - dependencies: - array-differ "^2.0.3" - array-union "^1.0.2" - arrify "^1.0.1" - minimatch "^3.0.4" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - -mute-stream@~0.0.4: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - -mz@^2.5.0, mz@^2.7.0: +mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" dependencies: @@ -6731,11 +5183,6 @@ needle@^2.2.1: iconv-lite "^0.4.4" sax "^1.2.4" -neo-async@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -6746,34 +5193,10 @@ node-abi@^2.7.0: dependencies: semver "^5.4.1" -node-fetch-npm@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz#7258c9046182dca345b4208eda918daf33697ff7" - dependencies: - encoding "^0.1.11" - json-parse-better-errors "^1.0.0" - safe-buffer "^5.1.1" - -node-fetch@^2.2.0, node-fetch@^2.3.0, node-fetch@^2.5.0: +node-fetch@^2.2.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" -node-gyp@^5.0.2: - version "5.0.7" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.0.7.tgz#dd4225e735e840cf2870e4037c2ed9c28a31719e" - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.2" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.1.2" - request "^2.88.0" - rimraf "^2.6.3" - semver "^5.7.1" - tar "^4.4.12" - which "^1.3.1" - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -6826,7 +5249,7 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -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: +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" dependencies: @@ -6845,10 +5268,6 @@ normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" -normalize-url@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - normalize-url@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.3.0.tgz#9c49e10fc1876aeb76dba88bf1b2b5d9fa57b2ee" @@ -6857,32 +5276,6 @@ npm-bundled@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" -npm-lifecycle@^3.1.2: - version "3.1.4" - resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz#de6975c7d8df65f5150db110b57cce498b0b604c" - dependencies: - byline "^5.0.0" - graceful-fs "^4.1.15" - node-gyp "^5.0.2" - resolve-from "^4.0.0" - slide "^1.1.6" - uid-number "0.0.6" - umask "^1.1.0" - which "^1.3.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - -"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1" - dependencies: - hosted-git-info "^2.6.0" - osenv "^0.1.5" - semver "^5.5.0" - validate-npm-package-name "^3.0.0" - npm-packlist@^1.1.6: version "1.4.4" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" @@ -6890,22 +5283,6 @@ npm-packlist@^1.1.6: ignore-walk "^3.0.1" npm-bundled "^1.0.1" -npm-packlist@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-normalize-package-bin "^1.0.1" - -npm-pick-manifest@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" - dependencies: - figgy-pudding "^3.5.1" - npm-package-arg "^6.0.0" - semver "^5.4.1" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -6924,7 +5301,7 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" -npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2: +npmlog@^4.0.1, npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: @@ -6957,10 +5334,6 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-keys@^1.0.12: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - object-treeify@^1.1.4: version "1.1.26" resolved "https://registry.yarnpkg.com/object-treeify/-/object-treeify-1.1.26.tgz#80b882036cb5d0fddc16e8a2affa98ba96f89a74" @@ -6972,49 +5345,24 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" - object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" dependencies: isobject "^3.0.1" -octokit-pagination-methods@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" - once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: wrappy "1" -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - dependencies: - mimic-fn "^1.0.0" - onetime@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" dependencies: mimic-fn "^2.1.0" -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - optionator@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" @@ -7026,22 +5374,27 @@ optionator@^0.8.1: type-check "~0.3.2" wordwrap "~1.0.0" +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" -os-name@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" - dependencies: - macos-release "^2.2.0" - windows-release "^3.1.0" - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -osenv@^0.1.4, osenv@^0.1.5: +osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" dependencies: @@ -7065,80 +5418,28 @@ p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" dependencies: p-try "^2.0.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - dependencies: - p-limit "^2.0.0" - p-locate@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" dependencies: p-limit "^2.2.0" -p-map-series@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" - dependencies: - p-reduce "^1.0.0" - -p-map@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - p-map@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" dependencies: aggregate-error "^3.0.0" -p-pipe@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9" - -p-queue@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-4.0.0.tgz#ed0eee8798927ed6f2c2f5f5b77fdb2061a5d346" - dependencies: - eventemitter3 "^3.1.0" - -p-reduce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" -p-waterfall@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" - dependencies: - p-reduce "^1.0.0" - package-json@^6.3.0: version "6.5.0" resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" @@ -7148,23 +5449,12 @@ package-json@^6.3.0: registry-url "^5.0.0" semver "^6.2.0" -parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - dependencies: - cyclist "~0.2.2" - inherits "^2.0.3" - readable-stream "^2.1.5" - -parse-github-repo-url@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: - error-ex "^1.2.0" + callsites "^3.0.0" parse-json@^4.0.0: version "4.0.0" @@ -7186,22 +5476,6 @@ parse-ms@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" -parse-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff" - dependencies: - is-ssh "^1.3.0" - protocols "^1.4.0" - -parse-url@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f" - dependencies: - is-ssh "^1.3.0" - normalize-url "^3.3.0" - parse-path "^4.0.0" - protocols "^1.4.0" - parse5@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" @@ -7222,16 +5496,6 @@ path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -7252,20 +5516,6 @@ path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - dependencies: - pify "^3.0.0" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -7297,28 +5547,10 @@ picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -pify@^2.0.0, pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - pino-pretty@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-4.1.0.tgz#ad47ae00d4f3959cfadcdd691b1ebdcbdd61e42e" @@ -7359,12 +5591,6 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^1.0.0" -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - dependencies: - find-up "^3.0.0" - pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -7395,6 +5621,11 @@ prebuild-install@^5.3.3: tunnel-agent "^0.6.0" which-pm-runs "^1.0.0" +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -7403,6 +5634,13 @@ prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + prettier@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.1.tgz#d9485dd5e499daa6cb547023b87a6cf51bee37d6" @@ -7460,16 +5698,10 @@ process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - -promise-retry@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - dependencies: - err-code "^1.0.0" - retry "^0.10.0" +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== prompts@^2.0.1: version "2.1.0" @@ -7486,37 +5718,10 @@ prompts@^2.3.2: kleur "^3.0.3" sisteransi "^1.0.4" -promzard@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - dependencies: - read "1" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - -protocols@^1.1.0, protocols@^1.4.0: - version "1.4.7" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" - -protoduck@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" - dependencies: - genfun "^5.0.0" - -psl@^1.1.24, psl@^1.1.28: +psl@^1.1.28: version "1.2.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.2.0.tgz#df12b5b1b3a30f51c329eacbdef98f3a6e136dc6" -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -7524,26 +5729,10 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" -q@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - qqjs@^0.3.10: version "0.3.11" resolved "https://registry.yarnpkg.com/qqjs/-/qqjs-0.3.11.tgz#795b9f7d00807d75c391b1241b5be3077143d9ea" @@ -7571,10 +5760,6 @@ quick-format-unescaped@^4.0.1: resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.1.tgz#437a5ea1a0b61deb7605f8ab6a8fd3858dbeb701" integrity sha512-RyYpQ6Q5/drsJyOhrWHYMWTedvjTIat+FTwv0K4yoUxzvekw2aRHMQJLlnvt8UantkZg2++bEzD9EdxXqkWf4A== -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - quick-lru@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" @@ -7608,51 +5793,12 @@ react-is@^16.8.4: version "16.8.6" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" -read-cmd-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b" - dependencies: - graceful-fs "^4.1.2" - read-last-lines@^1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/read-last-lines/-/read-last-lines-1.7.2.tgz#d96d40566d70aca260a85acefb00d523ea3e74ad" integrity sha512-K0yUvTYAYn6qpyLJufaJ7yC6BeL23qpgZ8SKM7/fA1R1rHotCDxB/zDp9i1I2JHvexWBW6/35jkt07iiIKKp4g== dependencies: - mz "^2.7.0" - -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.13.tgz#2e82ebd9f613baa6d2ebe3aa72cefe3f68e41f4a" - dependencies: - glob "^7.1.1" - json-parse-better-errors "^1.0.1" - normalize-package-data "^2.0.0" - slash "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.2" - -read-package-tree@^5.1.6: - version "5.3.1" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" - dependencies: - read-package-json "^2.0.0" - readdir-scoped-modules "^1.0.0" - util-promisify "^2.1.0" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" + mz "^2.7.0" read-pkg-up@^7.0.1: version "7.0.1" @@ -7663,22 +5809,6 @@ read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - read-pkg@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" @@ -7689,13 +5819,7 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -read@1, read@~1.0.1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - dependencies: - mute-stream "~0.0.4" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@^2.0.2, readable-stream@^2.0.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -7707,7 +5831,7 @@ read@1, read@~1.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3", readable-stream@^3.0.0, readable-stream@^3.0.1, readable-stream@^3.0.2, readable-stream@^3.1.1: +readable-stream@^3.0.0, readable-stream@^3.0.1, readable-stream@^3.1.1: version "3.4.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" dependencies: @@ -7724,15 +5848,6 @@ readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdir-scoped-modules@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" - dependencies: - debuglog "^1.0.1" - dezalgo "^1.0.0" - graceful-fs "^4.1.2" - once "^1.3.0" - readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -7741,20 +5856,6 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -7776,6 +5877,11 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexpp@^3.0.0, regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + registry-auth-token@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.0.0.tgz#30e55961eec77379da551ea5c4cf43cbf03522be" @@ -7801,12 +5907,6 @@ repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - request-promise-core@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" @@ -7822,31 +5922,6 @@ request-promise-native@^1.0.8: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.0" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.4.3" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" @@ -7886,25 +5961,16 @@ resolve-alpn@^1.0.0: resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.0.0.tgz#745ad60b3d6aff4b4a48e01b8c0bdc70959e0e8c" integrity sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA== -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - dependencies: - resolve-from "^3.0.0" - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" dependencies: resolve-from "^5.0.0" -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-from@^5.0.0: version "5.0.0" @@ -7940,28 +6006,18 @@ responselike@^2.0.0: dependencies: lowercase-keys "^2.0.0" -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" -retry@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" - reusify@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: +rimraf@2.6.3, rimraf@^2.6.1, rimraf@^2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: glob "^7.1.3" @@ -7989,29 +6045,11 @@ rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - dependencies: - is-promise "^2.1.0" - run-parallel@^1.1.9: version "1.1.9" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - dependencies: - aproba "^1.1.1" - -rxjs@^6.4.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" - dependencies: - tslib "^1.9.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" @@ -8054,19 +6092,15 @@ saxes@^5.0.0: dependencies: xmlchars "^2.2.0" -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: version "5.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" -semver@7.x, semver@^7.3.2: +semver@7.x, semver@^7.2.1, semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== -semver@^5.7.0, semver@^5.7.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - semver@^6.0.0: version "6.2.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" @@ -8095,12 +6129,6 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - dependencies: - kind-of "^6.0.2" - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -8152,10 +6180,6 @@ sisteransi@^1.0.4: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - slash@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" @@ -8164,13 +6188,14 @@ slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" -slide@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - -smart-buffer@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.2.tgz#5207858c3815cc69110703c6b94e46c15634395d" +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" snapdragon-node@^2.0.1: version "2.1.1" @@ -8199,20 +6224,6 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -socks-proxy-agent@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - dependencies: - agent-base "~4.2.1" - socks "~2.3.2" - -socks@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.2.tgz#ade388e9e6d87fdb11649c15746c578922a5883e" - dependencies: - ip "^1.1.5" - smart-buffer "4.0.2" - sonic-boom@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-1.1.0.tgz#538c2de63aaca1b49254a7ed9d16e4931fab6ad3" @@ -8221,12 +6232,6 @@ sonic-boom@^1.0.2: atomic-sleep "^1.0.0" flatstr "^1.0.12" -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - dependencies: - is-plain-obj "^1.0.0" - sort-keys@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-3.0.0.tgz#fa751737e3da363ef80632d4fd78e324d661fe9a" @@ -8294,24 +6299,12 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -split2@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" - dependencies: - through2 "^2.0.2" - split2@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/split2/-/split2-3.1.1.tgz#c51f18f3e06a8c4469aaab487687d8d956160bb6" dependencies: readable-stream "^3.0.0" -split@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - 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" @@ -8331,12 +6324,6 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^6.0.0, ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - dependencies: - figgy-pudding "^3.5.1" - stack-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" @@ -8359,13 +6346,6 @@ stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - stream-events@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" @@ -8373,10 +6353,6 @@ stream-events@^1.0.5: dependencies: stubs "^3.0.0" -stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - string-length@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" @@ -8393,7 +6369,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: @@ -8452,12 +6428,6 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -8474,16 +6444,6 @@ strip-final-newline@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - dependencies: - get-stdin "^4.0.1" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -8491,7 +6451,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@^3.1.1: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -8500,14 +6460,6 @@ strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" -strong-log-transformer@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" - dependencies: - duplexer "^0.1.1" - minimist "^1.2.0" - through "^2.3.4" - stubs@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" @@ -8552,6 +6504,16 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + tar-fs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.0.tgz#677700fc0c8b337a78bee3623fdc235f21d7afad" @@ -8571,7 +6533,7 @@ tar-stream@^2.0.0: inherits "^2.0.3" readable-stream "^3.1.1" -tar@4.4.10, tar@^4, tar@^4.4.10, tar@^4.4.8: +tar@4.4.10, tar@^4: version "4.4.10" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" dependencies: @@ -8583,18 +6545,6 @@ tar@4.4.10, tar@^4, tar@^4.4.10, tar@^4.4.8: safe-buffer "^5.1.2" yallist "^3.0.3" -tar@^4.4.12: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - teeny-request@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-6.0.1.tgz#9b1f512cef152945827ba7e34f62523a4ce2c5b0" @@ -8606,21 +6556,6 @@ teeny-request@6.0.1: stream-events "^1.0.5" uuid "^3.3.2" -temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - -temp-write@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" - dependencies: - graceful-fs "^4.1.2" - is-stream "^1.1.0" - make-dir "^1.0.0" - pify "^3.0.0" - temp-dir "^1.0.0" - uuid "^3.0.1" - terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -8636,13 +6571,10 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - -text-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.0.0.tgz#43eabd1b495482fae4a2bf65e5f56c29f69220f6" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= thenify-all@^1.0.0: version "1.6.0" @@ -8660,23 +6592,6 @@ throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" -through2@^2.0.0, through2@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through2@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.1.tgz#39276e713c3302edf9e388dd9c812dd3b825bd5a" - dependencies: - readable-stream "2 || 3" - -through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - tiny-glob@^0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/tiny-glob/-/tiny-glob-0.2.6.tgz#9e056e169d9788fe8a734dfa1ff02e9b92ed7eda" @@ -8694,12 +6609,6 @@ tiny-secp256k1@^1.1.0: elliptic "^6.4.0" nan "^2.13.2" -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - dependencies: - os-tmpdir "~1.0.2" - tmp@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" @@ -8761,19 +6670,6 @@ tough-cookie@^3.0.1: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@~2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" - dependencies: - psl "^1.1.24" - punycode "^1.4.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - dependencies: - punycode "^2.1.0" - tr46@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" @@ -8785,23 +6681,11 @@ treeify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - trim-newlines@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== -trim-off-newlines@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" - trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -8823,11 +6707,11 @@ ts-jest@^26.3.0: semver "7.x" yargs-parser "18.x" -tslib@^1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1, tslib@^1.9.3: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" -tslib@^1.13.0: +tslib@^1.8.1: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== @@ -8837,32 +6721,10 @@ tslib@^2.0.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== -tslint-config-prettier@^1.18.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" - -tslint@^6.1.3: - version "6.1.3" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" - integrity sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^4.0.1" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.3" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.13.0" - tsutils "^2.29.0" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== dependencies: tslib "^1.8.1" @@ -8876,6 +6738,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -8919,10 +6788,6 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - typeforce@^1.11.5: version "1.18.0" resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" @@ -8932,22 +6797,6 @@ typescript@^4.0.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2" integrity sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ== -uglify-js@^3.1.4: - version "3.8.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.8.0.tgz#f3541ae97b2f048d7e7e3aa4f39fd8a1f5d7a805" - integrity sha512-ugNSTT8ierCsDHso2jkBHXYrU8Y5/fY2ZUprfrJUiD7YpuFvV4jODLFmb3h4btQjqr5Nh4TX4XtgDfCU1WdioQ== - dependencies: - commander "~2.20.3" - source-map "~0.6.1" - -uid-number@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - -umask@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -8957,24 +6806,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - dependencies: - imurmurhash "^0.1.4" - -universal-user-agent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.0.tgz#27da2ec87e32769619f68a14996465ea1cb9df16" - dependencies: - os-name "^3.1.0" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -8995,10 +6826,6 @@ upath@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" -upath@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -9028,16 +6855,6 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" -util-promisify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" - dependencies: - object.getownpropertydescriptors "^2.0.3" - -uuid@^3.0.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" @@ -9048,6 +6865,11 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== +v8-compile-cache@^2.0.3: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" + integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + v8-to-istanbul@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-5.0.1.tgz#0608f5b49a481458625edb058488607f25498ba5" @@ -9057,19 +6879,13 @@ v8-to-istanbul@^5.0.1: convert-source-map "^1.6.0" source-map "^0.7.3" -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.3: +validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validate-npm-package-name@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - dependencies: - builtins "^1.0.3" - verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -9098,16 +6914,6 @@ walker@^1.0.7, walker@~1.0.5: dependencies: makeerror "1.0.x" -wcwidth@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - dependencies: - defaults "^1.0.3" - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -9128,14 +6934,6 @@ whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" -whatwg-url@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-url@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.0.0.tgz#37f256cb746398e19b107bd6ef820b4ae2d15871" @@ -9153,7 +6951,7 @@ which-pm-runs@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" -which@^1.2.9, which@^1.3.1: +which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: @@ -9191,16 +6989,10 @@ wif@^2.0.6: dependencies: bs58check "<3.0.0" -windows-release@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" - dependencies: - execa "^1.0.0" - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wordwrap@~1.0.0: version "1.0.0" @@ -9214,14 +7006,6 @@ wrap-ansi@^4.0.0: string-width "^2.1.1" strip-ansi "^4.0.0" -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -9243,14 +7027,6 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - write-file-atomic@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.0.tgz#1b64dbbf77cb58fd09056963d63e62667ab4fb21" @@ -9260,28 +7036,6 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write-json-file@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - pify "^3.0.0" - sort-keys "^2.0.0" - write-file-atomic "^2.0.0" - -write-json-file@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-3.2.0.tgz#65bbdc9ecd8a1458e15952770ccbadfcff5fe62a" - dependencies: - detect-indent "^5.0.0" - graceful-fs "^4.1.15" - make-dir "^2.1.0" - pify "^4.0.1" - sort-keys "^2.0.0" - write-file-atomic "^2.4.2" - write-json-file@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-4.2.0.tgz#85a853ef1c28feb206bd56c2903fe19a6803c7ac" @@ -9293,12 +7047,12 @@ write-json-file@^4.1.1: sort-keys "^3.0.0" write-file-atomic "^3.0.0" -write-pkg@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/write-pkg/-/write-pkg-3.2.0.tgz#0e178fe97820d389a8928bc79535dbe68c2cff21" +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== dependencies: - sort-keys "^2.0.0" - write-json-file "^2.2.0" + mkdirp "^0.5.1" ws@^7.2.3: version "7.2.5" @@ -9314,15 +7068,11 @@ xmlchars@^2.2.0: resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.0, yallist@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" @@ -9334,35 +7084,6 @@ yargs-parser@18.x, yargs-parser@^18.1.1, yargs-parser@^18.1.3: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - dependencies: - camelcase "^4.1.0" - -yargs-parser@^15.0.0: - version "15.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.0.tgz#cdd7a97490ec836195f59f3f4dbe5ea9e8f75f08" - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@^14.2.2: - version "14.2.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.2.tgz#2769564379009ff8597cdd38fba09da9b493c4b5" - dependencies: - cliui "^5.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^15.0.0" - yargs@^15.3.1: version "15.3.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b"