From 988e6399a06945319795c717d682f2aaf237edff Mon Sep 17 00:00:00 2001 From: Andre Medeiros Date: Wed, 4 Sep 2019 16:13:28 -0400 Subject: [PATCH] refactor: coverage now reacts instead of being told what to do --- .../src/lib/contractEnhanced.ts | 1 + packages/embark-coverage/src/lib/index.ts | 40 +++--- packages/embark-coverage/src/lib/types.ts | 1 + packages/embark-mocha-tests/src/lib/index.js | 23 ++-- .../embark-solidity-tests/src/lib/index.js | 16 ++- packages/embark-test-runner/package.json | 4 +- packages/embark-test-runner/src/index.js | 30 +++-- packages/embark/package.json | 1 - packages/embark/src/cmd/cmd_controller.js | 2 +- packages/embark/src/lib/core/engine.js | 8 +- yarn.lock | 119 ++++-------------- 11 files changed, 108 insertions(+), 137 deletions(-) diff --git a/packages/embark-coverage/src/lib/contractEnhanced.ts b/packages/embark-coverage/src/lib/contractEnhanced.ts index 9848d8501..cbca70905 100644 --- a/packages/embark-coverage/src/lib/contractEnhanced.ts +++ b/packages/embark-coverage/src/lib/contractEnhanced.ts @@ -142,6 +142,7 @@ export class ContractEnhanced { line, loc: location, name, + decl: location }; this.coverage.f[coverageId] = 0; this.functionsBodyLocation[coverageId] = bodyLocation; diff --git a/packages/embark-coverage/src/lib/index.ts b/packages/embark-coverage/src/lib/index.ts index e5a583357..b57a88a97 100644 --- a/packages/embark-coverage/src/lib/index.ts +++ b/packages/embark-coverage/src/lib/index.ts @@ -18,14 +18,25 @@ export default class Coverage { constructor(private embark: Embark, options: any) { this.fs = embark.fs; this.fs.ensureDirSync(coverageContractsPath()); - this.originalContractFiles = embark.config.contractsFiles; - this.contracts = this.getContracts(); + this.contracts = []; - this.embark.events.setCommandHandler("coverage:prepareContracts", async (done) => { + if (!options.coverage) { + return; + } + + this.embark.registerActionForEvent('tests:contracts:compile:before', async (contractsFiles, cb) => { + const solcVersion = this.embark.config.embarkConfig.versions.solc; + const enhancedContracts = contractsFiles.map((file: File) => new ContractEnhanced(file.path, solcVersion)); + + this.mergeContracts(enhancedContracts); await this.prepareContracts(); - this.swapContracts(); - done(); + + contractsFiles.forEach((cf: any) => { + cf.path = path.join(coverageContractsPath(), cf.path); + }); + + cb(null, contractsFiles); }); this.embark.events.on("tests:ready", this.pushDeployedContracts.bind(this)); @@ -33,9 +44,14 @@ export default class Coverage { this.embark.events.on("tests:manualDeploy", this.registerWeb3Contract.bind(this)); } - private getContracts() { - const solcVersion = this.embark.config.embarkConfig.versions.solc; - return this.originalContractFiles.map((file) => new ContractEnhanced(file.path, solcVersion)); + private async mergeContracts(contracts: ContractEnhanced[]) { + contracts.forEach((contract: ContractEnhanced) => { + if (this.contracts.some((cc: ContractEnhanced) => cc.filepath === contract.filepath)) { + return; + } + + this.contracts.push(contract); + }); } private async prepareContracts() { @@ -46,14 +62,6 @@ export default class Coverage { await Promise.all(promises); } - private swapContracts() { - this.embark.config.embarkConfig.contracts = this.originalContractFiles.map((file: File) => ( - path.join(coverageContractsPath(), file.path) - )); - this.embark.config.contractsFiles = []; - this.embark.config.reloadConfig(); - } - private async pushDeployedContracts() { const newContracts = await this.getDeployedContracts(); this.deployedContracts = this.deployedContracts.concat(newContracts); diff --git a/packages/embark-coverage/src/lib/types.ts b/packages/embark-coverage/src/lib/types.ts index c9d774188..535d00925 100644 --- a/packages/embark-coverage/src/lib/types.ts +++ b/packages/embark-coverage/src/lib/types.ts @@ -26,6 +26,7 @@ export interface Coverage { [functionId: number]: { line: number; loc: Location; + decl: Location; name: string; skip?: boolean; }; diff --git a/packages/embark-mocha-tests/src/lib/index.js b/packages/embark-mocha-tests/src/lib/index.js index 63fdcdc49..9ef6d64a1 100644 --- a/packages/embark-mocha-tests/src/lib/index.js +++ b/packages/embark-mocha-tests/src/lib/index.js @@ -9,13 +9,14 @@ const JAVASCRIPT_TEST_MATCH = /^.+\.js$/i; const TEST_TIMEOUT = 15000; // 15 seconds in milliseconds class MochaTestRunner { - constructor(embark, _options) { + constructor(embark, options) { this.embark = embark; + this.events = embark.events; + this.plugins = options.plugins; this.files = []; - const { events } = embark; - events.request('tests:runner:register', + this.events.request('tests:runner:register', 'JavaScript (Mocha)', this.match.bind(this), this.addFile.bind(this), @@ -36,7 +37,7 @@ class MochaTestRunner { } run(options, cb) { - const {events} = this.embark; + const {events, plugins} = this; const {reporter} = options; const Module = require("module"); @@ -104,17 +105,17 @@ class MochaTestRunner { events.request("contracts:reset", next); }, (next) => { // get contract files - if (!options.coverage) { - return events.request("config:contractsFiles", next); - } - - events.request("coverage:prepareContracts", () => { - events.request("config:contractsFiles", next); - }); + events.request("config:contractsFiles", next); + }, + (cf, next) => { + plugins.emitAndRunActionsForEvent('tests:contracts:compile:before', cf, next); }, (cf, next) => { // compile contracts events.request("compiler:contracts:compile", cf, next); }, + (cc, next) => { + plugins.emitAndRunActionsForEvent('tests:contracts:compile:after', cc, next); + }, (cc, next) => { // override require compiledContracts = cc; diff --git a/packages/embark-solidity-tests/src/lib/index.js b/packages/embark-solidity-tests/src/lib/index.js index 8d56a730a..064718a5a 100644 --- a/packages/embark-solidity-tests/src/lib/index.js +++ b/packages/embark-solidity-tests/src/lib/index.js @@ -28,9 +28,10 @@ const ASSERT_LIB = new File({ }); class SolidityTestRunner { - constructor(embark, _options) { + constructor(embark, options) { this.embark = embark; this.events = embark.events; + this.plugins = options.plugins; this.files = []; @@ -56,7 +57,7 @@ class SolidityTestRunner { run(options, cb) { const reporter = new Reporter(options.reporter); - const {events} = this; + const {events, plugins} = this; if (this.files.length === 0) { return cb(null, 0); @@ -87,9 +88,19 @@ class SolidityTestRunner { (next) => { events.request("contracts:reset", next); }, + /* + (next) => { + plugins.emitAndRunActionsForEvent('tests:contracts:compile:before', contractFiles, next); + }, + */ (next) => { events.request("compiler:contracts:compile", contractFiles, next); }, + /* + (cc, next) => { + plugins.emitAndRunActionsForEvent('tests:contracts:compile:after', cc, next); + }, + */ (compiledContracts, next) => { // TODO: fetch config and use it here events.request("contracts:build", { contracts: {} }, compiledContracts, next); @@ -110,6 +121,7 @@ class SolidityTestRunner { events.request("deployment:contracts:deploy", contractsToDeploy, contractDependencies, next); }, (_result, next) => { + events.emit('tests:ready'); events.request("blockchain:client:provider", "ethereum", next); }, (bcProvider, next) => { diff --git a/packages/embark-test-runner/package.json b/packages/embark-test-runner/package.json index c843dfe70..7c0ff1035 100644 --- a/packages/embark-test-runner/package.json +++ b/packages/embark-test-runner/package.json @@ -52,7 +52,9 @@ "embark-i18n": "^4.1.1", "embark-utils": "^4.1.1", "fs-extra": "7.0.1", - "istanbul": "0.4.5", + "istanbul-lib-coverage": "^2.0.5", + "istanbul-lib-report": "2.0.8", + "istanbul-reports": "^2.2.4", "mocha": "6.2.0", "open": "6.4.0" }, diff --git a/packages/embark-test-runner/src/index.js b/packages/embark-test-runner/src/index.js index d44c89669..f0ad0f4e4 100644 --- a/packages/embark-test-runner/src/index.js +++ b/packages/embark-test-runner/src/index.js @@ -1,8 +1,13 @@ import { __ } from 'embark-i18n'; const async = require('async'); const chalk = require('chalk'); + +const coverage = require('istanbul-lib-coverage'); +const reporter = require('istanbul-lib-report'); +const reports = require('istanbul-reports'); + const path = require('path'); -const { embarkPath, dappPath, runCmd } = require('embark-utils'); +const { dappPath } = require('embark-utils'); import fs from 'fs'; import { COVERAGE_GAS_LIMIT, GAS_LIMIT } from './constants'; @@ -19,6 +24,8 @@ class TestRunner { this.gasLimit = options.coverage ? COVERAGE_GAS_LIMIT : GAS_LIMIT; this.files = []; + //this.istanbulPath = findup('node_modules/.bin/istanbul', { cwd: __dirname }); + this.events.setCommandHandler('tests:run', (options, callback) => { this.run(options, callback); }); @@ -63,14 +70,6 @@ class TestRunner { async.series(runnerFns, next); }, - (_results, next) => { - if (!options.coverage) { - return next(); - } - - const cmd = `${embarkPath('node_modules/.bin/istanbul')} report --root .embark --format html --format lcov`; - runCmd(cmd, {silent: false, exitOnError: false}, next); - }, ], (err) => { reporter.footer(); @@ -78,6 +77,7 @@ class TestRunner { return cb(err, reporter.passes, reporter.fails); } + this.generateCoverageReport(); process.stdout.write(chalk`{blue Coverage report created. You can find it here:}\n{white.underline ${dappPath('coverage/index.html')}}\n`); if (options.noBrowser) { @@ -91,6 +91,18 @@ class TestRunner { }); } + generateCoverageReport() { + const coveragePath = path.join(dappPath(), ".embark", "coverage.json"); + const coverageMap = JSON.parse(fs.readFileSync(coveragePath)); + const map = coverage.createCoverageMap(coverageMap); + const tree = reporter.summarizers.nested(map); + + const ctx = reporter.createContext({ dir: 'coverage' }); + const report = reports.create('html', { skipEmpty: false, skipFull: false }); + + tree.visit(report, ctx); + } + getFilesFromDir(filePath, cb) { fs.stat(filePath, (err, fileStat) => { const errorMessage = `File "${filePath}" doesn't exist or you don't have permission to it`.red; diff --git a/packages/embark/package.json b/packages/embark/package.json index 78235d08c..6c67b3d10 100644 --- a/packages/embark/package.json +++ b/packages/embark/package.json @@ -159,7 +159,6 @@ "http-proxy": "1.17.0", "http-shutdown": "1.2.0", "ipfs-api": "17.2.4", - "istanbul": "0.4.5", "json-parse-better-errors": "1.0.2", "lodash.clonedeep": "4.5.0", "mocha": "6.2.0", diff --git a/packages/embark/src/cmd/cmd_controller.js b/packages/embark/src/cmd/cmd_controller.js index 32828004f..9cf58f16c 100644 --- a/packages/embark/src/cmd/cmd_controller.js +++ b/packages/embark/src/cmd/cmd_controller.js @@ -923,7 +923,7 @@ class EmbarkController { engine.registerModuleGroup("compiler"); engine.registerModuleGroup("contracts"); engine.registerModuleGroup("pipeline"); - engine.registerModuleGroup("tests"); + engine.registerModuleGroup("tests", options); let plugin = engine.plugins.createPlugin('cmdcontrollerplugin', {}); plugin.registerActionForEvent("embark:engine:started", async (_params, cb) => { diff --git a/packages/embark/src/lib/core/engine.js b/packages/embark/src/lib/core/engine.js index 4823f12e7..7d2cfd535 100644 --- a/packages/embark/src/lib/core/engine.js +++ b/packages/embark/src/lib/core/engine.js @@ -188,11 +188,11 @@ class Engine { }); } - testComponents() { + testComponents(options) { this.registerModulePackage('embark-test-runner'); - this.registerModulePackage('embark-coverage'); - this.registerModulePackage('embark-solidity-tests'); - this.registerModulePackage('embark-mocha-tests'); + this.registerModulePackage('embark-coverage', {plugins: this.plugins, coverage: options.coverage}); + this.registerModulePackage('embark-solidity-tests', {plugins: this.plugins, coverage: options.coverage}); + this.registerModulePackage('embark-mocha-tests', {plugins: this.plugins, coverage: options.coverage}); } compilerComponents(_options) { diff --git a/yarn.lock b/yarn.lock index dd3a5b205..e80d7dc31 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3174,11 +3174,6 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= - abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz#f7128e1f86ccabf7d2893077ce5d06d798e386c6" @@ -3806,11 +3801,6 @@ async-limiter@^1.0.0, async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@1.x, async@^1.4.2, async@^1.5.2, async@~1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - async@2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" @@ -3823,6 +3813,11 @@ async@3.1.0: resolved "https://registry.yarnpkg.com/async/-/async-3.1.0.tgz#42b3b12ae1b74927b5217d8c0016baaf62463772" integrity sha512-4vx/aaY6j/j3Lw3fbCHNWP0pPaTCew3F6F3hYyl/tHs/ndmV1q7NW9T5yuJ2XAGwdQrP+6Wu20x06U4APo/iQQ== +async@^1.4.2, async@^1.5.2, async@~1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + async@^2.0.1, async@^2.1.2, async@^2.1.4, async@^2.4.0, async@^2.5.0, async@^2.6.0, async@^2.6.1: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -7551,18 +7546,6 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1 resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@1.8.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - integrity sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg= - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - escodegen@^1.11.1, escodegen@^1.9.1: version "1.12.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" @@ -7874,11 +7857,6 @@ esprima-extract-comments@^1.1.0: dependencies: esprima "^4.0.0" -esprima@2.7.x, esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= - esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -7903,11 +7881,6 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= - estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" @@ -9498,17 +9471,6 @@ glob@7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" @@ -9817,7 +9779,7 @@ handlebars@4.0.14: optionalDependencies: uglify-js "^3.1.4" -handlebars@^4.0.1, handlebars@^4.0.3, handlebars@^4.1.2: +handlebars@^4.0.3, handlebars@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== @@ -11416,6 +11378,15 @@ istanbul-lib-instrument@^3.0.0: istanbul-lib-coverage "^2.0.5" semver "^6.0.0" +istanbul-lib-report@2.0.8, istanbul-lib-report@^2.0.2: + version "2.0.8" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" + integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== + dependencies: + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + supports-color "^6.1.0" + istanbul-lib-report@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" @@ -11426,15 +11397,6 @@ istanbul-lib-report@^1.1.5: path-parse "^1.0.5" supports-color "^3.1.2" -istanbul-lib-report@^2.0.2: - version "2.0.8" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" - integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== - dependencies: - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - supports-color "^6.1.0" - istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" @@ -11464,33 +11426,13 @@ istanbul-reports@^1.5.1: dependencies: handlebars "^4.0.3" -istanbul-reports@^2.0.1: +istanbul-reports@^2.0.1, istanbul-reports@^2.2.4: version "2.2.6" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== dependencies: handlebars "^4.1.2" -istanbul@0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" - integrity sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs= - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" - isurl@^1.0.0-alpha5: version "1.0.0" resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" @@ -11887,7 +11829,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@3.13.1, js-yaml@3.x, js-yaml@^3.11.0, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.5.1, js-yaml@^3.7.0: +js-yaml@3.13.1, js-yaml@^3.11.0, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.5.1, js-yaml@^3.7.0: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -13897,7 +13839,7 @@ nodent-transform@^3.2.9: resolved "https://registry.yarnpkg.com/nodent-transform/-/nodent-transform-3.2.9.tgz#ec11a6116b5476e60bc212371cf6b8e4c74f40b6" integrity sha512-4a5FH4WLi+daH/CGD5o/JWRR8W5tlCkd3nrDSkxbOzscJTyTUITltvOJeQjg3HJ1YgEuNyiPhQbvbtRjkQBByQ== -"nopt@2 || 3", nopt@3.x, nopt@~3.0.6: +"nopt@2 || 3", nopt@~3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= @@ -14265,7 +14207,7 @@ on-headers@~1.0.2: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@1.x, once@^1.3.0, once@^1.3.1, once@^1.4.0: +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" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= @@ -17516,7 +17458,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@1.1.7, resolve@1.1.x: +resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= @@ -18560,13 +18502,6 @@ source-map@^0.7.2: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - integrity sha1-2rc/vPwrqBm03gO9b26qSBZLP50= - dependencies: - amdefine ">=0.0.4" - space-separated-tokens@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.2.tgz#e95ab9d19ae841e200808cd96bc7bd0adbbb3412" @@ -19082,7 +19017,7 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^3.1.0, supports-color@^3.1.2: +supports-color@^3.1.2: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= @@ -21222,7 +21157,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1, which@1.3.1, which@^1.1.1, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: +which@1, which@1.3.1, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -21286,16 +21221,16 @@ winston@^3.0.0: triple-beam "^1.3.0" winston-transport "^4.3.0" -wordwrap@^1.0.0, wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + workbox-background-sync@^3.6.3: version "3.6.3" resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-3.6.3.tgz#6609a0fac9eda336a7c52e6aa227ba2ae532ad94"