├── .gitignore
├── favicon.png
├── package.json
├── .eslintrc.json
├── worker.js
├── README.md
├── LICENSE
├── index.html
├── bf2wasm.js
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/verdie-g/brainfuck2wasm/HEAD/favicon.png
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "devDependencies": {
3 | "eslint": "^4.18.2",
4 | "eslint-config-airbnb-base": "^12.1.0",
5 | "eslint-plugin-import": "^2.9.0"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "es6": true
4 | },
5 | "extends": "airbnb-base",
6 | "rules": {
7 | "func-names": "off",
8 | "max-len": "off",
9 | "no-bitwise": "off",
10 | "no-param-reassign": "off",
11 | "strict": "off"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/worker.js:
--------------------------------------------------------------------------------
1 | importScripts('bf2wasm.js');
2 |
3 | onmessage = e => {
4 | const bf = e.data;
5 | const wasm = bfToWasm(bf);
6 | const memory = new WebAssembly.Memory({ initial: 2 });
7 | const imports = { imports: { memory: memory } };
8 | WebAssembly.instantiate(wasm, imports).then((instance) =>
9 | postMessage(new Int32Array(memory.buffer.slice(0, 65536)))
10 | );
11 | };
12 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # brainfuck2wasm
2 |
3 | Compile brainfuck to webassembly.
4 |
5 | ```ts
6 | function bfToWasm(bfStr: string, optimize: boolean): Uint8Array
7 | ```
8 |
9 | Two pages of the linear memory are used. Each page is 64 KiB. The first one is
10 | for the output and the second one is for the brainfuck's array which is an
11 | array of 16384 4 byte wide cells.
12 |
13 | Brainfuck's result is output in two format : string and array of int32.
14 |
15 | ## TODO
16 | - Optimize brainfuck
17 | - Input instruction
18 | - Grow brainfuck's memory dynamically
19 | - Error handling
20 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Grégoire Verdier
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
15 | bf2wasm
16 |
17 |
18 |
19 |
20 |
21 |
bf2wasm
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | Brainfuck
30 |
65 |
66 |
67 |
68 |
73 |
74 |
75 |
76 |
77 |
78 | String Output
79 |
80 |
81 |
82 |
83 |
84 |
85 | Int32 Output
86 |
87 |
88 |
89 |
90 |
91 |
92 |
97 |
98 |
99 |
128 |
129 |
130 |
--------------------------------------------------------------------------------
/bf2wasm.js:
--------------------------------------------------------------------------------
1 | const bfToWasm = (function() {
2 | 'use strict';
3 |
4 | const CELL_SIZE = 4;
5 | const PAGE_SIZE = 65536;
6 |
7 | const section = {
8 | type: 0x01,
9 | import: 0x02,
10 | func: 0x03,
11 | table: 0x04,
12 | memory: 0x05,
13 | global: 0x06,
14 | export: 0x07,
15 | start: 0x08,
16 | elem: 0x09,
17 | code: 0x0a,
18 | };
19 |
20 | const type = {
21 | block: 0x40,
22 | func: 0x60,
23 | anyfunc: 0x70,
24 | i32: 0x7f,
25 | i64: 0x7e,
26 | f32: 0x7d,
27 | f64: 0x7c,
28 | };
29 |
30 | const wasmInstr = {
31 | block: 0x02,
32 | loop: 0x03,
33 | end: 0x0b,
34 | br: 0x0c,
35 | br_if: 0x0d,
36 | getLocal: 0x20,
37 | setLocal: 0x21,
38 | i32load: 0x28,
39 | i32store: 0x36,
40 | i32const: 0x41,
41 | i32eqz: 0x45,
42 | i32add: 0x6a,
43 | i32sub: 0x6b,
44 | };
45 |
46 | // local 0 : brainfuck array index
47 | // local 1 : output array index
48 | const instrToWasm = {
49 | '>': () => [
50 | wasmInstr.getLocal, 0x00,
51 | wasmInstr.i32const, CELL_SIZE,
52 | wasmInstr.i32add,
53 | wasmInstr.setLocal, 0x00,
54 | ],
55 | '<': () => [
56 | wasmInstr.getLocal, 0x00,
57 | wasmInstr.i32const, CELL_SIZE,
58 | wasmInstr.i32sub,
59 | wasmInstr.setLocal, 0x00,
60 | ],
61 | '+': () => [
62 | wasmInstr.getLocal, 0x00,
63 | wasmInstr.getLocal, 0x00,
64 | wasmInstr.i32load, 0x02, 0x00,
65 | wasmInstr.i32const, 0x01,
66 | wasmInstr.i32add,
67 | wasmInstr.i32store, 0x02, 0x00,
68 | ],
69 | '-': () => [
70 | wasmInstr.getLocal, 0x00,
71 | wasmInstr.getLocal, 0x00,
72 | wasmInstr.i32load, 0x02, 0x00,
73 | wasmInstr.i32const, 0x01,
74 | wasmInstr.i32sub,
75 | wasmInstr.i32store, 0x02, 0x00,
76 | ],
77 | ',': () => [
78 |
79 | ],
80 | '.': () => [
81 | wasmInstr.getLocal, 0x01,
82 | wasmInstr.getLocal, 0x00,
83 | wasmInstr.i32load, 0x02, 0x00,
84 | wasmInstr.i32store, 0x02, 0x00,
85 |
86 | wasmInstr.getLocal, 0x01,
87 | wasmInstr.i32const, CELL_SIZE,
88 | wasmInstr.i32add,
89 | wasmInstr.setLocal, 0x01,
90 | ],
91 | '[': () => [
92 | wasmInstr.block,
93 | type.block,
94 | wasmInstr.loop,
95 | type.block,
96 | ],
97 | ']': () => [
98 | wasmInstr.getLocal, 0x00,
99 | wasmInstr.i32load, 0x02, 0x00,
100 | wasmInstr.i32eqz,
101 | wasmInstr.br_if, 0x01,
102 | wasmInstr.br, 0x00,
103 | wasmInstr.end,
104 | wasmInstr.end,
105 | ],
106 | };
107 |
108 | function BfInstr(instrSymbol, toWasm, extraParams) {
109 | this.instrSymbol = instrSymbol;
110 | this.toWasm = toWasm;
111 | this.extraParams = extraParams || [];
112 | }
113 |
114 | function stripComments(bfStr) {
115 | const notInstrExp = /[^<>+\-,.[\]]/g;
116 | return bfStr.replace(notInstrExp, '');
117 | }
118 |
119 | function parseBf(bfStr) {
120 | const instrs = [];
121 | for (let i = 0; i < bfStr.length; i += 1) {
122 | const toWasm = instrToWasm[bfStr[i]];
123 | instrs.push(new BfInstr(bfStr[i], toWasm));
124 | }
125 | return instrs;
126 | }
127 |
128 | function optimizeInstrs(instrs) {
129 | return instrs;
130 | }
131 |
132 | function intToVarint(n) {
133 | const buffer = [];
134 | let more = true;
135 | while (more) {
136 | let byte = n & 0x7F;
137 | n >>>= 7;
138 | if ((n === 0 && (byte & 0x40) === 0) || (n === -1 && (byte & 0x40) !== 0)) {
139 | more = false;
140 | } else {
141 | byte |= 0x80;
142 | }
143 | buffer.push(byte);
144 | }
145 | return buffer;
146 | }
147 |
148 | function intToVaruint(n) {
149 | const buffer = [];
150 | do {
151 | let byte = n & 0x7F;
152 | n >>>= 7;
153 | if (n !== 0) {
154 | byte |= 0x80;
155 | }
156 | buffer.push(byte);
157 | } while (n !== 0);
158 | return buffer;
159 | }
160 |
161 | function createSection(sectionType, ...data) {
162 | const flatData = [].concat(...data);
163 | return [section[sectionType], ...intToVaruint(flatData.length), ...flatData];
164 | }
165 |
166 | function getStrBytes(str) {
167 | const bytes = [];
168 | for (let i = 0; i < str.length; i += 1) {
169 | bytes.push(str.charCodeAt(i));
170 | }
171 | return bytes;
172 | }
173 |
174 | function compileToWasm(instrs) {
175 | const magicNumber = [0x00, 0x61, 0x73, 0x6d];
176 | const version = [0x01, 0x00, 0x00, 0x00];
177 |
178 | const functionsCount = 0x01;
179 | const startFuncIndex = 0x00;
180 |
181 | const startFunctionSignature = [type.func, 0x00, 0x00];
182 | const typeSection = createSection('type', functionsCount, startFunctionSignature);
183 |
184 | const importsCount = 0x01;
185 | const importModuleName = getStrBytes('imports');
186 | const importExportName = getStrBytes('memory');
187 | const importMemoryKind = 0x02;
188 | const memoryDesc = [0x00, 0x02];
189 | const importSection = createSection('import', importsCount, importModuleName.length, importModuleName, importExportName.length, importExportName, importMemoryKind, memoryDesc);
190 |
191 | const funcSection = createSection('func', functionsCount, startFuncIndex);
192 |
193 | const startSection = createSection('start', startFuncIndex);
194 |
195 | const localEntriesCount = 0x01;
196 | const i32VarCount = 0x02;
197 | const initOutputIndex = [wasmInstr.i32const, ...intToVarint(PAGE_SIZE), wasmInstr.setLocal, 0x00];
198 | const functionBody = instrs.reduce((res, instr) => res.concat(instr.toWasm(...instr.extraParams)), initOutputIndex);
199 | functionBody.push(wasmInstr.end);
200 | const functionLength = intToVaruint(functionBody.length + 3);
201 | const codeSection = createSection('code', functionsCount, ...functionLength, localEntriesCount, i32VarCount, type.i32, functionBody);
202 |
203 | const buffer = [...magicNumber, ...version, ...typeSection, ...importSection, ...funcSection, ...startSection, ...codeSection];
204 | return Uint8Array.from(buffer);
205 | }
206 |
207 | return function (bfStr, optimize = false) {
208 | if (bfStr == null) {
209 | throw new Error('Argument 0 cannot be null');
210 | }
211 |
212 | if (typeof (bfStr) !== 'string') {
213 | throw new Error('Expected string for argument 0');
214 | }
215 |
216 | if (typeof (optimize) !== 'boolean') {
217 | throw new Error('Expected boolean for argument 1');
218 | }
219 |
220 | const bfNoComment = stripComments(bfStr);
221 | let instrs = parseBf(bfNoComment);
222 | if (optimize) {
223 | instrs = optimizeInstrs(instrs);
224 | }
225 | return compileToWasm(instrs);
226 | };
227 | })();
228 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | acorn-jsx@^3.0.0:
6 | version "3.0.1"
7 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
8 | dependencies:
9 | acorn "^3.0.4"
10 |
11 | acorn@^3.0.4:
12 | version "3.3.0"
13 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
14 |
15 | acorn@^5.5.0:
16 | version "5.5.1"
17 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.1.tgz#84e05a9ea0acbe131227da50301e62464dc9c1d8"
18 |
19 | ajv-keywords@^2.1.0:
20 | version "2.1.1"
21 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
22 |
23 | ajv@^5.2.3, ajv@^5.3.0:
24 | version "5.5.2"
25 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
26 | dependencies:
27 | co "^4.6.0"
28 | fast-deep-equal "^1.0.0"
29 | fast-json-stable-stringify "^2.0.0"
30 | json-schema-traverse "^0.3.0"
31 |
32 | ansi-escapes@^3.0.0:
33 | version "3.0.0"
34 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92"
35 |
36 | ansi-regex@^2.0.0:
37 | version "2.1.1"
38 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
39 |
40 | ansi-regex@^3.0.0:
41 | version "3.0.0"
42 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
43 |
44 | ansi-styles@^2.2.1:
45 | version "2.2.1"
46 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
47 |
48 | ansi-styles@^3.2.1:
49 | version "3.2.1"
50 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
51 | dependencies:
52 | color-convert "^1.9.0"
53 |
54 | argparse@^1.0.7:
55 | version "1.0.10"
56 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
57 | dependencies:
58 | sprintf-js "~1.0.2"
59 |
60 | array-union@^1.0.1:
61 | version "1.0.2"
62 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
63 | dependencies:
64 | array-uniq "^1.0.1"
65 |
66 | array-uniq@^1.0.1:
67 | version "1.0.3"
68 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
69 |
70 | arrify@^1.0.0:
71 | version "1.0.1"
72 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
73 |
74 | babel-code-frame@^6.22.0:
75 | version "6.26.0"
76 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
77 | dependencies:
78 | chalk "^1.1.3"
79 | esutils "^2.0.2"
80 | js-tokens "^3.0.2"
81 |
82 | balanced-match@^1.0.0:
83 | version "1.0.0"
84 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
85 |
86 | brace-expansion@^1.1.7:
87 | version "1.1.11"
88 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
89 | dependencies:
90 | balanced-match "^1.0.0"
91 | concat-map "0.0.1"
92 |
93 | builtin-modules@^1.0.0, builtin-modules@^1.1.1:
94 | version "1.1.1"
95 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
96 |
97 | caller-path@^0.1.0:
98 | version "0.1.0"
99 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
100 | dependencies:
101 | callsites "^0.2.0"
102 |
103 | callsites@^0.2.0:
104 | version "0.2.0"
105 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
106 |
107 | chalk@^1.1.3:
108 | version "1.1.3"
109 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
110 | dependencies:
111 | ansi-styles "^2.2.1"
112 | escape-string-regexp "^1.0.2"
113 | has-ansi "^2.0.0"
114 | strip-ansi "^3.0.0"
115 | supports-color "^2.0.0"
116 |
117 | chalk@^2.0.0, chalk@^2.1.0:
118 | version "2.3.2"
119 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65"
120 | dependencies:
121 | ansi-styles "^3.2.1"
122 | escape-string-regexp "^1.0.5"
123 | supports-color "^5.3.0"
124 |
125 | chardet@^0.4.0:
126 | version "0.4.2"
127 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
128 |
129 | circular-json@^0.3.1:
130 | version "0.3.3"
131 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
132 |
133 | cli-cursor@^2.1.0:
134 | version "2.1.0"
135 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
136 | dependencies:
137 | restore-cursor "^2.0.0"
138 |
139 | cli-width@^2.0.0:
140 | version "2.2.0"
141 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
142 |
143 | co@^4.6.0:
144 | version "4.6.0"
145 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
146 |
147 | color-convert@^1.9.0:
148 | version "1.9.1"
149 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
150 | dependencies:
151 | color-name "^1.1.1"
152 |
153 | color-name@^1.1.1:
154 | version "1.1.3"
155 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
156 |
157 | concat-map@0.0.1:
158 | version "0.0.1"
159 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
160 |
161 | concat-stream@^1.6.0:
162 | version "1.6.1"
163 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.1.tgz#261b8f518301f1d834e36342b9fea095d2620a26"
164 | dependencies:
165 | inherits "^2.0.3"
166 | readable-stream "^2.2.2"
167 | typedarray "^0.0.6"
168 |
169 | contains-path@^0.1.0:
170 | version "0.1.0"
171 | resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
172 |
173 | core-util-is@~1.0.0:
174 | version "1.0.2"
175 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
176 |
177 | cross-spawn@^5.1.0:
178 | version "5.1.0"
179 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
180 | dependencies:
181 | lru-cache "^4.0.1"
182 | shebang-command "^1.2.0"
183 | which "^1.2.9"
184 |
185 | debug@^2.6.8, debug@^2.6.9:
186 | version "2.6.9"
187 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
188 | dependencies:
189 | ms "2.0.0"
190 |
191 | debug@^3.1.0:
192 | version "3.1.0"
193 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
194 | dependencies:
195 | ms "2.0.0"
196 |
197 | deep-is@~0.1.3:
198 | version "0.1.3"
199 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
200 |
201 | del@^2.0.2:
202 | version "2.2.2"
203 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
204 | dependencies:
205 | globby "^5.0.0"
206 | is-path-cwd "^1.0.0"
207 | is-path-in-cwd "^1.0.0"
208 | object-assign "^4.0.1"
209 | pify "^2.0.0"
210 | pinkie-promise "^2.0.0"
211 | rimraf "^2.2.8"
212 |
213 | doctrine@1.5.0:
214 | version "1.5.0"
215 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
216 | dependencies:
217 | esutils "^2.0.2"
218 | isarray "^1.0.0"
219 |
220 | doctrine@^2.1.0:
221 | version "2.1.0"
222 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
223 | dependencies:
224 | esutils "^2.0.2"
225 |
226 | error-ex@^1.2.0:
227 | version "1.3.1"
228 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
229 | dependencies:
230 | is-arrayish "^0.2.1"
231 |
232 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
233 | version "1.0.5"
234 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
235 |
236 | eslint-config-airbnb-base@^12.1.0:
237 | version "12.1.0"
238 | resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944"
239 | dependencies:
240 | eslint-restricted-globals "^0.1.1"
241 |
242 | eslint-import-resolver-node@^0.3.1:
243 | version "0.3.2"
244 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
245 | dependencies:
246 | debug "^2.6.9"
247 | resolve "^1.5.0"
248 |
249 | eslint-module-utils@^2.1.1:
250 | version "2.1.1"
251 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449"
252 | dependencies:
253 | debug "^2.6.8"
254 | pkg-dir "^1.0.0"
255 |
256 | eslint-plugin-import@^2.9.0:
257 | version "2.9.0"
258 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.9.0.tgz#26002efbfca5989b7288ac047508bd24f217b169"
259 | dependencies:
260 | builtin-modules "^1.1.1"
261 | contains-path "^0.1.0"
262 | debug "^2.6.8"
263 | doctrine "1.5.0"
264 | eslint-import-resolver-node "^0.3.1"
265 | eslint-module-utils "^2.1.1"
266 | has "^1.0.1"
267 | lodash "^4.17.4"
268 | minimatch "^3.0.3"
269 | read-pkg-up "^2.0.0"
270 |
271 | eslint-restricted-globals@^0.1.1:
272 | version "0.1.1"
273 | resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7"
274 |
275 | eslint-scope@^3.7.1:
276 | version "3.7.1"
277 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
278 | dependencies:
279 | esrecurse "^4.1.0"
280 | estraverse "^4.1.1"
281 |
282 | eslint-visitor-keys@^1.0.0:
283 | version "1.0.0"
284 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
285 |
286 | eslint@^4.18.2:
287 | version "4.18.2"
288 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.2.tgz#0f81267ad1012e7d2051e186a9004cc2267b8d45"
289 | dependencies:
290 | ajv "^5.3.0"
291 | babel-code-frame "^6.22.0"
292 | chalk "^2.1.0"
293 | concat-stream "^1.6.0"
294 | cross-spawn "^5.1.0"
295 | debug "^3.1.0"
296 | doctrine "^2.1.0"
297 | eslint-scope "^3.7.1"
298 | eslint-visitor-keys "^1.0.0"
299 | espree "^3.5.2"
300 | esquery "^1.0.0"
301 | esutils "^2.0.2"
302 | file-entry-cache "^2.0.0"
303 | functional-red-black-tree "^1.0.1"
304 | glob "^7.1.2"
305 | globals "^11.0.1"
306 | ignore "^3.3.3"
307 | imurmurhash "^0.1.4"
308 | inquirer "^3.0.6"
309 | is-resolvable "^1.0.0"
310 | js-yaml "^3.9.1"
311 | json-stable-stringify-without-jsonify "^1.0.1"
312 | levn "^0.3.0"
313 | lodash "^4.17.4"
314 | minimatch "^3.0.2"
315 | mkdirp "^0.5.1"
316 | natural-compare "^1.4.0"
317 | optionator "^0.8.2"
318 | path-is-inside "^1.0.2"
319 | pluralize "^7.0.0"
320 | progress "^2.0.0"
321 | require-uncached "^1.0.3"
322 | semver "^5.3.0"
323 | strip-ansi "^4.0.0"
324 | strip-json-comments "~2.0.1"
325 | table "4.0.2"
326 | text-table "~0.2.0"
327 |
328 | espree@^3.5.2:
329 | version "3.5.4"
330 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
331 | dependencies:
332 | acorn "^5.5.0"
333 | acorn-jsx "^3.0.0"
334 |
335 | esprima@^4.0.0:
336 | version "4.0.1"
337 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
338 |
339 | esquery@^1.0.0:
340 | version "1.0.0"
341 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
342 | dependencies:
343 | estraverse "^4.0.0"
344 |
345 | esrecurse@^4.1.0:
346 | version "4.2.1"
347 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
348 | dependencies:
349 | estraverse "^4.1.0"
350 |
351 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
352 | version "4.2.0"
353 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
354 |
355 | esutils@^2.0.2:
356 | version "2.0.2"
357 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
358 |
359 | external-editor@^2.0.4:
360 | version "2.1.0"
361 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48"
362 | dependencies:
363 | chardet "^0.4.0"
364 | iconv-lite "^0.4.17"
365 | tmp "^0.0.33"
366 |
367 | fast-deep-equal@^1.0.0:
368 | version "1.1.0"
369 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
370 |
371 | fast-json-stable-stringify@^2.0.0:
372 | version "2.0.0"
373 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
374 |
375 | fast-levenshtein@~2.0.4:
376 | version "2.0.6"
377 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
378 |
379 | figures@^2.0.0:
380 | version "2.0.0"
381 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
382 | dependencies:
383 | escape-string-regexp "^1.0.5"
384 |
385 | file-entry-cache@^2.0.0:
386 | version "2.0.0"
387 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
388 | dependencies:
389 | flat-cache "^1.2.1"
390 | object-assign "^4.0.1"
391 |
392 | find-up@^1.0.0:
393 | version "1.1.2"
394 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
395 | dependencies:
396 | path-exists "^2.0.0"
397 | pinkie-promise "^2.0.0"
398 |
399 | find-up@^2.0.0:
400 | version "2.1.0"
401 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
402 | dependencies:
403 | locate-path "^2.0.0"
404 |
405 | flat-cache@^1.2.1:
406 | version "1.3.0"
407 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481"
408 | dependencies:
409 | circular-json "^0.3.1"
410 | del "^2.0.2"
411 | graceful-fs "^4.1.2"
412 | write "^0.2.1"
413 |
414 | fs.realpath@^1.0.0:
415 | version "1.0.0"
416 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
417 |
418 | function-bind@^1.0.2:
419 | version "1.1.1"
420 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
421 |
422 | functional-red-black-tree@^1.0.1:
423 | version "1.0.1"
424 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
425 |
426 | glob@^7.0.3, glob@^7.0.5, glob@^7.1.2:
427 | version "7.1.2"
428 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
429 | dependencies:
430 | fs.realpath "^1.0.0"
431 | inflight "^1.0.4"
432 | inherits "2"
433 | minimatch "^3.0.4"
434 | once "^1.3.0"
435 | path-is-absolute "^1.0.0"
436 |
437 | globals@^11.0.1:
438 | version "11.3.0"
439 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.3.0.tgz#e04fdb7b9796d8adac9c8f64c14837b2313378b0"
440 |
441 | globby@^5.0.0:
442 | version "5.0.0"
443 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
444 | dependencies:
445 | array-union "^1.0.1"
446 | arrify "^1.0.0"
447 | glob "^7.0.3"
448 | object-assign "^4.0.1"
449 | pify "^2.0.0"
450 | pinkie-promise "^2.0.0"
451 |
452 | graceful-fs@^4.1.2:
453 | version "4.1.11"
454 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
455 |
456 | has-ansi@^2.0.0:
457 | version "2.0.0"
458 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
459 | dependencies:
460 | ansi-regex "^2.0.0"
461 |
462 | has-flag@^3.0.0:
463 | version "3.0.0"
464 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
465 |
466 | has@^1.0.1:
467 | version "1.0.1"
468 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
469 | dependencies:
470 | function-bind "^1.0.2"
471 |
472 | hosted-git-info@^2.1.4:
473 | version "2.5.0"
474 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
475 |
476 | iconv-lite@^0.4.17:
477 | version "0.4.19"
478 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
479 |
480 | ignore@^3.3.3:
481 | version "3.3.7"
482 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021"
483 |
484 | imurmurhash@^0.1.4:
485 | version "0.1.4"
486 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
487 |
488 | inflight@^1.0.4:
489 | version "1.0.6"
490 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
491 | dependencies:
492 | once "^1.3.0"
493 | wrappy "1"
494 |
495 | inherits@2, inherits@^2.0.3, inherits@~2.0.3:
496 | version "2.0.3"
497 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
498 |
499 | inquirer@^3.0.6:
500 | version "3.3.0"
501 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
502 | dependencies:
503 | ansi-escapes "^3.0.0"
504 | chalk "^2.0.0"
505 | cli-cursor "^2.1.0"
506 | cli-width "^2.0.0"
507 | external-editor "^2.0.4"
508 | figures "^2.0.0"
509 | lodash "^4.3.0"
510 | mute-stream "0.0.7"
511 | run-async "^2.2.0"
512 | rx-lite "^4.0.8"
513 | rx-lite-aggregates "^4.0.8"
514 | string-width "^2.1.0"
515 | strip-ansi "^4.0.0"
516 | through "^2.3.6"
517 |
518 | is-arrayish@^0.2.1:
519 | version "0.2.1"
520 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
521 |
522 | is-builtin-module@^1.0.0:
523 | version "1.0.0"
524 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
525 | dependencies:
526 | builtin-modules "^1.0.0"
527 |
528 | is-fullwidth-code-point@^2.0.0:
529 | version "2.0.0"
530 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
531 |
532 | is-path-cwd@^1.0.0:
533 | version "1.0.0"
534 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
535 |
536 | is-path-in-cwd@^1.0.0:
537 | version "1.0.0"
538 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
539 | dependencies:
540 | is-path-inside "^1.0.0"
541 |
542 | is-path-inside@^1.0.0:
543 | version "1.0.1"
544 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
545 | dependencies:
546 | path-is-inside "^1.0.1"
547 |
548 | is-promise@^2.1.0:
549 | version "2.1.0"
550 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
551 |
552 | is-resolvable@^1.0.0:
553 | version "1.1.0"
554 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
555 |
556 | isarray@^1.0.0, isarray@~1.0.0:
557 | version "1.0.0"
558 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
559 |
560 | isexe@^2.0.0:
561 | version "2.0.0"
562 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
563 |
564 | js-tokens@^3.0.2:
565 | version "3.0.2"
566 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
567 |
568 | js-yaml@^3.9.1:
569 | version "3.13.1"
570 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
571 | dependencies:
572 | argparse "^1.0.7"
573 | esprima "^4.0.0"
574 |
575 | json-schema-traverse@^0.3.0:
576 | version "0.3.1"
577 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
578 |
579 | json-stable-stringify-without-jsonify@^1.0.1:
580 | version "1.0.1"
581 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
582 |
583 | levn@^0.3.0, levn@~0.3.0:
584 | version "0.3.0"
585 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
586 | dependencies:
587 | prelude-ls "~1.1.2"
588 | type-check "~0.3.2"
589 |
590 | load-json-file@^2.0.0:
591 | version "2.0.0"
592 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
593 | dependencies:
594 | graceful-fs "^4.1.2"
595 | parse-json "^2.2.0"
596 | pify "^2.0.0"
597 | strip-bom "^3.0.0"
598 |
599 | locate-path@^2.0.0:
600 | version "2.0.0"
601 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
602 | dependencies:
603 | p-locate "^2.0.0"
604 | path-exists "^3.0.0"
605 |
606 | lodash@^4.17.4, lodash@^4.3.0:
607 | version "4.17.15"
608 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
609 |
610 | lru-cache@^4.0.1:
611 | version "4.1.1"
612 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
613 | dependencies:
614 | pseudomap "^1.0.2"
615 | yallist "^2.1.2"
616 |
617 | mimic-fn@^1.0.0:
618 | version "1.2.0"
619 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
620 |
621 | minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
622 | version "3.0.4"
623 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
624 | dependencies:
625 | brace-expansion "^1.1.7"
626 |
627 | minimist@0.0.8:
628 | version "0.0.8"
629 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
630 |
631 | mkdirp@^0.5.1:
632 | version "0.5.1"
633 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
634 | dependencies:
635 | minimist "0.0.8"
636 |
637 | ms@2.0.0:
638 | version "2.0.0"
639 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
640 |
641 | mute-stream@0.0.7:
642 | version "0.0.7"
643 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
644 |
645 | natural-compare@^1.4.0:
646 | version "1.4.0"
647 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
648 |
649 | normalize-package-data@^2.3.2:
650 | version "2.4.0"
651 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
652 | dependencies:
653 | hosted-git-info "^2.1.4"
654 | is-builtin-module "^1.0.0"
655 | semver "2 || 3 || 4 || 5"
656 | validate-npm-package-license "^3.0.1"
657 |
658 | object-assign@^4.0.1:
659 | version "4.1.1"
660 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
661 |
662 | once@^1.3.0:
663 | version "1.4.0"
664 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
665 | dependencies:
666 | wrappy "1"
667 |
668 | onetime@^2.0.0:
669 | version "2.0.1"
670 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
671 | dependencies:
672 | mimic-fn "^1.0.0"
673 |
674 | optionator@^0.8.2:
675 | version "0.8.2"
676 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
677 | dependencies:
678 | deep-is "~0.1.3"
679 | fast-levenshtein "~2.0.4"
680 | levn "~0.3.0"
681 | prelude-ls "~1.1.2"
682 | type-check "~0.3.2"
683 | wordwrap "~1.0.0"
684 |
685 | os-tmpdir@~1.0.2:
686 | version "1.0.2"
687 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
688 |
689 | p-limit@^1.1.0:
690 | version "1.2.0"
691 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c"
692 | dependencies:
693 | p-try "^1.0.0"
694 |
695 | p-locate@^2.0.0:
696 | version "2.0.0"
697 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
698 | dependencies:
699 | p-limit "^1.1.0"
700 |
701 | p-try@^1.0.0:
702 | version "1.0.0"
703 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
704 |
705 | parse-json@^2.2.0:
706 | version "2.2.0"
707 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
708 | dependencies:
709 | error-ex "^1.2.0"
710 |
711 | path-exists@^2.0.0:
712 | version "2.1.0"
713 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
714 | dependencies:
715 | pinkie-promise "^2.0.0"
716 |
717 | path-exists@^3.0.0:
718 | version "3.0.0"
719 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
720 |
721 | path-is-absolute@^1.0.0:
722 | version "1.0.1"
723 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
724 |
725 | path-is-inside@^1.0.1, path-is-inside@^1.0.2:
726 | version "1.0.2"
727 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
728 |
729 | path-parse@^1.0.5:
730 | version "1.0.5"
731 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
732 |
733 | path-type@^2.0.0:
734 | version "2.0.0"
735 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
736 | dependencies:
737 | pify "^2.0.0"
738 |
739 | pify@^2.0.0:
740 | version "2.3.0"
741 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
742 |
743 | pinkie-promise@^2.0.0:
744 | version "2.0.1"
745 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
746 | dependencies:
747 | pinkie "^2.0.0"
748 |
749 | pinkie@^2.0.0:
750 | version "2.0.4"
751 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
752 |
753 | pkg-dir@^1.0.0:
754 | version "1.0.0"
755 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
756 | dependencies:
757 | find-up "^1.0.0"
758 |
759 | pluralize@^7.0.0:
760 | version "7.0.0"
761 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
762 |
763 | prelude-ls@~1.1.2:
764 | version "1.1.2"
765 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
766 |
767 | process-nextick-args@~2.0.0:
768 | version "2.0.0"
769 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
770 |
771 | progress@^2.0.0:
772 | version "2.0.0"
773 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
774 |
775 | pseudomap@^1.0.2:
776 | version "1.0.2"
777 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
778 |
779 | read-pkg-up@^2.0.0:
780 | version "2.0.0"
781 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
782 | dependencies:
783 | find-up "^2.0.0"
784 | read-pkg "^2.0.0"
785 |
786 | read-pkg@^2.0.0:
787 | version "2.0.0"
788 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
789 | dependencies:
790 | load-json-file "^2.0.0"
791 | normalize-package-data "^2.3.2"
792 | path-type "^2.0.0"
793 |
794 | readable-stream@^2.2.2:
795 | version "2.3.5"
796 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d"
797 | dependencies:
798 | core-util-is "~1.0.0"
799 | inherits "~2.0.3"
800 | isarray "~1.0.0"
801 | process-nextick-args "~2.0.0"
802 | safe-buffer "~5.1.1"
803 | string_decoder "~1.0.3"
804 | util-deprecate "~1.0.1"
805 |
806 | require-uncached@^1.0.3:
807 | version "1.0.3"
808 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
809 | dependencies:
810 | caller-path "^0.1.0"
811 | resolve-from "^1.0.0"
812 |
813 | resolve-from@^1.0.0:
814 | version "1.0.1"
815 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
816 |
817 | resolve@^1.5.0:
818 | version "1.5.0"
819 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
820 | dependencies:
821 | path-parse "^1.0.5"
822 |
823 | restore-cursor@^2.0.0:
824 | version "2.0.0"
825 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
826 | dependencies:
827 | onetime "^2.0.0"
828 | signal-exit "^3.0.2"
829 |
830 | rimraf@^2.2.8:
831 | version "2.6.2"
832 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
833 | dependencies:
834 | glob "^7.0.5"
835 |
836 | run-async@^2.2.0:
837 | version "2.3.0"
838 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
839 | dependencies:
840 | is-promise "^2.1.0"
841 |
842 | rx-lite-aggregates@^4.0.8:
843 | version "4.0.8"
844 | resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
845 | dependencies:
846 | rx-lite "*"
847 |
848 | rx-lite@*, rx-lite@^4.0.8:
849 | version "4.0.8"
850 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
851 |
852 | safe-buffer@~5.1.0, safe-buffer@~5.1.1:
853 | version "5.1.1"
854 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
855 |
856 | "semver@2 || 3 || 4 || 5", semver@^5.3.0:
857 | version "5.5.0"
858 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
859 |
860 | shebang-command@^1.2.0:
861 | version "1.2.0"
862 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
863 | dependencies:
864 | shebang-regex "^1.0.0"
865 |
866 | shebang-regex@^1.0.0:
867 | version "1.0.0"
868 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
869 |
870 | signal-exit@^3.0.2:
871 | version "3.0.2"
872 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
873 |
874 | slice-ansi@1.0.0:
875 | version "1.0.0"
876 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
877 | dependencies:
878 | is-fullwidth-code-point "^2.0.0"
879 |
880 | spdx-correct@^3.0.0:
881 | version "3.0.0"
882 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82"
883 | dependencies:
884 | spdx-expression-parse "^3.0.0"
885 | spdx-license-ids "^3.0.0"
886 |
887 | spdx-exceptions@^2.1.0:
888 | version "2.1.0"
889 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9"
890 |
891 | spdx-expression-parse@^3.0.0:
892 | version "3.0.0"
893 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
894 | dependencies:
895 | spdx-exceptions "^2.1.0"
896 | spdx-license-ids "^3.0.0"
897 |
898 | spdx-license-ids@^3.0.0:
899 | version "3.0.0"
900 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87"
901 |
902 | sprintf-js@~1.0.2:
903 | version "1.0.3"
904 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
905 |
906 | string-width@^2.1.0, string-width@^2.1.1:
907 | version "2.1.1"
908 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
909 | dependencies:
910 | is-fullwidth-code-point "^2.0.0"
911 | strip-ansi "^4.0.0"
912 |
913 | string_decoder@~1.0.3:
914 | version "1.0.3"
915 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
916 | dependencies:
917 | safe-buffer "~5.1.0"
918 |
919 | strip-ansi@^3.0.0:
920 | version "3.0.1"
921 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
922 | dependencies:
923 | ansi-regex "^2.0.0"
924 |
925 | strip-ansi@^4.0.0:
926 | version "4.0.0"
927 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
928 | dependencies:
929 | ansi-regex "^3.0.0"
930 |
931 | strip-bom@^3.0.0:
932 | version "3.0.0"
933 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
934 |
935 | strip-json-comments@~2.0.1:
936 | version "2.0.1"
937 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
938 |
939 | supports-color@^2.0.0:
940 | version "2.0.0"
941 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
942 |
943 | supports-color@^5.3.0:
944 | version "5.3.0"
945 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0"
946 | dependencies:
947 | has-flag "^3.0.0"
948 |
949 | table@4.0.2:
950 | version "4.0.2"
951 | resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
952 | dependencies:
953 | ajv "^5.2.3"
954 | ajv-keywords "^2.1.0"
955 | chalk "^2.1.0"
956 | lodash "^4.17.4"
957 | slice-ansi "1.0.0"
958 | string-width "^2.1.1"
959 |
960 | text-table@~0.2.0:
961 | version "0.2.0"
962 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
963 |
964 | through@^2.3.6:
965 | version "2.3.8"
966 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
967 |
968 | tmp@^0.0.33:
969 | version "0.0.33"
970 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
971 | dependencies:
972 | os-tmpdir "~1.0.2"
973 |
974 | type-check@~0.3.2:
975 | version "0.3.2"
976 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
977 | dependencies:
978 | prelude-ls "~1.1.2"
979 |
980 | typedarray@^0.0.6:
981 | version "0.0.6"
982 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
983 |
984 | util-deprecate@~1.0.1:
985 | version "1.0.2"
986 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
987 |
988 | validate-npm-package-license@^3.0.1:
989 | version "3.0.3"
990 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338"
991 | dependencies:
992 | spdx-correct "^3.0.0"
993 | spdx-expression-parse "^3.0.0"
994 |
995 | which@^1.2.9:
996 | version "1.3.0"
997 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
998 | dependencies:
999 | isexe "^2.0.0"
1000 |
1001 | wordwrap@~1.0.0:
1002 | version "1.0.0"
1003 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
1004 |
1005 | wrappy@1:
1006 | version "1.0.2"
1007 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1008 |
1009 | write@^0.2.1:
1010 | version "0.2.1"
1011 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
1012 | dependencies:
1013 | mkdirp "^0.5.1"
1014 |
1015 | yallist@^2.1.2:
1016 | version "2.1.2"
1017 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
1018 |
--------------------------------------------------------------------------------