Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 9329a92

Browse files
committedJan 12, 2018
Add MVP of mocha-like benchmark tests
Based on #1163 by @mohawk2
1 parent 358df97 commit 9329a92

File tree

9 files changed

+372
-10
lines changed

9 files changed

+372
-10
lines changed
 

‎.flowconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
.*/dist/.*
44
.*/coverage/.*
55
.*/resources/.*
6+
.*/benchmark/.*
67

78
[include]
89

‎.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ node_modules
99
coverage
1010
dist
1111
npm
12+
benchmark

‎.npmignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@ resources
1717
src
1818
dist
1919
npm
20+
benchmark

‎package.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"prettier": "prettier --write 'src/**/*.js'",
3030
"check": "flow check",
3131
"check-cover": "for file in {src/*.js,src/**/*.js}; do echo $file; flow coverage $file; done",
32+
"benchmark": "node resources/benchmark.js",
3233
"build": "npm run build:clean && npm run build:npm && npm run build:npm-flow && npm run build:module && npm run build:module-flow && npm run build:package-json",
3334
"build:clean": "rm -rf ./dist",
3435
"build:package-json": "node ./resources/copy-package-json.js",
@@ -56,19 +57,24 @@
5657
"babel-plugin-transform-flow-strip-types": "6.22.0",
5758
"babel-plugin-transform-object-rest-spread": "6.23.0",
5859
"babel-preset-env": "^1.5.2",
60+
"beautify-benchmark": "^0.2.4",
61+
"benchmark": "^2.1.4",
5962
"chai": "4.1.1",
6063
"chai-json-equal": "0.0.1",
6164
"chai-spies-next": "^0.8.0",
6265
"chai-subset": "1.5.0",
66+
"chalk": "^2.3.0",
6367
"coveralls": "2.13.1",
6468
"eslint": "4.4.1",
6569
"eslint-plugin-babel": "4.1.2",
6670
"eslint-plugin-flowtype": "2.35.0",
6771
"eslint-plugin-prettier": "^2.3.1",
6872
"flow-bin": "0.61.0",
6973
"isparta": "4.0.0",
74+
"microtime": "^2.1.7",
7075
"mocha": "3.5.0",
7176
"prettier": "^1.9.2",
72-
"sane": "2.0.0"
77+
"sane": "2.0.0",
78+
"shelljs": "^0.7.8"
7379
}
7480
}

