refactor: coverage now reacts instead of being told what to do

This commit is contained in:
Andre Medeiros 2019-09-04 16:13:28 -04:00
parent 1456ec60b7
commit 988e6399a0
11 changed files with 108 additions and 137 deletions

View File

@ -142,6 +142,7 @@ export class ContractEnhanced {
line,
loc: location,
name,
decl: location
};
this.coverage.f[coverageId] = 0;
this.functionsBodyLocation[coverageId] = bodyLocation;

View File

@ -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);

View File

@ -26,6 +26,7 @@ export interface Coverage {
[functionId: number]: {
line: number;
loc: Location;
decl: Location;
name: string;
skip?: boolean;
};

View File

@ -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);
});
},
(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;

View File

@ -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) => {

View File

@ -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"
},

View File

@ -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;

View File

@ -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",

View File

@ -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) => {

View File

@ -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) {

119
yarn.lock
View File

@ -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"