├── .babelrc ├── .eslintignore ├── .eslintrc.json ├── .flowconfig ├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── decls ├── atom.js.flow └── jasmine.js.flow ├── lib ├── helpers.js ├── junit-parser.js ├── spawn-runner.js └── tester-phpunit.js ├── package.json ├── preview.gif ├── spec ├── fixtures │ ├── junit.xml │ └── php-parse-error.txt ├── spawn-runner-spec.js └── tester-junit-reporter-spec.js ├── tests ├── PHPUnit2Test.php └── PHPUnitTest.php └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015"] 3 | } 4 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | decls 2 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "airbnb-base", 3 | "parser": "babel-eslint", 4 | "plugins": [ 5 | "import", 6 | "flowtype" 7 | ], 8 | "env": { 9 | "atomtest": true, 10 | "es6": true, 11 | "jasmine": true 12 | }, 13 | "globals": { 14 | "atom": false, 15 | "document": true, 16 | "window": true 17 | }, 18 | "rules": { 19 | "import/extensions": 0, 20 | "import/no-unresolved": 0, 21 | "import/no-extraneous-dependencies": 0, 22 | "no-restricted-syntax": 0, 23 | "no-return-assign": 0, 24 | "no-unused-vars": ["error", { "varsIgnorePattern": "^atom$" }], 25 | "no-underscore-dangle": 0, 26 | "no-plusplus": 0, 27 | "consistent-return": 0, 28 | "global-require": 0, 29 | "strict": 0, 30 | "class-methods-use-this": 0, 31 | "no-param-reassign": 0, 32 | "no-useless-escape": 0, 33 | "prefer-rest-params": 0, 34 | "react/jsx-filename-extension": 0, 35 | "react/sort-comp": 0, 36 | "import/prefer-default-export": 0, 37 | "class-methods-use-this": 0, 38 | "no-confusing-arrow": 0, 39 | "max-len": [2, 150], 40 | "no-console": [1, { "allow": ["warn", "error"] }] 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | 3 | [include] 4 | 5 | [libs] 6 | decls 7 | 8 | [options] 9 | module.system=node 10 | unsafe.enable_getters_and_setters=true 11 | suppress_comment= \\(.\\|\n\\)*\\$FlowIgnore 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | temp/* 6 | 7 | # Runtime data 8 | pids 9 | *.pid 10 | *.seed 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 | 40 | # Yarn 41 | yarn-error.log 42 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | 3 | notifications: 4 | email: 5 | on_success: never 6 | on_failure: change 7 | 8 | script: 'curl -s https://raw.githubusercontent.com/atom/ci/master/build-package.sh | sh' 9 | 10 | branches: 11 | only: 12 | - master 13 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to `tester-phpunit` will be documented in this file 4 | 5 | ## 1.0.6 6 | - 顯示 php 錯誤 7 | 8 | ## 1.0.5 9 | - clean code 10 | 11 | ## 1.0.4 12 | - PHPUnit 6 正確顯示 skipped 13 | 14 | ## 1.0.3 15 | - JUnit 未建立時,產生 JUnit 16 | 17 | ## 1.0.2 18 | - 優先使用 phpunit.xml 19 | - 當 JUnit 未建立時,顯示skipped 20 | 21 | ## 1.0.1 22 | - 增加測試案例 23 | - 修正 phpunit 路徑錯誤 24 | - 增加 Test, Tests 目錄 至 phpunit.xml 25 | 26 | ## 1.0.0 27 | - 支援 tester 1.0.0 28 | - 當找不到 phpunit.xml 或 phpunit.xml.dist 則自動建立 29 | 30 | ## 0.2.0 31 | - 修正 bug 32 | - system temp dir 33 | - phpunit 路徑修正 34 | 35 | ## 0.1.8 36 | - 修正 phpunit 路徑錯誤 37 | 38 | ## 0.1.7 39 | - stop function 40 | 41 | ## 0.1.6 42 | - 找出 phpunit 路徑 43 | 44 | ## 0.1.5 45 | - 修正分析 JUnit 分析錯誤 46 | 47 | ## 0.1.2 48 | - 分析五種狀態 passed, failed, error, skipped, incomplete 49 | - PHPUnitReporter 更名為 JUnitParser 50 | 51 | ## 0.1.0 - First Release 52 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | ## Basic Steps 4 | 5 | If you would like to contribute enhancements or fixes, please do the following: 6 | 7 | 1. Fork the package repository 8 | 2. Run `npm install` to setup all dependencies 9 | 3. Hack on a separate topic branch created from the latest `master`. Changes to 10 | the package code should be made to the files in the `lib` directory. 11 | 4. Check for lint errors with `npm test`. 12 | 5. Commit the changes under `lib` and push the topic branch 13 | 6. Make a pull request 14 | 15 | ## Guidelines 16 | 17 | Please note that modifications should follow these coding guidelines: 18 | 19 | * Indent is 2 spaces 20 | * Code should pass the `eslint` linter 21 | * Vertical whitespace helps readability, don’t be afraid to use it 22 | 23 | ## Releasing 24 | 25 | Project members with push access to the repository also have the permissions 26 | needed to release a new version. If there have been changes to the project and 27 | the team decides it is time for a new release, the process is to: 28 | 29 | 1. Update `CHANGELOG.md` with the planned version number and a short bulleted 30 | list of major changes. Include pull request numbers if applicable. 31 | 2. Commit the changelog and any `lib/` changes to master. 32 | 3. Publish a new version with `apm publish {major|minor|patch}`, using semver to 33 | decide what type of version should be released. 34 | 4. `apm` will then automatically: 35 | * Update `package.json` with the new version number 36 | * Commit the changed `package.json` to master 37 | * Create a git tag for the new version and push it to GitHub 38 | * Publish the package to the Atom package manager 39 | 40 | Thank you for helping out! 41 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017 yacut 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tester PHPUnit 2 | 3 | [![Build Status](https://travis-ci.org/recca0120/tester-phpunit.svg)](https://travis-ci.org/recca0120/tester-phpunit) 4 | [![APM Version](https://img.shields.io/apm/v/tester-phpunit.svg)](https://atom.io/packages/tester-phpunit) 5 | [![APM Downloads](https://img.shields.io/apm/dm/tester-phpunit.svg)](https://atom.io/packages/tester-phpunit) 6 | [![GitHub stars](https://img.shields.io/github/stars/recca0120/tester-phpunit.svg)](https://github.com/recca0120/tester-phpunit/stargazers) 7 | [![GitHub issues](https://img.shields.io/github/issues/recca0120/tester-phpunit.svg)](https://github.com/recca0120/tester-phpunit/issues) 8 | [![Dependencies!](https://img.shields.io/david/recca0120/tester-phpunit.svg)](https://david-dm.org/recca0120/tester-phpunit) 9 | 10 | Tester PHPUnit is a tester provider for the [Atom Tester](https://atom.io/packages/tester). 11 | 12 | ![Preview](https://raw.githubusercontent.com/recca0120/tester-phpunit/master/preview.gif) 13 | 14 | #### How to / Installation 15 | 16 | You can install through the CLI by doing: 17 | 18 | ``` 19 | $ apm install tester-phpunit 20 | ``` 21 | 22 | ## Thanks 23 | 24 | - [yacut](https://github.com/yacut/tester) 25 | -------------------------------------------------------------------------------- /decls/atom.js.flow: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | 3 | // Global Atom Object 4 | declare var atom: Object; 5 | 6 | declare module 'atom' { 7 | declare var Point: any; 8 | declare var Range: any; 9 | declare var Panel: any; 10 | declare var TextEditor: any; 11 | declare var TextBuffer: any; 12 | declare var BufferMarker: any; 13 | declare var BufferedProcess: any; 14 | declare var TextEditorGutter: any; 15 | declare var TextEditorMarker: any; 16 | declare var Emitter: any; 17 | declare var Disposable: any; 18 | declare var CompositeDisposable: any; 19 | } 20 | -------------------------------------------------------------------------------- /decls/jasmine.js.flow: -------------------------------------------------------------------------------- 1 | /* @flow */ 2 | declare var jasmine: Object; 3 | declare function it(name: string, callback: (() => void)): void; 4 | declare function fit(name: string, callback: (() => void)): void; 5 | declare function spyOn(object: Object, property: string): Object; 6 | declare function expect(value: any): Object; 7 | declare function describe(name: string, callback: (() => void)): void; 8 | declare function fdescribe(name: string, callback: (() => void)): void; 9 | declare function beforeEach(callback: (() => void)): void; 10 | declare function afterEach(callback: (() => void)): void; 11 | -------------------------------------------------------------------------------- /lib/helpers.js: -------------------------------------------------------------------------------- 1 | 'use babel'; 2 | 3 | import { parseString } from 'xml2js'; 4 | 5 | export function xml2json(xml :string) :string { 6 | return new Promise((resolve) => { 7 | parseString(xml, (error, json) => { 8 | if (error) { 9 | resolve(error); 10 | return; 11 | } 12 | 13 | resolve(json); 14 | }); 15 | }); 16 | } 17 | 18 | export function crlf2lf(str :string) :string { 19 | return str.replace(/\r\n/g, '\n'); 20 | } 21 | 22 | export function replaceFirst(str :string, search :string) :string { 23 | const length = str.indexOf(search); 24 | 25 | return length === -1 ? str : str.substr(length + search.length); 26 | } 27 | 28 | export function getClassName(filePath :string) :string { 29 | const name = filePath.replace(/\\/g, '/'); 30 | 31 | return name.substr(name.lastIndexOf('/') + 1).replace(/\.php$/i, ''); 32 | } 33 | -------------------------------------------------------------------------------- /lib/junit-parser.js: -------------------------------------------------------------------------------- 1 | 'use babel'; 2 | 3 | import { xml2json, crlf2lf, replaceFirst, getClassName } from './helpers'; 4 | 5 | function parseState(errAttr :Object) :string { 6 | const type = errAttr.type.toLowerCase(); 7 | 8 | if (type.indexOf('skipped') !== -1) { 9 | return 'skipped'; 10 | } 11 | 12 | if (type.indexOf('incomplete') !== -1) { 13 | return 'incomplete'; 14 | } 15 | 16 | if (type.indexOf('failed') !== -1) { 17 | return 'failed'; 18 | } 19 | 20 | return 'error'; 21 | } 22 | 23 | function parseFiles(errorChar :string) :Array { 24 | return errorChar.split('\n') 25 | .map(line => line.trim()) 26 | .filter(line => /(.*):(\d+)/.test(line)); 27 | } 28 | 29 | function parseMessage(message :string, files :Array, name :string, title :string) :string { 30 | message = crlf2lf(message); 31 | files.forEach(line => message = message.replace(line, '')); 32 | message = message.replace(/\n+$/, ''); 33 | message = replaceFirst(message, `${name}: `); 34 | message = replaceFirst(message, `${title}\n`); 35 | 36 | return message; 37 | } 38 | 39 | function parseFilePath(files :Array) :string { 40 | files = files 41 | .filter((path) => { 42 | const paths = [ 43 | 'vendor/mockery/mockery', 44 | 'vendor/phpunit/phpunit', 45 | ]; 46 | 47 | return (new RegExp(paths.join('|'), 'ig')).test(path.replace(/\\/g, '/')) === false; 48 | }) 49 | .map((path) => { 50 | const [, file, line] = path.match(/(.*):(\d+)/); 51 | 52 | return { filePath: file, lineNumber: line }; 53 | }); 54 | 55 | return files[files.length - 1]; 56 | } 57 | 58 | function getError(testcase) { 59 | if (testcase.failure) { 60 | return testcase.failure; 61 | } 62 | 63 | if (testcase.error) { 64 | return testcase.error; 65 | } 66 | 67 | if (testcase.skipped) { 68 | return [{ 69 | $: { 70 | type: 'skipped', 71 | }, 72 | _: '', 73 | }]; 74 | } 75 | 76 | return null; 77 | } 78 | 79 | export function parseTestcase(testcase :Object) :Object { 80 | const testcaseAttr = testcase.$; 81 | const duration = parseFloat(testcaseAttr.time || 0); 82 | const title = testcaseAttr.name || ''; 83 | const error = getError(testcase); 84 | 85 | if (error === null) { 86 | return { 87 | duration, 88 | filePath: testcaseAttr.file, 89 | lineNumber: (testcaseAttr.line || 1) - 1, 90 | state: 'passed', 91 | title, 92 | }; 93 | } 94 | 95 | const errorAttr = error[0].$; 96 | const errorChar = crlf2lf(error[0]._); 97 | const state = parseState(errorAttr); 98 | const files = parseFiles(errorChar); 99 | 100 | const file = parseFilePath(files) || { 101 | filePath: testcaseAttr.file, 102 | lineNumber: testcaseAttr.line, 103 | }; 104 | 105 | const name = crlf2lf(errorAttr.type); 106 | 107 | return { 108 | duration, 109 | error: { message: parseMessage(errorChar, files, name, title), name: '' }, 110 | filePath: file.filePath, 111 | lineNumber: file.lineNumber - 1, 112 | state: state === 'skipped' ? state : 'failed', 113 | title, 114 | }; 115 | } 116 | 117 | export function parseTestsuite(testsuite :Object) :Array { 118 | let messages = []; 119 | if (testsuite.testsuite) { 120 | for (testsuite of testsuite.testsuite) { 121 | messages = messages.concat(parseTestsuite(testsuite)); 122 | } 123 | } else if (testsuite.testcase) { 124 | for (const testcase of testsuite.testcase) { 125 | messages.push(parseTestcase(testcase)); 126 | } 127 | } 128 | 129 | return messages; 130 | } 131 | 132 | export async function stringToMessages(xml :string) :Array { 133 | const json = await xml2json(xml); 134 | 135 | return parseTestsuite(json.testsuites); 136 | } 137 | 138 | export function generateString(filePath :string) :string { 139 | const className = getClassName(filePath); 140 | 141 | return ` 142 | 143 | 144 | 145 | 146 | ${filePath}:0 147 | 148 | 149 | 150 | `; 151 | } 152 | -------------------------------------------------------------------------------- /lib/spawn-runner.js: -------------------------------------------------------------------------------- 1 | 'use babel'; 2 | 3 | /* @flow */ 4 | import { existsSync, readFile, writeFileSync, unlink } from 'fs'; 5 | import { dirname } from 'path'; 6 | import { EOL, tmpdir } from 'os'; 7 | import { BufferedProcess } from 'atom'; 8 | import type { TextEditor } from 'atom'; 9 | import { stringToMessages, generateString } from './junit-parser'; 10 | 11 | function readFileAsync(filePath :string, encoding = 'utf8') :Promise { 12 | return new Promise((resolve, reject) => { 13 | readFile(filePath, encoding, (err, data) => { 14 | if (err) { 15 | reject(err); 16 | return; 17 | } 18 | 19 | resolve(data); 20 | }); 21 | }); 22 | } 23 | 24 | function unlinkAsync(filePath :string) :Promise { 25 | return new Promise((resolve) => { 26 | if (existsSync(filePath)) { 27 | resolve(false); 28 | } 29 | 30 | unlink(filePath, (err) => { 31 | if (err) { 32 | resolve(false); 33 | return; 34 | } 35 | 36 | resolve(true); 37 | }); 38 | }); 39 | } 40 | 41 | export function getCommand(projectPath :string, phpBinary :string, phpunitBinary :string) :Array { 42 | phpBinary = phpBinary || 'php'; 43 | phpunitBinary = phpunitBinary || 'phpunit'; 44 | 45 | if (phpunitBinary === 'phpunit' && existsSync(`${projectPath}/vendor/phpunit/phpunit/phpunit`) === true) { 46 | phpunitBinary = `${projectPath}/vendor/phpunit/phpunit/phpunit`; 47 | } 48 | 49 | if (phpunitBinary === 'phpunit') { 50 | return [phpunitBinary, '']; 51 | } 52 | 53 | return [phpBinary, phpunitBinary]; 54 | } 55 | 56 | export function getConfigurationFile(projectPath :string, configurationFilePath :string) :string { 57 | if (existsSync(`${projectPath}/phpunit.xml`) === true) { 58 | return `${projectPath}/phpunit.xml`; 59 | } 60 | 61 | if (existsSync(`${projectPath}/phpunit.xml.dist`) === true) { 62 | return `${projectPath}/phpunit.xml.dist`; 63 | } 64 | 65 | const configurationString = ` 66 | 74 | 75 | 76 | ${projectPath}/test 77 | ${projectPath}/tests 78 | ${projectPath}/Test 79 | ${projectPath}/Tests 80 | 81 | 82 | `; 83 | writeFileSync(configurationFilePath, configurationString, 'utf8'); 84 | 85 | return configurationFilePath; 86 | } 87 | 88 | export function removeBadArgs(args :Array) :Array { 89 | if (!args) { 90 | return []; 91 | } 92 | 93 | const prohibitedArgs = ['--log-junit', '--colors']; 94 | const clearArgs = []; 95 | args.forEach((arg) => { 96 | const equalPosition = arg.indexOf('='); 97 | if (equalPosition !== -1) { 98 | arg = arg.substr(0, equalPosition); 99 | } 100 | const index = prohibitedArgs.indexOf(arg); 101 | if (index === -1) { 102 | clearArgs.push(arg); 103 | } 104 | }); 105 | return clearArgs; 106 | } 107 | 108 | export function phpParseError(output :string) :string { 109 | if (/Parse error/.test(output) === true) { 110 | return output.split('\n').slice(4).join('\n'); 111 | } 112 | 113 | return ''; 114 | } 115 | 116 | export async function parseReporterOutput( 117 | outputString :string, 118 | filePath :string, 119 | extraString :string, 120 | ) :Promise<{messages :Array, output :string}> { 121 | const output = outputString.toString(); 122 | let messages = []; 123 | try { 124 | messages = await stringToMessages(extraString); 125 | } catch (error) { 126 | atom.notifications.addError('Tester Phpunit: Could not parse data to JSON.'); 127 | } 128 | 129 | const parseError = phpParseError(output); 130 | if (parseError !== '') { 131 | atom.notifications.addError(parseError); 132 | } 133 | 134 | if (!messages.length) { 135 | messages.push({ 136 | state: 'unknown', 137 | title: 'No results', 138 | error: { 139 | name: '', 140 | message: output, 141 | }, 142 | duration: 0, 143 | lineNumber: 0, 144 | filePath, 145 | }); 146 | } 147 | 148 | return { messages, output }; 149 | } 150 | 151 | export function run(textEditor :?TextEditor, additionalArgs: ?string) { 152 | return new Promise((resolve) => { 153 | let processOutput = `\u001b[1mTester PHPUnit\u001b[0m${EOL}`; 154 | const filePath = textEditor ? textEditor.getPath() : ''; 155 | const projectPath = filePath ? atom.project.relativizePath(filePath)[0] : atom.project.getPaths()[0]; 156 | 157 | let cwd = projectPath; 158 | if (!(cwd)) { 159 | cwd = dirname(filePath); 160 | } 161 | 162 | const extraFilePath = `${tmpdir()}/junit-${(new Date().getTime())}.xml`; 163 | const configurationFilePath = `${tmpdir()}/phpunit-${(new Date().getTime())}.xml`; 164 | 165 | const [command, firstArgument] = getCommand( 166 | projectPath, 167 | atom.config.get('tester-phpunit.phpBinaryPath'), 168 | atom.config.get('tester-phpunit.phpunitBinaryPath'), 169 | ); 170 | 171 | const userConfigArgs = removeBadArgs(atom.config.get('tester-phpunit.args')); 172 | const additionalArgsArray = (additionalArgs && additionalArgs.trim()) ? removeBadArgs(additionalArgs.trim().split(' ')) : []; 173 | const defaultArgs = [ 174 | firstArgument, 175 | `--log-junit=${extraFilePath}`, 176 | `--configuration=${getConfigurationFile(projectPath, configurationFilePath)}`, 177 | '--colors=always', 178 | ]; 179 | if (filePath) { 180 | defaultArgs.push(filePath); 181 | } 182 | 183 | const args = defaultArgs.concat(userConfigArgs, additionalArgsArray).filter(arg => arg !== ''); 184 | 185 | const options = { cwd }; 186 | 187 | processOutput += `\u001b[1mcommand:\u001b[0m ${command} ${args.join(' ')}${EOL}`; 188 | processOutput += `\u001b[1mcwd:\u001b[0m ${cwd}${EOL}`; 189 | const stdout = data => processOutput += data; 190 | const stderr = data => processOutput += data; 191 | const exit = async () => { 192 | this.bufferedProcess = null; 193 | 194 | const results = await parseReporterOutput( 195 | processOutput, 196 | filePath, 197 | existsSync(extraFilePath) === true 198 | ? await readFileAsync(extraFilePath, 'utf8') 199 | : generateString(filePath), 200 | ); 201 | 202 | await unlinkAsync(configurationFilePath); 203 | await unlinkAsync(extraFilePath); 204 | 205 | resolve(results); 206 | }; 207 | 208 | this.bufferedProcess = new BufferedProcess({ command, args, options, stdout, stderr, exit }); 209 | 210 | this.bufferedProcess.onWillThrowError((errorObject) => { 211 | atom.notifications.addError('Tester is unable to locate the phpunit command. Please ensure process.env.PATH can access phpunit.'); 212 | console.error('Tester PHPUnit: ', errorObject); 213 | }); 214 | }); 215 | } 216 | 217 | export function stop() { 218 | if (this.bufferedProcess) { 219 | this.bufferedProcess.kill(); 220 | this.bufferedProcess = null; 221 | } 222 | } 223 | -------------------------------------------------------------------------------- /lib/tester-phpunit.js: -------------------------------------------------------------------------------- 1 | 'use babel'; 2 | 3 | /* @flow */ 4 | import type { TextEditor } from 'atom'; 5 | import * as phpunitRunner from './spawn-runner'; 6 | 7 | export function activate() { 8 | require('atom-package-deps').install(); 9 | } 10 | 11 | export function deactivate() { 12 | // Fill something here, optional 13 | } 14 | 15 | export function provideTester() { 16 | return { 17 | name: 'tester-phpunit', 18 | options: {}, 19 | scopes: atom.config.get('tester-phpunit.scopes'), 20 | test(textEditor :?TextEditor, additionalArgs :?string) { 21 | // Note, a Promise may be returned as well! 22 | return phpunitRunner.run(textEditor, additionalArgs); 23 | }, 24 | stop() { 25 | phpunitRunner.stop(); 26 | }, 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tester-phpunit", 3 | "main": "./lib/tester-phpunit", 4 | "author": [ 5 | "yacut", 6 | "recca0120" 7 | ], 8 | "version": "1.0.6", 9 | "description": "PHPUnit test runner provider for the interactive tester", 10 | "keywords": [ 11 | "test", 12 | "tester", 13 | "testing", 14 | "interactive", 15 | "phpunit", 16 | "wallaby.js" 17 | ], 18 | "repository": "https://github.com/recca0120/tester-phpunit", 19 | "bugs": { 20 | "url": "https://github.com/recca0120/tester-phpunit/issues" 21 | }, 22 | "license": "MIT", 23 | "engines": { 24 | "atom": ">=1.0.0 <2.0.0" 25 | }, 26 | "scripts": { 27 | "test": "(apm test) && (flow check) && (eslint . )" 28 | }, 29 | "configSchema": { 30 | "scopes": { 31 | "title": "List of scopes to run PHPUnit on.", 32 | "type": "array", 33 | "default": [ 34 | "**/tests/*Test.php" 35 | ], 36 | "items": { 37 | "type": "string" 38 | } 39 | }, 40 | "phpBinaryPath": { 41 | "title": "Path to the global php binary", 42 | "description": "Optionally specify the path to the global php binary", 43 | "type": "string", 44 | "default": "" 45 | }, 46 | "phpunitBinaryPath": { 47 | "title": "Path to the global phpunit binary", 48 | "description": "Optionally specify the path to the global phpunit binary", 49 | "type": "string", 50 | "default": "" 51 | }, 52 | "args": { 53 | "title": "List of additional args to run PHPUnit. Forbidden: --log-junit", 54 | "type": "array", 55 | "default": [], 56 | "items": { 57 | "type": "string" 58 | } 59 | } 60 | }, 61 | "dependencies": { 62 | "atom-package-deps": "4.6.0", 63 | "xml2js": "^0.4.17" 64 | }, 65 | "package-deps": [ 66 | "tester" 67 | ], 68 | "providedServices": { 69 | "tester": { 70 | "versions": { 71 | "1.0.0": "provideTester" 72 | } 73 | } 74 | }, 75 | "devDependencies": { 76 | "babel-eslint": "7.2.3", 77 | "eslint": "3.19.0", 78 | "eslint-config-airbnb-base": "11.1.3", 79 | "eslint-plugin-flowtype": "2.32.1", 80 | "eslint-plugin-import": "2.2.0" 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/recca0120/tester-phpunit/9cb94254ddfc61a2161f689c3ef50fbb07ce6a3f/preview.gif -------------------------------------------------------------------------------- /spec/fixtures/junit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | PHPUnitTest::testFailed 7 | Failed asserting that false is true. 8 | 9 | C:\Users\recca\github\tester-phpunit\tests\PHPUnitTest.php:20 10 | 11 | 12 | 13 | PHPUnitTest::testError 14 | PHPUnit_Framework_Exception: Argument #1 (No Value) of PHPUnit_Framework_Assert::assertInstanceOf() must be a class or interface name 15 | 16 | C:\Users\recca\github\tester-phpunit\tests\PHPUnitTest.php:25 17 | 18 | 19 | 20 | Skipped Test 21 | C:\Users\recca\github\tester-phpunit\tests\PHPUnitTest.php:30 22 | 23 | 24 | 25 | Incomplete Test 26 | C:\Users\recca\github\tester-phpunit\tests\PHPUnitTest.php:35 27 | 28 | 29 | 30 | 31 | 32 | PHPUnitTest::testReceive 33 | BadMethodCallException: Method Mockery_1_Symfony_Component_HttpFoundation_File_UploadedFile::getClientOriginalName() does not exist on this mock object 34 | 35 | C:\Users\recca\github\tester-phpunit\src\Receiver.php:85 36 | C:\Users\recca\github\tester-phpunit\src\Receiver.php:68 37 | C:\Users\recca\github\tester-phpunit\tests\PHPUnitTest.php:45 38 | 39 | 40 | 41 | Recca0120\Upload\Tests\PHPUnitTest::testCleanDirectory 42 | Mockery\Exception\InvalidCountException: Method delete("C:\Users\recca\github\tester-phpunit\tests\PHPUnitTest.php") from Mockery_1_Recca0120_Upload_Filesystem should be called 43 | exactly 1 times but called 0 times. 44 | 45 | C:\Users\recca\UniServerZ\www\driways\laravel\vendor\mockery\mockery\library\Mockery\CountValidator\Exact.php:37 46 | C:\Users\recca\UniServerZ\www\driways\laravel\vendor\mockery\mockery\library\Mockery\Expectation.php:298 47 | C:\Users\recca\UniServerZ\www\driways\laravel\vendor\mockery\mockery\library\Mockery\ExpectationDirector.php:120 48 | C:\Users\recca\UniServerZ\www\driways\laravel\vendor\mockery\mockery\library\Mockery\Container.php:297 49 | C:\Users\recca\UniServerZ\www\driways\laravel\vendor\mockery\mockery\library\Mockery\Container.php:282 50 | C:\Users\recca\UniServerZ\www\driways\laravel\vendor\mockery\mockery\library\Mockery.php:152 51 | C:\Users\recca\github\tester-phpunit\tests\PHPUnitTest.php:13 52 | C:\ProgramData\ComposerSetup\vendor\phpunit\phpunit\src\TextUI\Command.php:188 53 | C:\ProgramData\ComposerSetup\vendor\phpunit\phpunit\src\TextUI\Command.php:118 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /spec/fixtures/php-parse-error.txt: -------------------------------------------------------------------------------- 1 | Tester PHPUnit 2 | command: php C:\Users\recca\UniServerZ\www\forest-beauty\laravel/vendor/phpunit/phpunit/phpunit --log-junit=C:\Users\recca\AppData\Local\Temp/junit-1497351084647.xml --configuration=C:\Users\recca\UniServerZ\www\forest-beauty\laravel/phpunit.xml --colors=always C:\Users\recca\UniServerZ\www\forest-beauty\laravel\tests\FluentTest.php 3 | cwd: C:\Users\recca\UniServerZ\www\forest-beauty\laravel 4 | 5 | Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR) in tests\FluentTest.php on line 33 6 | -------------------------------------------------------------------------------- /spec/spawn-runner-spec.js: -------------------------------------------------------------------------------- 1 | 'use babel'; 2 | 3 | /* @flow */ 4 | 5 | import { mkdirSync, rmdirSync, readFileSync, writeFileSync, unlinkSync } from 'fs'; 6 | import { 7 | getCommand, 8 | getConfigurationFile, 9 | removeBadArgs, 10 | phpParseError, 11 | } from '../lib/spawn-runner'; 12 | 13 | const fixturesPath = `${__dirname}/fixtures`; 14 | 15 | describe('spawn-runner', () => { 16 | describe('removeBadArgs', () => { 17 | it('should return clear array with args', () => { 18 | expect(removeBadArgs(['--log-junit', '--colors', '--my-arg'])).toEqual(['--my-arg']); 19 | }); 20 | }); 21 | 22 | describe('getCommand', () => { 23 | it('should return global phpunit', () => { 24 | expect(getCommand('', '', '')).toEqual(['phpunit', '']); 25 | expect(getCommand('', '/usr/bin/php', 'phpunit')).toEqual(['phpunit', '']); 26 | }); 27 | 28 | it('should return custom phpunit', () => { 29 | expect(getCommand(__dirname, '', '/path/to/phpunit')).toEqual(['php', '/path/to/phpunit']); 30 | expect(getCommand(__dirname, '/usr/bin/php', '/path/to/phpunit')).toEqual(['/usr/bin/php', '/path/to/phpunit']); 31 | expect(getCommand(__dirname, '/usr/bin/php', '/path/to/phpunit.phar')).toEqual(['/usr/bin/php', '/path/to/phpunit.phar']); 32 | }); 33 | 34 | it('should return vendor phpunit', () => { 35 | mkdirSync(`${fixturesPath}/vendor`); 36 | mkdirSync(`${fixturesPath}/vendor/phpunit`); 37 | mkdirSync(`${fixturesPath}/vendor/phpunit/phpunit`); 38 | writeFileSync(`${fixturesPath}/vendor/phpunit/phpunit/phpunit`, 'phpunit'); 39 | expect(getCommand(fixturesPath, '', '')).toEqual(['php', `${fixturesPath}/vendor/phpunit/phpunit/phpunit`]); 40 | expect(getCommand(fixturesPath, '/usr/bin/php', '')).toEqual(['/usr/bin/php', `${fixturesPath}/vendor/phpunit/phpunit/phpunit`]); 41 | unlinkSync(`${fixturesPath}/vendor/phpunit/phpunit/phpunit`); 42 | rmdirSync(`${fixturesPath}/vendor/phpunit/phpunit`); 43 | rmdirSync(`${fixturesPath}/vendor/phpunit`); 44 | rmdirSync(`${fixturesPath}/vendor`); 45 | }); 46 | }); 47 | 48 | describe('getConfigurationFile', () => { 49 | it('should return phpunit.xml.dist', () => { 50 | const xmlFile = `${fixturesPath}/phpunit.xml.dist`; 51 | writeFileSync(xmlFile, ''); 52 | expect(getConfigurationFile(fixturesPath, '')).toEqual(xmlFile); 53 | unlinkSync(xmlFile); 54 | }); 55 | 56 | it('should return phpunit.xml', () => { 57 | const xmlFile = `${fixturesPath}/phpunit.xml`; 58 | writeFileSync(xmlFile, ''); 59 | writeFileSync(`${fixturesPath}/phpunit.xml.dist`, ''); 60 | expect(getConfigurationFile(fixturesPath, '')).toEqual(xmlFile); 61 | unlinkSync(xmlFile); 62 | unlinkSync(`${fixturesPath}/phpunit.xml.dist`); 63 | }); 64 | 65 | it('should return custom.xml', () => { 66 | const xmlFile = `${fixturesPath}/custom.xml`; 67 | expect(getConfigurationFile(fixturesPath, xmlFile)).toEqual(xmlFile); 68 | 69 | expect(readFileSync(xmlFile).toString()).toEqual(` 70 | 78 | 79 | 80 | ${fixturesPath}/test 81 | ${fixturesPath}/tests 82 | ${fixturesPath}/Test 83 | ${fixturesPath}/Tests 84 | 85 | 86 | `); 87 | 88 | unlinkSync(xmlFile); 89 | }); 90 | 91 | it('php parse error', () => { 92 | const parseError = phpParseError(readFileSync(`${__dirname}/fixtures/php-parse-error.txt`).toString()); 93 | expect(parseError).toContain('Parse error: syntax error, unexpected \'->\' (T_OBJECT_OPERATOR) in tests\\FluentTest.php on line 33\n'); 94 | }); 95 | }); 96 | }); 97 | -------------------------------------------------------------------------------- /spec/tester-junit-reporter-spec.js: -------------------------------------------------------------------------------- 1 | 'use babel'; 2 | 3 | import { readFileSync } from 'fs'; 4 | import { stringToMessages } from '../lib/junit-parser'; 5 | 6 | describe('junit-parser', async () => { 7 | async function getMessages() { 8 | const messages = await stringToMessages(readFileSync(`${__dirname}/fixtures/junit.xml`).toString()); 9 | 10 | return messages; 11 | } 12 | 13 | it('it should parse passed', async () => { 14 | const messages = await getMessages(); 15 | 16 | expect(messages[0]).toEqual({ 17 | duration: 0.006241, 18 | filePath: 'C:\\Users\\recca\\github\\tester-phpunit\\tests\\PHPUnitTest.php', 19 | lineNumber: 12, 20 | state: 'passed', 21 | title: 'testPassed', 22 | }); 23 | }); 24 | 25 | it('it should parse failed', async () => { 26 | const messages = await getMessages(); 27 | 28 | expect(messages[1]).toEqual({ 29 | duration: 0.001918, 30 | error: { 31 | message: 'Failed asserting that false is true.', 32 | name: '', 33 | // name: 'PHPUnit_Framework_ExpectationFailedException', 34 | }, 35 | filePath: 'C:\\Users\\recca\\github\\tester-phpunit\\tests\\PHPUnitTest.php', 36 | lineNumber: 19, 37 | state: 'failed', 38 | title: 'testFailed', 39 | }); 40 | }); 41 | 42 | it('it should parse error', async () => { 43 | const messages = await getMessages(); 44 | 45 | expect(messages[2]).toEqual({ 46 | duration: 0.001087, 47 | error: { 48 | message: 'Argument #1 (No Value) of PHPUnit_Framework_Assert::assertInstanceOf() must be a class or interface name', 49 | name: '', 50 | // name: 'PHPUnit_Framework_Exception', 51 | }, 52 | filePath: 'C:\\Users\\recca\\github\\tester-phpunit\\tests\\PHPUnitTest.php', 53 | lineNumber: 24, 54 | state: 'failed', 55 | title: 'testError', 56 | }); 57 | }); 58 | 59 | it('it should parse skipped', async () => { 60 | const messages = await getMessages(); 61 | 62 | expect(messages[3]).toEqual({ 63 | duration: 0.001138, 64 | error: { 65 | message: 'Skipped Test', 66 | name: '', 67 | // name: 'PHPUnit_Framework_SkippedTestError', 68 | }, 69 | filePath: 'C:\\Users\\recca\\github\\tester-phpunit\\tests\\PHPUnitTest.php', 70 | lineNumber: 29, 71 | state: 'skipped', 72 | title: 'testSkipped', 73 | }); 74 | }); 75 | 76 | it('it should parse incomplete', async () => { 77 | const messages = await getMessages(); 78 | 79 | expect(messages[4]).toEqual({ 80 | duration: 0.001081, 81 | error: { 82 | message: 'Incomplete Test', 83 | name: '', 84 | // name: 'PHPUnit_Framework_IncompleteTestError', 85 | }, 86 | filePath: 'C:\\Users\\recca\\github\\tester-phpunit\\tests\\PHPUnitTest.php', 87 | lineNumber: 34, 88 | state: 'failed', 89 | title: 'testIncomplete', 90 | }); 91 | }); 92 | 93 | it('it should parse exception', async () => { 94 | const messages = await getMessages(); 95 | 96 | expect(messages[5]).toEqual({ 97 | duration: 0.164687, 98 | error: { 99 | message: 'Method Mockery_1_Symfony_Component_HttpFoundation_File_UploadedFile::getClientOriginalName() does not exist on this mock object', 100 | name: '', 101 | // name: 'BadMethodCallException', 102 | }, 103 | filePath: 'C:\\Users\\recca\\github\\tester-phpunit\\tests\\PHPUnitTest.php', 104 | lineNumber: 44, 105 | state: 'failed', 106 | title: 'testReceive', 107 | }); 108 | }); 109 | 110 | it('it should get current error message when mockery call not correct.', async () => { 111 | const messages = await getMessages(); 112 | 113 | expect(messages[6]).toEqual({ 114 | duration: 0.008761, 115 | error: { 116 | message: 'Method delete("C:\\Users\\recca\\github\\tester-phpunit\\tests\\PHPUnitTest.php") ' + 117 | 'from Mockery_1_Recca0120_Upload_Filesystem should be called\n exactly 1 times but called 0 times.', 118 | name: '', 119 | // name: 'Mockery\\Exception\\InvalidCountException', 120 | }, 121 | filePath: 'C:\\Users\\recca\\github\\tester-phpunit\\tests\\PHPUnitTest.php', 122 | lineNumber: 12, 123 | state: 'failed', 124 | title: 'testCleanDirectory', 125 | }); 126 | }); 127 | 128 | it('it should be skipped when testcase has skipped tag', async () => { 129 | const messages = await getMessages(); 130 | 131 | expect(messages[7]).toEqual({ 132 | duration: 0.001352, 133 | error: { 134 | message: '', 135 | name: '', 136 | }, 137 | filePath: 'C:\\Users\\recca\\github\\tester-phpunit\\tests\\PHPUnitTest.php', 138 | lineNumber: 22, 139 | state: 'skipped', 140 | title: 'testSkipped', 141 | }); 142 | 143 | expect(messages[8]).toEqual({ 144 | duration: 0.000954, 145 | error: { 146 | message: '', 147 | name: '', 148 | }, 149 | filePath: 'C:\\Users\\recca\\github\\tester-phpunit\\tests\\PHPUnitTest.php', 150 | lineNumber: 27, 151 | state: 'skipped', 152 | title: 'testIncomplete', 153 | }); 154 | }); 155 | }); 156 | -------------------------------------------------------------------------------- /tests/PHPUnit2Test.php: -------------------------------------------------------------------------------- 1 | assertTrue(true); 16 | } 17 | 18 | public function testFailed() 19 | { 20 | $this->assertTrue(false); 21 | } 22 | 23 | public function testSkipped() 24 | { 25 | $this->markTestSkipped('The MySQLi extension is not available.'); 26 | } 27 | 28 | public function testIncomplete() 29 | { 30 | $this->markTestIncomplete('This test has not been implemented yet.'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /tests/PHPUnitTest.php: -------------------------------------------------------------------------------- 1 | assertTrue(true); 16 | } 17 | 18 | public function testFailed() 19 | { 20 | $this->assertTrue(false); 21 | } 22 | 23 | public function testSkipped() 24 | { 25 | $this->markTestSkipped('The MySQLi extension is not available.'); 26 | } 27 | 28 | public function testIncomplete() 29 | { 30 | $this->markTestIncomplete('This test has not been implemented yet.'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /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://nexus.cgn.cleverbridge.com/repository/npm-group/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" 8 | dependencies: 9 | acorn "^3.0.4" 10 | 11 | acorn@4.0.4: 12 | version "4.0.4" 13 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" 14 | 15 | acorn@^3.0.4: 16 | version "3.3.0" 17 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" 18 | 19 | ajv-keywords@^1.0.0: 20 | version "1.5.1" 21 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" 22 | 23 | ajv@^4.7.0: 24 | version "4.11.3" 25 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/ajv/-/ajv-4.11.3.tgz#ce30bdb90d1254f762c75af915fb3a63e7183d22" 26 | dependencies: 27 | co "^4.6.0" 28 | json-stable-stringify "^1.0.1" 29 | 30 | ansi-escapes@^1.1.0: 31 | version "1.4.0" 32 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" 33 | 34 | ansi-regex@^2.0.0: 35 | version "2.1.1" 36 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 37 | 38 | ansi-styles@^2.2.1: 39 | version "2.2.1" 40 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 41 | 42 | argparse@^1.0.7: 43 | version "1.0.9" 44 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" 45 | dependencies: 46 | sprintf-js "~1.0.2" 47 | 48 | array-union@^1.0.1: 49 | version "1.0.2" 50 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 51 | dependencies: 52 | array-uniq "^1.0.1" 53 | 54 | array-uniq@^1.0.1: 55 | version "1.0.3" 56 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 57 | 58 | arrify@^1.0.0: 59 | version "1.0.1" 60 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 61 | 62 | babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: 63 | version "6.22.0" 64 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" 65 | dependencies: 66 | chalk "^1.1.0" 67 | esutils "^2.0.2" 68 | js-tokens "^3.0.0" 69 | 70 | babel-eslint@^6.1.2: 71 | version "6.1.2" 72 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/babel-eslint/-/babel-eslint-6.1.2.tgz#5293419fe3672d66598d327da9694567ba6a5f2f" 73 | dependencies: 74 | babel-traverse "^6.0.20" 75 | babel-types "^6.0.19" 76 | babylon "^6.0.18" 77 | lodash.assign "^4.0.0" 78 | lodash.pickby "^4.0.0" 79 | 80 | babel-messages@^6.23.0: 81 | version "6.23.0" 82 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 83 | dependencies: 84 | babel-runtime "^6.22.0" 85 | 86 | babel-runtime@^6.22.0: 87 | version "6.23.0" 88 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" 89 | dependencies: 90 | core-js "^2.4.0" 91 | regenerator-runtime "^0.10.0" 92 | 93 | babel-traverse@^6.0.20: 94 | version "6.23.1" 95 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48" 96 | dependencies: 97 | babel-code-frame "^6.22.0" 98 | babel-messages "^6.23.0" 99 | babel-runtime "^6.22.0" 100 | babel-types "^6.23.0" 101 | babylon "^6.15.0" 102 | debug "^2.2.0" 103 | globals "^9.0.0" 104 | invariant "^2.2.0" 105 | lodash "^4.2.0" 106 | 107 | babel-types@^6.0.19, babel-types@^6.23.0: 108 | version "6.23.0" 109 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf" 110 | dependencies: 111 | babel-runtime "^6.22.0" 112 | esutils "^2.0.2" 113 | lodash "^4.2.0" 114 | to-fast-properties "^1.0.1" 115 | 116 | babylon@^6.0.18, babylon@^6.15.0: 117 | version "6.16.1" 118 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3" 119 | 120 | balanced-match@^0.4.1: 121 | version "0.4.2" 122 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 123 | 124 | brace-expansion@^1.0.0: 125 | version "1.1.6" 126 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" 127 | dependencies: 128 | balanced-match "^0.4.1" 129 | concat-map "0.0.1" 130 | 131 | browser-stdout@1.3.0: 132 | version "1.3.0" 133 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" 134 | 135 | buffer-shims@^1.0.0: 136 | version "1.0.0" 137 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 138 | 139 | builtin-modules@^1.1.1: 140 | version "1.1.1" 141 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 142 | 143 | caller-path@^0.1.0: 144 | version "0.1.0" 145 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" 146 | dependencies: 147 | callsites "^0.2.0" 148 | 149 | callsites@^0.2.0: 150 | version "0.2.0" 151 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" 152 | 153 | chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: 154 | version "1.1.3" 155 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 156 | dependencies: 157 | ansi-styles "^2.2.1" 158 | escape-string-regexp "^1.0.2" 159 | has-ansi "^2.0.0" 160 | strip-ansi "^3.0.0" 161 | supports-color "^2.0.0" 162 | 163 | circular-json@^0.3.1: 164 | version "0.3.1" 165 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" 166 | 167 | cli-cursor@^1.0.1: 168 | version "1.0.2" 169 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" 170 | dependencies: 171 | restore-cursor "^1.0.1" 172 | 173 | cli-width@^2.0.0: 174 | version "2.1.0" 175 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" 176 | 177 | co@^4.6.0: 178 | version "4.6.0" 179 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 180 | 181 | code-point-at@^1.0.0: 182 | version "1.1.0" 183 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 184 | 185 | commander@2.9.0: 186 | version "2.9.0" 187 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 188 | dependencies: 189 | graceful-readlink ">= 1.0.0" 190 | 191 | concat-map@0.0.1: 192 | version "0.0.1" 193 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 194 | 195 | concat-stream@^1.4.6: 196 | version "1.6.0" 197 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" 198 | dependencies: 199 | inherits "^2.0.3" 200 | readable-stream "^2.2.2" 201 | typedarray "^0.0.6" 202 | 203 | contains-path@^0.1.0: 204 | version "0.1.0" 205 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" 206 | 207 | core-js@^2.4.0: 208 | version "2.4.1" 209 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" 210 | 211 | core-util-is@~1.0.0: 212 | version "1.0.2" 213 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 214 | 215 | d@^0.1.1, d@~0.1.1: 216 | version "0.1.1" 217 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" 218 | dependencies: 219 | es5-ext "~0.10.2" 220 | 221 | debug@2.2.0: 222 | version "2.2.0" 223 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" 224 | dependencies: 225 | ms "0.7.1" 226 | 227 | debug@^2.1.1, debug@^2.2.0: 228 | version "2.6.1" 229 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" 230 | dependencies: 231 | ms "0.7.2" 232 | 233 | deep-is@~0.1.3: 234 | version "0.1.3" 235 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 236 | 237 | del@^2.0.2: 238 | version "2.2.2" 239 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" 240 | dependencies: 241 | globby "^5.0.0" 242 | is-path-cwd "^1.0.0" 243 | is-path-in-cwd "^1.0.0" 244 | object-assign "^4.0.1" 245 | pify "^2.0.0" 246 | pinkie-promise "^2.0.0" 247 | rimraf "^2.2.8" 248 | 249 | diff@1.4.0: 250 | version "1.4.0" 251 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" 252 | 253 | doctrine@1.5.0, doctrine@^1.2.2: 254 | version "1.5.0" 255 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" 256 | dependencies: 257 | esutils "^2.0.2" 258 | isarray "^1.0.0" 259 | 260 | es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7: 261 | version "0.10.12" 262 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047" 263 | dependencies: 264 | es6-iterator "2" 265 | es6-symbol "~3.1" 266 | 267 | es6-iterator@2: 268 | version "2.0.0" 269 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac" 270 | dependencies: 271 | d "^0.1.1" 272 | es5-ext "^0.10.7" 273 | es6-symbol "3" 274 | 275 | es6-map@^0.1.3: 276 | version "0.1.4" 277 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/es6-map/-/es6-map-0.1.4.tgz#a34b147be224773a4d7da8072794cefa3632b897" 278 | dependencies: 279 | d "~0.1.1" 280 | es5-ext "~0.10.11" 281 | es6-iterator "2" 282 | es6-set "~0.1.3" 283 | es6-symbol "~3.1.0" 284 | event-emitter "~0.3.4" 285 | 286 | es6-set@~0.1.3: 287 | version "0.1.4" 288 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/es6-set/-/es6-set-0.1.4.tgz#9516b6761c2964b92ff479456233a247dc707ce8" 289 | dependencies: 290 | d "~0.1.1" 291 | es5-ext "~0.10.11" 292 | es6-iterator "2" 293 | es6-symbol "3" 294 | event-emitter "~0.3.4" 295 | 296 | es6-symbol@3, es6-symbol@~3.1, es6-symbol@~3.1.0: 297 | version "3.1.0" 298 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa" 299 | dependencies: 300 | d "~0.1.1" 301 | es5-ext "~0.10.11" 302 | 303 | es6-weak-map@^2.0.1: 304 | version "2.0.1" 305 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/es6-weak-map/-/es6-weak-map-2.0.1.tgz#0d2bbd8827eb5fb4ba8f97fbfea50d43db21ea81" 306 | dependencies: 307 | d "^0.1.1" 308 | es5-ext "^0.10.8" 309 | es6-iterator "2" 310 | es6-symbol "3" 311 | 312 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 313 | version "1.0.5" 314 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 315 | 316 | escope@^3.6.0: 317 | version "3.6.0" 318 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" 319 | dependencies: 320 | es6-map "^0.1.3" 321 | es6-weak-map "^2.0.1" 322 | esrecurse "^4.1.0" 323 | estraverse "^4.1.1" 324 | 325 | eslint-config-airbnb-base@^11.1.0: 326 | version "11.1.0" 327 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.1.0.tgz#dc9b3ec70b8c74dcbe6d6257c9da3992c39ca2ca" 328 | 329 | eslint-import-resolver-node@^0.2.0: 330 | version "0.2.3" 331 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" 332 | dependencies: 333 | debug "^2.2.0" 334 | object-assign "^4.0.1" 335 | resolve "^1.1.6" 336 | 337 | eslint-module-utils@^2.0.0: 338 | version "2.0.0" 339 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz#a6f8c21d901358759cdc35dbac1982ae1ee58bce" 340 | dependencies: 341 | debug "2.2.0" 342 | pkg-dir "^1.0.0" 343 | 344 | eslint-plugin-import@^2.2.0: 345 | version "2.2.0" 346 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e" 347 | dependencies: 348 | builtin-modules "^1.1.1" 349 | contains-path "^0.1.0" 350 | debug "^2.2.0" 351 | doctrine "1.5.0" 352 | eslint-import-resolver-node "^0.2.0" 353 | eslint-module-utils "^2.0.0" 354 | has "^1.0.1" 355 | lodash.cond "^4.3.0" 356 | minimatch "^3.0.3" 357 | pkg-up "^1.0.0" 358 | 359 | eslint@^3.16.1: 360 | version "3.16.1" 361 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/eslint/-/eslint-3.16.1.tgz#9bc31fc7341692cf772e80607508f67d711c5609" 362 | dependencies: 363 | babel-code-frame "^6.16.0" 364 | chalk "^1.1.3" 365 | concat-stream "^1.4.6" 366 | debug "^2.1.1" 367 | doctrine "^1.2.2" 368 | escope "^3.6.0" 369 | espree "^3.4.0" 370 | estraverse "^4.2.0" 371 | esutils "^2.0.2" 372 | file-entry-cache "^2.0.0" 373 | glob "^7.0.3" 374 | globals "^9.14.0" 375 | ignore "^3.2.0" 376 | imurmurhash "^0.1.4" 377 | inquirer "^0.12.0" 378 | is-my-json-valid "^2.10.0" 379 | is-resolvable "^1.0.0" 380 | js-yaml "^3.5.1" 381 | json-stable-stringify "^1.0.0" 382 | levn "^0.3.0" 383 | lodash "^4.0.0" 384 | mkdirp "^0.5.0" 385 | natural-compare "^1.4.0" 386 | optionator "^0.8.2" 387 | path-is-inside "^1.0.1" 388 | pluralize "^1.2.1" 389 | progress "^1.1.8" 390 | require-uncached "^1.0.2" 391 | shelljs "^0.7.5" 392 | strip-bom "^3.0.0" 393 | strip-json-comments "~2.0.1" 394 | table "^3.7.8" 395 | text-table "~0.2.0" 396 | user-home "^2.0.0" 397 | 398 | espree@^3.4.0: 399 | version "3.4.0" 400 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/espree/-/espree-3.4.0.tgz#41656fa5628e042878025ef467e78f125cb86e1d" 401 | dependencies: 402 | acorn "4.0.4" 403 | acorn-jsx "^3.0.0" 404 | 405 | esprima@^3.1.1: 406 | version "3.1.3" 407 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" 408 | 409 | esrecurse@^4.1.0: 410 | version "4.1.0" 411 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" 412 | dependencies: 413 | estraverse "~4.1.0" 414 | object-assign "^4.0.1" 415 | 416 | estraverse@^4.1.1, estraverse@^4.2.0: 417 | version "4.2.0" 418 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 419 | 420 | estraverse@~4.1.0: 421 | version "4.1.1" 422 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" 423 | 424 | esutils@^2.0.2: 425 | version "2.0.2" 426 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 427 | 428 | event-emitter@~0.3.4: 429 | version "0.3.4" 430 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5" 431 | dependencies: 432 | d "~0.1.1" 433 | es5-ext "~0.10.7" 434 | 435 | exit-hook@^1.0.0: 436 | version "1.1.1" 437 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" 438 | 439 | fast-levenshtein@~2.0.4: 440 | version "2.0.6" 441 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 442 | 443 | figures@^1.3.5: 444 | version "1.7.0" 445 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" 446 | dependencies: 447 | escape-string-regexp "^1.0.5" 448 | object-assign "^4.1.0" 449 | 450 | file-entry-cache@^2.0.0: 451 | version "2.0.0" 452 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" 453 | dependencies: 454 | flat-cache "^1.2.1" 455 | object-assign "^4.0.1" 456 | 457 | find-up@^1.0.0: 458 | version "1.1.2" 459 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 460 | dependencies: 461 | path-exists "^2.0.0" 462 | pinkie-promise "^2.0.0" 463 | 464 | flat-cache@^1.2.1: 465 | version "1.2.2" 466 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" 467 | dependencies: 468 | circular-json "^0.3.1" 469 | del "^2.0.2" 470 | graceful-fs "^4.1.2" 471 | write "^0.2.1" 472 | 473 | fs.realpath@^1.0.0: 474 | version "1.0.0" 475 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 476 | 477 | function-bind@^1.0.2: 478 | version "1.1.0" 479 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" 480 | 481 | generate-function@^2.0.0: 482 | version "2.0.0" 483 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" 484 | 485 | generate-object-property@^1.1.0: 486 | version "1.2.0" 487 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" 488 | dependencies: 489 | is-property "^1.0.0" 490 | 491 | glob@7.0.5: 492 | version "7.0.5" 493 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" 494 | dependencies: 495 | fs.realpath "^1.0.0" 496 | inflight "^1.0.4" 497 | inherits "2" 498 | minimatch "^3.0.2" 499 | once "^1.3.0" 500 | path-is-absolute "^1.0.0" 501 | 502 | glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: 503 | version "7.1.1" 504 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 505 | dependencies: 506 | fs.realpath "^1.0.0" 507 | inflight "^1.0.4" 508 | inherits "2" 509 | minimatch "^3.0.2" 510 | once "^1.3.0" 511 | path-is-absolute "^1.0.0" 512 | 513 | globals@^9.0.0, globals@^9.14.0: 514 | version "9.16.0" 515 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/globals/-/globals-9.16.0.tgz#63e903658171ec2d9f51b1d31de5e2b8dc01fb80" 516 | 517 | globby@^5.0.0: 518 | version "5.0.0" 519 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" 520 | dependencies: 521 | array-union "^1.0.1" 522 | arrify "^1.0.0" 523 | glob "^7.0.3" 524 | object-assign "^4.0.1" 525 | pify "^2.0.0" 526 | pinkie-promise "^2.0.0" 527 | 528 | graceful-fs@^4.1.2: 529 | version "4.1.11" 530 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 531 | 532 | "graceful-readlink@>= 1.0.0": 533 | version "1.0.1" 534 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 535 | 536 | growl@1.9.2: 537 | version "1.9.2" 538 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" 539 | 540 | has-ansi@^2.0.0: 541 | version "2.0.0" 542 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 543 | dependencies: 544 | ansi-regex "^2.0.0" 545 | 546 | has-flag@^1.0.0: 547 | version "1.0.0" 548 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 549 | 550 | has@^1.0.1: 551 | version "1.0.1" 552 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" 553 | dependencies: 554 | function-bind "^1.0.2" 555 | 556 | ignore@^3.2.0: 557 | version "3.2.4" 558 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/ignore/-/ignore-3.2.4.tgz#4055e03596729a8fabe45a43c100ad5ed815c4e8" 559 | 560 | imurmurhash@^0.1.4: 561 | version "0.1.4" 562 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 563 | 564 | inflight@^1.0.4: 565 | version "1.0.6" 566 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 567 | dependencies: 568 | once "^1.3.0" 569 | wrappy "1" 570 | 571 | inherits@2, inherits@^2.0.3, inherits@~2.0.1: 572 | version "2.0.3" 573 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 574 | 575 | inquirer@^0.12.0: 576 | version "0.12.0" 577 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" 578 | dependencies: 579 | ansi-escapes "^1.1.0" 580 | ansi-regex "^2.0.0" 581 | chalk "^1.0.0" 582 | cli-cursor "^1.0.1" 583 | cli-width "^2.0.0" 584 | figures "^1.3.5" 585 | lodash "^4.3.0" 586 | readline2 "^1.0.1" 587 | run-async "^0.1.0" 588 | rx-lite "^3.1.2" 589 | string-width "^1.0.1" 590 | strip-ansi "^3.0.0" 591 | through "^2.3.6" 592 | 593 | interpret@^1.0.0: 594 | version "1.0.1" 595 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" 596 | 597 | invariant@^2.2.0: 598 | version "2.2.2" 599 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" 600 | dependencies: 601 | loose-envify "^1.0.0" 602 | 603 | is-fullwidth-code-point@^1.0.0: 604 | version "1.0.0" 605 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 606 | dependencies: 607 | number-is-nan "^1.0.0" 608 | 609 | is-fullwidth-code-point@^2.0.0: 610 | version "2.0.0" 611 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 612 | 613 | is-my-json-valid@^2.10.0: 614 | version "2.16.0" 615 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" 616 | dependencies: 617 | generate-function "^2.0.0" 618 | generate-object-property "^1.1.0" 619 | jsonpointer "^4.0.0" 620 | xtend "^4.0.0" 621 | 622 | is-path-cwd@^1.0.0: 623 | version "1.0.0" 624 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" 625 | 626 | is-path-in-cwd@^1.0.0: 627 | version "1.0.0" 628 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" 629 | dependencies: 630 | is-path-inside "^1.0.0" 631 | 632 | is-path-inside@^1.0.0: 633 | version "1.0.0" 634 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" 635 | dependencies: 636 | path-is-inside "^1.0.1" 637 | 638 | is-property@^1.0.0: 639 | version "1.0.2" 640 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" 641 | 642 | is-resolvable@^1.0.0: 643 | version "1.0.0" 644 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" 645 | dependencies: 646 | tryit "^1.0.1" 647 | 648 | isarray@^1.0.0, isarray@~1.0.0: 649 | version "1.0.0" 650 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 651 | 652 | js-tokens@^3.0.0: 653 | version "3.0.1" 654 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" 655 | 656 | js-yaml@^3.5.1: 657 | version "3.8.1" 658 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/js-yaml/-/js-yaml-3.8.1.tgz#782ba50200be7b9e5a8537001b7804db3ad02628" 659 | dependencies: 660 | argparse "^1.0.7" 661 | esprima "^3.1.1" 662 | 663 | json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: 664 | version "1.0.1" 665 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 666 | dependencies: 667 | jsonify "~0.0.0" 668 | 669 | json3@3.3.2: 670 | version "3.3.2" 671 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" 672 | 673 | jsonify@~0.0.0: 674 | version "0.0.0" 675 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 676 | 677 | jsonpointer@^4.0.0: 678 | version "4.0.1" 679 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" 680 | 681 | levn@^0.3.0, levn@~0.3.0: 682 | version "0.3.0" 683 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 684 | dependencies: 685 | prelude-ls "~1.1.2" 686 | type-check "~0.3.2" 687 | 688 | lodash._baseassign@^3.0.0: 689 | version "3.2.0" 690 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" 691 | dependencies: 692 | lodash._basecopy "^3.0.0" 693 | lodash.keys "^3.0.0" 694 | 695 | lodash._basecopy@^3.0.0: 696 | version "3.0.1" 697 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 698 | 699 | lodash._basecreate@^3.0.0: 700 | version "3.0.3" 701 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" 702 | 703 | lodash._getnative@^3.0.0: 704 | version "3.9.1" 705 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 706 | 707 | lodash._isiterateecall@^3.0.0: 708 | version "3.0.9" 709 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" 710 | 711 | lodash.assign@^4.0.0: 712 | version "4.2.0" 713 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" 714 | 715 | lodash.cond@^4.3.0: 716 | version "4.5.2" 717 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" 718 | 719 | lodash.create@3.1.1: 720 | version "3.1.1" 721 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" 722 | dependencies: 723 | lodash._baseassign "^3.0.0" 724 | lodash._basecreate "^3.0.0" 725 | lodash._isiterateecall "^3.0.0" 726 | 727 | lodash.isarguments@^3.0.0: 728 | version "3.1.0" 729 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 730 | 731 | lodash.isarray@^3.0.0: 732 | version "3.0.4" 733 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 734 | 735 | lodash.keys@^3.0.0: 736 | version "3.1.2" 737 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 738 | dependencies: 739 | lodash._getnative "^3.0.0" 740 | lodash.isarguments "^3.0.0" 741 | lodash.isarray "^3.0.0" 742 | 743 | lodash.pickby@^4.0.0: 744 | version "4.6.0" 745 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" 746 | 747 | lodash@^4.0.0, lodash@^4.2.0, lodash@^4.3.0: 748 | version "4.17.4" 749 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 750 | 751 | loose-envify@^1.0.0: 752 | version "1.3.1" 753 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" 754 | dependencies: 755 | js-tokens "^3.0.0" 756 | 757 | minimatch@^3.0.2, minimatch@^3.0.3: 758 | version "3.0.3" 759 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" 760 | dependencies: 761 | brace-expansion "^1.0.0" 762 | 763 | minimist@0.0.8: 764 | version "0.0.8" 765 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 766 | 767 | mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1: 768 | version "0.5.1" 769 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 770 | dependencies: 771 | minimist "0.0.8" 772 | 773 | mocha@^3.2.0: 774 | version "3.2.0" 775 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3" 776 | dependencies: 777 | browser-stdout "1.3.0" 778 | commander "2.9.0" 779 | debug "2.2.0" 780 | diff "1.4.0" 781 | escape-string-regexp "1.0.5" 782 | glob "7.0.5" 783 | growl "1.9.2" 784 | json3 "3.3.2" 785 | lodash.create "3.1.1" 786 | mkdirp "0.5.1" 787 | supports-color "3.1.2" 788 | 789 | ms@0.7.1: 790 | version "0.7.1" 791 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" 792 | 793 | ms@0.7.2: 794 | version "0.7.2" 795 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" 796 | 797 | mute-stream@0.0.5: 798 | version "0.0.5" 799 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" 800 | 801 | natural-compare@^1.4.0: 802 | version "1.4.0" 803 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 804 | 805 | number-is-nan@^1.0.0: 806 | version "1.0.1" 807 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 808 | 809 | object-assign@^4.0.1, object-assign@^4.1.0: 810 | version "4.1.1" 811 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 812 | 813 | once@^1.3.0: 814 | version "1.4.0" 815 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 816 | dependencies: 817 | wrappy "1" 818 | 819 | onetime@^1.0.0: 820 | version "1.1.0" 821 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" 822 | 823 | optionator@^0.8.2: 824 | version "0.8.2" 825 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 826 | dependencies: 827 | deep-is "~0.1.3" 828 | fast-levenshtein "~2.0.4" 829 | levn "~0.3.0" 830 | prelude-ls "~1.1.2" 831 | type-check "~0.3.2" 832 | wordwrap "~1.0.0" 833 | 834 | os-homedir@^1.0.0: 835 | version "1.0.2" 836 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 837 | 838 | path-exists@^2.0.0: 839 | version "2.1.0" 840 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 841 | dependencies: 842 | pinkie-promise "^2.0.0" 843 | 844 | path-is-absolute@^1.0.0: 845 | version "1.0.1" 846 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 847 | 848 | path-is-inside@^1.0.1: 849 | version "1.0.2" 850 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 851 | 852 | path-parse@^1.0.5: 853 | version "1.0.5" 854 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 855 | 856 | pify@^2.0.0: 857 | version "2.3.0" 858 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 859 | 860 | pinkie-promise@^2.0.0: 861 | version "2.0.1" 862 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 863 | dependencies: 864 | pinkie "^2.0.0" 865 | 866 | pinkie@^2.0.0: 867 | version "2.0.4" 868 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 869 | 870 | pkg-dir@^1.0.0: 871 | version "1.0.0" 872 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" 873 | dependencies: 874 | find-up "^1.0.0" 875 | 876 | pkg-up@^1.0.0: 877 | version "1.0.0" 878 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" 879 | dependencies: 880 | find-up "^1.0.0" 881 | 882 | pluralize@^1.2.1: 883 | version "1.2.1" 884 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" 885 | 886 | prelude-ls@~1.1.2: 887 | version "1.1.2" 888 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 889 | 890 | process-nextick-args@~1.0.6: 891 | version "1.0.7" 892 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 893 | 894 | progress@^1.1.8: 895 | version "1.1.8" 896 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" 897 | 898 | readable-stream@^2.2.2: 899 | version "2.2.3" 900 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/readable-stream/-/readable-stream-2.2.3.tgz#9cf49463985df016c8ae8813097a9293a9b33729" 901 | dependencies: 902 | buffer-shims "^1.0.0" 903 | core-util-is "~1.0.0" 904 | inherits "~2.0.1" 905 | isarray "~1.0.0" 906 | process-nextick-args "~1.0.6" 907 | string_decoder "~0.10.x" 908 | util-deprecate "~1.0.1" 909 | 910 | readline2@^1.0.1: 911 | version "1.0.1" 912 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" 913 | dependencies: 914 | code-point-at "^1.0.0" 915 | is-fullwidth-code-point "^1.0.0" 916 | mute-stream "0.0.5" 917 | 918 | rechoir@^0.6.2: 919 | version "0.6.2" 920 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" 921 | dependencies: 922 | resolve "^1.1.6" 923 | 924 | regenerator-runtime@^0.10.0: 925 | version "0.10.3" 926 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e" 927 | 928 | require-uncached@^1.0.2: 929 | version "1.0.3" 930 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" 931 | dependencies: 932 | caller-path "^0.1.0" 933 | resolve-from "^1.0.0" 934 | 935 | resolve-from@^1.0.0: 936 | version "1.0.1" 937 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" 938 | 939 | resolve@^1.1.6: 940 | version "1.3.2" 941 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" 942 | dependencies: 943 | path-parse "^1.0.5" 944 | 945 | restore-cursor@^1.0.1: 946 | version "1.0.1" 947 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" 948 | dependencies: 949 | exit-hook "^1.0.0" 950 | onetime "^1.0.0" 951 | 952 | rimraf@^2.2.8: 953 | version "2.6.1" 954 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" 955 | dependencies: 956 | glob "^7.0.5" 957 | 958 | run-async@^0.1.0: 959 | version "0.1.0" 960 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" 961 | dependencies: 962 | once "^1.3.0" 963 | 964 | rx-lite@^3.1.2: 965 | version "3.1.2" 966 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" 967 | 968 | shelljs@^0.7.5: 969 | version "0.7.6" 970 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" 971 | dependencies: 972 | glob "^7.0.0" 973 | interpret "^1.0.0" 974 | rechoir "^0.6.2" 975 | 976 | slice-ansi@0.0.4: 977 | version "0.0.4" 978 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" 979 | 980 | sprintf-js@~1.0.2: 981 | version "1.0.3" 982 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 983 | 984 | string-width@^1.0.1: 985 | version "1.0.2" 986 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 987 | dependencies: 988 | code-point-at "^1.0.0" 989 | is-fullwidth-code-point "^1.0.0" 990 | strip-ansi "^3.0.0" 991 | 992 | string-width@^2.0.0: 993 | version "2.0.0" 994 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" 995 | dependencies: 996 | is-fullwidth-code-point "^2.0.0" 997 | strip-ansi "^3.0.0" 998 | 999 | string_decoder@~0.10.x: 1000 | version "0.10.31" 1001 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1002 | 1003 | strip-ansi@^3.0.0: 1004 | version "3.0.1" 1005 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1006 | dependencies: 1007 | ansi-regex "^2.0.0" 1008 | 1009 | strip-bom@^3.0.0: 1010 | version "3.0.0" 1011 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1012 | 1013 | strip-json-comments@~2.0.1: 1014 | version "2.0.1" 1015 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1016 | 1017 | supports-color@3.1.2: 1018 | version "3.1.2" 1019 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" 1020 | dependencies: 1021 | has-flag "^1.0.0" 1022 | 1023 | supports-color@^2.0.0: 1024 | version "2.0.0" 1025 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1026 | 1027 | table@^3.7.8: 1028 | version "3.8.3" 1029 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" 1030 | dependencies: 1031 | ajv "^4.7.0" 1032 | ajv-keywords "^1.0.0" 1033 | chalk "^1.1.1" 1034 | lodash "^4.0.0" 1035 | slice-ansi "0.0.4" 1036 | string-width "^2.0.0" 1037 | 1038 | text-table@~0.2.0: 1039 | version "0.2.0" 1040 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1041 | 1042 | through@^2.3.6: 1043 | version "2.3.8" 1044 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1045 | 1046 | to-fast-properties@^1.0.1: 1047 | version "1.0.2" 1048 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" 1049 | 1050 | tryit@^1.0.1: 1051 | version "1.0.3" 1052 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" 1053 | 1054 | type-check@~0.3.2: 1055 | version "0.3.2" 1056 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 1057 | dependencies: 1058 | prelude-ls "~1.1.2" 1059 | 1060 | typedarray@^0.0.6: 1061 | version "0.0.6" 1062 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 1063 | 1064 | user-home@^2.0.0: 1065 | version "2.0.0" 1066 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" 1067 | dependencies: 1068 | os-homedir "^1.0.0" 1069 | 1070 | util-deprecate@~1.0.1: 1071 | version "1.0.2" 1072 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1073 | 1074 | wordwrap@~1.0.0: 1075 | version "1.0.0" 1076 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 1077 | 1078 | wrappy@1: 1079 | version "1.0.2" 1080 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1081 | 1082 | write@^0.2.1: 1083 | version "0.2.1" 1084 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" 1085 | dependencies: 1086 | mkdirp "^0.5.1" 1087 | 1088 | xtend@^4.0.0: 1089 | version "4.0.1" 1090 | resolved "https://nexus.cgn.cleverbridge.com/repository/npm-group/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 1091 | --------------------------------------------------------------------------------