diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..3c3629e6 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +node_modules diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..3882e596 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,4 @@ +{ + "root": true, + "extends": ["airbnb-base", "plugin:prettier/recommended"] +} diff --git a/.gitignore b/.gitignore index c46b414f..a3670d5a 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,6 @@ jsdoc # Editors .c9 .idea + +# In case project is used locally to generate a spec +swagger.json diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index 9b8cbe17..00000000 --- a/.jshintrc +++ /dev/null @@ -1,63 +0,0 @@ -{ - "bitwise": true, - "curly": true, - "eqeqeq": true, - "forin": true, - "freeze": true, - "nocomma": true, - "noarg": true, - "nonbsp": true, - "nonew": true, - "singleGroups": true, - "plusplus": true, - "undef": true, - "unused": true, - "strict": true, - "latedef": true, - "asi": false, - "boss": false, - "debug": false, - "elision": false, - "eqnull": false, - "esnext": false, - "evil": false, - "expr": false, - "funcscope": false, - "globalstrict": false, - "iterator": false, - "lastsemic": false, - "loopfunc": false, - "withstmt": false, - "moz": false, - "notypeof": false, - "proto": false, - "scripturl": false, - "shadow": false, - "supernew": false, - "validthis": false, - "noyield": false, - "browser": false, - "couch": false, - "devel": false, - "worker": false, - "node": true, - "nonstandard": false, - "phantom": false, - "rhino": false, - "wsh": false, - "yui": false, - "browserify": false, - "shelljs": false, - "jasmine": false, - "mocha": true, - "qunit": false, - "typed": false, - "dojo": false, - "jquery": false, - "mootools": false, - "prototypejs": false, - "maxparams": 4, - "maxdepth": 5, - "maxstatements": 25, - "maxcomplexity": 11 -} diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..dd08b955 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +--- + singleQuote: true + trailingComma: es5 diff --git a/README.md b/README.md index a4c7d765..b4fc3bba 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ documentation, servers, clients, tests and much more based on the rich [OpenAPI [![npm Version](https://img.shields.io/npm/v/swagger-jsdoc.svg)](https://www.npmjs.com/package/swagger-jsdoc) [![npm Downloads](https://img.shields.io/npm/dm/swagger-jsdoc.svg)](https://www.npmjs.com/package/swagger-jsdoc) [![Circle CI](https://img.shields.io/circleci/project/Surnet/swagger-jsdoc/master.svg)](https://circleci.com/gh/Surnet/swagger-jsdoc) -[![Documentation Status](http://inch-ci.org/github/Surnet/swagger-jsdoc.svg?branch=master&style=flat)](http://inch-ci.org/github/Surnet/swagger-jsdoc) [![Known Vulnerabilities](https://snyk.io/test/github/Surnet/swagger-jsdoc/badge.svg?targetFile=package.json)](https://snyk.io/test/github/Surnet/swagger-jsdoc?targetFile=package.json) ## Goals @@ -63,7 +62,7 @@ The swagger spec will be served at http://localhost:3000/api-docs.json ### CLI -You can also use the tool via [command line interface](./docs/CLI.md). It supports selecting multiple files, recursive subdirectories and watch task for continuous listening of changes in your code. +You can also use the tool via [command line interface](./docs/CLI.md). ### Contributing diff --git a/bin/swagger-jsdoc.js b/bin/swagger-jsdoc.js index 3a02b1a1..1bcf2801 100755 --- a/bin/swagger-jsdoc.js +++ b/bin/swagger-jsdoc.js @@ -1,42 +1,39 @@ #!/usr/bin/env node -'use strict'; - /** * Module dependencies. */ -var program = require('commander'); -var fs = require('fs'); -var path = require('path'); -var swaggerJSDoc = require('../'); -var pkg = require('../package.json'); -var jsYaml = require('js-yaml'); -var chokidar = require('chokidar'); +const program = require('commander'); +const fs = require('fs'); +const path = require('path'); +const jsYaml = require('js-yaml'); +const swaggerJSDoc = require('../'); +const pkg = require('../package.json'); // Useful input. -var input = process.argv.slice(2); +const input = process.argv.slice(2); // The spec, following a convention. -var output = 'swagger.json'; +let output = 'swagger.json'; /** * Creates a swagger specification from a definition and a set of files. * @function * @param {object} swaggerDefinition - The swagger definition object. * @param {array} apis - List of files to extract documentation from. - * @param {array} output - Name the output file. + * @param {string} fileName - Name the output file. */ -function createSpecification(swaggerDefinition, apis, output) { +function createSpecification(swaggerDefinition, apis, fileName) { // Options for the swagger docs - var options = { + const options = { // Import swaggerDefinitions - swaggerDefinition: swaggerDefinition, + swaggerDefinition, // Path to the API docs - apis: apis, + apis, }; // Initialize swagger-jsdoc -> returns validated JSON or YAML swagger spec - var swaggerSpec; - var ext = path.extname(output); + let swaggerSpec; + const ext = path.extname(fileName); if (ext === '.yml' || ext === '.yaml') { swaggerSpec = jsYaml.dump(swaggerJSDoc(options), { @@ -47,7 +44,7 @@ function createSpecification(swaggerDefinition, apis, output) { swaggerSpec = JSON.stringify(swaggerJSDoc(options), null, 2); } - fs.writeFile(output, swaggerSpec, function writeSpecification(err) { + fs.writeFile(fileName, swaggerSpec, err => { if (err) { throw err; } @@ -60,7 +57,6 @@ program .usage('[options] ') .option('-d, --definition ', 'Input swagger definition.') .option('-o, --output [swaggerSpec.json]', 'Output swagger specification.') - .option('-w, --watch', 'Whether or not to listen for continous changes.') .parse(process.argv); // If no arguments provided, display help menu. @@ -72,24 +68,26 @@ if (!input.length) { if (!program.definition) { console.log('Definition file is required.'); console.log('You can do that, for example: '); - console.log('$ swag-jsdoc -d swaggerDef.js ' + input.join(' ')); + console.log(`$ swag-jsdoc -d swaggerDef.js ${input.join(' ')}`); program.help(); process.exit(1); } // Override default output file if provided. if (program.output) { + // eslint-disable-next-line prefer-destructuring output = program.output; } // Definition file is specified: -fs.readFile(program.definition, 'utf-8', function(err, data) { +fs.readFile(program.definition, 'utf-8', (err, data) => { if (err || data === undefined) { return console.log('Definition file provided is not good.'); } // Check whether the definition file is actually a usable .js file - if (path.extname(program.definition) !== '.js' && + if ( + path.extname(program.definition) !== '.js' && path.extname(program.definition) !== '.json' ) { console.log('Format as a module, it will be imported with require().'); @@ -97,17 +95,19 @@ fs.readFile(program.definition, 'utf-8', function(err, data) { } // Get an object of the definition file configuration. - var swaggerDefinition = require(path.resolve(program.definition)); + // eslint-disable-next-line + const swaggerDefinition = require(path.resolve(program.definition)); // Check for info object in the definition. - if (!swaggerDefinition.hasOwnProperty('info')) { + if (!('info' in swaggerDefinition)) { console.log('Definition file should contain an info object!'); return console.log('More at http://swagger.io/specification/#infoObject'); } // Check for title and version properties in the info object. - if (!swaggerDefinition.info.hasOwnProperty('title') || - !swaggerDefinition.info.hasOwnProperty('version') + if ( + !('title' in swaggerDefinition.info) || + !('version' in swaggerDefinition.info) ) { console.log('The title and version properties are required!'); return console.log('More at http://swagger.io/specification/#infoObject'); @@ -117,44 +117,20 @@ fs.readFile(program.definition, 'utf-8', function(err, data) { if (!swaggerDefinition.apis && !program.args.length) { console.log('You must provide sources for reading API files.'); // jscs:disable maximumLineLength - return console.log('Either add filenames as arguments, or add an "apis" key in your definitions file.'); + return console.log( + 'Either add filenames as arguments, or add an "apis" key in your definitions file.' + ); } // If there's no argument passed, but the user has defined Apis in // the definition file, pass them them onwards. - if (program.args.length === 0 && + if ( + program.args.length === 0 && swaggerDefinition.apis && - swaggerDefinition.apis instanceof Array) { + swaggerDefinition.apis instanceof Array + ) { program.args = swaggerDefinition.apis; } - // If watch flag is turned on, listen for changes. - if (program.watch) { - var watcher = chokidar.watch(program.args, { - awaitWriteFinish: { - stabilityThreshold: 2000, - pollInterval: 100, - }, - }); - - watcher.on('ready', function startMessage() { - console.log('Listening for changes ...'); - }); - - watcher.on('change', function detectChange(path) { - console.log('Change detected in ' + path); - }); - - watcher.on('error', function catchErr(err) { - return console.error(err); - }); - - watcher.on('all', function regenerateSpec() { - createSpecification(swaggerDefinition, program.args, output); - }); - } - // Just create the specification. - else { - createSpecification(swaggerDefinition, program.args, output); - } + return createSpecification(swaggerDefinition, program.args, output); }); diff --git a/docs/CLI.md b/docs/CLI.md index 501cdc32..fbef8c76 100644 --- a/docs/CLI.md +++ b/docs/CLI.md @@ -26,6 +26,7 @@ This could be any .js or .json file which will be `require()`-ed and parsed/vali ``` $ swagger-jsdoc route1.js route2.js ``` + Free form input, can be before or after definition. [Glob patterns](https://github.com/isaacs/node-glob) are acceptable to match multiple files with same extension `*.js`, `*.php`, etc. or patterns selecting files in nested folders as `**/*.js`, `**/*.php`, etc. #### Specify output file (optional) @@ -35,12 +36,3 @@ $ swagger-jsdoc -o custom_specification.json ``` `swagger.json` by default. Output specification can accept also a `.yaml` or `.yml`. This generated OpenAPI specification can then be further tweaked with [`swagger-editor`](http://swagger.io/swagger-editor/) or similar. - -#### Watch for changes (optional) - -``` -$ swagger-jsdoc -d swaggerDef.js route1.js route2.js -w -``` - -The `-w` flag starts a watch task for input files with API documentation. This may be particularly useful when the output specification file is integrated with [Browsersync](https://browsersync.io/) -with [Swagger UI](http://swagger.io/swagger-ui/) or [ReDoc](https://github.com/Rebilly/ReDoc). Thus, the developer updates documentation in code with fast feedback in an interface showing live documentation based on the OpenAPI specification. diff --git a/example/app.js b/example/app.js index f8359f00..93ceb048 100644 --- a/example/app.js +++ b/example/app.js @@ -1,27 +1,29 @@ -'use strict'; - -/* istanbul ignore next */ +/* eslint import/no-extraneous-dependencies: 0 */ // This file is an example, it's not functionally used by the module. // Dependencies -var express = require('express'); -var bodyParser = require('body-parser'); -var routes = require('./routes'); -var routes2 = require('./routes2'); -var swaggerJSDoc = require('../'); +const express = require('express'); +const bodyParser = require('body-parser'); +const routes = require('./routes'); +const routes2 = require('./routes2'); +const swaggerJSDoc = require('../'); // Initialize express -var app = express(); +const app = express(); app.use(bodyParser.json()); // To support JSON-encoded bodies -app.use(bodyParser.urlencoded({ // To support URL-encoded bodies - extended: true, -})); +app.use( + bodyParser.urlencoded({ + // To support URL-encoded bodies + extended: true, + }) +); // Swagger definition // You can set every attribute except paths and swagger // https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md -var swaggerDefinition = { - info: { // API informations (required) +const swaggerDefinition = { + info: { + // API informations (required) title: 'Hello World', // Title (required) version: '1.0.0', // Version (required) description: 'A sample API', // Description (optional) @@ -31,18 +33,18 @@ var swaggerDefinition = { }; // Options for the swagger docs -var options = { +const options = { // Import swaggerDefinitions - swaggerDefinition: swaggerDefinition, + swaggerDefinition, // Path to the API docs apis: ['./example/routes*.js', './example/parameters.yaml'], }; // Initialize swagger-jsdoc -> returns validated swagger spec in json format -var swaggerSpec = swaggerJSDoc(options); +const swaggerSpec = swaggerJSDoc(options); // Serve swagger docs the way you like (Recommendation: swagger-tools) -app.get('/api-docs.json', function(req, res) { +app.get('/api-docs.json', (req, res) => { res.setHeader('Content-Type', 'application/json'); res.send(swaggerSpec); }); @@ -52,12 +54,12 @@ routes.setup(app); routes2.setup(app); // Expose app -exports = module.exports = app; +module.exports = app; // Start the server -var server = app.listen(3000, function startExpressServer() { - var host = server.address().address; - var port = server.address().port; +const server = app.listen(3000, () => { + const host = server.address().address; + const { port } = server.address(); console.log('Example app listening at http://%s:%s', host, port); }); diff --git a/example/routes.js b/example/routes.js index 058ef937..507463ad 100644 --- a/example/routes.js +++ b/example/routes.js @@ -1,11 +1,8 @@ -'use strict'; - /* istanbul ignore next */ // This file is an example, it's not functionally used by the module. // Sets up the routes. module.exports.setup = function(app) { - /** * @swagger * /: @@ -15,7 +12,7 @@ module.exports.setup = function(app) { * 200: * description: hello world */ - app.get('/', function(req, res) { + app.get('/', (req, res) => { res.send('Hello World!'); }); @@ -73,7 +70,7 @@ module.exports.setup = function(app) { * type: object * $ref: '#/definitions/Login' */ - app.post('/login', function(req, res) { + app.post('/login', (req, res) => { res.json(req.body); }); @@ -90,7 +87,7 @@ module.exports.setup = function(app) { * 200: * description: users */ - app.get('/users', function(req, res) { + app.get('/users', (req, res) => { res.json({ username: 'jsmith', }); @@ -110,8 +107,7 @@ module.exports.setup = function(app) { * 200: * description: users */ - app.post('/users', function(req, res) { + app.post('/users', (req, res) => { res.json(req.body); }); - }; diff --git a/example/routes2.js b/example/routes2.js index 443194f3..4f091a00 100644 --- a/example/routes2.js +++ b/example/routes2.js @@ -1,5 +1,3 @@ -'use strict'; - /* istanbul ignore next */ // This file is an example, it's not functionally used by the module. @@ -13,7 +11,7 @@ module.exports.setup = function(app) { * 200: * description: hello world */ - app.get('/hello', function(req, res) { + app.get('/hello', (req, res) => { res.send('Hello World (Version 2)!'); }); }; diff --git a/example/swaggerDef.js b/example/swaggerDef.js index 06dd40d7..67b46930 100644 --- a/example/swaggerDef.js +++ b/example/swaggerDef.js @@ -1,14 +1,15 @@ /* istanbul ignore next */ // This file is an example, it's not functionally used by the module.This -var host = 'http://' + process.env.IP + ':' + process.env.PORT; +const host = `http://${process.env.IP}:${process.env.PORT}`; module.exports = { - info: { // API informations (required) + info: { + // API informations (required) title: 'Hello World', // Title (required) version: '1.0.0', // Version (required) description: 'A sample API', // Description (optional) }, - host: host, // Host (optional) + host, // Host (optional) basePath: '/', // Base path (optional) }; diff --git a/index.js b/index.js index 4cc88b35..bb0a047c 100644 --- a/index.js +++ b/index.js @@ -1 +1 @@ -module.exports = require('./lib'); \ No newline at end of file +module.exports = require('./lib'); diff --git a/lib/index.js b/lib/index.js index 9ed6b4aa..2fcf6114 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,14 +1,13 @@ /** @module index */ -'use strict'; // Dependencies -var fs = require('fs'); -var glob = require('glob'); -var path = require('path'); -var doctrine = require('doctrine'); -var jsYaml = require('js-yaml'); -var parser = require('swagger-parser'); -var swaggerHelpers = require('./swagger-helpers'); +const fs = require('fs'); +const glob = require('glob'); +const path = require('path'); +const doctrine = require('doctrine'); +const jsYaml = require('js-yaml'); +const parser = require('swagger-parser'); +const swaggerHelpers = require('./swagger-helpers'); /** * Parses the provided API file for JSDoc comments. @@ -18,26 +17,26 @@ var swaggerHelpers = require('./swagger-helpers'); * @requires doctrine */ function parseApiFile(file) { - var jsDocRegex = /\/\*\*([\s\S]*?)\*\//gm; - var fileContent = fs.readFileSync(file, { encoding: 'utf8' }); - var ext = path.extname(file); - var yaml = []; - var jsDocComments = []; + const jsDocRegex = /\/\*\*([\s\S]*?)\*\//gm; + const fileContent = fs.readFileSync(file, { encoding: 'utf8' }); + const ext = path.extname(file); + const yaml = []; + const jsDocComments = []; if (ext === '.yaml' || ext === '.yml') { yaml.push(jsYaml.safeLoad(fileContent)); } else { - var regexResults = fileContent.match(jsDocRegex); + const regexResults = fileContent.match(jsDocRegex); if (regexResults) { - for (var i = 0; i < regexResults.length; i = i + 1) { - var jsDocComment = doctrine.parse(regexResults[i], { unwrap: true }); + for (let i = 0; i < regexResults.length; i += 1) { + const jsDocComment = doctrine.parse(regexResults[i], { unwrap: true }); jsDocComments.push(jsDocComment); } } } return { - yaml: yaml, + yaml, jsdoc: jsDocComments, }; } @@ -50,12 +49,12 @@ function parseApiFile(file) { * @requires js-yaml */ function filterJsDocComments(jsDocComments) { - var swaggerJsDocComments = []; + const swaggerJsDocComments = []; - for (var i = 0; i < jsDocComments.length; i = i + 1) { - var jsDocComment = jsDocComments[i]; - for (var j = 0; j < jsDocComment.tags.length; j = j + 1) { - var tag = jsDocComment.tags[j]; + for (let i = 0; i < jsDocComments.length; i += 1) { + const jsDocComment = jsDocComments[i]; + for (let j = 0; j < jsDocComment.tags.length; j += 1) { + const tag = jsDocComment.tags[j]; if (tag.title === 'swagger') { swaggerJsDocComments.push(jsYaml.safeLoad(tag.description)); } @@ -73,10 +72,9 @@ function filterJsDocComments(jsDocComments) { * @requires glob */ function convertGlobPaths(globs) { - return globs.reduce(function(acc, globString) { - var globFiles = glob.sync(globString); - return acc.concat(globFiles); - }, []); + return globs + .map(globString => glob.sync(globString)) + .reduce((previous, current) => previous.concat(current)); } /** @@ -89,23 +87,26 @@ function convertGlobPaths(globs) { module.exports = function(options) { /* istanbul ignore if */ if (!options) { - throw new Error('\'options\' is required.'); - } else /* istanbul ignore if */ if (!options.swaggerDefinition) { - throw new Error('\'swaggerDefinition\' is required.'); - } else /* istanbul ignore if */ if (!options.apis) { - throw new Error('\'apis\' is required.'); + throw new Error("'options' is required."); + } /* istanbul ignore if */ else if (!options.swaggerDefinition) { + throw new Error("'swaggerDefinition' is required."); + } /* istanbul ignore if */ else if (!options.apis) { + throw new Error("'apis' is required."); } // Build basic swagger json - var swaggerObject = swaggerHelpers.swaggerizeObj(options.swaggerDefinition); - var apiPaths = convertGlobPaths(options.apis); + let swaggerObject = swaggerHelpers.swaggerizeObj(options.swaggerDefinition); + const apiPaths = convertGlobPaths(options.apis); // Parse the documentation in the APIs array. - for (var i = 0; i < apiPaths.length; i = i + 1) { - var files = parseApiFile(apiPaths[i]); - var swaggerJsDocComments = filterJsDocComments(files.jsdoc); + for (let i = 0; i < apiPaths.length; i += 1) { + const files = parseApiFile(apiPaths[i]); + const swaggerJsDocComments = filterJsDocComments(files.jsdoc); - var problems = swaggerHelpers.findDeprecated([files, swaggerJsDocComments]); + const problems = swaggerHelpers.findDeprecated([ + files, + swaggerJsDocComments, + ]); // Report a warning in case potential problems encountered. if (problems.length > 0) { console.warn('You are using properties to be deprecated in v2.0.0'); @@ -117,7 +118,7 @@ module.exports = function(options) { swaggerHelpers.addDataToSwaggerObject(swaggerObject, swaggerJsDocComments); } - parser.parse(swaggerObject, function(err, api) { + parser.parse(swaggerObject, (err, api) => { if (!err) { swaggerObject = api; } diff --git a/lib/swagger-helpers.js b/lib/swagger-helpers.js index d277d532..2051431f 100644 --- a/lib/swagger-helpers.js +++ b/lib/swagger-helpers.js @@ -1,10 +1,10 @@ -'use strict'; +// A few core helpers modify objects directly. +/* eslint no-param-reassign: 0 */ // Dependencies. -var RecursiveIterator = require('recursive-iterator'); -var excludedSwaggerProperties = [ - 'apis', -]; +const RecursiveIterator = require('recursive-iterator'); + +const excludedSwaggerProperties = ['apis']; /** * Checks if tag is already contained withing target. @@ -15,11 +15,11 @@ var excludedSwaggerProperties = [ * @param {object} tag - Swagger tag object to be included. * @returns {boolean} Does tag is already present in target */ -function _tagDuplicated(target, tag) { +function tagDuplicated(target, tag) { // Check input is workable. if (target && target.length && tag) { - for (var i = 0; i < target.length; i = i + 1) { - var targetTag = target[i]; + for (let i = 0; i < target.length; i += 1) { + const targetTag = target[i]; // The name of the tag to include already exists in the taget. // Therefore, it's not necessary to be added again. if (targetTag.name === tag.name) { @@ -37,51 +37,25 @@ function _tagDuplicated(target, tag) { * @function * @param {object} conf - Flexible configuration. */ -function _attachTags(conf) { - var tag = conf.tag; - var swaggerObject = conf.swaggerObject; - var propertyName = conf.propertyName; +function attachTags(conf) { + const { tag, swaggerObject, propertyName } = conf; // Correct deprecated property. if (propertyName === 'tag') { - propertyName = 'tags'; + conf.propertyName = 'tags'; } if (Array.isArray(tag)) { - for (var i = 0; i < tag.length; i = i + 1) { - if (!_tagDuplicated(swaggerObject[propertyName], tag[i])) { + for (let i = 0; i < tag.length; i += 1) { + if (!tagDuplicated(swaggerObject[propertyName], tag[i])) { swaggerObject[propertyName].push(tag[i]); } } - } else { - if (!_tagDuplicated(swaggerObject[propertyName], tag)) { - swaggerObject[propertyName].push(tag); - } + } else if (!tagDuplicated(swaggerObject[propertyName], tag)) { + swaggerObject[propertyName].push(tag); } } -/** - * Merges two objects - * @function - * @param {object} obj1 - Object 1 - * @param {object} obj2 - Object 2 - * @returns {object} Merged Object - */ -function _objectMerge(obj1, obj2) { - var obj3 = {}; - for (var attr in obj1) { - if (obj1.hasOwnProperty(attr)) { - obj3[attr] = obj1[attr]; - } - } - for (var name in obj2) { - if (obj2.hasOwnProperty(name)) { - obj3[name] = obj2[name]; - } - } - return obj3; -} - /** * Adds necessary swagger schema object properties. * @see https://goo.gl/Eoagtl @@ -91,8 +65,8 @@ function _objectMerge(obj1, obj2) { */ function swaggerizeObj(swaggerObject) { // Remove excluded keys from swagger output object - excludedSwaggerProperties.forEach(function(key) { - if (swaggerObject.hasOwnProperty(key)) { + excludedSwaggerProperties.forEach(key => { + if (key in swaggerObject) { delete swaggerObject[key]; } }); @@ -112,7 +86,7 @@ function swaggerizeObj(swaggerObject) { * @function * @returns {array} The list of deprecated property names. */ -function _getSwaggerSchemaWrongProperties() { +function getSwaggerSchemaWrongProperties() { return [ 'consume', 'produce', @@ -132,11 +106,11 @@ function _getSwaggerSchemaWrongProperties() { * @param {string} propertyName - The swagger property name to check. * @returns {string} The updated propertyName if neccessary. */ -function _correctSwaggerKey(propertyName) { - var wrong = _getSwaggerSchemaWrongProperties(); +function correctSwaggerKey(propertyName) { + const wrong = getSwaggerSchemaWrongProperties(); if (wrong.indexOf(propertyName) > 0) { // Returns the corrected property name. - return propertyName + 's'; + return `${propertyName}s`; } return propertyName; } @@ -148,8 +122,8 @@ function _correctSwaggerKey(propertyName) { * @param {object} pathObject - The input context of an item for swaggerObject. * @param {string} propertyName - The property to handle. */ -function _organizeSwaggerProperties(swaggerObject, pathObject, propertyName) { - var simpleProperties = [ +function organizeSwaggerProperties(swaggerObject, pathObject, propertyName) { + const simpleProperties = [ 'consume', 'consumes', 'produce', @@ -170,29 +144,32 @@ function _organizeSwaggerProperties(swaggerObject, pathObject, propertyName) { // Common properties. if (simpleProperties.indexOf(propertyName) !== -1) { - var keyName = _correctSwaggerKey(propertyName); - var definitionNames = Object - .getOwnPropertyNames(pathObject[propertyName]); - for (var k = 0; k < definitionNames.length; k = k + 1) { - var definitionName = definitionNames[k]; - swaggerObject[keyName][definitionName] = - _objectMerge( - swaggerObject[keyName][definitionName], - pathObject[propertyName][definitionName] - ); + const keyName = correctSwaggerKey(propertyName); + const definitionNames = Object.getOwnPropertyNames( + pathObject[propertyName] + ); + for (let k = 0; k < definitionNames.length; k += 1) { + const definitionName = definitionNames[k]; + swaggerObject[keyName][definitionName] = Object.assign( + {}, + swaggerObject[keyName][definitionName], + pathObject[propertyName][definitionName] + ); } - // Tags. + // Tags. } else if (propertyName === 'tag' || propertyName === 'tags') { - var tag = pathObject[propertyName]; - _attachTags({ - tag: tag, - swaggerObject: swaggerObject, - propertyName: propertyName, + const tag = pathObject[propertyName]; + attachTags({ + tag, + swaggerObject, + propertyName, }); - // Paths. + // Paths. } else { - swaggerObject.paths[propertyName] = _objectMerge( - swaggerObject.paths[propertyName], pathObject[propertyName] + swaggerObject.paths[propertyName] = Object.assign( + {}, + swaggerObject.paths[propertyName], + pathObject[propertyName] ); } } @@ -209,14 +186,14 @@ function addDataToSwaggerObject(swaggerObject, data) { throw new Error('swaggerObject and data are required!'); } - for (var i = 0; i < data.length; i = i + 1) { - var pathObject = data[i]; - var propertyNames = Object.getOwnPropertyNames(pathObject); + for (let i = 0; i < data.length; i += 1) { + const pathObject = data[i]; + const propertyNames = Object.getOwnPropertyNames(pathObject); // Iterating the properties of the a given pathObject. - for (var j = 0; j < propertyNames.length; j = j + 1) { - var propertyName = propertyNames[j]; + for (let j = 0; j < propertyNames.length; j += 1) { + const propertyName = propertyNames[j]; // Do what's necessary to organize the end specification. - _organizeSwaggerProperties(swaggerObject, pathObject, propertyName); + organizeSwaggerProperties(swaggerObject, pathObject, propertyName); } } } @@ -229,9 +206,9 @@ function addDataToSwaggerObject(swaggerObject, data) { * @param {Array} problems - aggregate list of found problems */ function seekWrong(list, wrongSet, problems) { - var iterator = new RecursiveIterator(list, 0, false); - for (var item = iterator.next(); !item.done; item = iterator.next()) { - var isDirectChildOfProperties = + const iterator = new RecursiveIterator(list, 0, false); + for (let item = iterator.next(); !item.done; item = iterator.next()) { + const isDirectChildOfProperties = item.value.path[item.value.path.length - 2] === 'properties'; if (wrongSet.indexOf(item.value.key) > 0 && !isDirectChildOfProperties) { @@ -247,10 +224,10 @@ function seekWrong(list, wrongSet, problems) { * @returns {Array} problems - a list of problems encountered */ function findDeprecated(sources) { - var wrong = _getSwaggerSchemaWrongProperties(); + const wrong = getSwaggerSchemaWrongProperties(); // accumulate problems encountered - var problems = []; - sources.forEach(function(source) { + const problems = []; + sources.forEach(source => { // Iterate through `source`, search for `wrong`, accumulate in `problems`. seekWrong(source, wrong, problems); }); @@ -258,7 +235,7 @@ function findDeprecated(sources) { } module.exports = { - addDataToSwaggerObject: addDataToSwaggerObject, - swaggerizeObj: swaggerizeObj, - findDeprecated: findDeprecated, + addDataToSwaggerObject, + swaggerizeObj, + findDeprecated, }; diff --git a/package.json b/package.json index 8857a6fb..0d44dbd3 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,11 @@ "description": "Generates swagger doc based on JSDoc", "main": "index.js", "scripts": { - "coverage": "istanbul cover _mocha --report html && istanbul check-coverage --statement 95", - "jsdoc": "jsdoc --configure .jsdocconf", + "precommit": "lint-staged", + "test:lint": "eslint .", + "test:js": "mocha --timeout 10000 --exit", "start": "node example/app.js", - "test": "./node_modules/.bin/mocha" + "test": "run-p test:* -cn" }, "bin": { "swagger-jsdoc": "./bin/swagger-jsdoc.js" @@ -30,23 +31,39 @@ }, "homepage": "https://github.com/Surnet/swagger-jsdoc", "dependencies": { - "chokidar": "^2.0.3", - "commander": "^2.11.0", - "doctrine": "^2.0.0", - "glob": "^7.1.2", - "js-yaml": "^3.8.4", - "recursive-iterator": "^2.0.3", - "swagger-parser": "^3.4.1" + "commander": "2.11.0", + "doctrine": "2.0.0", + "glob": "7.1.2", + "js-yaml": "3.8.4", + "recursive-iterator": "3.3.0", + "swagger-parser": "5.0.0" }, "devDependencies": { - "body-parser": "^1.17.2", - "chai": "^4.0.2", - "express": "^4.15.3", - "istanbul": "^0.4.5", - "jscs": "^3.0.7", - "mocha": "^3.4.2", - "mocha-jscs": "^5.0.1", - "mocha-jshint": "^2.3.1", - "supertest": "^3.0.0" + "body-parser": "1.17.2", + "chai": "4.0.2", + "eslint": "5.1.0", + "eslint-config-airbnb-base": "13.0.0", + "eslint-config-prettier": "2.9.0", + "eslint-loader": "2.0.0", + "eslint-plugin-import": "2.13.0", + "eslint-plugin-prettier": "2.6.2", + "express": "4.15.3", + "husky": "1.0.0-rc.13", + "lint-staged": "7.2.0", + "mocha": "5.2.0", + "npm-run-all": "4.1.3", + "prettier": "1.13.7", + "supertest": "3.0.0" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "*.{js,json,md}": [ + "prettier --write", + "git add" + ] } } diff --git a/test/cli-test.js b/test/cli-test.js index b6567df5..038a6dc4 100644 --- a/test/cli-test.js +++ b/test/cli-test.js @@ -1,16 +1,16 @@ -'use strict'; +/* global it, describe, after */ // Dependencies. -var exec = require('child_process').exec; -var chai = require('chai'); -var expect = chai.expect; -var fs = require('fs'); +const { exec } = require('child_process'); +const chai = require('chai'); -describe('command line interface', function () { +const { expect } = chai; +const fs = require('fs'); - it('help menu works', function (done) { - var helpCommand = process.env.PWD + '/bin/swagger-jsdoc.js -h'; - exec(helpCommand, function (error, stdout, stderr) { +describe('command line interface', () => { + it('help menu works', done => { + const helpCommand = `${process.env.PWD}/bin/swagger-jsdoc.js -h`; + exec(helpCommand, (error, stdout, stderr) => { if (error) { throw new Error(error, stderr); } @@ -19,9 +19,9 @@ describe('command line interface', function () { }); }); - it('help menu is default fallback when no arguments', function (done) { - var helpCommand = process.env.PWD + '/bin/swagger-jsdoc.js'; - exec(helpCommand, function (error, stdout, stderr) { + it('help menu is default fallback when no arguments', done => { + const helpCommand = `${process.env.PWD}/bin/swagger-jsdoc.js`; + exec(helpCommand, (error, stdout, stderr) => { if (error) { throw new Error(error, stderr); } @@ -30,9 +30,11 @@ describe('command line interface', function () { }); }); - it('should require a definition file', function (done) { - var wrongDefinition = process.env.PWD + '/bin/swagger-jsdoc.js wrongDefinition'; - exec(wrongDefinition, function (error, stdout, stderr) { + it('should require a definition file', done => { + const wrongDefinition = `${ + process.env.PWD + }/bin/swagger-jsdoc.js wrongDefinition`; + exec(wrongDefinition, (error, stdout, stderr) => { if (error) { throw new Error(error, stderr); } @@ -41,31 +43,41 @@ describe('command line interface', function () { }); }); - it('should require an info object in the definition', function (done) { - var wrongDefinition = process.env.PWD + '/bin/swagger-jsdoc.js -d test/fixtures/empty_definition.js'; - exec(wrongDefinition, function (error, stdout, stderr) { + it('should require an info object in the definition', done => { + const wrongDefinition = `${ + process.env.PWD + }/bin/swagger-jsdoc.js -d test/fixtures/empty_definition.js`; + exec(wrongDefinition, (error, stdout, stderr) => { if (error) { throw new Error(error, stderr); } - expect(stdout).to.contain('Definition file should contain an info object!'); + expect(stdout).to.contain( + 'Definition file should contain an info object!' + ); done(); }); }); - it('should require title and version in the info object', function (done) { - var wrongDefinition = process.env.PWD + '/bin/swagger-jsdoc.js -d test/fixtures/wrong_definition.js'; - exec(wrongDefinition, function (error, stdout, stderr) { + it('should require title and version in the info object', done => { + const wrongDefinition = `${ + process.env.PWD + }/bin/swagger-jsdoc.js -d test/fixtures/wrong_definition.js`; + exec(wrongDefinition, (error, stdout, stderr) => { if (error) { throw new Error(error, stderr); } - expect(stdout).to.contain('The title and version properties are required!'); + expect(stdout).to.contain( + 'The title and version properties are required!' + ); done(); }); }); - it('should warn when deprecated properties are used', function (done) { - var deprecatedProperties = process.env.PWD + '/bin/swagger-jsdoc.js -d example/swaggerDef.js test/fixtures/deprecated_routes.js'; - exec(deprecatedProperties, function (error, stdout, stderr) { + it('should warn when deprecated properties are used', done => { + const deprecatedProperties = `${ + process.env.PWD + }/bin/swagger-jsdoc.js -d example/swaggerDef.js test/fixtures/deprecated_routes.js`; + exec(deprecatedProperties, (error, stdout, stderr) => { if (error) { throw new Error(error, stderr); } @@ -74,83 +86,101 @@ describe('command line interface', function () { }); }); - it('should require arguments with jsDoc data about an API', function (done) { - var missingApis = process.env.PWD + '/bin/swagger-jsdoc.js -d example/swaggerDef.js'; - exec(missingApis, function (error, stdout, stderr) { + it('should require arguments with jsDoc data about an API', done => { + const missingApis = `${ + process.env.PWD + }/bin/swagger-jsdoc.js -d example/swaggerDef.js`; + exec(missingApis, (error, stdout, stderr) => { if (error) { throw new Error(error, stderr); } - expect(stdout).to.contain('You must provide sources for reading API files.'); + expect(stdout).to.contain( + 'You must provide sources for reading API files.' + ); done(); }); }); - it('should create swagger.json by default when the API input is good', function (done) { - var goodInput = process.env.PWD + '/bin/swagger-jsdoc.js -d example/swaggerDef.js example/routes.js'; - exec(goodInput, function (error, stdout, stderr) { + it('should create swagger.json by default when the API input is good', done => { + const goodInput = `${ + process.env.PWD + }/bin/swagger-jsdoc.js -d example/swaggerDef.js example/routes.js`; + exec(goodInput, (error, stdout, stderr) => { if (error) { throw new Error(error, stderr); } expect(stdout).to.contain('Swagger specification is ready.'); - expect(stderr).to.not.contain('You are using properties to be deprecated'); - var specification = fs.statSync('swagger.json'); + expect(stderr).to.not.contain( + 'You are using properties to be deprecated' + ); + const specification = fs.statSync('swagger.json'); // Check that the physical file was created. expect(specification.nlink).to.be.above(0); done(); }); }); - it('should create swagger.json by default when the API input is from definition file', function (done) { - var goodInput = process.env.PWD + '/bin/swagger-jsdoc.js -d test/fixtures/api_definition.js'; - exec(goodInput, function (error, stdout, stderr) { + it('should create swagger.json by default when the API input is from definition file', done => { + const goodInput = `${ + process.env.PWD + }/bin/swagger-jsdoc.js -d test/fixtures/api_definition.js`; + exec(goodInput, (error, stdout, stderr) => { if (error) { throw new Error(error, stderr); } expect(stdout).to.contain('Swagger specification is ready.'); - expect(stderr).to.not.contain('You are using properties to be deprecated'); - var specification = fs.statSync('swagger.json'); + expect(stderr).to.not.contain( + 'You are using properties to be deprecated' + ); + const specification = fs.statSync('swagger.json'); // Check that the physical file was created. expect(specification.nlink).to.be.above(0); - done(); }); + done(); }); - it('should accept custom configuration for output specification', function (done) { - var goodInput = process.env.PWD + '/bin/swagger-jsdoc.js -d example/swaggerDef.js -o customSpec.json example/routes.js'; - exec(goodInput, function (error, stdout, stderr) { + it('should accept custom configuration for output specification', done => { + const goodInput = `${ + process.env.PWD + }/bin/swagger-jsdoc.js -d example/swaggerDef.js -o customSpec.json example/routes.js`; + exec(goodInput, (error, stdout, stderr) => { if (error) { throw new Error(error, stderr); } expect(stdout).to.contain('Swagger specification is ready.'); - var specification = fs.statSync('customSpec.json'); + const specification = fs.statSync('customSpec.json'); // Check that the physical file was created. expect(specification.nlink).to.be.above(0); done(); }); }); - it('should create a YAML swagger spec when a custom output configuration with a .yaml extension is used', function (done) { - var goodInput = process.env.PWD + '/bin/swagger-jsdoc.js -d example/swaggerDef.js -o customSpec.yaml example/routes.js'; - exec(goodInput, function (error, stdout, stderr) { + it('should create a YAML swagger spec when a custom output configuration with a .yaml extension is used', done => { + const goodInput = `${ + process.env.PWD + }/bin/swagger-jsdoc.js -d example/swaggerDef.js -o customSpec.yaml example/routes.js`; + exec(goodInput, (error, stdout, stderr) => { if (error) { throw new Error(error, stderr); } expect(stdout).to.contain('Swagger specification is ready.'); - var specification = fs.statSync('customSpec.yaml'); + const specification = fs.statSync('customSpec.yaml'); // Check that the physical file was created. expect(specification.nlink).to.be.above(0); done(); }); }); - it('should create a YAML swagger spec when a custom output configuration with a .yml extension is used', function (done) { - var goodInput = process.env.PWD + '/bin/swagger-jsdoc.js -d example/swaggerDef.js -o customSpec.yml example/routes.js'; - exec(goodInput, function (error, stdout, stderr) { + it('should create a YAML swagger spec when a custom output configuration with a .yml extension is used', done => { + const goodInput = `${ + process.env.PWD + }/bin/swagger-jsdoc.js -d example/swaggerDef.js -o customSpec.yml example/routes.js`; + exec(goodInput, (error, stdout, stderr) => { if (error) { throw new Error(error, stderr); } expect(stdout).to.contain('Swagger specification is ready.'); - var specification = fs.statSync('customSpec.yml'); + const specification = fs.statSync('customSpec.yml'); // Check that the physical file was created. expect(specification.nlink).to.be.above(0); done(); @@ -158,15 +188,14 @@ describe('command line interface', function () { }); // Cleanup test files if any. - after(function() { - var defaultSpecification = process.env.PWD + '/swagger.json'; - var customSpecification = process.env.PWD + '/customSpec.json'; - var customSpecYaml = process.env.PWD + '/customSpec.yaml'; - var customSpecYml = process.env.PWD + '/customSpec.yml'; + after(() => { + const defaultSpecification = `${process.env.PWD}/swagger.json`; + const customSpecification = `${process.env.PWD}/customSpec.json`; + const customSpecYaml = `${process.env.PWD}/customSpec.yaml`; + const customSpecYml = `${process.env.PWD}/customSpec.yml`; fs.unlinkSync(defaultSpecification); fs.unlinkSync(customSpecification); fs.unlinkSync(customSpecYaml); fs.unlinkSync(customSpecYml); }); - }); diff --git a/test/fixtures/api_definition.js b/test/fixtures/api_definition.js index 6450ad71..7c0bab24 100644 --- a/test/fixtures/api_definition.js +++ b/test/fixtures/api_definition.js @@ -1,8 +1,9 @@ module.exports = { - info: { // API informations (required) + info: { + // API informations (required) title: 'Hello World', // Title (required) version: '1.0.0', // Version (required) description: 'A sample API', // Description (optional) }, - apis: ['./**/*/routes.js'] + apis: ['./**/*/routes.js'], }; diff --git a/test/fixtures/deprecated_routes.js b/test/fixtures/deprecated_routes.js index 8e0e8fe3..5c47ba2a 100644 --- a/test/fixtures/deprecated_routes.js +++ b/test/fixtures/deprecated_routes.js @@ -1,5 +1,3 @@ -'use strict'; - module.exports.setup = function(app) { /** * @swagger @@ -11,7 +9,7 @@ module.exports.setup = function(app) { * 200: * description: deprecated path */ - app.get('/deprecated', function(req, res) { + app.get('/deprecated', (req, res) => { res.send('Deprecated "path" property!'); }); }; diff --git a/test/fixtures/testData.js b/test/fixtures/testData.js index d3368e20..5071a27a 100644 --- a/test/fixtures/testData.js +++ b/test/fixtures/testData.js @@ -1,110 +1,110 @@ // Mock for Definitions Object. `definitions` is correct, not `definition`. -var testDataDefinitions = [ +const testDataDefinitions = [ { - "definition": { - "DefinitionSingular": { - "required": ["username", "password"], - "properties": { - "username": { - "type": "string" + definition: { + DefinitionSingular: { + required: ['username', 'password'], + properties: { + username: { + type: 'string', }, - "password": { - "type": "string" - } - } - } - } + password: { + type: 'string', + }, + }, + }, + }, }, { - "definitions": { - "DefinitionPlural": { - "required": ["username", "password"], - "properties": { - "username": { - "type": "string" + definitions: { + DefinitionPlural: { + required: ['username', 'password'], + properties: { + username: { + type: 'string', }, - "password": { - "type": "string" - } - } - } - } - } + password: { + type: 'string', + }, + }, + }, + }, + }, ]; // Mock for Parameters Definitions Object. `parameters` is correct, not `parameter`. -var testDataParameters = [ +const testDataParameters = [ { - "parameter": { - "ParameterSingular": { - "name": "username", - "description": "Username to use for login.", - "in": "formData", - "required": true, - "type": "string" - } - } + parameter: { + ParameterSingular: { + name: 'username', + description: 'Username to use for login.', + in: 'formData', + required: true, + type: 'string', + }, + }, }, { - "parameters": { - "ParameterPlural": { - "name": "limit", - "in": "query", - "description": "max records to return", - "required": true, - "type": "integer", - "format": "int32" - } - } - } + parameters: { + ParameterPlural: { + name: 'limit', + in: 'query', + description: 'max records to return', + required: true, + type: 'integer', + format: 'int32', + }, + }, + }, ]; // Mock for Security Definitions Object. `securityDefinitions` is correct, not `securityDefinition`. -var testDataSecurityDefinitions = [ +const testDataSecurityDefinitions = [ { - "securityDefinition": { - "basicAuth": { - "type": "basic", - "description": "HTTP Basic Authentication. Works over `HTTP` and `HTTPS`" - } - } + securityDefinition: { + basicAuth: { + type: 'basic', + description: 'HTTP Basic Authentication. Works over `HTTP` and `HTTPS`', + }, + }, }, { - "securityDefinitions": { - "api_key": { - "type": "apiKey", - "name": "api_key", - "in": "header" + securityDefinitions: { + api_key: { + type: 'apiKey', + name: 'api_key', + in: 'header', }, - "petstore_auth": { - "type": "oauth2", - "authorizationUrl": "http://swagger.io/api/oauth/dialog", - "flow": "implicit", - "scopes": { - "write:pets": "modify pets in your account", - "read:pets": "read your pets" - } + petstore_auth: { + type: 'oauth2', + authorizationUrl: 'http://swagger.io/api/oauth/dialog', + flow: 'implicit', + scopes: { + 'write:pets': 'modify pets in your account', + 'read:pets': 'read your pets', + }, }, - } - } + }, + }, ]; // Mock for Responses Definitions Object. `responses` is correct, not `response`. -var testDataResponses = [ +const testDataResponses = [ { - "response": { - "NotFound": { - "description": "Entity not found." - } - } + response: { + NotFound: { + description: 'Entity not found.', + }, + }, }, { - "responses": { - "IllegalInput": { - "description": "Illegal input for operation." - } - } - } + responses: { + IllegalInput: { + description: 'Illegal input for operation.', + }, + }, + }, ]; module.exports = { diff --git a/test/fixtures/wrong_definition.js b/test/fixtures/wrong_definition.js index e67945bf..3ecb1abb 100644 --- a/test/fixtures/wrong_definition.js +++ b/test/fixtures/wrong_definition.js @@ -1,7 +1,7 @@ -var host = 'http://' + process.env.IP + ':' + process.env.PORT; +const host = `http://${process.env.IP}:${process.env.PORT}`; module.exports = { info: {}, - host: host, // Host (optional) + host, // Host (optional) basePath: '/', // Base path (optional) }; diff --git a/test/jscs.spec.js b/test/jscs.spec.js deleted file mode 100644 index 9659a748..00000000 --- a/test/jscs.spec.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -require('mocha-jscs')(["./lib", "./bin", "./example"]); \ No newline at end of file diff --git a/test/jshint.spec.js b/test/jshint.spec.js deleted file mode 100644 index cf63cc03..00000000 --- a/test/jshint.spec.js +++ /dev/null @@ -1,3 +0,0 @@ -'use strict'; - -require('mocha-jshint')(); \ No newline at end of file diff --git a/test/mocha.opts b/test/mocha.opts deleted file mode 100644 index d38f26fb..00000000 --- a/test/mocha.opts +++ /dev/null @@ -1,5 +0,0 @@ ---reporter spec ---ui bdd ---recursive ---slow 1000 ---no-timeouts \ No newline at end of file diff --git a/test/swagger-helpers-test.js b/test/swagger-helpers-test.js index 5bc2d36b..24a0b55f 100644 --- a/test/swagger-helpers-test.js +++ b/test/swagger-helpers-test.js @@ -1,29 +1,28 @@ -'use strict'; - -// The hinter will deny a lot of the chai syntax (W030). -/* jshint ignore:start */ +/* global it, describe */ +/* eslint no-unused-expressions: 0 */ // Dependencies. -var swaggerHelpers = require('../lib/swagger-helpers'); -var chai = require('chai'); -var expect = chai.expect; -var swaggerObject = require('./fixtures/swaggerObject.json'); -var testData = require('./fixtures/testData'); +const chai = require('chai'); +const swagger = require('../lib'); +const swaggerHelpers = require('../lib/swagger-helpers'); -describe('swagger-helpers submodule', function () { +const { expect } = chai; +const swaggerObject = require('./fixtures/swaggerObject.json'); +const testData = require('./fixtures/testData'); - it('should have a method addDataToSwaggerObject()', function (done) { +describe('swagger-helpers submodule', () => { + it('should have a method addDataToSwaggerObject()', done => { expect(swaggerHelpers).to.include.keys('addDataToSwaggerObject'); - expect(typeof(swaggerHelpers.addDataToSwaggerObject)).to.equal('function'); + expect(typeof swaggerHelpers.addDataToSwaggerObject).to.equal('function'); done(); }); - it('addDataToSwaggerObject() should require correct input', function (done) { + it('addDataToSwaggerObject() should require correct input', done => { expect(swaggerHelpers.addDataToSwaggerObject).to.throw(Error); done(); }); - it('addDataToSwaggerObject() handles "definition" and "definitions"', function(done) { + it('addDataToSwaggerObject() handles "definition" and "definitions"', done => { swaggerHelpers.addDataToSwaggerObject(swaggerObject, testData.definitions); expect(swaggerObject.definitions).to.exist; // Case 'definition'. @@ -33,7 +32,7 @@ describe('swagger-helpers submodule', function () { done(); }); - it('addDataToSwaggerObject() handles "parameter" and "parameters"', function(done) { + it('addDataToSwaggerObject() handles "parameter" and "parameters"', done => { swaggerHelpers.addDataToSwaggerObject(swaggerObject, testData.parameters); expect(swaggerObject.parameters).to.exist; // Case 'parameter'. @@ -43,8 +42,11 @@ describe('swagger-helpers submodule', function () { done(); }); - it('addDataToSwaggerObject() handles "securityDefinition" and "securityDefinitions"', function(done) { - swaggerHelpers.addDataToSwaggerObject(swaggerObject, testData.securityDefinitions); + it('addDataToSwaggerObject() handles "securityDefinition" and "securityDefinitions"', done => { + swaggerHelpers.addDataToSwaggerObject( + swaggerObject, + testData.securityDefinitions + ); expect(swaggerObject.securityDefinitions).to.exist; // Case 'securityDefinition'. expect(swaggerObject.securityDefinitions).to.include.keys('basicAuth'); @@ -53,7 +55,7 @@ describe('swagger-helpers submodule', function () { done(); }); - it('addDataToSwaggerObject() handles "response" and "responses"', function(done) { + it('addDataToSwaggerObject() handles "response" and "responses"', done => { swaggerHelpers.addDataToSwaggerObject(swaggerObject, testData.responses); expect(swaggerObject.responses).to.exist; // Case 'response'. @@ -63,33 +65,32 @@ describe('swagger-helpers submodule', function () { done(); }); - it('should have a method swaggerizeObj()', function (done) { + it('should have a method swaggerizeObj()', done => { expect(swaggerHelpers).to.include.keys('swaggerizeObj'); - expect(typeof(swaggerHelpers.swaggerizeObj)).to.equal('function'); + expect(typeof swaggerHelpers.swaggerizeObj).to.equal('function'); done(); }); - it('swagerizeObj should remove keys specified from the blacklisted keys', function (done) { - var testObject = { - valid: 'Valid Key', - apis: 'Invalid Key' - } - testObject = swaggerHelpers.swaggerizeObj(testObject); - expect(testObject.apis).to.be.undefined; - done(); - }); - it('paths should not override each other', function (done) { - var swagger = require('../lib'); + it('swagerizeObj should remove keys specified from the blacklisted keys', done => { + let testObject = { + valid: 'Valid Key', + apis: 'Invalid Key', + }; + testObject = swaggerHelpers.swaggerizeObj(testObject); + expect(testObject.apis).to.be.undefined; + + done(); + }); - var testObject = { + it('paths should not override each other', done => { + let testObject = { swaggerDefinition: {}, - apis: ['./**/*/external/*.yml'] + apis: ['./**/*/external/*.yml'], }; testObject = swagger(testObject); expect(testObject.responses.api).to.include.keys(['foo', 'bar']); + done(); }); - }); -/* jshint ignore:end */ diff --git a/test/test.js b/test/test.js index 3813daef..90a609cf 100644 --- a/test/test.js +++ b/test/test.js @@ -1,11 +1,9 @@ -'use strict'; - +/* global it, describe */ // Dependencies -var request = require('supertest'); -var app = require('../example/app'); -var swaggerSpec = require('./swagger-spec.json'); - +const request = require('supertest'); +const app = require('../example/app'); +const swaggerSpec = require('./swagger-spec.json'); // Check against saved swagger spec function swaggerSpecIsCompliant(res) { @@ -16,20 +14,18 @@ function swaggerSpecIsCompliant(res) { } // Testing an example app parsing documentation with swagger-jsdoc. -describe('example app', function () { - it('homepage returns a success code', function (done) { +describe('example app', () => { + it('homepage returns a success code', done => { request(app) .get('/') .expect(200) - .end(function (err) { - if (err) { - return done(err); - } - done(); + .end(err => { + if (err) return done(err); + return done(); }); }); - it('login authentication returns a success code', function (done) { + it('login authentication returns a success code', done => { request(app) .post('/login') .send({ @@ -37,24 +33,20 @@ describe('example app', function () { password: 'Password', }) .expect(200) - .end(function (err) { - if (err) { - return done(err); - } - done(); + .end(err => { + if (err) return done(err); + return done(); }); }); - it('produced swagger spec is as expected', function (done) { + it('produced swagger spec is as expected', done => { request(app) .get('/api-docs.json') .expect(200) .expect(swaggerSpecIsCompliant) - .end(function (err) { - if (err) { - return done(err); - } - done(); + .end(err => { + if (err) return done(err); + return done(); }); }); }); diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 879c1980..00000000 --- a/yarn.lock +++ /dev/null @@ -1,2415 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -JSV@^4.0.x: - version "4.0.2" - resolved "https://registry.yarnpkg.com/JSV/-/JSV-4.0.2.tgz#d077f6825571f82132f9dffaed587b4029feff57" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - -abbrev@1.0.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" - -accepts@~1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" - -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.2, argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - -assertion-error@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" - -async@0.2.x, async@~0.2.9: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" - -async@1.x, async@^1.4.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -atob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" - -babel-runtime@^6.9.2: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babylon@^6.8.1: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" - -body-parser@1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" - dependencies: - bytes "3.0.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.1" - http-errors "~1.6.2" - iconv-lite "0.4.19" - on-finished "~2.3.0" - qs "6.5.1" - raw-body "2.3.2" - type-is "~1.6.15" - -body-parser@^1.17.2: - version "1.18.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" - dependencies: - bytes "3.0.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "~1.6.3" - iconv-lite "0.4.23" - on-finished "~2.3.0" - qs "6.5.2" - raw-body "2.3.3" - type-is "~1.6.16" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.0, braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -browser-stdout@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chai@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c" - dependencies: - assertion-error "^1.0.1" - check-error "^1.0.1" - deep-eql "^3.0.0" - get-func-name "^2.0.0" - pathval "^1.0.0" - type-detect "^4.0.0" - -chalk@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" - dependencies: - ansi-styles "~1.0.0" - has-color "~0.1.0" - strip-ansi "~0.1.0" - -chalk@~1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -check-error@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - -chokidar@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" - dependencies: - anymatch "^2.0.0" - async-each "^1.0.0" - braces "^2.3.0" - glob-parent "^3.1.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - lodash.debounce "^4.0.8" - normalize-path "^2.1.1" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - upath "^1.0.5" - optionalDependencies: - fsevents "^1.2.2" - -chownr@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cli-table@~0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" - dependencies: - colors "1.0.3" - -cli@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14" - dependencies: - exit "0.1.2" - glob "^7.1.1" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -colors@0.6.x: - version "0.6.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" - -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - -combined-stream@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" - dependencies: - delayed-stream "~1.0.0" - -commander@2.9.0, commander@~2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" - -commander@^2.11.0, commander@^2.7.1: - version "2.16.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" - -comment-parser@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.3.2.tgz#3c03f0776b86a36dfd9a0a2c97c6307f332082fe" - dependencies: - readable-stream "^2.0.4" - -component-emitter@^1.2.0, component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -console-browserify@1.1.x: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - dependencies: - date-now "^0.1.4" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - -cookiejar@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - -core-js@^2.4.0: - version "2.5.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -cst@^0.4.3: - version "0.4.10" - resolved "https://registry.yarnpkg.com/cst/-/cst-0.4.10.tgz#9c05c825290a762f0a85c0aabb8c0fe035ae8516" - dependencies: - babel-runtime "^6.9.2" - babylon "^6.8.1" - source-map-support "^0.4.0" - -cycle@1.0.x: - version "1.0.3" - resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - -debug@2.6.8: - version "2.6.8" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" - dependencies: - ms "2.0.0" - -debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -debug@^3.0.0, debug@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - -decamelize@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - -deep-eql@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - dependencies: - type-detect "^4.0.0" - -deep-equal@*: - version "1.0.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -depd@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" - -depd@~1.1.1, depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - -diff@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" - -doctrine@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - dependencies: - esutils "^2.0.2" - -dom-serializer@0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" - dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" - -domelementtype@1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" - -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - -domhandler@2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" - dependencies: - domelementtype "1" - -domutils@1.5: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - dependencies: - dom-serializer "0" - domelementtype "1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - -entities@1.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" - -entities@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" - -es6-promise@^3.0.2: - version "3.3.1" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" - -es6-promise@^4.1.1: - version "4.2.4" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -escodegen@1.8.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" - dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.2.0" - -esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - -estraverse@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - -exit@0.1.2, exit@0.1.x, exit@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -express@^4.15.3: - version "4.16.3" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" - dependencies: - accepts "~1.3.5" - array-flatten "1.1.1" - body-parser "1.18.2" - content-disposition "0.5.2" - content-type "~1.0.4" - cookie "0.3.1" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.1.1" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.2" - path-to-regexp "0.1.7" - proxy-addr "~2.0.3" - qs "6.5.1" - range-parser "~1.2.0" - safe-buffer "5.1.1" - send "0.16.2" - serve-static "1.13.2" - setprototypeof "1.1.0" - statuses "~1.4.0" - type-is "~1.6.16" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -eyes@0.1.x: - version "0.1.8" - resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -finalhandler@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.4.0" - unpipe "~1.0.0" - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -form-data@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" - dependencies: - asynckit "^0.4.0" - combined-stream "1.0.6" - mime-types "^2.1.12" - -format-util@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/format-util/-/format-util-1.0.3.tgz#032dca4a116262a12c43f4c3ec8566416c5b2d95" - -formidable@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.1.tgz#70fb7ca0290ee6ff961090415f4b3df3d2082659" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - -fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - dependencies: - minipass "^2.2.1" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fsevents@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" - dependencies: - nan "^2.9.2" - node-pre-gyp "^0.10.0" - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^5.0.1, glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -graceful-fs@^4.1.2: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - -growl@1.9.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" - -handlebars@^4.0.1: - version "4.0.11" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" - dependencies: - async "^1.4.0" - optimist "^0.6.1" - source-map "^0.4.4" - optionalDependencies: - uglify-js "^2.6" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -has-color@~0.1.0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -he@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" - -htmlparser2@3.8.3, htmlparser2@3.8.x: - version "3.8.3" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" - dependencies: - domelementtype "1" - domhandler "2.3" - domutils "1.5" - entities "1.0" - readable-stream "1.1" - -http-errors@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" - dependencies: - depd "1.1.1" - inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" - -http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -i@0.3.x: - version "0.3.6" - resolved "https://registry.yarnpkg.com/i/-/i-0.3.6.tgz#d96c92732076f072711b6b10fd7d4f65ad8ee23d" - -iconv-lite@0.4.19: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" - -iconv-lite@0.4.23, iconv-lite@^0.4.4: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - dependencies: - minimatch "^3.0.4" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherit@^2.2.2: - version "2.2.6" - resolved "https://registry.yarnpkg.com/inherit/-/inherit-2.2.6.tgz#f1614b06c8544e8128e4229c86347db73ad9788d" - -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - -ipaddr.js@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - dependencies: - kind-of "^6.0.0" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - dependencies: - kind-of "^6.0.0" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - dependencies: - is-extglob "^2.1.1" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - dependencies: - isobject "^3.0.1" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - -isstream@0.1.x: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - -istanbul@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" - -js-yaml@3.x, js-yaml@^3.4.6, js-yaml@^3.8.4: - version "3.12.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@~3.4.0: - version "3.4.6" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.4.6.tgz#6be1b23f6249f53d293370fd4d1aaa63ce1b4eb0" - dependencies: - argparse "^1.0.2" - esprima "^2.6.0" - inherit "^2.2.2" - -jscs-jsdoc@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jscs-jsdoc/-/jscs-jsdoc-2.0.0.tgz#f53ebce029aa3125bd88290ba50d64d4510a4871" - dependencies: - comment-parser "^0.3.1" - jsdoctypeparser "~1.2.0" - -jscs-preset-wikimedia@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/jscs-preset-wikimedia/-/jscs-preset-wikimedia-1.0.1.tgz#a6a5fa5967fd67a5d609038e1c794eaf41d4233d" - -jscs@^3.0.3, jscs@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/jscs/-/jscs-3.0.7.tgz#7141b4dff5b86e32d0e99d764b836767c30d201a" - dependencies: - chalk "~1.1.0" - cli-table "~0.3.1" - commander "~2.9.0" - cst "^0.4.3" - estraverse "^4.1.0" - exit "~0.1.2" - glob "^5.0.1" - htmlparser2 "3.8.3" - js-yaml "~3.4.0" - jscs-jsdoc "^2.0.0" - jscs-preset-wikimedia "~1.0.0" - jsonlint "~1.6.2" - lodash "~3.10.0" - minimatch "~3.0.0" - natural-compare "~1.2.2" - pathval "~0.1.1" - prompt "~0.2.14" - reserved-words "^0.1.1" - resolve "^1.1.6" - strip-bom "^2.0.0" - strip-json-comments "~1.0.2" - to-double-quotes "^2.0.0" - to-single-quotes "^2.0.0" - vow "~0.4.8" - vow-fs "~0.3.4" - xmlbuilder "^3.1.0" - -jsdoctypeparser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-1.2.0.tgz#e7dedc153a11849ffc5141144ae86a7ef0c25392" - dependencies: - lodash "^3.7.0" - -jshint@^2.8.0: - version "2.9.5" - resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.9.5.tgz#1e7252915ce681b40827ee14248c46d34e9aa62c" - dependencies: - cli "~1.0.0" - console-browserify "1.1.x" - exit "0.1.x" - htmlparser2 "3.8.x" - lodash "3.7.x" - minimatch "~3.0.2" - shelljs "0.3.x" - strip-json-comments "1.0.x" - -json-schema-ref-parser@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/json-schema-ref-parser/-/json-schema-ref-parser-1.4.1.tgz#c0c2e438bf0796723b02451bae8bc7dd0b37fed0" - dependencies: - call-me-maybe "^1.0.1" - debug "^2.2.0" - es6-promise "^3.0.2" - js-yaml "^3.4.6" - ono "^2.0.1" - -json3@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - -jsonlint@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/jsonlint/-/jsonlint-1.6.3.tgz#cb5e31efc0b78291d0d862fbef05900adf212988" - dependencies: - JSV "^4.0.x" - nomnom "^1.5.x" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._basecreate@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - -lodash.create@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" - dependencies: - lodash._baseassign "^3.0.0" - lodash._basecreate "^3.0.0" - lodash._isiterateecall "^3.0.0" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - -lodash.get@^4.0.0: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.isequal@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash@3.7.x: - version "3.7.0" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.7.0.tgz#3678bd8ab995057c07ade836ed2ef087da811d45" - -lodash@^3.5.0, lodash@^3.7.0, lodash@~3.10.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - dependencies: - object-visit "^1.0.0" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - -methods@^1.1.1, methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - -micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -mime-db@~1.35.0: - version "1.35.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47" - -mime-types@^2.1.12, mime-types@~2.1.18: - version "2.1.19" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0" - dependencies: - mime-db "~1.35.0" - -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - -mime@^1.4.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.0, minimatch@~3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - -minipass@^2.2.1, minipass@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233" - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" - dependencies: - minipass "^2.2.1" - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@0.x.x, mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -mocha-jscs@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mocha-jscs/-/mocha-jscs-5.0.1.tgz#18b96c73af0e1786799ac16973d57474e05e9647" - dependencies: - jscs "^3.0.3" - -mocha-jshint@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/mocha-jshint/-/mocha-jshint-2.3.1.tgz#303f27e533938559d20f26a4123d5bcb5645a546" - dependencies: - jshint "^2.8.0" - minimatch "^3.0.0" - shelljs "^0.4.0" - uniq "^1.0.1" - -mocha@^3.4.2: - version "3.5.3" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" - dependencies: - browser-stdout "1.3.0" - commander "2.9.0" - debug "2.6.8" - diff "3.2.0" - escape-string-regexp "1.0.5" - glob "7.1.1" - growl "1.9.2" - he "1.1.1" - json3 "3.3.2" - lodash.create "3.1.1" - mkdirp "0.5.1" - supports-color "3.1.2" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -mute-stream@~0.0.4: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - -nan@^2.9.2: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -natural-compare@~1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.2.2.tgz#1f96d60e3141cac1b6d05653ce0daeac763af6aa" - -ncp@0.4.x: - version "0.4.2" - resolved "https://registry.yarnpkg.com/ncp/-/ncp-0.4.2.tgz#abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574" - -needle@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" - dependencies: - debug "^2.1.2" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - -node-pre-gyp@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -nomnom@^1.5.x: - version "1.8.1" - resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" - dependencies: - chalk "~0.4.0" - underscore "~1.6.0" - -nopt@3.x: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - dependencies: - abbrev "1" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -npm-bundled@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" - -npm-packlist@^1.1.6: - version "1.1.10" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a" - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - dependencies: - isobject "^3.0.0" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - dependencies: - isobject "^3.0.1" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - dependencies: - ee-first "1.1.1" - -once@1.x, once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -ono@^2.0.1: - version "2.2.5" - resolved "https://registry.yarnpkg.com/ono/-/ono-2.2.5.tgz#daf09488b51174da7a7e4275dfab31b438ffa0e3" - -ono@^4.0.2: - version "4.0.5" - resolved "https://registry.yarnpkg.com/ono/-/ono-4.0.5.tgz#bc62740493a5c1c08b2c21e60cbb0e5c56ab7de2" - dependencies: - format-util "^1.0.3" - -optimist@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - -pathval@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" - -pathval@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-0.1.1.tgz#08f911cdca9cce5942880da7817bc0b723b66d82" - -pkginfo@0.3.x: - version "0.3.1" - resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.3.1.tgz#5b29f6a81f70717142e09e765bbeab97b4f81e21" - -pkginfo@0.x.x: - version "0.4.1" - resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - -prompt@~0.2.14: - version "0.2.14" - resolved "https://registry.yarnpkg.com/prompt/-/prompt-0.2.14.tgz#57754f64f543fd7b0845707c818ece618f05ffdc" - dependencies: - pkginfo "0.x.x" - read "1.0.x" - revalidator "0.1.x" - utile "0.2.x" - winston "0.8.x" - -proxy-addr@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.6.0" - -qs@6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" - -qs@6.5.2, qs@^6.5.1: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - -range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - -raw-body@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" - dependencies: - bytes "3.0.0" - http-errors "1.6.2" - iconv-lite "0.4.19" - unpipe "1.0.0" - -raw-body@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" - dependencies: - bytes "3.0.0" - http-errors "1.6.3" - iconv-lite "0.4.23" - unpipe "1.0.0" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read@1.0.x: - version "1.0.7" - resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - dependencies: - mute-stream "~0.0.4" - -readable-stream@1.1: - version "1.1.13" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" - dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" - readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" - -recursive-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/recursive-iterator/-/recursive-iterator-2.0.3.tgz#d0e0d2c7e7a83109d73091cf043fc509e5a76dc3" - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^1.5.2, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -reserved-words@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - -resolve@1.1.x: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - -resolve@^1.1.6: - version "1.8.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" - dependencies: - path-parse "^1.0.5" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - -revalidator@0.1.x: - version "0.1.8" - resolved "https://registry.yarnpkg.com/revalidator/-/revalidator-0.1.8.tgz#fece61bfa0c1b52a206bd6b18198184bdd523a3b" - -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - -rimraf@2.x.x, rimraf@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" - -safe-buffer@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - -safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - -semver@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" - on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" - -serve-static@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" - -set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - -shelljs@0.3.x: - version "0.3.0" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1" - -shelljs@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.4.0.tgz#199fe9e2de379efd03d345ff14062525e4b31ec2" - -signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.4.0: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - dependencies: - source-map "^0.5.6" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - -source-map@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.6, source-map@~0.5.1: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - dependencies: - amdefine ">=0.0.4" - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -stack-trace@0.0.x: - version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2": - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" - -strip-json-comments@1.0.x, strip-json-comments@~1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -superagent@3.8.2: - version "3.8.2" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.2.tgz#e4a11b9d047f7d3efeb3bbe536d9ec0021d16403" - dependencies: - component-emitter "^1.2.0" - cookiejar "^2.1.0" - debug "^3.1.0" - extend "^3.0.0" - form-data "^2.3.1" - formidable "^1.1.1" - methods "^1.1.1" - mime "^1.4.1" - qs "^6.5.1" - readable-stream "^2.0.5" - -supertest@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/supertest/-/supertest-3.1.0.tgz#f9ebaf488e60f2176021ec580bdd23ad269e7bc6" - dependencies: - methods "~1.1.2" - superagent "3.8.2" - -supports-color@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" - dependencies: - has-flag "^1.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^3.1.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - -swagger-methods@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/swagger-methods/-/swagger-methods-1.0.4.tgz#2c5b844f4a22ab2f5e773f98193c28e386b1c37e" - -swagger-parser@^3.4.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/swagger-parser/-/swagger-parser-3.4.2.tgz#244d67d6eeed08c00acb5d95950d5aefbd6185a3" - dependencies: - call-me-maybe "^1.0.1" - debug "^3.0.0" - es6-promise "^4.1.1" - json-schema-ref-parser "^1.4.1" - ono "^4.0.2" - swagger-methods "^1.0.0" - swagger-schema-official "2.0.0-bab6bed" - z-schema "^3.16.1" - -swagger-schema-official@2.0.0-bab6bed: - version "2.0.0-bab6bed" - resolved "https://registry.yarnpkg.com/swagger-schema-official/-/swagger-schema-official-2.0.0-bab6bed.tgz#70070468d6d2977ca5237b2e519ca7d06a2ea3fd" - -tar@^4: - version "4.4.4" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.4.tgz#ec8409fae9f665a4355cc3b4087d0820232bb8cd" - dependencies: - chownr "^1.0.1" - fs-minipass "^1.2.5" - minipass "^2.3.3" - minizlib "^1.1.0" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.2" - -to-double-quotes@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-double-quotes/-/to-double-quotes-2.0.0.tgz#aaf231d6fa948949f819301bbab4484d8588e4a7" - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -to-single-quotes@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/to-single-quotes/-/to-single-quotes-2.0.1.tgz#7cc29151f0f5f2c41946f119f5932fe554170125" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -type-detect@^4.0.0: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - -type-is@~1.6.15, type-is@~1.6.16: - version "1.6.16" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" - dependencies: - media-typer "0.3.0" - mime-types "~2.1.18" - -uglify-js@^2.6: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - -underscore@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" - -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -utile@0.2.x: - version "0.2.1" - resolved "https://registry.yarnpkg.com/utile/-/utile-0.2.1.tgz#930c88e99098d6220834c356cbd9a770522d90d7" - dependencies: - async "~0.2.9" - deep-equal "*" - i "0.3.x" - mkdirp "0.x.x" - ncp "0.4.x" - rimraf "2.x.x" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - -uuid@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" - -validator@^10.0.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-10.4.0.tgz#ee99a44afb3bb5ed350a159f056ca72a204cfc3c" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - -vow-fs@~0.3.4: - version "0.3.6" - resolved "https://registry.yarnpkg.com/vow-fs/-/vow-fs-0.3.6.tgz#2d4c59be22e2bf2618ddf597ab4baa923be7200d" - dependencies: - glob "^7.0.5" - uuid "^2.0.2" - vow "^0.4.7" - vow-queue "^0.4.1" - -vow-queue@^0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/vow-queue/-/vow-queue-0.4.3.tgz#4ba8f64b56e9212c0dbe57f1405aeebd54cce78d" - dependencies: - vow "^0.4.17" - -vow@^0.4.17, vow@^0.4.7, vow@~0.4.8: - version "0.4.17" - resolved "https://registry.yarnpkg.com/vow/-/vow-0.4.17.tgz#b16e08fae58c52f3ebc6875f2441b26a92682904" - -which@^1.1.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - dependencies: - string-width "^1.0.2 || 2" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - -winston@0.8.x: - version "0.8.3" - resolved "https://registry.yarnpkg.com/winston/-/winston-0.8.3.tgz#64b6abf4cd01adcaefd5009393b1d8e8bec19db0" - dependencies: - async "0.2.x" - colors "0.6.x" - cycle "1.0.x" - eyes "0.1.x" - isstream "0.1.x" - pkginfo "0.3.x" - stack-trace "0.0.x" - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - -wordwrap@^1.0.0, wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -xmlbuilder@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-3.1.0.tgz#2c86888f2d4eade850fa38ca7f7223f7209516e1" - dependencies: - lodash "^3.5.0" - -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" - -z-schema@^3.16.1: - version "3.22.0" - resolved "https://registry.yarnpkg.com/z-schema/-/z-schema-3.22.0.tgz#e1326063cb438f348c648350770258ff5e20a22b" - dependencies: - lodash.get "^4.0.0" - lodash.isequal "^4.0.0" - validator "^10.0.0" - optionalDependencies: - commander "^2.7.1"