├── .gitignore ├── .travis.yml ├── LICENSE ├── bench └── index.js ├── index.js ├── package.json ├── readme.md ├── test ├── bar │ ├── baz │ │ ├── jupiter.txt │ │ └── qux │ │ │ └── earth.txt │ └── pluto.txt ├── foo │ ├── earth.txt │ ├── mars.json │ └── pluto.txt └── index.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | *.pid.lock 11 | 12 | # Directory for instrumented libs generated by jscoverage/JSCover 13 | lib-cov 14 | 15 | # Coverage directory used by tools like istanbul 16 | coverage 17 | 18 | # nyc test coverage 19 | .nyc_output 20 | 21 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 22 | .grunt 23 | 24 | # node-waf configuration 25 | .lock-wscript 26 | 27 | # Compiled binary addons (http://nodejs.org/api/addons.html) 28 | build/Release 29 | 30 | # Dependency directories 31 | node_modules 32 | jspm_packages 33 | 34 | # Optional npm cache directory 35 | .npm 36 | 37 | # Optional REPL history 38 | .node_repl_history 39 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: node_js 3 | node_js: 4 | - 'node' 5 | - '6' 6 | - '5' 7 | - '4' 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2017 Jamen Marz 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 | -------------------------------------------------------------------------------- /bench/index.js: -------------------------------------------------------------------------------- 1 | var pull = require('pull-stream') 2 | var { collect, drain, onEnd } = pull 3 | var { src, dest } = require('vinyl-fs') 4 | var { read, write } = require('../') 5 | var bench = require('nanobench') 6 | 7 | var opts = { cwd: __dirname } 8 | 9 | bench('pull-files reading', b => { 10 | 11 | b.start() 12 | pull( 13 | read('../node_modules/**/*', opts), 14 | collect((err, files) => { 15 | b.end() 16 | console.log('read', files.length, 'files') 17 | }) 18 | ) 19 | 20 | }) 21 | 22 | 23 | bench('vinyl-fs reading', b => { 24 | 25 | b.start() 26 | var files = [] 27 | src('../node_modules/**/*', opts) 28 | .on('data', file => files.push(file)) 29 | .on('end', () => { 30 | b.end() 31 | console.log('read', files.length, 'files') 32 | }) 33 | 34 | }) 35 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const pull = require('pull-stream') 2 | const { values, asyncMap, drain, onEnd } = pull 3 | const pushable = require('pull-pushable') 4 | const paramap = require('pull-paramap') 5 | const { readdir, stat, readFile, writeFile } = require('fs') 6 | const { join, resolve, relative: relative_path, dirname, normalize, basename } = require('path') 7 | const mkdirp = require('mkdirp') 8 | const glob_parse = require('glob-base') 9 | const mm = require('micromatch') 10 | const absolute = require('is-absolute') 11 | const filter = pull.filter() 12 | 13 | exports.read = read 14 | exports.write = write 15 | 16 | var ALLOW = { dot: true } 17 | 18 | function read (globs, options) { 19 | if (!Array.isArray(globs)) globs = [globs] 20 | if (!options) options = {} 21 | const cwd = options.cwd || process.cwd() 22 | const stream_mode = options.stream !== undefined && options.stream 23 | 24 | // Source stream used to collect entry paths recursively (files and dirs) 25 | // Also tracking amount of pending reads, so we know when to end the stream 26 | const files = pushable() 27 | let pending = 0 28 | 29 | // Parse globs to { glob, negated, base, pattern } to check if pattern has negation, 30 | // and push the non-negated base directory paths to start off the pipeline 31 | for (var i = globs.length; i--;) { 32 | const glob = resolve(cwd, globs[i]) 33 | const ast = glob_parse(glob) 34 | const pattern = ast.glob 35 | const negated = pattern[0] === '!' 36 | const base = ast.base 37 | const is_glob = ast.isGlob 38 | 39 | 40 | globs[i] = { glob, negated, base, pattern } 41 | 42 | // If glob isn't negated, kickstart the stream with it's base directory 43 | // or file path 44 | if (!negated) { 45 | if (is_glob) { 46 | files.push({ base, path: null, data: null }) 47 | } else { 48 | files.push({ base: absolute(glob) ? null : cwd, path: glob, data: null }) 49 | } 50 | } 51 | } 52 | 53 | // Handle directory and file paths, recursively adding more into the stream 54 | var accumulator = paramap((file, done) => { 55 | const base = file.base 56 | const path = file.path 57 | const entry = base ? (path ? resolve(base, path) : base) : path 58 | 59 | // If path is directory, read their children and push more onto `paths` 60 | // This is the recursive operation that creates more file in the pipeline 61 | function directory_path () { 62 | pending++ 63 | readdir(entry, (err, children) => { 64 | if (err) return done(err) 65 | 66 | // Push children into pipeline, order is not important 67 | for (var i = children.length; i--;) { 68 | if (path !== null && base !== null) { 69 | files.push({ base, path: join(path, children[i]) }) 70 | } else if (path !== null) { 71 | files.push({ base: null, path: join(path, children[i]) }) 72 | } else { 73 | files.push({ base, path: children[i] }) 74 | } 75 | } 76 | 77 | // Filter directory out of pipeline after adding children files 78 | pending-- 79 | done(null, null) 80 | }) 81 | } 82 | 83 | // If path is file, verify against globs 84 | function file_path () { 85 | pending++ 86 | for (var i = globs.length; i--;) { 87 | const glob = globs[i] 88 | const glob_full = glob.glob 89 | const glob_base = glob.base 90 | const glob_negated = glob.negated 91 | const glob_pattern = glob.pattern 92 | if (entry === glob_full || mm.isMatch(entry, glob_pattern, ALLOW)) { 93 | return done(null, file) 94 | } 95 | } 96 | 97 | // Did not match globs 98 | pending-- 99 | done(null, null) 100 | } 101 | 102 | // New read 103 | if (path) { 104 | stat(entry, (err, stat) => { 105 | // Handle path by type 106 | if (err) return done(err) 107 | else if (stat.isDirectory()) directory_path() 108 | else if (stat.isFile()) file_path() 109 | else done(null, null) 110 | }) 111 | } else { 112 | // If we have no relative path that would imply it is a directory, so we 113 | // can save some time by skipping fs.stat call 114 | directory_path() 115 | } 116 | }, 5) 117 | 118 | // Adds contents to { base, relative } from accumulator 119 | // Skipped when in stream mode 120 | var reader = paramap((file, done) => { 121 | const base = file.base 122 | const path = file.path 123 | 124 | if (stream_mode) { 125 | function data_stream (end, cb) { 126 | if (end) return cb(end) 127 | readFile(base ? join(base, path) : path, (err, buf) => { 128 | if (err) return cb(end) 129 | cb(null, buf) 130 | cb(true) 131 | }) 132 | } 133 | file.data = data_stream 134 | // console.log(pending) 135 | done(null, file) 136 | pending-- 137 | if (!pending) files.end() 138 | } else { 139 | readFile(base ? join(base, path) : path, (err, buf) => { 140 | if (err) return done(err) 141 | file.data = buf 142 | done(null, file) 143 | pending-- 144 | if (!pending) files.end() 145 | }) 146 | } 147 | }) 148 | 149 | // Pull all the pieces together 150 | return pull(files, accumulator, filter, reader) 151 | } 152 | 153 | function write (new_base, done) { 154 | if (typeof new_base === 'function') { 155 | done = new_base 156 | new_base = null 157 | } 158 | 159 | const written_dirs = [] 160 | 161 | return pull( 162 | paramap((file, next) => { 163 | const path = file.path 164 | const base = file.base 165 | const data = file.data 166 | 167 | 168 | let dest = path 169 | if (new_base && !base) { 170 | dest = join(new_base, basename(path)) 171 | } else if (base) { 172 | dest = join(new_base || base, path) 173 | } 174 | 175 | const dir = dirname(dest) 176 | 177 | if (written_dirs.indexOf(dir) === -1) { 178 | mkdirp(dir, err => { 179 | if (err) return next(err) 180 | written_dirs.push(dir) 181 | writeFile(dest, data, next) 182 | }) 183 | } else { 184 | writeFile(dest, data, next) 185 | } 186 | }, 5), 187 | onEnd(done) 188 | ) 189 | } 190 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pull-files", 3 | "description": "Read and write directories of files with pull-stream", 4 | "version": "1.1.0", 5 | "homepage": "https://github.com/jamen/pull-files", 6 | "author": "Jamen Marz (https://git.io/jamen)", 7 | "repository": "jamen/pull-files", 8 | "bugs": { 9 | "url": "https://github.com/jamen/pull-files/issues" 10 | }, 11 | "license": "MIT", 12 | "engines": { 13 | "node": ">=4" 14 | }, 15 | "scripts": { 16 | "test": "node test", 17 | "bench": "node bench" 18 | }, 19 | "dependencies": { 20 | "glob-base": "^0.3.0", 21 | "is-absolute": "^0.2.6", 22 | "micromatch": "^2.3.11", 23 | "mkdirp": "^0.5.1", 24 | "pull-paramap": "^1.2.2", 25 | "pull-pushable": "^2.0.1", 26 | "pull-stream": "^3.5.0" 27 | }, 28 | "devDependencies": { 29 | "array-difference": "^0.0.1", 30 | "benchmark": "^2.1.4", 31 | "check-files-exist": "^1.0.1", 32 | "diff": "^3.2.0", 33 | "nanobench": "^2.1.0", 34 | "rimraf": "^2.6.1", 35 | "tape": "^4.6.3", 36 | "vinyl-fs": "^2.4.4" 37 | }, 38 | "keywords": [ 39 | "jamen", 40 | "pull-files" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # pull-files 2 | 3 | > Read and write directories of files with pull-stream 4 | 5 | ```js 6 | var pull = require('pull-stream') 7 | var { read, write } = require('pull-files') 8 | 9 | pull( 10 | // Read js files out of `node_modules` 11 | read('node_modules/**/*.js'), 12 | 13 | // Compile files' contents 14 | pull.through(file => { 15 | file.data = compile(file.data) 16 | }), 17 | 18 | // Write them to `out` directory 19 | write('out', err => { 20 | console.log('finished') 21 | }) 22 | ) 23 | ``` 24 | 25 | The file objects are a minimal take on [`Vinyl`](https://github.com/gulpjs/vinyl) containing only properties that are necessary: 26 | 27 | ``` 28 | { base: '/home/jamen/jamen/pull-files/test', 29 | path: 'bar/pluto.txt', 30 | data: } 31 | ``` 32 | 33 | This lets you create them without any dependencies, and you may also add custom properties not concerned with this module 34 | 35 | ## Installation 36 | 37 | ```shell 38 | npm install --save pull-files 39 | ``` 40 | 41 | ## Usage 42 | 43 | ### `read(glob, options?)` 44 | 45 | Read files from a glob or path (or arrays of either) using [`micromatch`](https://github.com/micromatch/micromatch) patterns. Supply `cwd` if your paths are relative and will change depending on where you execute `node` (most likely want `__dirname`) 46 | 47 | Options can contain: 48 | 49 | - `cwd`: Used to resolve relative paths (commonly set as `__dirname`) 50 | - `stream`: Enable stream mode, where `file.data` is a source stream 51 | 52 | ```js 53 | pull( 54 | // Read js files from node_modules, excluding pull-files directory 55 | read([ 'node_modules/**/*.js', '!node_modules/pull-files' ], { cwd: __dirname }), 56 | drain(file => console.log(file)) 57 | ) 58 | ``` 59 | 60 | ### `write(dest, done?)` 61 | 62 | Write files to `dest` and calls `done(err?)` when finished 63 | 64 | ```js 65 | pull( 66 | values([ 67 | { path: 'earth.js', data: 'hello earth' }, 68 | { path: 'mars.js', data: 'hello mars' }, 69 | { path: 'pluto.js', data: 'hello pluto' }, 70 | ]), 71 | 72 | write('example', err => { 73 | // wrote all 3 files to `example/...` 74 | }) 75 | ) 76 | ``` 77 | 78 | Here you can see that files don't have to be created from `read` either, but can be from anywhere. Nor do you have to provide `base` for unglobbed files. 79 | 80 | ### `{ base, path, data }` 81 | 82 | These Represent files, where: 83 | 84 | - `base` is an optional property present if `path` is relative. It allows you to retain directory structure and move the base (e.g. to an `out/` folder if you're compiling) 85 | - `path`: The path of the data. Either absolute or relative. If absolute, `base` will be `null`. 86 | - `data`: A buffer or stream of the file's data. 87 | 88 | For a simple way to get a file's full path, regardless of relativity, do: 89 | 90 | ```js 91 | var full = base ? join(base, path) : path 92 | ``` 93 | 94 | --- 95 | 96 | _Maintained by [Jamen Marz](https://git.io/jamen) (See on [Twitter](https://twitter.com/jamenmarz) and [GitHub](https://github.com/jamen) for questions & updates)_ 97 | -------------------------------------------------------------------------------- /test/bar/baz/jupiter.txt: -------------------------------------------------------------------------------- 1 | hello i am jupiter 2 | -------------------------------------------------------------------------------- /test/bar/baz/qux/earth.txt: -------------------------------------------------------------------------------- 1 | hello i am earth 2 | -------------------------------------------------------------------------------- /test/bar/pluto.txt: -------------------------------------------------------------------------------- 1 | hello i am pluto 2 | -------------------------------------------------------------------------------- /test/foo/earth.txt: -------------------------------------------------------------------------------- 1 | hello i am earth 2 | -------------------------------------------------------------------------------- /test/foo/mars.json: -------------------------------------------------------------------------------- 1 | hello i am mars 2 | -------------------------------------------------------------------------------- /test/foo/pluto.txt: -------------------------------------------------------------------------------- 1 | hello i am pluto 2 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | var test = require('tape') 2 | var exists = require('check-files-exist') 3 | var rimraf = require('rimraf') 4 | var pull = require('pull-stream') 5 | var vfs = require('vinyl-fs') 6 | var diff = require('array-difference') 7 | var { through, onEnd, drain, collect, map } = pull 8 | var { basename, join } = require('path') 9 | var { read, write } = require('../') 10 | 11 | test('read and write files', function (t) { 12 | t.plan(6) 13 | var reads = 1 14 | 15 | pull( 16 | read([ 17 | 'bar/**.txt', 18 | 'foo/**.{txt,json}', 19 | '!**/pluto.txt' 20 | ], { 21 | cwd: __dirname 22 | }), 23 | 24 | // Check file objects 25 | through(function (file) { 26 | var name = basename(file.path, '.txt') 27 | if (name === 'mars.json') name = basename(name, '.json') 28 | 29 | var data = file.data.toString() 30 | 31 | t.is(`hello i am ${name}\n`, data, name + '\'s data') 32 | 33 | console.log(file) 34 | }), 35 | 36 | // Check writing results 37 | write(__dirname + '/qux', function (err) { 38 | if (err) return t.fail(err) 39 | 40 | // existing files 41 | exists([ 42 | 'qux/earth.txt', 43 | 'qux/mars.json', 44 | 'qux/baz/jupiter.txt', 45 | 'qux/baz/qux/earth.txt' 46 | ], __dirname) 47 | .then(() => t.pass('files written'), 48 | err => t.fail('files written')) 49 | 50 | // neated files 51 | exists([ 52 | 'qux/pluto.txt', 53 | 'qux/pluto.txt' 54 | ], __dirname) 55 | .then(() => t.fail('files negated'), 56 | err => t.pass('files negated')) 57 | }) 58 | ) 59 | }) 60 | 61 | test('read non existing file', function (t) { 62 | t.plan(1) 63 | 64 | pull( 65 | read(['./youhavenotfoundwhatyouwerelookingfor/**.js'], { cwd: __dirname }), 66 | onEnd(err => { 67 | t.is(err.code, 'ENOENT', 'errors with non-existing files') 68 | }) 69 | ) 70 | }) 71 | 72 | test('read single file', function (t) { 73 | t.plan(2) 74 | 75 | pull( 76 | read('bar/pluto.txt', { cwd: __dirname }), 77 | drain(file => { 78 | console.log(file) 79 | t.is(file.path, '/home/jamen/jamen/pull-files/test/bar/pluto.txt', 'file path') 80 | t.is(file.data.toString(), 'hello i am pluto\n', 'file data') 81 | }) 82 | ) 83 | }) 84 | 85 | test('read node_modules', function (t) { 86 | t.plan(1) 87 | 88 | pull( 89 | read('../node_modules/**/*', { cwd: __dirname }), 90 | collect((err, files) => { 91 | if (err) throw err 92 | t.true(files.length, 'reads node modules') 93 | }) 94 | ) 95 | 96 | }) 97 | 98 | test('vinyl-fs and pull-stream differences', function (t) { 99 | 100 | pull( 101 | read('../node_modules/**/*', { cwd: __dirname }), 102 | map(({ base, path }) => base ? join(base, path) : path), 103 | collect((err, p_files) => { 104 | if (err) throw err 105 | var v_files = [] 106 | vfs.src('../node_modules/**/*', { cwd: __dirname }) 107 | .on('data', file => v_files.push(file.path)) 108 | .on('end', () => { 109 | 110 | // console.log(v_files) 111 | // console.log(p_files) 112 | // console.log(diff(v_files, p_files).length) 113 | t.end() 114 | 115 | }) 116 | }) 117 | ) 118 | 119 | }) 120 | 121 | test('stream mode', t => { 122 | t.plan(4) 123 | 124 | pull( 125 | read('foo/**/*', { cwd: __dirname, stream: true }), 126 | drain(file => { 127 | t.is(typeof file.data, 'function', 'got stream data') 128 | }, err => { 129 | if (err) return t.end(err) 130 | else t.pass('finished') 131 | }) 132 | ) 133 | 134 | }) 135 | 136 | test.onFinish(function () { 137 | rimraf(__dirname + '/qux', () => {}) 138 | }) 139 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | ansi-regex@^2.0.0: 6 | version "2.1.1" 7 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 8 | 9 | ansi-styles@^2.2.1: 10 | version "2.2.1" 11 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 12 | 13 | arr-diff@^2.0.0: 14 | version "2.0.0" 15 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 16 | dependencies: 17 | arr-flatten "^1.0.1" 18 | 19 | arr-flatten@^1.0.1: 20 | version "1.0.3" 21 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" 22 | 23 | array-difference@^0.0.1: 24 | version "0.0.1" 25 | resolved "https://registry.yarnpkg.com/array-difference/-/array-difference-0.0.1.tgz#c7cafd9b54b35eb82f72e7ba319e938a3fd32b07" 26 | 27 | array-unique@^0.2.1: 28 | version "0.2.1" 29 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 30 | 31 | balanced-match@^0.4.1: 32 | version "0.4.2" 33 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 34 | 35 | benchmark@^2.1.4: 36 | version "2.1.4" 37 | resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629" 38 | dependencies: 39 | lodash "^4.17.4" 40 | platform "^1.3.3" 41 | 42 | brace-expansion@^1.0.0: 43 | version "1.1.7" 44 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" 45 | dependencies: 46 | balanced-match "^0.4.1" 47 | concat-map "0.0.1" 48 | 49 | braces@^1.8.2: 50 | version "1.8.5" 51 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 52 | dependencies: 53 | expand-range "^1.8.1" 54 | preserve "^0.2.0" 55 | repeat-element "^1.1.2" 56 | 57 | buffer-shims@~1.0.0: 58 | version "1.0.0" 59 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 60 | 61 | chalk@^1.1.3: 62 | version "1.1.3" 63 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 64 | dependencies: 65 | ansi-styles "^2.2.1" 66 | escape-string-regexp "^1.0.2" 67 | has-ansi "^2.0.0" 68 | strip-ansi "^3.0.0" 69 | supports-color "^2.0.0" 70 | 71 | check-files-exist@^1.0.1: 72 | version "1.0.1" 73 | resolved "https://registry.yarnpkg.com/check-files-exist/-/check-files-exist-1.0.1.tgz#6f9f361aaa3c147d8bcc3adb4c86e0f351871f6d" 74 | dependencies: 75 | glob "^6.0.4" 76 | q "^1.4.1" 77 | 78 | clone-stats@^0.0.1: 79 | version "0.0.1" 80 | resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" 81 | 82 | clone@^1.0.0: 83 | version "1.0.2" 84 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" 85 | 86 | concat-map@0.0.1: 87 | version "0.0.1" 88 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 89 | 90 | convert-source-map@^1.1.1: 91 | version "1.5.0" 92 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" 93 | 94 | core-util-is@~1.0.0: 95 | version "1.0.2" 96 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 97 | 98 | deep-equal@~1.0.1: 99 | version "1.0.1" 100 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" 101 | 102 | define-properties@^1.1.2: 103 | version "1.1.2" 104 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" 105 | dependencies: 106 | foreach "^2.0.5" 107 | object-keys "^1.0.8" 108 | 109 | defined@~1.0.0: 110 | version "1.0.0" 111 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" 112 | 113 | diff@^3.2.0: 114 | version "3.2.0" 115 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" 116 | 117 | duplexify@^3.2.0: 118 | version "3.5.0" 119 | resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604" 120 | dependencies: 121 | end-of-stream "1.0.0" 122 | inherits "^2.0.1" 123 | readable-stream "^2.0.0" 124 | stream-shift "^1.0.0" 125 | 126 | end-of-stream@1.0.0: 127 | version "1.0.0" 128 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e" 129 | dependencies: 130 | once "~1.3.0" 131 | 132 | es-abstract@^1.5.0: 133 | version "1.7.0" 134 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" 135 | dependencies: 136 | es-to-primitive "^1.1.1" 137 | function-bind "^1.1.0" 138 | is-callable "^1.1.3" 139 | is-regex "^1.0.3" 140 | 141 | es-to-primitive@^1.1.1: 142 | version "1.1.1" 143 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" 144 | dependencies: 145 | is-callable "^1.1.1" 146 | is-date-object "^1.0.1" 147 | is-symbol "^1.0.1" 148 | 149 | escape-string-regexp@^1.0.2: 150 | version "1.0.5" 151 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 152 | 153 | expand-brackets@^0.1.4: 154 | version "0.1.5" 155 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 156 | dependencies: 157 | is-posix-bracket "^0.1.0" 158 | 159 | expand-range@^1.8.1: 160 | version "1.8.2" 161 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 162 | dependencies: 163 | fill-range "^2.1.0" 164 | 165 | extend-shallow@^2.0.1: 166 | version "2.0.1" 167 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 168 | dependencies: 169 | is-extendable "^0.1.0" 170 | 171 | extend@^3.0.0: 172 | version "3.0.0" 173 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" 174 | 175 | extglob@^0.3.1: 176 | version "0.3.2" 177 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 178 | dependencies: 179 | is-extglob "^1.0.0" 180 | 181 | filename-regex@^2.0.0: 182 | version "2.0.0" 183 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" 184 | 185 | fill-range@^2.1.0: 186 | version "2.2.3" 187 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" 188 | dependencies: 189 | is-number "^2.1.0" 190 | isobject "^2.0.0" 191 | randomatic "^1.1.3" 192 | repeat-element "^1.1.2" 193 | repeat-string "^1.5.2" 194 | 195 | first-chunk-stream@^1.0.0: 196 | version "1.0.0" 197 | resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" 198 | 199 | for-each@~0.3.2: 200 | version "0.3.2" 201 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4" 202 | dependencies: 203 | is-function "~1.0.0" 204 | 205 | for-in@^1.0.1: 206 | version "1.0.2" 207 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 208 | 209 | for-own@^0.1.4: 210 | version "0.1.5" 211 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 212 | dependencies: 213 | for-in "^1.0.1" 214 | 215 | foreach@^2.0.5: 216 | version "2.0.5" 217 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" 218 | 219 | fs.realpath@^1.0.0: 220 | version "1.0.0" 221 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 222 | 223 | function-bind@^1.0.2, function-bind@^1.1.0, function-bind@~1.1.0: 224 | version "1.1.0" 225 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" 226 | 227 | glob-base@^0.3.0: 228 | version "0.3.0" 229 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 230 | dependencies: 231 | glob-parent "^2.0.0" 232 | is-glob "^2.0.0" 233 | 234 | glob-parent@^2.0.0: 235 | version "2.0.0" 236 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 237 | dependencies: 238 | is-glob "^2.0.0" 239 | 240 | glob-parent@^3.0.0: 241 | version "3.1.0" 242 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" 243 | dependencies: 244 | is-glob "^3.1.0" 245 | path-dirname "^1.0.0" 246 | 247 | glob-stream@^5.3.2: 248 | version "5.3.5" 249 | resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-5.3.5.tgz#a55665a9a8ccdc41915a87c701e32d4e016fad22" 250 | dependencies: 251 | extend "^3.0.0" 252 | glob "^5.0.3" 253 | glob-parent "^3.0.0" 254 | micromatch "^2.3.7" 255 | ordered-read-streams "^0.3.0" 256 | through2 "^0.6.0" 257 | to-absolute-glob "^0.1.1" 258 | unique-stream "^2.0.2" 259 | 260 | glob@^5.0.3: 261 | version "5.0.15" 262 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" 263 | dependencies: 264 | inflight "^1.0.4" 265 | inherits "2" 266 | minimatch "2 || 3" 267 | once "^1.3.0" 268 | path-is-absolute "^1.0.0" 269 | 270 | glob@^6.0.4: 271 | version "6.0.4" 272 | resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" 273 | dependencies: 274 | inflight "^1.0.4" 275 | inherits "2" 276 | minimatch "2 || 3" 277 | once "^1.3.0" 278 | path-is-absolute "^1.0.0" 279 | 280 | glob@^7.0.5, glob@~7.1.1: 281 | version "7.1.1" 282 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 283 | dependencies: 284 | fs.realpath "^1.0.0" 285 | inflight "^1.0.4" 286 | inherits "2" 287 | minimatch "^3.0.2" 288 | once "^1.3.0" 289 | path-is-absolute "^1.0.0" 290 | 291 | graceful-fs@^4.0.0, graceful-fs@^4.1.2: 292 | version "4.1.11" 293 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 294 | 295 | gulp-sourcemaps@1.6.0: 296 | version "1.6.0" 297 | resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz#b86ff349d801ceb56e1d9e7dc7bbcb4b7dee600c" 298 | dependencies: 299 | convert-source-map "^1.1.1" 300 | graceful-fs "^4.1.2" 301 | strip-bom "^2.0.0" 302 | through2 "^2.0.0" 303 | vinyl "^1.0.0" 304 | 305 | has-ansi@^2.0.0: 306 | version "2.0.0" 307 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 308 | dependencies: 309 | ansi-regex "^2.0.0" 310 | 311 | has@^1.0.1, has@~1.0.1: 312 | version "1.0.1" 313 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" 314 | dependencies: 315 | function-bind "^1.0.2" 316 | 317 | inflight@^1.0.4: 318 | version "1.0.6" 319 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 320 | dependencies: 321 | once "^1.3.0" 322 | wrappy "1" 323 | 324 | inherits@2, inherits@^2.0.1, inherits@~2.0.1, inherits@~2.0.3: 325 | version "2.0.3" 326 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 327 | 328 | is-absolute@^0.2.6: 329 | version "0.2.6" 330 | resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" 331 | dependencies: 332 | is-relative "^0.2.1" 333 | is-windows "^0.2.0" 334 | 335 | is-buffer@^1.0.2: 336 | version "1.1.5" 337 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" 338 | 339 | is-callable@^1.1.1, is-callable@^1.1.3: 340 | version "1.1.3" 341 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" 342 | 343 | is-date-object@^1.0.1: 344 | version "1.0.1" 345 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 346 | 347 | is-dotfile@^1.0.0: 348 | version "1.0.2" 349 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" 350 | 351 | is-equal-shallow@^0.1.3: 352 | version "0.1.3" 353 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 354 | dependencies: 355 | is-primitive "^2.0.0" 356 | 357 | is-extendable@^0.1.0, is-extendable@^0.1.1: 358 | version "0.1.1" 359 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 360 | 361 | is-extglob@^1.0.0: 362 | version "1.0.0" 363 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 364 | 365 | is-extglob@^2.1.0: 366 | version "2.1.1" 367 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 368 | 369 | is-function@~1.0.0: 370 | version "1.0.1" 371 | resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" 372 | 373 | is-glob@^2.0.0, is-glob@^2.0.1: 374 | version "2.0.1" 375 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 376 | dependencies: 377 | is-extglob "^1.0.0" 378 | 379 | is-glob@^3.1.0: 380 | version "3.1.0" 381 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" 382 | dependencies: 383 | is-extglob "^2.1.0" 384 | 385 | is-number@^2.0.2, is-number@^2.1.0: 386 | version "2.1.0" 387 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 388 | dependencies: 389 | kind-of "^3.0.2" 390 | 391 | is-posix-bracket@^0.1.0: 392 | version "0.1.1" 393 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 394 | 395 | is-primitive@^2.0.0: 396 | version "2.0.0" 397 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 398 | 399 | is-regex@^1.0.3: 400 | version "1.0.4" 401 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 402 | dependencies: 403 | has "^1.0.1" 404 | 405 | is-relative@^0.2.1: 406 | version "0.2.1" 407 | resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" 408 | dependencies: 409 | is-unc-path "^0.1.1" 410 | 411 | is-stream@^1.0.1: 412 | version "1.1.0" 413 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 414 | 415 | is-symbol@^1.0.1: 416 | version "1.0.1" 417 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" 418 | 419 | is-unc-path@^0.1.1: 420 | version "0.1.2" 421 | resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" 422 | dependencies: 423 | unc-path-regex "^0.1.0" 424 | 425 | is-utf8@^0.2.0: 426 | version "0.2.1" 427 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 428 | 429 | is-valid-glob@^0.3.0: 430 | version "0.3.0" 431 | resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-0.3.0.tgz#d4b55c69f51886f9b65c70d6c2622d37e29f48fe" 432 | 433 | is-windows@^0.2.0: 434 | version "0.2.0" 435 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" 436 | 437 | isarray@0.0.1: 438 | version "0.0.1" 439 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 440 | 441 | isarray@1.0.0, isarray@~1.0.0: 442 | version "1.0.0" 443 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 444 | 445 | isobject@^2.0.0: 446 | version "2.1.0" 447 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 448 | dependencies: 449 | isarray "1.0.0" 450 | 451 | json-stable-stringify@^1.0.0: 452 | version "1.0.1" 453 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 454 | dependencies: 455 | jsonify "~0.0.0" 456 | 457 | jsonify@~0.0.0: 458 | version "0.0.0" 459 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 460 | 461 | kind-of@^3.0.2: 462 | version "3.1.0" 463 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" 464 | dependencies: 465 | is-buffer "^1.0.2" 466 | 467 | lazystream@^1.0.0: 468 | version "1.0.0" 469 | resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" 470 | dependencies: 471 | readable-stream "^2.0.5" 472 | 473 | lodash.isequal@^4.0.0: 474 | version "4.5.0" 475 | resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" 476 | 477 | lodash@^4.17.4: 478 | version "4.17.4" 479 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 480 | 481 | looper@^4.0.0: 482 | version "4.0.0" 483 | resolved "https://registry.yarnpkg.com/looper/-/looper-4.0.0.tgz#7706aded59a99edca06e6b54bb86c8ec19c95155" 484 | 485 | merge-stream@^1.0.0: 486 | version "1.0.1" 487 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" 488 | dependencies: 489 | readable-stream "^2.0.1" 490 | 491 | micromatch@^2.3.11, micromatch@^2.3.7: 492 | version "2.3.11" 493 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 494 | dependencies: 495 | arr-diff "^2.0.0" 496 | array-unique "^0.2.1" 497 | braces "^1.8.2" 498 | expand-brackets "^0.1.4" 499 | extglob "^0.3.1" 500 | filename-regex "^2.0.0" 501 | is-extglob "^1.0.0" 502 | is-glob "^2.0.1" 503 | kind-of "^3.0.2" 504 | normalize-path "^2.0.1" 505 | object.omit "^2.0.0" 506 | parse-glob "^3.0.4" 507 | regex-cache "^0.4.2" 508 | 509 | "minimatch@2 || 3", minimatch@^3.0.2: 510 | version "3.0.3" 511 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" 512 | dependencies: 513 | brace-expansion "^1.0.0" 514 | 515 | minimist@0.0.8: 516 | version "0.0.8" 517 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 518 | 519 | minimist@~1.2.0: 520 | version "1.2.0" 521 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 522 | 523 | mkdirp@^0.5.0, mkdirp@^0.5.1: 524 | version "0.5.1" 525 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 526 | dependencies: 527 | minimist "0.0.8" 528 | 529 | mutexify@^1.1.0: 530 | version "1.1.0" 531 | resolved "https://registry.yarnpkg.com/mutexify/-/mutexify-1.1.0.tgz#bbe017743e544227ee58034cd10f159921f1844d" 532 | 533 | nanobench@^2.1.0: 534 | version "2.1.0" 535 | resolved "https://registry.yarnpkg.com/nanobench/-/nanobench-2.1.0.tgz#e4f7bf7ab6934b5263fabf5c51dc3116d8ee6dd1" 536 | dependencies: 537 | chalk "^1.1.3" 538 | mutexify "^1.1.0" 539 | pretty-hrtime "^1.0.2" 540 | 541 | normalize-path@^2.0.1: 542 | version "2.1.1" 543 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 544 | dependencies: 545 | remove-trailing-separator "^1.0.1" 546 | 547 | object-assign@^4.0.0: 548 | version "4.1.1" 549 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 550 | 551 | object-inspect@~1.2.1: 552 | version "1.2.2" 553 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.2.2.tgz#c82115e4fcc888aea14d64c22e4f17f6a70d5e5a" 554 | 555 | object-keys@^1.0.8: 556 | version "1.0.11" 557 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" 558 | 559 | object.omit@^2.0.0: 560 | version "2.0.1" 561 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 562 | dependencies: 563 | for-own "^0.1.4" 564 | is-extendable "^0.1.1" 565 | 566 | once@^1.3.0: 567 | version "1.4.0" 568 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 569 | dependencies: 570 | wrappy "1" 571 | 572 | once@~1.3.0: 573 | version "1.3.3" 574 | resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" 575 | dependencies: 576 | wrappy "1" 577 | 578 | ordered-read-streams@^0.3.0: 579 | version "0.3.0" 580 | resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz#7137e69b3298bb342247a1bbee3881c80e2fd78b" 581 | dependencies: 582 | is-stream "^1.0.1" 583 | readable-stream "^2.0.1" 584 | 585 | parse-glob@^3.0.4: 586 | version "3.0.4" 587 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 588 | dependencies: 589 | glob-base "^0.3.0" 590 | is-dotfile "^1.0.0" 591 | is-extglob "^1.0.0" 592 | is-glob "^2.0.0" 593 | 594 | path-dirname@^1.0.0: 595 | version "1.0.2" 596 | resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" 597 | 598 | path-is-absolute@^1.0.0: 599 | version "1.0.1" 600 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 601 | 602 | platform@^1.3.3: 603 | version "1.3.4" 604 | resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.4.tgz#6f0fb17edaaa48f21442b3a975c063130f1c3ebd" 605 | 606 | preserve@^0.2.0: 607 | version "0.2.0" 608 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 609 | 610 | pretty-hrtime@^1.0.2: 611 | version "1.0.3" 612 | resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" 613 | 614 | process-nextick-args@~1.0.6: 615 | version "1.0.7" 616 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 617 | 618 | pull-paramap@^1.2.2: 619 | version "1.2.2" 620 | resolved "https://registry.yarnpkg.com/pull-paramap/-/pull-paramap-1.2.2.tgz#51a4193ce9c8d7215d95adad45e2bcdb8493b23a" 621 | dependencies: 622 | looper "^4.0.0" 623 | 624 | pull-pushable@^2.0.1: 625 | version "2.0.1" 626 | resolved "https://registry.yarnpkg.com/pull-pushable/-/pull-pushable-2.0.1.tgz#02bdca51a39cf585f483fbecde2fc9378076f212" 627 | 628 | pull-stream@^3.5.0: 629 | version "3.5.0" 630 | resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.5.0.tgz#1ee5b6f76fd3b3a49a5afb6ded5c0320acb3cfc7" 631 | 632 | q@^1.4.1: 633 | version "1.5.0" 634 | resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" 635 | 636 | randomatic@^1.1.3: 637 | version "1.1.6" 638 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" 639 | dependencies: 640 | is-number "^2.0.2" 641 | kind-of "^3.0.2" 642 | 643 | "readable-stream@>=1.0.33-1 <1.1.0-0": 644 | version "1.0.34" 645 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" 646 | dependencies: 647 | core-util-is "~1.0.0" 648 | inherits "~2.0.1" 649 | isarray "0.0.1" 650 | string_decoder "~0.10.x" 651 | 652 | readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.1.5: 653 | version "2.2.9" 654 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" 655 | dependencies: 656 | buffer-shims "~1.0.0" 657 | core-util-is "~1.0.0" 658 | inherits "~2.0.1" 659 | isarray "~1.0.0" 660 | process-nextick-args "~1.0.6" 661 | string_decoder "~1.0.0" 662 | util-deprecate "~1.0.1" 663 | 664 | regex-cache@^0.4.2: 665 | version "0.4.3" 666 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" 667 | dependencies: 668 | is-equal-shallow "^0.1.3" 669 | is-primitive "^2.0.0" 670 | 671 | remove-trailing-separator@^1.0.1: 672 | version "1.0.1" 673 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" 674 | 675 | repeat-element@^1.1.2: 676 | version "1.1.2" 677 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" 678 | 679 | repeat-string@^1.5.2: 680 | version "1.6.1" 681 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 682 | 683 | replace-ext@0.0.1: 684 | version "0.0.1" 685 | resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" 686 | 687 | resolve@~1.1.7: 688 | version "1.1.7" 689 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 690 | 691 | resumer@~0.0.0: 692 | version "0.0.0" 693 | resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" 694 | dependencies: 695 | through "~2.3.4" 696 | 697 | rimraf@^2.6.1: 698 | version "2.6.1" 699 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" 700 | dependencies: 701 | glob "^7.0.5" 702 | 703 | stream-shift@^1.0.0: 704 | version "1.0.0" 705 | resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" 706 | 707 | string.prototype.trim@~1.1.2: 708 | version "1.1.2" 709 | resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" 710 | dependencies: 711 | define-properties "^1.1.2" 712 | es-abstract "^1.5.0" 713 | function-bind "^1.0.2" 714 | 715 | string_decoder@~0.10.x: 716 | version "0.10.31" 717 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 718 | 719 | string_decoder@~1.0.0: 720 | version "1.0.0" 721 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" 722 | dependencies: 723 | buffer-shims "~1.0.0" 724 | 725 | strip-ansi@^3.0.0: 726 | version "3.0.1" 727 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 728 | dependencies: 729 | ansi-regex "^2.0.0" 730 | 731 | strip-bom-stream@^1.0.0: 732 | version "1.0.0" 733 | resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz#e7144398577d51a6bed0fa1994fa05f43fd988ee" 734 | dependencies: 735 | first-chunk-stream "^1.0.0" 736 | strip-bom "^2.0.0" 737 | 738 | strip-bom@^2.0.0: 739 | version "2.0.0" 740 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 741 | dependencies: 742 | is-utf8 "^0.2.0" 743 | 744 | supports-color@^2.0.0: 745 | version "2.0.0" 746 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 747 | 748 | tape@^4.6.3: 749 | version "4.6.3" 750 | resolved "https://registry.yarnpkg.com/tape/-/tape-4.6.3.tgz#637e77581e9ab2ce17577e9bd4ce4f575806d8b6" 751 | dependencies: 752 | deep-equal "~1.0.1" 753 | defined "~1.0.0" 754 | for-each "~0.3.2" 755 | function-bind "~1.1.0" 756 | glob "~7.1.1" 757 | has "~1.0.1" 758 | inherits "~2.0.3" 759 | minimist "~1.2.0" 760 | object-inspect "~1.2.1" 761 | resolve "~1.1.7" 762 | resumer "~0.0.0" 763 | string.prototype.trim "~1.1.2" 764 | through "~2.3.8" 765 | 766 | through2-filter@^2.0.0: 767 | version "2.0.0" 768 | resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec" 769 | dependencies: 770 | through2 "~2.0.0" 771 | xtend "~4.0.0" 772 | 773 | through2@^0.6.0: 774 | version "0.6.5" 775 | resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" 776 | dependencies: 777 | readable-stream ">=1.0.33-1 <1.1.0-0" 778 | xtend ">=4.0.0 <4.1.0-0" 779 | 780 | through2@^2.0.0, through2@~2.0.0: 781 | version "2.0.3" 782 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" 783 | dependencies: 784 | readable-stream "^2.1.5" 785 | xtend "~4.0.1" 786 | 787 | through@~2.3.4, through@~2.3.8: 788 | version "2.3.8" 789 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 790 | 791 | to-absolute-glob@^0.1.1: 792 | version "0.1.1" 793 | resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz#1cdfa472a9ef50c239ee66999b662ca0eb39937f" 794 | dependencies: 795 | extend-shallow "^2.0.1" 796 | 797 | unc-path-regex@^0.1.0: 798 | version "0.1.2" 799 | resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" 800 | 801 | unique-stream@^2.0.2: 802 | version "2.2.1" 803 | resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.2.1.tgz#5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369" 804 | dependencies: 805 | json-stable-stringify "^1.0.0" 806 | through2-filter "^2.0.0" 807 | 808 | util-deprecate@~1.0.1: 809 | version "1.0.2" 810 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 811 | 812 | vali-date@^1.0.0: 813 | version "1.0.0" 814 | resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6" 815 | 816 | vinyl-fs@^2.4.4: 817 | version "2.4.4" 818 | resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-2.4.4.tgz#be6ff3270cb55dfd7d3063640de81f25d7532239" 819 | dependencies: 820 | duplexify "^3.2.0" 821 | glob-stream "^5.3.2" 822 | graceful-fs "^4.0.0" 823 | gulp-sourcemaps "1.6.0" 824 | is-valid-glob "^0.3.0" 825 | lazystream "^1.0.0" 826 | lodash.isequal "^4.0.0" 827 | merge-stream "^1.0.0" 828 | mkdirp "^0.5.0" 829 | object-assign "^4.0.0" 830 | readable-stream "^2.0.4" 831 | strip-bom "^2.0.0" 832 | strip-bom-stream "^1.0.0" 833 | through2 "^2.0.0" 834 | through2-filter "^2.0.0" 835 | vali-date "^1.0.0" 836 | vinyl "^1.0.0" 837 | 838 | vinyl@^1.0.0: 839 | version "1.2.0" 840 | resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884" 841 | dependencies: 842 | clone "^1.0.0" 843 | clone-stats "^0.0.1" 844 | replace-ext "0.0.1" 845 | 846 | wrappy@1: 847 | version "1.0.2" 848 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 849 | 850 | "xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.0, xtend@~4.0.1: 851 | version "4.0.1" 852 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 853 | --------------------------------------------------------------------------------