‎resources/benchmark.js

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
const benchmark = require('benchmark');
2+
const beautifyBenchmark = require('beautify-benchmark');
3+
const sh = require('shelljs');
4+
const chalk = require('chalk');
5+
const pathJoin = require('path').join;
6+
7+
const args = process.argv.slice(2);
8+
args[0] = args[0] || 'HEAD';
9+
args[1] = args[1] || 'local';
10+
11+
console.log('Benchmarking revisions: ' + args.join(', '));
12+
13+
const localDistDir = './benchmark/local';
14+
sh.rm('-rf', localDistDir);
15+
console.log(`Building local dist: ${localDistDir}`);
16+
sh.mkdir('-p', localDistDir);
17+
exec(`babel src --optional runtime --copy-files --out-dir ${localDistDir}`);
18+
19+
const revisions = {};
20+
for (const arg of args) {
21+
const distPath = buildRevisionDist(arg);
22+
const distRequire = (path) => reqireFromCWD(pathJoin(distPath, path));
23+
revisions[arg] = distRequire;
24+
}
25+
26+
const suites = {};
27+
global.suite = suite;
28+
const testFiles = sh.ls(`${localDistDir}/**/__tests__/**/*-benchmark.js`);
29+
for (const file of testFiles) {
30+
reqireFromCWD(file);
31+
}
32+
33+
dummyRun();
34+
for (const [name, measures] of Object.entries(suites)) {
35+
console.log(chalk.green(name) + '\n');
36+
benchmark.invoke(measures, 'run');
37+
}
38+
39+
function reqireFromCWD(path) {
40+
return require(pathJoin(process.cwd(), path))
41+
}
42+
43+
function dummyRun() {
44+
benchmark.Suite()
45+
.add('dummy', () => { Math.pow(2, 256); })
46+
.run();
47+
}
48+
49+
function newMeasurement(name) {
50+
return new benchmark.Suite(name, {
51+
onStart(event) {
52+
console.log(' ⏱️ ', event.currentTarget.name);
53+
},
54+
onCycle(event) {
55+
beautifyBenchmark.add(event.target);
56+
},
57+
onComplete() {
58+
beautifyBenchmark.log();
59+
},
60+
});
61+
}
62+
63+
function suite(name, fn) {
64+
const measures = {};
65+
for (const [revision, distRequire] of Object.entries(revisions)) {
66+
currentRevision = revision;
67+
global.measure = (name, fn) => {
68+
measures[name] = measures[name] || newMeasurement(name);
69+
measures[name].add(revision, fn);
70+
};
71+
try {
72+
fn(distRequire);
73+
} catch (e) {
74+
console.error(e.stack);
75+
}
76+
}
77+
global.measure = undefined;
78+
suites[name] = Object.values(measures);
79+
}
80+
81+
function exec(command) {
82+
const {code, stdout, stderr} = sh.exec(command, {silent: true});
83+
if (code !== 0) {
84+
console.error(stdout);
85+
console.error(stderr);
86+
sh.exit(code);
87+
}
88+
return stdout.trim();
89+
}
90+
91+
function buildRevisionDist(revision) {
92+
if (revision === 'local') {
93+
return localDistDir;
94+
}
95+
96+
const hash = exec(`git log -1 --format=%h "${revision}"`);
97+
const buildDir = './benchmark/' + hash;
98+
const distDir = buildDir + '/dist'
99+
100+
if (sh.test('-d', buildDir)) {
101+
return distDir;
102+
}
103+
console.log(`Building "${revision}"(${hash}) revision: ${buildDir}`);
104+
sh.mkdir('-p', buildDir);
105+
exec(`git archive "${hash}" | tar -xC "${buildDir}"`);
106+
107+
const pwd = sh.pwd();
108+
sh.cd(buildDir);
109+
exec('yarn && npm run build');
110+
sh.cd(pwd);
111+
return buildDir + '/dist';
112+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* Copyright (c) 2015-present, Facebook, Inc.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
import { readFileSync } from 'fs';
9+
import { join } from 'path';
10+
import { getIntrospectionQuery } from '../../utilities/introspectionQuery';
11+
/* global suite, measure */
12+
13+
suite('Run lexer on a string', distRequire => {
14+
const { Source } = distRequire('language/source');
15+
const { createLexer } = distRequire('language/lexer');
16+
17+
function runLexer(source) {
18+
try {
19+
const lexer = createLexer(source);
20+
let token;
21+
do {
22+
token = lexer.advance();
23+
} while (token.kind !== '<EOF>');
24+
} catch (e) {
25+
console.error(e.stack);
26+
}
27+
}
28+
29+
const kitchenSinkPath = join(__dirname, './kitchen-sink.graphql');
30+
const kitchenSink = new Source(
31+
readFileSync(kitchenSinkPath, { encoding: 'utf8' }),
32+
);
33+
34+
measure('Kitchen Sink', () => runLexer(kitchenSink));
35+
36+
const introspectionQuery = new Source(getIntrospectionQuery());
37+
measure('Introspection Query', () => runLexer(introspectionQuery));
38+
});
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* Copyright (c) 2015-present, Facebook, Inc.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
import { readFileSync } from 'fs';
9+
import { join } from 'path';
10+
import { getIntrospectionQuery } from '../../utilities/introspectionQuery';
11+
/* global suite, measure */
12+
13+
suite('Parse string to AST', distRequire => {
14+
const { parse } = distRequire('language/parser');
15+
16+
const kitchenSink = readFileSync(join(__dirname, './kitchen-sink.graphql'), {
17+
encoding: 'utf8',
18+
});
19+
20+
measure('Kitchen Sink', () => parse(kitchenSink));
21+
22+
const introspectionQuery = getIntrospectionQuery();
23+
measure('Introspection Query', () => parse(introspectionQuery));
24+
});
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* Copyright (c) 2015-present, Facebook, Inc.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*/
7+
8+
import { readFileSync } from 'fs';
9+
import { join } from 'path';
10+
import { getIntrospectionQuery } from '../../utilities/introspectionQuery';
11+
/* global suite, measure */
12+
13+
suite('Print AST', distRequire => {
14+
const { print } = distRequire('language/printer');
15+
const { parse } = distRequire('language/parser');
16+
17+
const kitchenSink = readFileSync(join(__dirname, './kitchen-sink.graphql'), {
18+
encoding: 'utf8',
19+
});
20+
const kitchenSinkAST = parse(kitchenSink);
21+
measure('Kitchen Sink', () => print(kitchenSinkAST));
22+
23+
const introspectionQueryAST = parse(getIntrospectionQuery());
24+
measure('Introspection Query', () => print(introspectionQueryAST));
25+
});

‎yarn.lock

Lines changed: 163 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -715,10 +715,31 @@ bcrypt-pbkdf@^1.0.0:
715715
dependencies:
716716
tweetnacl "^0.14.3"
717717

718+
beautify-benchmark@^0.2.4:
719+
version "0.2.4"
720+
resolved "https://registry.yarnpkg.com/beautify-benchmark/-/beautify-benchmark-0.2.4.tgz#3151def14c1a2e0d07ff2e476861c7ed0e1ae39b"
721+
722+
benchmark@^2.1.4:
723+
version "2.1.4"
724+
resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629"
725+
dependencies:
726+
lodash "^4.17.4"
727+
platform "^1.3.3"
728+
718729
binary-extensions@^1.0.0:
719730
version "1.11.0"
720731
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
721732

733+
bindings@1.3.x:
734+
version "1.3.0"
735+
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7"
736+
737+
bl@^1.0.0:
738+
version "1.2.1"
739+
resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e"
740+
dependencies:
741+
readable-stream "^2.0.5"
742+
722743
block-stream@*:
723744
version "0.0.9"
724745
resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
@@ -829,7 +850,7 @@ chalk@^1.1.1, chalk@^1.1.3:
829850
strip-ansi "^3.0.0"
830851
supports-color "^2.0.0"
831852

832-
chalk@^2.0.0, chalk@^2.1.0:
853+
chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0:
833854
version "2.3.0"
834855
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
835856
dependencies:
@@ -868,6 +889,10 @@ chokidar@^1.6.1:
868889
optionalDependencies:
869890
fsevents "^1.0.0"
870891

892+
chownr@^1.0.1:
893+
version "1.0.1"
894+
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
895+
871896
circular-json@^0.3.1:
872897
version "0.3.3"
873898
resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
@@ -1062,6 +1087,12 @@ electron-to-chromium@^1.3.27:
10621087
version "1.3.27"
10631088
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d"
10641089

1090+
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
1091+
version "1.4.1"
1092+
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
1093+
dependencies:
1094+
once "^1.4.0"
1095+
10651096
escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
10661097
version "1.0.5"
10671098
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
@@ -1215,6 +1246,10 @@ expand-range@^1.8.1:
12151246
dependencies:
12161247
fill-range "^2.1.0"
12171248

1249+
expand-template@^1.0.2:
1250+
version "1.1.0"
1251+
resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.0.tgz#e09efba977bf98f9ee0ed25abd0c692e02aec3fc"
1252+
12181253
extend@~3.0.0:
12191254
version "3.0.1"
12201255
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
@@ -1394,6 +1429,10 @@ getpass@^0.1.1:
13941429
dependencies:
13951430
assert-plus "^1.0.0"
13961431

1432+
github-from-package@0.0.0:
1433+
version "0.0.0"
1434+
resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
1435+
13971436
glob-base@^0.3.0:
13981437
version "0.3.0"
13991438
resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
@@ -1428,7 +1467,7 @@ glob@^5.0.15:
14281467
once "^1.3.0"
14291468
path-is-absolute "^1.0.0"
14301469

1431-
glob@^7.0.3, glob@^7.0.5, glob@^7.1.2:
1470+
glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2:
14321471
version "7.1.2"
14331472
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
14341473
dependencies:
@@ -1592,6 +1631,10 @@ inquirer@^3.0.6:
15921631
strip-ansi "^4.0.0"
15931632
through "^2.3.6"
15941633

1634+
interpret@^1.0.0:
1635+
version "1.1.0"
1636+
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
1637+
15951638
invariant@^2.2.2:
15961639
version "2.2.2"
15971640
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
@@ -1970,6 +2013,14 @@ micromatch@^2.1.5:
19702013
parse-glob "^3.0.4"
19712014
regex-cache "^0.4.2"
19722015

2016+
microtime@^2.1.7:
2017+
version "2.1.7"
2018+
resolved "https://registry.yarnpkg.com/microtime/-/microtime-2.1.7.tgz#0904f6e755e6a7450552c191f4099e231cb5fa6c"
2019+
dependencies:
2020+
bindings "1.3.x"
2021+
nan "2.8.x"
2022+
prebuild-install "^2.1.0"
2023+
19732024
mime-db@~1.30.0:
19742025
version "1.30.0"
19752026
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
@@ -2032,14 +2083,20 @@ mute-stream@0.0.7:
20322083
version "0.0.7"
20332084
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
20342085

2035-
nan@^2.3.0:
2086+
nan@2.8.x, nan@^2.3.0:
20362087
version "2.8.0"
20372088
resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a"
20382089

20392090
natural-compare@^1.4.0:
20402091
version "1.4.0"
20412092
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
20422093

2094+
node-abi@^2.1.1:
2095+
version "2.1.2"
2096+
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.1.2.tgz#4da6caceb6685fcd31e7dd1994ef6bb7d0a9c0b2"
2097+
dependencies:
2098+
semver "^5.4.1"
2099+
20432100
node-int64@^0.4.0:
20442101
version "0.4.0"
20452102
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
@@ -2067,6 +2124,10 @@ nomnomnomnom@^2.0.0:
20672124
chalk "~0.4.0"
20682125
underscore "~1.6.0"
20692126

2127+
noop-logger@^0.1.1:
2128+
version "0.1.1"
2129+
resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
2130+
20702131
nopt@3.x:
20712132
version "3.0.6"
20722133
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
@@ -2086,7 +2147,7 @@ normalize-path@^2.0.0, normalize-path@^2.0.1:
20862147
dependencies:
20872148
remove-trailing-separator "^1.0.1"
20882149

2089-
npmlog@^4.0.2:
2150+
npmlog@^4.0.1, npmlog@^4.0.2:
20902151
version "4.1.2"
20912152
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
20922153
dependencies:
@@ -2114,7 +2175,7 @@ object.omit@^2.0.0:
21142175
for-own "^0.1.4"
21152176
is-extendable "^0.1.1"
21162177

2117-
once@1.x, once@^1.3.0, once@^1.3.3:
2178+
once@1.x, once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0:
21182179
version "1.4.0"
21192180
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
21202181
dependencies:
@@ -2144,7 +2205,7 @@ optionator@^0.8.1, optionator@^0.8.2:
21442205
type-check "~0.3.2"
21452206
wordwrap "~1.0.0"
21462207

2147-
os-homedir@^1.0.0:
2208+
os-homedir@^1.0.0, os-homedir@^1.0.1:
21482209
version "1.0.2"
21492210
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
21502211

@@ -2184,6 +2245,10 @@ path-is-inside@^1.0.1, path-is-inside@^1.0.2:
21842245
version "1.0.2"
21852246
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
21862247

2248+
path-parse@^1.0.5:
2249+
version "1.0.5"
2250+
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
2251+
21872252
pathval@^1.0.0:
21882253
version "1.1.0"
21892254
resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0"
@@ -2206,10 +2271,33 @@ pinkie@^2.0.0:
22062271
version "2.0.4"
22072272
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
22082273

2274+
platform@^1.3.3:
2275+
version "1.3.4"
2276+
resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.4.tgz#6f0fb17edaaa48f21442b3a975c063130f1c3ebd"
2277+
22092278
pluralize@^4.0.0:
22102279
version "4.0.0"
22112280
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-4.0.0.tgz#59b708c1c0190a2f692f1c7618c446b052fd1762"
22122281

2282+
prebuild-install@^2.1.0:
2283+
version "2.4.1"
2284+
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.4.1.tgz#c28ba1d1eedc17fbd6b3229a657ffc0fba479b49"
2285+
dependencies:
2286+
expand-template "^1.0.2"
2287+
github-from-package "0.0.0"
2288+
minimist "^1.2.0"
2289+
mkdirp "^0.5.1"
2290+
node-abi "^2.1.1"
2291+
noop-logger "^0.1.1"
2292+
npmlog "^4.0.1"
2293+
os-homedir "^1.0.1"
2294+
pump "^1.0.1"
2295+
rc "^1.1.6"
2296+
simple-get "^1.4.2"
2297+
tar-fs "^1.13.0"
2298+
tunnel-agent "^0.6.0"
2299+
xtend "4.0.1"
2300+
22132301
prelude-ls@~1.1.2:
22142302
version "1.1.2"
22152303
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
@@ -2238,6 +2326,13 @@ pseudomap@^1.0.2:
22382326
version "1.0.2"
22392327
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
22402328

2329+
pump@^1.0.0, pump@^1.0.1:
2330+
version "1.0.3"
2331+
resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954"
2332+
dependencies:
2333+
end-of-stream "^1.1.0"
2334+
once "^1.3.1"
2335+
22412336
punycode@^1.4.1:
22422337
version "1.4.1"
22432338
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
@@ -2257,6 +2352,15 @@ randomatic@^1.1.3:
22572352
is-number "^3.0.0"
22582353
kind-of "^4.0.0"
22592354

2355+
rc@^1.1.6:
2356+
version "1.2.3"
2357+
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.3.tgz#51575a900f8dd68381c710b4712c2154c3e2035b"
2358+
dependencies:
2359+
deep-extend "~0.4.0"
2360+
ini "~1.3.0"
2361+
minimist "^1.2.0"
2362+
strip-json-comments "~2.0.1"
2363+
22602364
rc@^1.1.7:
22612365
version "1.2.2"
22622366
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077"
@@ -2266,7 +2370,7 @@ rc@^1.1.7:
22662370
minimist "^1.2.0"
22672371
strip-json-comments "~2.0.1"
22682372

2269-
readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2:
2373+
readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2:
22702374
version "2.3.3"
22712375
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
22722376
dependencies:
@@ -2287,6 +2391,12 @@ readdirp@^2.0.0:
22872391
readable-stream "^2.0.2"
22882392
set-immediate-shim "^1.0.1"
22892393

2394+
rechoir@^0.6.2:
2395+
version "0.6.2"
2396+
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
2397+
dependencies:
2398+
resolve "^1.1.6"
2399+
22902400
regenerate@^1.2.1:
22912401
version "1.3.3"
22922402
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f"
@@ -2416,6 +2526,12 @@ resolve@1.1.x:
24162526
version "1.1.7"
24172527
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
24182528

2529+
resolve@^1.1.6:
2530+
version "1.5.0"
2531+
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
2532+
dependencies:
2533+
path-parse "^1.0.5"
2534+
24192535
restore-cursor@^2.0.0:
24202536
version "2.0.0"
24212537
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
@@ -2469,7 +2585,7 @@ sane@2.0.0:
24692585
optionalDependencies:
24702586
fsevents "^1.1.1"
24712587

2472-
semver@^5.3.0:
2588+
semver@^5.3.0, semver@^5.4.1:
24732589
version "5.4.1"
24742590
resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
24752591

@@ -2491,10 +2607,26 @@ shebang-regex@^1.0.0:
24912607
version "1.0.0"
24922608
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
24932609

2610+
shelljs@^0.7.8:
2611+
version "0.7.8"
2612+
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3"
2613+
dependencies:
2614+
glob "^7.0.0"
2615+
interpret "^1.0.0"
2616+
rechoir "^0.6.2"
2617+
24942618
signal-exit@^3.0.0, signal-exit@^3.0.2:
24952619
version "3.0.2"
24962620
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
24972621

2622+
simple-get@^1.4.2:
2623+
version "1.4.3"
2624+
resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-1.4.3.tgz#e9755eda407e96da40c5e5158c9ea37b33becbeb"
2625+
dependencies:
2626+
once "^1.3.1"
2627+
unzip-response "^1.0.0"
2628+
xtend "^4.0.0"
2629+
24982630
slash@^1.0.0:
24992631
version "1.0.0"
25002632
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
@@ -2629,6 +2761,15 @@ table@^4.0.1:
26292761
slice-ansi "1.0.0"
26302762
string-width "^2.1.1"
26312763

2764+
tar-fs@^1.13.0:
2765+
version "1.16.0"
2766+
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.0.tgz#e877a25acbcc51d8c790da1c57c9cf439817b896"
2767+
dependencies:
2768+
chownr "^1.0.1"
2769+
mkdirp "^0.5.1"
2770+
pump "^1.0.0"
2771+
tar-stream "^1.1.2"
2772+
26322773
tar-pack@^3.4.0:
26332774
version "3.4.1"
26342775
resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f"
@@ -2642,6 +2783,15 @@ tar-pack@^3.4.0:
26422783
tar "^2.2.1"
26432784
uid-number "^0.0.6"
26442785

2786+
tar-stream@^1.1.2:
2787+
version "1.5.5"
2788+
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.5.tgz#5cad84779f45c83b1f2508d96b09d88c7218af55"
2789+
dependencies:
2790+
bl "^1.0.0"
2791+
end-of-stream "^1.0.0"
2792+
readable-stream "^2.0.0"
2793+
xtend "^4.0.0"
2794+
26452795
tar@^2.2.1:
26462796
version "2.2.1"
26472797
resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
@@ -2739,6 +2889,10 @@ underscore@~1.6.0:
27392889
version "1.6.0"
27402890
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8"
27412891

2892+
unzip-response@^1.0.0:
2893+
version "1.0.2"
2894+
resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe"
2895+
27422896
user-home@^1.1.1:
27432897
version "1.1.1"
27442898
resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
@@ -2813,7 +2967,7 @@ write@^0.2.1:
28132967
dependencies:
28142968
mkdirp "^0.5.1"
28152969

2816-
xtend@^4.0.0:
2970+
xtend@4.0.1, xtend@^4.0.0:
28172971
version "4.0.1"
28182972
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
28192973

0 commit comments

Comments
 (0)
Please sign in to comment.