├── .editorconfig ├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── lib └── preset-versions.json ├── package.json ├── testen └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log 3 | .DS_Store 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) EGOIST <0x142857@gmail.com> (github.com/egoist) 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 13 | all 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 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 👉 This project is now maintained over at [`bevry/testen`](https://github.com/bevry/testen) 👈 2 | 3 | # testen [![NPM version](https://img.shields.io/npm/v/testen.svg)](https://npmjs.com/package/testen) [![NPM downloads](https://img.shields.io/npm/dm/testen.svg)](https://npmjs.com/package/testen) 4 | 5 | [testen repo]: https://github.com/egoist/testen 6 | 7 | Run tests for multiple versions of Node.js in local env. 8 | 9 | ![preview](https://ooo.0o0.ooo/2016/04/17/571460f682122.gif) 10 | 11 | ## Install 12 | 13 | You should have `nvm` and `node >= 4` installed. 14 | 15 | ```bash 16 | $ npm install -g testen 17 | ``` 18 | 19 | ## Usage 20 | 21 | ```bash 22 | $ testen 23 | ``` 24 | 25 | This will run `npm test` script, if `.travis.yml` or `circle.yml` exists, use node versions in it. Otherwise use [preset node versions](/lib/preset-versions.json). 26 | 27 | Sometimes you wanna override these node versions, just pass `-n` to do this: 28 | 29 | ```bash 30 | $ testen -n 0.10 -n 0.12 31 | 32 | # use system default node version 33 | $ testen --system 34 | ``` 35 | 36 | **Read Node.js versions from `package.json`** 37 | 38 | ```json 39 | { 40 | "testen": { 41 | "node": ["0.12.0", "5", "4.2.4"] 42 | } 43 | } 44 | ``` 45 | 46 | **Read test command from `package.json`** 47 | 48 | ```json 49 | { 50 | "testen": { 51 | "test": "npm run test:custom" 52 | } 53 | } 54 | ``` 55 | 56 | ## CLI 57 | 58 | ```bash 59 | $ testen --help 60 | 61 | Usage: 62 | 63 | --system: Use current node version 64 | -n/--node [version]: Add a node version to test 65 | -s, --sequence: Run tests in sequence 66 | -- [command]: The test command you expect 67 | -V/--verbose: Always output everything 68 | ~ example: there are `console.log` in test 69 | ``` 70 | 71 | ## License 72 | 73 | MIT © [EGOIST](https://github.com/egoist) 74 | -------------------------------------------------------------------------------- /lib/preset-versions.json: -------------------------------------------------------------------------------- 1 | [ 2 | "4", 3 | "5", 4 | "stable" 5 | ] 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "testen", 3 | "version": "2.2.1", 4 | "description": "Run tests for multiple versions of Node.js in local env.", 5 | "license": "MIT", 6 | "repository": "egoist/testen", 7 | "author": { 8 | "name": "EGOIST", 9 | "email": "0x142857@gmail.com", 10 | "url": "github.com/egoist" 11 | }, 12 | "bin": "testen", 13 | "engines": { 14 | "node": ">=4" 15 | }, 16 | "scripts": { 17 | "test": "echo lol", 18 | "testen": "./testen" 19 | }, 20 | "files": [ 21 | "testen", 22 | "lib" 23 | ], 24 | "keywords": [ 25 | "cli-app", 26 | "cli", 27 | "test", 28 | "multi", 29 | "n", 30 | "nvm" 31 | ], 32 | "dependencies": { 33 | "array-unique": "^0.2.1", 34 | "chalk": "^1.1.1", 35 | "co": "^4.6.0", 36 | "figures": "^1.4.0", 37 | "hinata": "^0.1.0", 38 | "indento": "^1.1.1", 39 | "log-update": "^1.0.2", 40 | "minimist": "^1.2.0", 41 | "path-exists": "^3.0.0", 42 | "promise.series": "^0.1.0", 43 | "semver": "^5.1.0", 44 | "string-width": "^2.0.0", 45 | "text-table": "^0.2.0", 46 | "then-exec": "0.0.1", 47 | "travis-or-circle": "^1.0.0", 48 | "update-notifier": "^1.0.0" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /testen: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 'use strict' 3 | 4 | /** 5 | * Module dependencies 6 | */ 7 | const fs = require('fs') 8 | const minimist = require('minimist') 9 | const update = require('update-notifier') 10 | const chalk = require('chalk') 11 | const pathExists = require('path-exists') 12 | const figures = require('figures') 13 | const log = require('log-update') 14 | const textTable = require('text-table') 15 | const co = require('co') 16 | const exec = require('then-exec') 17 | const arrayUnique = require('array-unique') 18 | const Hinata = require('hinata') 19 | const travisOrCircle = require('travis-or-circle') 20 | const indento = require('indento') 21 | const series = require('promise.series') 22 | const stringWidth = require('string-width') 23 | const pkg = require('./package') 24 | const presetVersions = require('./lib/preset-versions') 25 | 26 | const table = result => textTable(result, {stringLength: stringWidth}) 27 | 28 | const spin = new Hinata({char: '●', text: ' ', prepend: true, spacing: 1}) 29 | 30 | update({pkg}).notify() 31 | 32 | const cli = minimist(process.argv.slice(2), { 33 | '--': true, 34 | 'alias': { 35 | s: 'sequence', 36 | n: 'node', 37 | h: 'help', 38 | v: 'version', 39 | V: 'verbose' 40 | }, 41 | 'string': ['node'] 42 | }) 43 | /** 44 | * Print help 45 | */ 46 | if (cli.help) { 47 | console.log([ 48 | '', 49 | 'Usage:', 50 | '', 51 | ' --system: Use current node version', 52 | ' -n/--node [version]: Add a node version to test', 53 | ' -s, --sequence: Run tests in sequence', 54 | ' -- [command]: The test command you expect', 55 | ' -V/--verbose: Always output everything', 56 | ' ~ example: there are `console.log` in test', 57 | '' 58 | ].join('\n')) 59 | process.exit() 60 | } 61 | 62 | /** 63 | * Print version 64 | */ 65 | if (cli.version) { 66 | console.log(pkg.version) 67 | process.exit() 68 | } 69 | 70 | /** 71 | * Local package.json 72 | */ 73 | let localPkg = {} 74 | if (pathExists.sync(process.cwd() + '/package.json')) { 75 | localPkg = require(process.cwd() + '/package.json') 76 | } 77 | 78 | /** 79 | * Test script 80 | */ 81 | let testScript = cli['--'].join(' ') 82 | if (!testScript) { 83 | if (localPkg.testen && localPkg.testen.test) { 84 | testScript = localPkg.testen.test 85 | } else { 86 | testScript = 'npm test' 87 | } 88 | } 89 | 90 | /** 91 | * Get status form an array of errors 92 | */ 93 | function getStatus(res) { 94 | let status = 0 95 | res.every(r => { 96 | const e = r.error 97 | if (!e) { 98 | return false 99 | } 100 | if (e.code !== undefined && e.code !== 0) { 101 | status = e.code 102 | return false 103 | } 104 | return true 105 | }) 106 | return status 107 | } 108 | 109 | /** 110 | * Compare two version number 111 | * @param {string} left 112 | * @param {string} right 113 | * @return {number} 1/-1/0 114 | */ 115 | function versionCompare(left, right) { 116 | if (typeof left + typeof right !== 'stringstring') { 117 | throw new TypeError('Expect version number to be string') 118 | } 119 | 120 | const a = left.split('.') 121 | const b = right.split('.') 122 | const len = Math.max(a.length, b.length) 123 | 124 | for (let i = 0; i < len; i++) { 125 | if ((a[i] && !b[i] && parseInt(a[i]) > 0) || (parseInt(a[i]) > parseInt(b[i]))) { 126 | return 1 127 | } else if ((b[i] && !a[i] && parseInt(b[i]) > 0) || (parseInt(a[i]) < parseInt(b[i]))) { 128 | return -1 129 | } 130 | } 131 | 132 | return 0 133 | } 134 | 135 | co(function* main () { 136 | /** 137 | * Get node versions from cli or .yml 138 | * If nothing got then read from package.json 139 | * It still nothing, use default node verison or preset versions 140 | * Finally sort and arrayUnique 141 | */ 142 | let nodeVersions = [] 143 | if (cli.system) { 144 | const defaultNodeVersion = yield exec('node -v') 145 | nodeVersions = [defaultNodeVersion.stdout.trim().substr(1)] 146 | } else if (cli.node === undefined) { 147 | nodeVersions = travisOrCircle() || [] 148 | } 149 | nodeVersions = nodeVersions.concat(cli.node || []) 150 | if ((!nodeVersions || nodeVersions.length === 0) && typeof nodeVersions !== 'number') { 151 | const pkgNodeVersion = localPkg.testen && localPkg.testen.node 152 | if (pkgNodeVersion && pkgNodeVersion.length > 0) { 153 | nodeVersions = pkgNodeVersion 154 | } else { 155 | nodeVersions = presetVersions 156 | } 157 | } 158 | if (!Array.isArray(nodeVersions)) { 159 | nodeVersions = [nodeVersions] 160 | } 161 | nodeVersions = nodeVersions.map(v => String(v)) 162 | nodeVersions = arrayUnique(nodeVersions) 163 | nodeVersions.sort((a, b) => versionCompare(a, b)) 164 | 165 | const spinLength = nodeVersions.length 166 | spin.length = spinLength 167 | spin.start() 168 | 169 | /** 170 | * Generate initial result and log as table 171 | */ 172 | const result = nodeVersions.map(v => { 173 | return [' ' + chalk.dim(figures.circle), v, chalk.dim('pending'), ''] 174 | }) 175 | log('\n' + table(result) + '\n') 176 | 177 | /** 178 | * Execute test 179 | */ 180 | let msg = [] 181 | const execTest = co.wrap(function* (command, index, version) { 182 | result[index][2] = 'running' 183 | log('\n' + table(result) + '\n') 184 | const startTime = Date.now() 185 | const cmd = yield exec(command) 186 | const endTime = Date.now() 187 | result[index] = [ 188 | ' ' + (cmd.error ? chalk.red(figures.cross) : chalk.green(figures.tick)), 189 | nodeVersions[index], 190 | cmd.error ? chalk.red('failed') : chalk.green('success'), 191 | chalk.dim(`${endTime - startTime}ms`) 192 | ] 193 | if (cmd && (cmd.error || cli.verbose)) { 194 | let output = cmd.stdout.toString().split('\n') 195 | const statusColor = cmd.error ? 'red' : 'green' 196 | output[0] = chalk.bold[statusColor](output[0] || chalk.red(`Node v${version} is not yet installed`)) 197 | if (!output[1] && !cmd.error) { 198 | output[1] = 'no output\n' 199 | } 200 | output = output.join('\n') 201 | msg[index] = `${output.trim()}\n${cmd.error ? `${cmd.error.message.trim()}` : ''}` 202 | } 203 | let heading = `${msg.join('\n\n')}\n` 204 | if (heading.trim()) { 205 | heading += '\n' 206 | } 207 | log(heading + table(result) + '\n') 208 | return cmd 209 | }) 210 | 211 | /** 212 | * Running test for each version of node 213 | */ 214 | const handler = (v, index) => { 215 | return execTest(`. ~/.nvm/nvm.sh && nvm exec ${v} ${testScript}`, index, v) 216 | } 217 | const tasks = cli.sequence ? series(nodeVersions.map((v, index) => { 218 | return () => handler(v, index) 219 | })) : Promise.all(nodeVersions.map(handler)) 220 | 221 | yield tasks 222 | 223 | spin.stop() 224 | }).catch(e => { 225 | log.clear() 226 | console.log(e.stack) 227 | spin.stop() 228 | }) 229 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | ansi-align@^1.1.0: 6 | version "1.1.0" 7 | resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" 8 | dependencies: 9 | string-width "^1.0.1" 10 | 11 | ansi-escapes@^1.0.0: 12 | version "1.4.0" 13 | resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" 14 | 15 | ansi-regex@^2.0.0: 16 | version "2.1.1" 17 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 18 | 19 | ansi-styles@^2.2.1: 20 | version "2.2.1" 21 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 22 | 23 | argparse@^1.0.7: 24 | version "1.0.9" 25 | resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" 26 | dependencies: 27 | sprintf-js "~1.0.2" 28 | 29 | array-unique@^0.2.1: 30 | version "0.2.1" 31 | resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 32 | 33 | balanced-match@^0.4.1: 34 | version "0.4.2" 35 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 36 | 37 | boxen@^0.6.0: 38 | version "0.6.0" 39 | resolved "https://registry.npmjs.org/boxen/-/boxen-0.6.0.tgz#8364d4248ac34ff0ef1b2f2bf49a6c60ce0d81b6" 40 | dependencies: 41 | ansi-align "^1.1.0" 42 | camelcase "^2.1.0" 43 | chalk "^1.1.1" 44 | cli-boxes "^1.0.0" 45 | filled-array "^1.0.0" 46 | object-assign "^4.0.1" 47 | repeating "^2.0.0" 48 | string-width "^1.0.1" 49 | widest-line "^1.0.0" 50 | 51 | brace-expansion@^1.0.0: 52 | version "1.1.6" 53 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" 54 | dependencies: 55 | balanced-match "^0.4.1" 56 | concat-map "0.0.1" 57 | 58 | buffer-shims@^1.0.0: 59 | version "1.0.0" 60 | resolved "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 61 | 62 | camelcase@^2.1.0: 63 | version "2.1.1" 64 | resolved "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 65 | 66 | capture-stack-trace@^1.0.0: 67 | version "1.0.0" 68 | resolved "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" 69 | 70 | chalk@^1.0.0, chalk@^1.1.1: 71 | version "1.1.3" 72 | resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 73 | dependencies: 74 | ansi-styles "^2.2.1" 75 | escape-string-regexp "^1.0.2" 76 | has-ansi "^2.0.0" 77 | strip-ansi "^3.0.0" 78 | supports-color "^2.0.0" 79 | 80 | cli-boxes@^1.0.0: 81 | version "1.0.0" 82 | resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" 83 | 84 | cli-cursor@^1.0.2: 85 | version "1.0.2" 86 | resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" 87 | dependencies: 88 | restore-cursor "^1.0.1" 89 | 90 | co@^4.6.0: 91 | version "4.6.0" 92 | resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 93 | 94 | code-point-at@^1.0.0: 95 | version "1.1.0" 96 | resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 97 | 98 | concat-map@0.0.1: 99 | version "0.0.1" 100 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 101 | 102 | configstore@^2.0.0: 103 | version "2.1.0" 104 | resolved "https://registry.npmjs.org/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1" 105 | dependencies: 106 | dot-prop "^3.0.0" 107 | graceful-fs "^4.1.2" 108 | mkdirp "^0.5.0" 109 | object-assign "^4.0.1" 110 | os-tmpdir "^1.0.0" 111 | osenv "^0.1.0" 112 | uuid "^2.0.1" 113 | write-file-atomic "^1.1.2" 114 | xdg-basedir "^2.0.0" 115 | 116 | core-util-is@~1.0.0: 117 | version "1.0.2" 118 | resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 119 | 120 | create-error-class@^3.0.1: 121 | version "3.0.2" 122 | resolved "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" 123 | dependencies: 124 | capture-stack-trace "^1.0.0" 125 | 126 | cwd@^0.9.1: 127 | version "0.9.1" 128 | resolved "https://registry.npmjs.org/cwd/-/cwd-0.9.1.tgz#41e10a7e1ab833dc59c2eca83814c7de77b5a4fd" 129 | dependencies: 130 | find-pkg "^0.1.0" 131 | 132 | deep-extend@~0.4.0: 133 | version "0.4.1" 134 | resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" 135 | 136 | dot-prop@^3.0.0: 137 | version "3.0.0" 138 | resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" 139 | dependencies: 140 | is-obj "^1.0.0" 141 | 142 | duplexer2@^0.1.4: 143 | version "0.1.4" 144 | resolved "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" 145 | dependencies: 146 | readable-stream "^2.0.2" 147 | 148 | error-ex@^1.2.0: 149 | version "1.3.0" 150 | resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" 151 | dependencies: 152 | is-arrayish "^0.2.1" 153 | 154 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 155 | version "1.0.5" 156 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 157 | 158 | exit-hook@^1.0.0: 159 | version "1.1.1" 160 | resolved "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" 161 | 162 | expand-tilde@^1.2.2: 163 | version "1.2.2" 164 | resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" 165 | dependencies: 166 | os-homedir "^1.0.1" 167 | 168 | figures@^1.4.0: 169 | version "1.7.0" 170 | resolved "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" 171 | dependencies: 172 | escape-string-regexp "^1.0.5" 173 | object-assign "^4.1.0" 174 | 175 | filled-array@^1.0.0: 176 | version "1.1.0" 177 | resolved "https://registry.npmjs.org/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84" 178 | 179 | find-file-up@^0.1.2: 180 | version "0.1.3" 181 | resolved "https://registry.npmjs.org/find-file-up/-/find-file-up-0.1.3.tgz#cf68091bcf9f300a40da411b37da5cce5a2fbea0" 182 | dependencies: 183 | fs-exists-sync "^0.1.0" 184 | resolve-dir "^0.1.0" 185 | 186 | find-pkg@^0.1.0: 187 | version "0.1.2" 188 | resolved "https://registry.npmjs.org/find-pkg/-/find-pkg-0.1.2.tgz#1bdc22c06e36365532e2a248046854b9788da557" 189 | dependencies: 190 | find-file-up "^0.1.2" 191 | 192 | fs-exists-sync@^0.1.0: 193 | version "0.1.0" 194 | resolved "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" 195 | 196 | fs.realpath@^1.0.0: 197 | version "1.0.0" 198 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 199 | 200 | glob@^7.0.5: 201 | version "7.1.1" 202 | resolved "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 203 | dependencies: 204 | fs.realpath "^1.0.0" 205 | inflight "^1.0.4" 206 | inherits "2" 207 | minimatch "^3.0.2" 208 | once "^1.3.0" 209 | path-is-absolute "^1.0.0" 210 | 211 | global-modules@^0.2.3: 212 | version "0.2.3" 213 | resolved "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" 214 | dependencies: 215 | global-prefix "^0.1.4" 216 | is-windows "^0.2.0" 217 | 218 | global-prefix@^0.1.4: 219 | version "0.1.5" 220 | resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" 221 | dependencies: 222 | homedir-polyfill "^1.0.0" 223 | ini "^1.3.4" 224 | is-windows "^0.2.0" 225 | which "^1.2.12" 226 | 227 | got@^5.0.0: 228 | version "5.7.1" 229 | resolved "https://registry.npmjs.org/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35" 230 | dependencies: 231 | create-error-class "^3.0.1" 232 | duplexer2 "^0.1.4" 233 | is-redirect "^1.0.0" 234 | is-retry-allowed "^1.0.0" 235 | is-stream "^1.0.0" 236 | lowercase-keys "^1.0.0" 237 | node-status-codes "^1.0.0" 238 | object-assign "^4.0.1" 239 | parse-json "^2.1.0" 240 | pinkie-promise "^2.0.0" 241 | read-all-stream "^3.0.0" 242 | readable-stream "^2.0.5" 243 | timed-out "^3.0.0" 244 | unzip-response "^1.0.2" 245 | url-parse-lax "^1.0.0" 246 | 247 | graceful-fs@^4.1.11, graceful-fs@^4.1.2: 248 | version "4.1.11" 249 | resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 250 | 251 | has-ansi@^2.0.0: 252 | version "2.0.0" 253 | resolved "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 254 | dependencies: 255 | ansi-regex "^2.0.0" 256 | 257 | hinata@^0.1.0: 258 | version "0.1.0" 259 | resolved "https://registry.npmjs.org/hinata/-/hinata-0.1.0.tgz#f05cdfbf607d70682b7ba356e0df0ba8fb2ef129" 260 | dependencies: 261 | chalk "^1.1.1" 262 | 263 | homedir-polyfill@^1.0.0: 264 | version "1.0.1" 265 | resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" 266 | dependencies: 267 | parse-passwd "^1.0.0" 268 | 269 | imurmurhash@^0.1.4: 270 | version "0.1.4" 271 | resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 272 | 273 | indento@^1.1.1: 274 | version "1.1.7" 275 | resolved "https://registry.npmjs.org/indento/-/indento-1.1.7.tgz#16dc78c39824c69c8d66e430a5cf137ebf86b663" 276 | 277 | inflight@^1.0.4: 278 | version "1.0.6" 279 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 280 | dependencies: 281 | once "^1.3.0" 282 | wrappy "1" 283 | 284 | inherits@2, inherits@~2.0.1: 285 | version "2.0.3" 286 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 287 | 288 | ini@^1.3.4, ini@~1.3.0: 289 | version "1.3.4" 290 | resolved "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 291 | 292 | is-arrayish@^0.2.1: 293 | version "0.2.1" 294 | resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 295 | 296 | is-finite@^1.0.0: 297 | version "1.0.2" 298 | resolved "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 299 | dependencies: 300 | number-is-nan "^1.0.0" 301 | 302 | is-fullwidth-code-point@^1.0.0: 303 | version "1.0.0" 304 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 305 | dependencies: 306 | number-is-nan "^1.0.0" 307 | 308 | is-fullwidth-code-point@^2.0.0: 309 | version "2.0.0" 310 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 311 | 312 | is-npm@^1.0.0: 313 | version "1.0.0" 314 | resolved "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" 315 | 316 | is-obj@^1.0.0: 317 | version "1.0.1" 318 | resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 319 | 320 | is-redirect@^1.0.0: 321 | version "1.0.0" 322 | resolved "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" 323 | 324 | is-retry-allowed@^1.0.0: 325 | version "1.1.0" 326 | resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" 327 | 328 | is-stream@^1.0.0: 329 | version "1.1.0" 330 | resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 331 | 332 | is-windows@^0.2.0: 333 | version "0.2.0" 334 | resolved "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" 335 | 336 | isarray@~1.0.0: 337 | version "1.0.0" 338 | resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 339 | 340 | isexe@^1.1.1: 341 | version "1.1.2" 342 | resolved "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" 343 | 344 | latest-version@^2.0.0: 345 | version "2.0.0" 346 | resolved "https://registry.npmjs.org/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b" 347 | dependencies: 348 | package-json "^2.0.0" 349 | 350 | lazy-req@^1.1.0: 351 | version "1.1.0" 352 | resolved "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac" 353 | 354 | log-update@^1.0.2: 355 | version "1.0.2" 356 | resolved "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" 357 | dependencies: 358 | ansi-escapes "^1.0.0" 359 | cli-cursor "^1.0.2" 360 | 361 | lowercase-keys@^1.0.0: 362 | version "1.0.0" 363 | resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" 364 | 365 | minimatch@^3.0.2: 366 | version "3.0.3" 367 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" 368 | dependencies: 369 | brace-expansion "^1.0.0" 370 | 371 | minimist@0.0.8: 372 | version "0.0.8" 373 | resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 374 | 375 | minimist@^1.2.0: 376 | version "1.2.0" 377 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 378 | 379 | mkdirp@^0.5.0: 380 | version "0.5.1" 381 | resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 382 | dependencies: 383 | minimist "0.0.8" 384 | 385 | node-status-codes@^1.0.0: 386 | version "1.0.0" 387 | resolved "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" 388 | 389 | number-is-nan@^1.0.0: 390 | version "1.0.1" 391 | resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 392 | 393 | object-assign@^4.0.1, object-assign@^4.1.0: 394 | version "4.1.1" 395 | resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 396 | 397 | once@^1.3.0: 398 | version "1.4.0" 399 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 400 | dependencies: 401 | wrappy "1" 402 | 403 | onetime@^1.0.0: 404 | version "1.1.0" 405 | resolved "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" 406 | 407 | os-homedir@^1.0.0, os-homedir@^1.0.1: 408 | version "1.0.2" 409 | resolved "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 410 | 411 | os-tmpdir@^1.0.0: 412 | version "1.0.2" 413 | resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 414 | 415 | osenv@^0.1.0: 416 | version "0.1.4" 417 | resolved "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" 418 | dependencies: 419 | os-homedir "^1.0.0" 420 | os-tmpdir "^1.0.0" 421 | 422 | package-json@^2.0.0: 423 | version "2.4.0" 424 | resolved "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb" 425 | dependencies: 426 | got "^5.0.0" 427 | registry-auth-token "^3.0.1" 428 | registry-url "^3.0.3" 429 | semver "^5.1.0" 430 | 431 | parse-json@^2.1.0: 432 | version "2.2.0" 433 | resolved "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 434 | dependencies: 435 | error-ex "^1.2.0" 436 | 437 | parse-passwd@^1.0.0: 438 | version "1.0.0" 439 | resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" 440 | 441 | path-exists@^2.1.0: 442 | version "2.1.0" 443 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 444 | dependencies: 445 | pinkie-promise "^2.0.0" 446 | 447 | path-exists@^3.0.0: 448 | version "3.0.0" 449 | resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 450 | 451 | path-is-absolute@^1.0.0: 452 | version "1.0.1" 453 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 454 | 455 | pinkie-promise@^2.0.0: 456 | version "2.0.1" 457 | resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 458 | dependencies: 459 | pinkie "^2.0.0" 460 | 461 | pinkie@^2.0.0: 462 | version "2.0.4" 463 | resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 464 | 465 | prepend-http@^1.0.1: 466 | version "1.0.4" 467 | resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" 468 | 469 | process-nextick-args@~1.0.6: 470 | version "1.0.7" 471 | resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 472 | 473 | promise.series@^0.1.0: 474 | version "0.1.0" 475 | resolved "https://registry.npmjs.org/promise.series/-/promise.series-0.1.0.tgz#d47645cc7aa8e694a2df29e9325c74573e404501" 476 | 477 | rc@^1.0.1, rc@^1.1.6: 478 | version "1.1.7" 479 | resolved "https://registry.npmjs.org/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" 480 | dependencies: 481 | deep-extend "~0.4.0" 482 | ini "~1.3.0" 483 | minimist "^1.2.0" 484 | strip-json-comments "~2.0.1" 485 | 486 | read-all-stream@^3.0.0: 487 | version "3.1.0" 488 | resolved "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" 489 | dependencies: 490 | pinkie-promise "^2.0.0" 491 | readable-stream "^2.0.0" 492 | 493 | readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5: 494 | version "2.2.2" 495 | resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" 496 | dependencies: 497 | buffer-shims "^1.0.0" 498 | core-util-is "~1.0.0" 499 | inherits "~2.0.1" 500 | isarray "~1.0.0" 501 | process-nextick-args "~1.0.6" 502 | string_decoder "~0.10.x" 503 | util-deprecate "~1.0.1" 504 | 505 | registry-auth-token@^3.0.1: 506 | version "3.1.0" 507 | resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b" 508 | dependencies: 509 | rc "^1.1.6" 510 | 511 | registry-url@^3.0.3: 512 | version "3.1.0" 513 | resolved "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" 514 | dependencies: 515 | rc "^1.0.1" 516 | 517 | repeating@^2.0.0: 518 | version "2.0.1" 519 | resolved "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 520 | dependencies: 521 | is-finite "^1.0.0" 522 | 523 | resolve-dir@^0.1.0: 524 | version "0.1.1" 525 | resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" 526 | dependencies: 527 | expand-tilde "^1.2.2" 528 | global-modules "^0.2.3" 529 | 530 | restore-cursor@^1.0.1: 531 | version "1.0.1" 532 | resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" 533 | dependencies: 534 | exit-hook "^1.0.0" 535 | onetime "^1.0.0" 536 | 537 | semver-diff@^2.0.0: 538 | version "2.1.0" 539 | resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" 540 | dependencies: 541 | semver "^5.0.3" 542 | 543 | semver@^5.0.3, semver@^5.1.0: 544 | version "5.3.0" 545 | resolved "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 546 | 547 | slide@^1.1.5: 548 | version "1.1.6" 549 | resolved "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" 550 | 551 | sprintf-js@~1.0.2: 552 | version "1.0.3" 553 | resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 554 | 555 | string-width@^1.0.1: 556 | version "1.0.2" 557 | resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 558 | dependencies: 559 | code-point-at "^1.0.0" 560 | is-fullwidth-code-point "^1.0.0" 561 | strip-ansi "^3.0.0" 562 | 563 | string-width@^2.0.0: 564 | version "2.0.0" 565 | resolved "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" 566 | dependencies: 567 | is-fullwidth-code-point "^2.0.0" 568 | strip-ansi "^3.0.0" 569 | 570 | string_decoder@~0.10.x: 571 | version "0.10.31" 572 | resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 573 | 574 | strip-ansi@^3.0.0: 575 | version "3.0.1" 576 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 577 | dependencies: 578 | ansi-regex "^2.0.0" 579 | 580 | strip-json-comments@~2.0.1: 581 | version "2.0.1" 582 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 583 | 584 | supports-color@^2.0.0: 585 | version "2.0.0" 586 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 587 | 588 | text-table@^0.2.0: 589 | version "0.2.0" 590 | resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 591 | 592 | then-exec@0.0.1: 593 | version "0.0.1" 594 | resolved "https://registry.npmjs.org/then-exec/-/then-exec-0.0.1.tgz#006b0b4518277581153cfef390f1fcc767eb565a" 595 | dependencies: 596 | pinkie-promise "^2.0.0" 597 | 598 | timed-out@^3.0.0: 599 | version "3.1.3" 600 | resolved "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz#95860bfcc5c76c277f8f8326fd0f5b2e20eba217" 601 | 602 | travis-or-circle@^1.0.0: 603 | version "1.0.2" 604 | resolved "https://registry.npmjs.org/travis-or-circle/-/travis-or-circle-1.0.2.tgz#e3825917472def841adb2f3e91f32217669044e8" 605 | dependencies: 606 | cwd "^0.9.1" 607 | path-exists "^2.1.0" 608 | yamljs "^0.2.6" 609 | 610 | unzip-response@^1.0.2: 611 | version "1.0.2" 612 | resolved "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe" 613 | 614 | update-notifier@^1.0.0: 615 | version "1.0.3" 616 | resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-1.0.3.tgz#8f92c515482bd6831b7c93013e70f87552c7cf5a" 617 | dependencies: 618 | boxen "^0.6.0" 619 | chalk "^1.0.0" 620 | configstore "^2.0.0" 621 | is-npm "^1.0.0" 622 | latest-version "^2.0.0" 623 | lazy-req "^1.1.0" 624 | semver-diff "^2.0.0" 625 | xdg-basedir "^2.0.0" 626 | 627 | url-parse-lax@^1.0.0: 628 | version "1.0.0" 629 | resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" 630 | dependencies: 631 | prepend-http "^1.0.1" 632 | 633 | util-deprecate@~1.0.1: 634 | version "1.0.2" 635 | resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 636 | 637 | uuid@^2.0.1: 638 | version "2.0.3" 639 | resolved "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" 640 | 641 | which@^1.2.12: 642 | version "1.2.12" 643 | resolved "https://registry.npmjs.org/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" 644 | dependencies: 645 | isexe "^1.1.1" 646 | 647 | widest-line@^1.0.0: 648 | version "1.0.0" 649 | resolved "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" 650 | dependencies: 651 | string-width "^1.0.1" 652 | 653 | wrappy@1: 654 | version "1.0.2" 655 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 656 | 657 | write-file-atomic@^1.1.2: 658 | version "1.3.1" 659 | resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a" 660 | dependencies: 661 | graceful-fs "^4.1.11" 662 | imurmurhash "^0.1.4" 663 | slide "^1.1.5" 664 | 665 | xdg-basedir@^2.0.0: 666 | version "2.0.0" 667 | resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2" 668 | dependencies: 669 | os-homedir "^1.0.0" 670 | 671 | yamljs@^0.2.6: 672 | version "0.2.8" 673 | resolved "https://registry.npmjs.org/yamljs/-/yamljs-0.2.8.tgz#ef23fb006e62f6ae07b406aa2a949561f336ea5c" 674 | dependencies: 675 | argparse "^1.0.7" 676 | glob "^7.0.5" 677 | --------------------------------------------------------------------------------