diff --git a/.gitignore b/.gitignore index 2116c155..2e8dcfd9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.DS_Store .env .nyc_output coverage @@ -5,3 +6,4 @@ node_modules/ npm-debug.log public/ bower_components/ +.vscode/ diff --git a/.snyk b/.snyk new file mode 100644 index 00000000..c5e9abfb --- /dev/null +++ b/.snyk @@ -0,0 +1,9 @@ +# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. +version: v1.12.0 +# ignores vulnerabilities until expiry date; change duration by modifying expiry date +ignore: + 'npm:mem:20180117': + - showdown > yargs > os-locale > mem: + reason: No patch avalible yet and DoS of registry README is not a high risk. + expires: '2018-11-02T17:09:51.357Z' +patch: {} diff --git a/README.md b/README.md index a035d04f..27c64a72 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Get information about Origami components, services, and repositories. ## Requirements -Running Origami Registry UI requires [Node.js] 8.x and [npm]. +Running Origami Registry UI requires [Node.js] 10.x and [npm]. ## Running Locally diff --git a/bower.json b/bower.json index 3d14ad0a..172d6a04 100644 --- a/bower.json +++ b/bower.json @@ -17,11 +17,12 @@ "o-footer-services": "^2.0.1", "o-forms": "^5.3.0", "o-message": "^2.2.2", - "o-syntax-highlight": "^1.0.0", + "o-syntax-highlight": "^1.2.0", "o-tabs": "^4.1.0", "o-typography": "^5.6.0", "o-normalise": "^1.6.2", "o-overlay": "^2.4.1", + "o-table": "^6.8.1", "o-visual-effects": "^2.0.3" } } diff --git a/circle.yml b/circle.yml index e9f702b9..943bbfd5 100644 --- a/circle.yml +++ b/circle.yml @@ -3,16 +3,16 @@ jobs: test: working_directory: ~/origami-registry-ui docker: - - image: node:8 + - image: node:10 steps: - checkout - restore_cache: - key: dependency-cache-{{ checksum "package.json" }} + key: node-10-dependency-cache-{{ checksum "package.json" }} - run: name: Install Node.js dependencies command: npm install - save_cache: - key: dependency-cache-{{ checksum "package.json" }} + key: node-10-dependency-cache-{{ checksum "package.json" }} paths: - node_modules - run: diff --git a/index.js b/index.js index 0679a311..6b443f75 100644 --- a/index.js +++ b/index.js @@ -10,6 +10,8 @@ const options = { log: console, name: 'Origami Registry', repoDataApiKey: process.env.REPO_DATA_API_KEY, + codedocsApiKey: process.env.CODEDOCS_API_KEY, + codedocsEndpoint: process.env.CODEDOCS_ENDPOINT, repoDataApiSecret: process.env.REPO_DATA_API_SECRET, workers: process.env.WEB_CONCURRENCY || 1 }; diff --git a/lib/code-docs/example.js b/lib/code-docs/example.js new file mode 100644 index 00000000..443a8c36 --- /dev/null +++ b/lib/code-docs/example.js @@ -0,0 +1,11 @@ +'use strict'; + +class Example { + constructor(code, type = '', caption = '') { + this.caption = caption ? `${caption}\n` : ''; // newline to render as

with markdown + this.type = type || ''; + this.code = code; + } +} + +module.exports = Example; diff --git a/lib/code-docs/jsdoc/index.js b/lib/code-docs/jsdoc/index.js new file mode 100644 index 00000000..091d4528 --- /dev/null +++ b/lib/code-docs/jsdoc/index.js @@ -0,0 +1,116 @@ +'use strict'; + +const ClassNode = require('./nodes/class'); +const EventNode = require('./nodes/event'); +const FunctionNode = require('./nodes/function'); +const MixinNode = require('./nodes/mixin'); +const NamespaceNode = require('./nodes/namespace'); +const PropertyNode = require('./nodes/property'); +const ModuleNode = require('./nodes/module'); + +/** + * Methods to prepare JsDoc json doclets for display within the registry. + */ +class JsDoc { + /** + * @param {Object[]} doclets - Raw json doclets generated by JSDoc. + */ + constructor(doclets) { + this.doclets = doclets; + } + + /** + * @returns {string[]} Kinds of JSDoc doclets which are supported. + */ + static supportedDoclets() { + return ['class', 'function', 'constant', 'member', 'event', 'namespace', 'mixin', 'module']; + } + + /** + * Format a doclet by removing superfluous properties and adding any custom properties. + * @param {Object} doclet - A raw json doclet generated by JSDoc. + * @returns {Object} Formatted node. + */ + static formatDoclet(doclet) { + switch (doclet.kind) { + case 'class': + return new ClassNode(doclet); + break; + case 'function': + return new FunctionNode(doclet); + break; + case 'constant': + case 'member': + return new PropertyNode(doclet); + break; + case 'event': + return new EventNode(doclet); + break; + case 'namespace': + return new NamespaceNode(doclet); + break; + case 'mixin': + return new MixinNode(doclet); + break; + case 'module': + return new ModuleNode(doclet); + break; + default: + throw new Error(`JsDoc doclet kind "${doclet.kind}" is not supported by the registry.`); + break; + }; + } + + /** + * @returns {Object[]} Formatted nodes. + */ + getNodes() { + if (!this._formattedDoclets) { + const supportedDoclets = this.doclets.filter((doclet) => { + const isNotIndicatedPrivate = doclet.name && doclet.name.indexOf('_') !== 0; + const isSupported = doclet.kind && JsDoc.supportedDoclets().includes(doclet.kind); + const isPublic = doclet.access !== 'private'; + const isDocumented = doclet.undocumented !== true; + return isSupported && isPublic && isNotIndicatedPrivate && isDocumented; + }); + + this._formattedDoclets = supportedDoclets.map((doclet) => { + return JsDoc.formatDoclet(doclet); + }); + } + return this._formattedDoclets; + } + + /** + * @returns {Object[]} Formatted nodes. + */ + getNodesByTypeWithMembers() { + if (!this._formattedDocletsWithMembers) { + this._formattedDocletsWithMembers = JsDoc._addChildNodes(this.getNodes(), {}); + } + return this._formattedDocletsWithMembers; + } + + /** + * Add member nodes to parent nodes. E.g. add function nodes to their corresponding class node. + * @param {Object[]} nodes [{}] - Formatted JSDoc doclets. + * @param {Object|Object[]} parentNodes - Root nodes to add member nodes to (optional). + * @returns {Object[]} Nodes with member nodes grouped by kind e.g. {name: 'Example', type: class, examples: [{}], functions: [{}], properties: [{}]} + * @access private + */ + static _addChildNodes(nodes, parentNodes = {}) { + parentNodes = Array.isArray(parentNodes) ? parentNodes : [parentNodes]; + const nodesWithMembers = parentNodes.map((parentNode) => { + const memberNodes = nodes.filter((node) => node.memberof === parentNode.longname); + return memberNodes.reduce((parentNode, node) => { + JsDoc._addChildNodes(nodes, node); + parentNode[node.group] = parentNode[node.group] || []; + parentNode[node.group].push(node); + return parentNode; + }, parentNode); + }); + return (nodesWithMembers.length === 1 ? nodesWithMembers[0] : nodesWithMembers); + } +} + +module.exports = JsDoc; diff --git a/lib/code-docs/jsdoc/nav.js b/lib/code-docs/jsdoc/nav.js new file mode 100644 index 00000000..23e4be48 --- /dev/null +++ b/lib/code-docs/jsdoc/nav.js @@ -0,0 +1,69 @@ +'use strict'; + +const NavNode = require('../nav-node'); + +/** + * Methods to build a navigation for JSDoc. + */ +class JsDocNav { + + /** + * @param {JsDoc} JsDoc - Raw json doclets generated by JSDoc. + * @returns {NavNode[]} A navigation composing an array of sub-navigations e.g. [{title, items: [{title, link}]}] + */ + static createNavigation(JsDoc) { + const nav = []; + const nodes = JsDoc.getNodes(); + // Add important doclets to the root of the nav with subnavs. + // E.g. add classes with funciton and proeprties as a subnav. + const jsDocByTypeWithMembers = JsDoc.getNodesByTypeWithMembers(); + const docletGroups = [ + { 'name': 'classes', 'subGroups': ['functions', 'properties'] }, + { 'name': 'modules', 'subGroups': ['classes', 'functions', 'properties'] }]; + docletGroups.forEach(docletGroup => { + if (jsDocByTypeWithMembers[docletGroup.name]) { + jsDocByTypeWithMembers[docletGroup.name].forEach((node) => { + nav.push(createSubNav( + `${node.name}`, + [].concat([node], ...docletGroup.subGroups.map(name => node[name])) + )); + }); + } + }); + // Add events to nav, ignoring their hierarchy. + // I.e. Surface events which are not in the global scope. + const eventNodes = nodes.filter(node => node.kind === 'event'); + if (eventNodes.length > 0) { + nav.push(createSubNav('Events', eventNodes)); + } + // Add global nodes which are not already added to the nav. + const globalNodes = nodes.filter(node => node.memberof === undefined && ['class', 'module', 'events'].includes(node.kind) === false); + if (globalNodes.length > 0) { + nav.push(createSubNav('Global', globalNodes)); + } + return nav; + } +} + +/** + * @param {string} title - The title of the subnav. + * @param {Object[]} nodes - Formatted JS doclets to link to from the sub-navigation. + * @returns {NavNode} A sub-navigation e.g. {title, items: [{title, link}]} + * @access private + */ +function createSubNav(title, nodes) { + nodes = nodes || []; + const items = nodes.filter(node => node).map((node) => { + let title = `${node.label}: ${node.name}`; + if (node.kind === 'class' && node.memberof === undefined) { + title = 'Constructor & Overview'; + } + if (node.kind === 'module' && node.memberof === undefined) { + title = 'Overview'; + } + return new NavNode(title, `#${node.longname}`); + }); + return new NavNode(title, items); +} + +module.exports = JsDocNav; diff --git a/lib/code-docs/jsdoc/nodes/base.js b/lib/code-docs/jsdoc/nodes/base.js new file mode 100644 index 00000000..ca4e1c6a --- /dev/null +++ b/lib/code-docs/jsdoc/nodes/base.js @@ -0,0 +1,100 @@ +'use strict'; + +const Example = require('../../example'); +const { URL } = require('url'); + +class BaseNode { + constructor(doclet) { + this.name = doclet.name; + this.longname = doclet.longname; + this.kind = doclet.kind; + this.memberof = doclet.memberof; + this.description = this.replaceLinks(doclet.description) || ''; + this.access = doclet.access || ''; + this.virtual = Boolean(doclet.virtual); + this.file = { + path: doclet.meta && doclet.meta.path ? doclet.meta.path : '', + name: doclet.meta && doclet.meta.filename ? doclet.meta.filename : '' + }; + + if (doclet.meta && isNaN(doclet.meta.lineno) === false) { + this.file.lineno = doclet.meta.lineno; + } + if (doclet.meta && isNaN(doclet.meta.columnno) === false) { + this.file.columnno = doclet.meta.columnno; + } + if (doclet.deprecated) { + this.deprecated = this.replaceLinks(doclet.deprecated); + } + } + + replaceLinks(jsDocComment) { + if (typeof jsDocComment !== 'string') { + return jsDocComment; + } + return jsDocComment.replace(/(?:\[(.*)\])?{@link ([^\s|}]*)\s?(?:[|])?([^}]*)}/g, (match, p1, p2, p3) => { + //{@link namepathOrURL} + let href = p2; + let text = null; + //[link text]{@link namepathOrURL} + text = text || p1; + //{@link namepathOrURL|text} + //{@link namepathOrURL text (after the first space)} + text = text || p3; + // If no text show url/namepath. + text = text || href; + // If unable to construct url assume a JSDoc namepath and turn into a hash. + try { + new URL(href); + } catch (error) { + href = `#${href}`; + } + return `[${text}](${href})`; + }); + } + + addExamples(doclet, target = this) { + target.examples = target.examples || []; + if (Array.isArray(doclet.examples)) { + doclet.examples.forEach((example) => { + let code = example; + let caption; + + /** @see https://github.com/jsdoc3/jsdoc/blob/832dfd704a01fc931ef54ef0a02896d89a5ee9ad/templates/default/publish.js#L470 */ + if (example.match(/^\s*([\s\S]+?)<\/caption>(\s*[\n\r])([\s\S]+)$/i)) { + caption = RegExp.$1; + code = RegExp.$3; + } + + if (typeof code === 'string' && code.length > 1) { + target.examples.push(new Example(code, 'js', caption)); + } + }); + } + } + + addParameters(doclet, target = this) { + target.parameters = target.parameters || []; + if (Array.isArray(doclet.params)) { + doclet.params.forEach((param) => target.parameters.push({ + 'name': param.name, + 'type': param.type && param.type.names ? param.type.names : [], // param can accept multiple types + 'description': param.description || '', + 'default': param.hasOwnProperty('defaultvalue') ? param.defaultvalue : '', + 'optional': typeof param.optional === 'boolean' ? param.optional : '', + 'nullable': typeof param.nullable === 'boolean' ? param.nullable : '' + })); + } + } + + addReturns(doclet, target = this) { + if (doclet.returns) { + target.returns = { + 'type': doclet.returns[0] && doclet.returns[0].type && doclet.returns[0].type.names ? doclet.returns[0].type.names : [], // return can be of multiple types + 'description': doclet.returns[0] && doclet.returns[0].description || '' + }; + } + } +} + +module.exports = BaseNode; diff --git a/lib/code-docs/jsdoc/nodes/class.js b/lib/code-docs/jsdoc/nodes/class.js new file mode 100644 index 00000000..2e2abc15 --- /dev/null +++ b/lib/code-docs/jsdoc/nodes/class.js @@ -0,0 +1,25 @@ +'use strict'; + +const BaseNode = require('./base'); + +class ClassNode extends BaseNode { + constructor(doclet) { + super(doclet); + this.group = 'classes'; + this.label = doclet.meta && doclet.meta.code && doclet.meta.code.type === 'ClassDeclaration' ? 'Class' : 'Constructor Function'; + this.description = this.replaceLinks(doclet.classdesc) || ''; + this.extends = doclet.augments || []; + this.fires = doclet.fires || []; + this.constructor = { + 'name': doclet.name, + 'description': this.replaceLinks(doclet.description) || '', + 'parameters': [ + ], + 'examples': [] + }; + this.addExamples(doclet, this.constructor); + this.addParameters(doclet, this.constructor); + } +}; + +module.exports = ClassNode; diff --git a/lib/code-docs/jsdoc/nodes/event.js b/lib/code-docs/jsdoc/nodes/event.js new file mode 100644 index 00000000..496773cb --- /dev/null +++ b/lib/code-docs/jsdoc/nodes/event.js @@ -0,0 +1,34 @@ +'use strict'; + +const BaseNode = require('./base'); + +class EventNode extends BaseNode { + constructor(doclet) { + super(doclet); + this.group = 'events'; + this.label = 'Event'; + this.type = doclet.type && doclet.type.names ? doclet.type.names : []; + this.addExamples(doclet); + this.addEventProperties(doclet); + } + + /** + * Properties are not always their own doclet. + * When documenting an event properties are nested within the event. + * @see http://usejsdoc.org/tags-event.html#examples + * @param {Object[]} doclets - Raw json doclets generated by JSDoc. + * @returns {Object[]} Filtered doclets. + */ + addEventProperties(doclet) { + this.properties = this.properties || []; + if (Array.isArray(doclet.properties)) { + doclet.properties.forEach((property) => this.properties.push({ + 'name': property.name, + 'type': property.type && property.type.names ? property.type.names : [], + 'description': this.replaceLinks(property.description) || '' + })); + } + } +}; + +module.exports = EventNode; diff --git a/lib/code-docs/jsdoc/nodes/function.js b/lib/code-docs/jsdoc/nodes/function.js new file mode 100644 index 00000000..e98e66fc --- /dev/null +++ b/lib/code-docs/jsdoc/nodes/function.js @@ -0,0 +1,18 @@ +'use strict'; + +const BaseNode = require('./base'); + +class FunctionNode extends BaseNode { + constructor(doclet) { + super(doclet); + this.group = 'functions'; + this.label = ['static', 'instance'].includes(doclet.scope) ? 'Method' : 'Function'; + this.scope = doclet.scope; + this.fires = doclet.fires || []; + this.addExamples(doclet); + this.addParameters(doclet); + this.addReturns(doclet); + } +}; + +module.exports = FunctionNode; diff --git a/lib/code-docs/jsdoc/nodes/mixin.js b/lib/code-docs/jsdoc/nodes/mixin.js new file mode 100644 index 00000000..3d51ddf9 --- /dev/null +++ b/lib/code-docs/jsdoc/nodes/mixin.js @@ -0,0 +1,13 @@ +'use strict'; + +const BaseNode = require('./base'); + +class MixinNode extends BaseNode { + constructor(doclet) { + super(doclet); + this.group = 'mixins'; + this.label = 'Mixin'; + } +}; + +module.exports = MixinNode; diff --git a/lib/code-docs/jsdoc/nodes/module.js b/lib/code-docs/jsdoc/nodes/module.js new file mode 100644 index 00000000..83878933 --- /dev/null +++ b/lib/code-docs/jsdoc/nodes/module.js @@ -0,0 +1,16 @@ +'use strict'; + +const BaseNode = require('./base'); + +class ModuleNode extends BaseNode { + constructor(doclet) { + super(doclet); + this.group = 'modules'; + this.label = 'Module'; + this.addExamples(doclet); + this.addParameters(doclet); + this.addReturns(doclet); + } +}; + +module.exports = ModuleNode; diff --git a/lib/code-docs/jsdoc/nodes/namespace.js b/lib/code-docs/jsdoc/nodes/namespace.js new file mode 100644 index 00000000..f7950431 --- /dev/null +++ b/lib/code-docs/jsdoc/nodes/namespace.js @@ -0,0 +1,13 @@ +'use strict'; + +const BaseNode = require('./base'); + +class NamespaceNode extends BaseNode { + constructor(doclet) { + super(doclet); + this.group = 'namespaces'; + this.label = 'Namespace'; + } +}; + +module.exports = NamespaceNode; diff --git a/lib/code-docs/jsdoc/nodes/property.js b/lib/code-docs/jsdoc/nodes/property.js new file mode 100644 index 00000000..0d1f5bdd --- /dev/null +++ b/lib/code-docs/jsdoc/nodes/property.js @@ -0,0 +1,15 @@ +'use strict'; + +const BaseNode = require('./base'); + +class PropertyNode extends BaseNode { + constructor(doclet) { + super(doclet); + this.group = 'properties'; + this.label = 'Property'; + this.scope = doclet.scope; + this.type = doclet.type && doclet.type.names ? doclet.type.names : []; // multiple types + } +}; + +module.exports = PropertyNode; diff --git a/lib/code-docs/nav-node.js b/lib/code-docs/nav-node.js new file mode 100644 index 00000000..86912d3c --- /dev/null +++ b/lib/code-docs/nav-node.js @@ -0,0 +1,31 @@ +'use strict'; + +class NavNode { + constructor(title, link = null, subItems = []) { + subItems = arguments.length === 2 && Array.isArray(link) ? link : subItems; + this.title = title; + this.items = subItems; + if (typeof(link) === 'string') { + this.link = link; + } + } + + addItem(navNode) { + this.items.push(navNode); + } + + getItems() { + return this.items; + } + + getLastItem() { + const lastIndex = this.items.length - 1; + return this.items[lastIndex]; + } + + hasItems() { + return Boolean(this.items.length); + } +} + +module.exports = NavNode; diff --git a/lib/code-docs/readme/index.js b/lib/code-docs/readme/index.js new file mode 100644 index 00000000..fae4d7db --- /dev/null +++ b/lib/code-docs/readme/index.js @@ -0,0 +1,98 @@ +'use strict'; + +const showdown = require('showdown'); +const cheerio = require('cheerio'); +const NavNode = require('../nav-node'); +const { URL } = require('url'); + +class ReadMe { + + constructor(markdown, currentHost = undefined) { + const converter = new showdown.Converter({ simplifiedAutoLink: true }); + converter.setFlavor('github'); + // Workaround for https://github.com/showdownjs/showdown/pull/569 + // Remove space between start of code block and language declaration. + markdown = markdown.replace(/(?:^|\n)(```+|~~~+)( +)([^\s`~]*)\n/g, function (wholeMatch, delim, spaces, language) { + return `\n${delim}${language}\n`; + }); + this.html = converter.makeHtml(markdown); + this.markdown = markdown; + this.removeNav(); + this.formatCode(); + this.formatTables(); + this.formatAnchors(currentHost); + } + + toString() { + return this.html; + } + + createNavigation() { + const $ = cheerio.load(this.html); + const rootNavNode = new NavNode('Readme'); + $('h2, h3').each((index, element) => { + const link = `#${$(element).attr('id')}`; + const title = $(element).text(); + if ($(element).is('h2')) { + // Add h2 nav element to root nav element. + rootNavNode.addItem(new NavNode(title, link)); + } else if (rootNavNode.hasItems()) { + // Add h3 nav element to previous h2 nav element. + rootNavNode.getLastItem().addItem(new NavNode(title, link)); + } + }); + return [rootNavNode]; + } + + removeNav() { + const $ = cheerio.load(this.html); + const nav = $('ul').first(); + const listHtml = nav && nav.html() ? nav.html().toLowerCase() : ''; + // Assume the list we found is a nav if it contains a link we expect. + if (listHtml.indexOf('usage') || listHtml.indexOf('javascript') || listHtml.indexOf('sass')) { + nav.remove(); + } + this.html = $.html(); + } + + formatCode() { + const $ = cheerio.load(this.html); + $('code').each(function () { + const language = $(this).attr('class') ? $(this).attr('class').match('language-([a-z]*)')[1] : null; + if (language) { + const newLanguage = language === 'sass' ? 'scss' : language; + $(this).removeClass(`language-${language}`); + $(this).removeClass(language); + $(this).addClass(`o-syntax-highlight--${newLanguage}`); + } + const preTag = $(this).parent('pre'); + if (preTag.length) { + preTag.wrap($('

')); + } else { + $(this).wrap($('')); + } + }); + this.html = $.html(); + } + + formatTables() { + const $ = cheerio.load(this.html); + $('table').addClass('o-table o-table--responsive-scroll').wrap($('
')); + this.html = $.html(); + } + + formatAnchors(currentHost) { + const $ = cheerio.load(this.html); + $('a').not((index, element) => $(element).has('img').length > 0).each(function () { + try { + const url = new URL($(this).attr('href')); + $(this).addClass(url.hostname === currentHost ? 'link' : 'link-external'); + } catch (error) { + $(this).addClass('link'); + } + }); + this.html = $.html(); + } +} + +module.exports = ReadMe; diff --git a/lib/code-docs/sassdoc/index.js b/lib/code-docs/sassdoc/index.js new file mode 100644 index 00000000..3e32c99d --- /dev/null +++ b/lib/code-docs/sassdoc/index.js @@ -0,0 +1,97 @@ +'use strict'; + +const sassDocExtras = require('sassdoc-extras'); +const MixinNode = require('./nodes/mixin'); +const FunctionNode = require('./nodes/function'); +const VariableNode = require('./nodes/variable'); + +class SassDoc { + + constructor(componentName, brand, doclets) { + this.brand = brand; + this.doclets = doclets; + this.groupNameAliases = { + 'undefined': componentName, + }; + } + + getNodesByKind() { + return this.getNodes().filter(item => item.kind).reduce((nodeByKind, item) => { + nodeByKind[item.kind] = nodeByKind[item.kind] || []; + nodeByKind[item.kind].push(item); + return nodeByKind; + }, {}); + } + + /** + * @returns {string[]} Kinds of SassDoc doclets which are supported. + */ + static supportedDoclets() { + return ['mixin', 'function', 'variable']; + } + + /** + * Format a doclet by removing superfluous properties and adding any custom properties. + * @param {Object} doclet - A raw json doclet generated by SassDoc. + * @returns {Object} Formatted node. + */ + static formatDoclet(doclet) { + switch (doclet.context.type) { + case 'mixin': + return new MixinNode(doclet); + break; + case 'function': + return new FunctionNode(doclet); + break; + case 'variable': + return new VariableNode(doclet); + break; + case 'placeholder': + default: + throw new Error(`SassDoc type "${doclet.context.type}" is not supported by the registry.`); + break; + }; + } + + getNodes() { + if (! this._formattedDoclets) { + // Apply default values for groups and display. + const context = { + display: { + access: ['public'], + }, + groups: this.groupNameAliases, + data: this.doclets + }; + + // Remove any non-public doclets (configured above by the 'display' property). + // http://sassdoc.com/extra-tools/#display-toggle-display + sassDocExtras.display(context); + // Customise @group names (configured above by the 'groups' above). + // http://sassdoc.com/extra-tools/#groups-aliases-groupname + sassDocExtras.groupName(context); + // Remove doclet kinds the registry does not recognise or support. E.g. placeholders. + // These cause Origami users issues so are hidden. If used at all, placeholders should be internal to Origami only. + // https://github.com/Financial-Times/ft-origami/issues/205 + // https://github.com/Financial-Times/ft-origami/issues/293 + context.data = context.data.filter(doclet => doclet.context && SassDoc.supportedDoclets().includes(doclet.context.type)); + // Filter out doclets that are not for the current brand. + context.data = context.data.filter((doclet) => { + const hasSupportedBrands = doclet.brand && doclet.brand.supported && doclet.brand.supported.length > 0; + return doclet.brand === undefined || hasSupportedBrands === false || hasSupportedBrands && doclet.brand.supported.includes(this.brand); + }); + // Filter out doclets which are implicity private. + context.data = context.data.filter((doclet) => { + if (doclet.context && doclet.context.name) { + return doclet.context.name.indexOf('_') !== 0; + } + return true; + }); + // Format data for registry use. + this._formattedDoclets = context.data.map(doclet => SassDoc.formatDoclet(doclet)); + } + return this._formattedDoclets; + } +} + +module.exports = SassDoc; diff --git a/lib/code-docs/sassdoc/nav.js b/lib/code-docs/sassdoc/nav.js new file mode 100644 index 00000000..dd4fdb0a --- /dev/null +++ b/lib/code-docs/sassdoc/nav.js @@ -0,0 +1,25 @@ +'use strict'; + +const NavNode = require('../nav-node'); + +class SassDocNav { + static createNavigation(sassDoc) { + const nodesByType = sassDoc.getNodesByKind(); + const navOrder = ['mixin', 'function', 'variable']; + return Object.entries(nodesByType).sort( + (a, b) => navOrder.indexOf(a[0]) < 0 || (navOrder.indexOf(a[0]) > navOrder.indexOf(b[0])) ? 1 : -1 + ).map(entry => { + const type = entry[0]; + const nodes = entry[1]; + const title = `${type}s`; + const formattedTitle = title.charAt(0).toUpperCase() + title.slice(1); + const items = nodes.map((node) => new NavNode(node.name, `#${node.longname}`)); + return new NavNode( + formattedTitle, + items + ); + }); + } +} + +module.exports = SassDocNav; diff --git a/lib/code-docs/sassdoc/nodes/base.js b/lib/code-docs/sassdoc/nodes/base.js new file mode 100644 index 00000000..4be70f65 --- /dev/null +++ b/lib/code-docs/sassdoc/nodes/base.js @@ -0,0 +1,92 @@ +'use strict'; + +const Example = require('../../example'); + +class BaseNode { + constructor(doclet) { + const groupKey = Array.isArray(doclet.group) ? doclet.group[0] : undefined; + const docletContext = doclet.context || {}; + this.name = docletContext.name || ''; + this.description = doclet.description || ''; + this.longname = [groupKey, docletContext.type, docletContext.name].filter(part => part && part !== 'undefined').join('-'); + this.file = { + path: doclet.file && doclet.file.path ? doclet.file.path : '', + name: doclet.file && doclet.file.name ? doclet.file.name : '' + }; + if (doclet.context && doclet.context.line && doclet.context.line.start) { + this.file.lineno = doclet.context.line.start; + } + if (Array.isArray(doclet.group)) { + const groupName = doclet.groupName && doclet.groupName[groupKey] ? doclet.groupName[groupKey] : ''; + this.group = {}; + this.group.key = groupKey || ''; + this.group.name = groupName || this.group.key; + } + if (doclet.brand && Array.isArray(doclet.brand.supported) && doclet.brand.supported.length > 0) { + this.brand = { + description: doclet.brand.description || '', + supported: doclet.brand.supported, + }; + } + if (doclet.deprecated) { + this.deprecated = doclet.deprecated; + } + this.addLinks(doclet); + this.addExamples(doclet); + } + + addAliases(doclet) { + this.aliases = this.aliases || []; + if (Array.isArray(doclet.aliased)) { + this.aliases = doclet.aliased; + } + } + + addLinks(doclet) { + this.links = this.links || []; + if (Array.isArray(doclet.link)) { + doclet.link.filter(link => link.url).forEach((link) => { + this.links.push({ + url: link.url, + caption: link.caption || '' + }); + }); + } + } + + addParameters(doclet) { + this.parameters = this.parameters || []; + if (Array.isArray(doclet.parameter)) { + doclet.parameter.forEach((parameter, index) => { + const nodeParameter = { + name: parameter.name || `[param #${index + 1}]`, + type: this.parseTypes(parameter.type), + description: parameter.description || '', + optional: Boolean(parameter.default) + }; + if (parameter.default) { + nodeParameter.default = parameter.default; + } + this.parameters.push(nodeParameter); + }); + } + } + + addExamples(doclet) { + this.examples = this.examples || []; + if (Array.isArray(doclet.example)) { + doclet.example.forEach(example => { + if (typeof example.code === 'string' && example.code.length > 1) { + this.examples.push(new Example(example.code, example.type, example.description)); + } + }); + } + } + + parseTypes(typeString) { + return typeString ? typeString.split('|').map((type => type.trim())) : []; + } +} + +module.exports = BaseNode; + diff --git a/lib/code-docs/sassdoc/nodes/function.js b/lib/code-docs/sassdoc/nodes/function.js new file mode 100644 index 00000000..322d89d6 --- /dev/null +++ b/lib/code-docs/sassdoc/nodes/function.js @@ -0,0 +1,18 @@ +'use strict'; + +const BaseNode = require('./base'); + +class FunctionNode extends BaseNode { + constructor(doclet) { + super(doclet); + this.kind = 'function'; + this.return = { + types: this.parseTypes(doclet.return && doclet.return.type ? doclet.return.type : ''), + description: doclet.return && doclet.return.description ? doclet.return.description : '', + }; + this.addAliases(doclet); + this.addParameters(doclet); + } +}; + +module.exports = FunctionNode; diff --git a/lib/code-docs/sassdoc/nodes/mixin.js b/lib/code-docs/sassdoc/nodes/mixin.js new file mode 100644 index 00000000..e3418161 --- /dev/null +++ b/lib/code-docs/sassdoc/nodes/mixin.js @@ -0,0 +1,16 @@ +'use strict'; + +const BaseNode = require('./base'); + +class MixinNode extends BaseNode { + constructor(doclet) { + super(doclet); + this.kind = 'mixin'; + this.output = doclet.output || ''; + this.content = doclet.content || ''; + this.addAliases(doclet); + this.addParameters(doclet); + } +}; + +module.exports = MixinNode; diff --git a/lib/code-docs/sassdoc/nodes/variable.js b/lib/code-docs/sassdoc/nodes/variable.js new file mode 100644 index 00000000..ff3cac91 --- /dev/null +++ b/lib/code-docs/sassdoc/nodes/variable.js @@ -0,0 +1,14 @@ +'use strict'; + +const BaseNode = require('./base'); + +class VariableNode extends BaseNode { + constructor(doclet) { + super(doclet); + this.kind = 'variable'; + this.types = this.parseTypes(doclet.type); + this.addAliases(doclet); + } +}; + +module.exports = VariableNode; diff --git a/lib/helpers/index.js b/lib/helpers/index.js index f338b6fc..61cc1c25 100644 --- a/lib/helpers/index.js +++ b/lib/helpers/index.js @@ -1,4 +1,5 @@ 'use strict'; +const showdown = require('showdown'); function capitalise(string) { return string.charAt(0).toUpperCase() + string.slice(1); @@ -54,6 +55,19 @@ function json(value) { return JSON.stringify(value); } +function markdown(value, headerLevelStart = 1) { + const converter = new showdown.Converter({ + headerLevelStart, + simplifiedAutoLink: true + }); + return converter.makeHtml(value); +} + +function increment(value) { + return parseInt(value) + 1; +}; + + module.exports = { capitalise, ifAny, @@ -62,5 +76,7 @@ module.exports = { ifEither, json, slugify, - unlessEquals + unlessEquals, + markdown, + increment }; diff --git a/lib/routes/components.js b/lib/routes/components.js index d9d498f6..fccac770 100644 --- a/lib/routes/components.js +++ b/lib/routes/components.js @@ -6,6 +6,11 @@ const express = require('express'); const requestUrl = require('request-promise-native'); const repoListing = require('../repo-listing'); const prism = require('prismjs'); +const JsDoc = require('../code-docs/jsdoc'); +const Sassdoc = require('../code-docs/sassdoc'); +const JsDocNav = require('../code-docs/jsdoc/nav'); +const SassDocNav = require('../code-docs/sassdoc/nav'); +const ReadMe = require('../code-docs/readme'); module.exports = app => { @@ -15,6 +20,90 @@ module.exports = app => { staleIfError: '7 days' }); + const findBrand = (request, response, next) => { + // Set the current brand based on the query string, + // as long as the component is branded + let currentBrand = 'master'; + const requestedBrand = request.query.brand; + if (request.component && request.component.brands && request.component.brands.length) { + + // When a brand is set via the querystring + if (requestedBrand) { + if (request.component.brands.includes(requestedBrand)) { + currentBrand = requestedBrand; + } else { + throw httpError(404); + } + + // Default brand + } else { + if (request.component.brands.includes('master')) { + currentBrand = 'master'; + } else { + // If the component does not support masterbrand, + // we should default to the first brand it announces + // support for + currentBrand = request.component.brands[0]; + } + } + } + + request.currentBrand = currentBrand; + next(); + }; + + const findComponent = async (request, response, next) => { + const [componentName, componentVersion] = request.params.componentId.split('@'); + + try { + // Get all versions of the component so we already have the listing + const versions = await app.repoData.listVersions(componentName); + request.versions = versions; + let component; + let mustRedirect = false; + + // Select the requested version of the component + if (!componentVersion || componentVersion === 'latest') { + component = versions[0]; + mustRedirect = true; + } else { + component = versions.find(version => version.version === componentVersion); + } + + // Redirect if we don't have a component version + if (mustRedirect) { + // Replace component id with version to redirect to: + // components/[componentId]/rest/of/path + return response.redirect(307, request.url.replace( + /^(\/components\/([^\/])*)/g, + `/components/${component.name}@${component.version}` + )); + } + + // Check that we actually have a component + if (!component) { + throw httpError(404); + } + + // Check for component languages + if (component.languages) { + component.hasCSS = (component.languages.includes('css') || component.languages.includes('scss') || component.languages.includes('sass')); + component.hasJS = component.languages.includes('js'); + }; + + request.component = component; + next(); + } catch (error) { + if (error.status === 404) { + response.locals.requestedBrand = request.brand; + response.locals.missingComponentName = componentName; + response.locals.missingComponentVersion = componentVersion || 'latest'; + } + next(error); + } + + }; + // Component listing page app.get('/components', cacheForFiveMinutes, express.urlencoded({extended: false}), async (request, response, next) => { try { @@ -50,67 +139,13 @@ module.exports = app => { } }); - // Individual component page - app.get('/components/:componentId', cacheForFiveMinutes, async (request, response, next) => { - const [componentName, componentVersion] = request.params.componentId.split('@'); - const requestedBrand = request.query.brand || null; - try { - - // Get all versions of the component so we already have the listing - const versions = await app.repoData.listVersions(componentName); - let component; - let mustRedirect = false; - - // Select the requested version of the component - if (!componentVersion || componentVersion === 'latest') { - component = versions[0]; - mustRedirect = true; - } else { - component = versions.find(version => version.version === componentVersion); - } - - // Check that we actually have a component - if (!component) { - throw httpError(404); - } - - // Check for component languages - if (component.languages) { - component.hasCSS = (component.languages.includes('css') || component.languages.includes('scss') || component.languages.includes('sass')); - component.hasJS = component.languages.includes('js'); - }; - - // Redirect if we don't have a component version - if (mustRedirect) { - return response.redirect(307, `${request.basePath}components/${component.name}@${component.version}`); - } - - // Set the current brand based on the query string, - // as long as the component is branded - let currentBrand = 'master'; - if (component.brands && component.brands.length) { - - // When a brand is set via the querystring - if (requestedBrand) { - if (component.brands.includes(requestedBrand)) { - currentBrand = requestedBrand; - } else { - throw httpError(404); - } - - // Default brand - } else { - if (component.brands.includes('master')) { - currentBrand = 'master'; - } else { - // If the component does not support masterbrand, - // we should default to the first brand it announces - // support for - currentBrand = component.brands[0]; - } - } - } + // Individual component page demo + app.get('/components/:componentId', cacheForFiveMinutes, findComponent, findBrand, async (request, response, next) => { + const component = request.component; + const versions = request.versions; + const currentBrand = request.currentBrand; + try { // Load dependencies let dependencies; if (component.resources.dependencies) { @@ -170,9 +205,6 @@ module.exports = app => { } } - // Check whether a component has brands/should display the brand tabs - component.hasBrands = (component.brands && component.brands.length); - // Render the component page response.render('component', { title: `${component.name} - ${app.ft.options.name}`, @@ -183,15 +215,130 @@ module.exports = app => { images, service, versions, - currentBrand + currentBrand, + nav: 'demos' }); } catch (error) { - if (error.status === 404) { - response.locals.requestedBrand = requestedBrand; - response.locals.missingComponentName = componentName; - response.locals.missingComponentVersion = componentVersion || 'latest'; - } + next(error); + } + }); + + // Individual component JsDoc page + app.get('/components/:componentId/jsdoc', cacheForFiveMinutes, findComponent, findBrand, async (request, response, next) => { + const component = request.component; + const versions = request.versions; + const currentBrand = request.currentBrand; + let jsDocData; + try { + jsDocData = await requestUrl({ + uri: `${app.ft.options.codedocsEndpoint}/jsdoc/${request.params.componentId}`, + headers: { + 'x-api-key': app.ft.options.codedocsApiKey + }, + json: true + }); + } catch (error) { + const registryError = new Error(`Unable to load jsdocs for ${request.params.componentId}.`); + registryError.statusCode = error.statusCode === 404 ? 404 : 503; + registryError.message = error.statusCode === undefined ? registryError.message : `${registryError.message} Recieved a ${error.statusCode} response when requesting codedocs.`; + next(registryError); + } + // Object with nodes by type with nested member nodes (e.g. classes with functions and property nodes attached). + const componentJsDoc = new JsDoc(jsDocData); + const jsDocByTypeWithMembers = componentJsDoc.getNodesByTypeWithMembers(); + // Member nodes (e.g. property nodes which belong to a function node). + const allNodes = componentJsDoc.getNodes(); + const memberJsDocs = allNodes.filter(doclet => doclet.memberof !== undefined); + // Generate navigation. + const navItems = JsDocNav.createNavigation(componentJsDoc); + // Find a default node which will be rendered before a selection is made. + const defaultNode = allNodes.find(node => + node.name && + node.name.toLowerCase() === `${component.name.replace('-', '')}` + ); + try { + response.render('jsdoc', { + title: `${component.name} JsDoc - ${app.ft.options.name}`, + component, + versions, + currentBrand, + jsDocByTypeWithMembers, + memberJsDocs, + defaultNode, + navItems, + nav: 'jsdoc' + }); + } catch (error) { + next(error); + } + }); + + // Individual component SassDoc page + app.get('/components/:componentId/sassdoc', cacheForFiveMinutes, findComponent, findBrand, async (request, response, next) => { + const component = request.component; + const versions = request.versions; + const currentBrand = request.currentBrand; + let sassDocData; + try { + sassDocData = await requestUrl({ + uri: `${app.ft.options.codedocsEndpoint}/sassdoc/${request.params.componentId}`, + headers: { + 'x-api-key': app.ft.options.codedocsApiKey + }, + json: true + }); + } catch (error) { + const registryError = new Error(`Unable to load sassdoc for ${request.params.componentId}.`); + registryError.statusCode = error.statusCode === 404 ? 404 : 503; + registryError.message = error.statusCode === undefined ? registryError.message : `${registryError.message} Recieved a ${error.statusCode} response when requesting codedocs.`; + next(registryError); + } + const componentSassDoc = new Sassdoc(component.name, currentBrand, sassDocData); + const sassDocNodes = componentSassDoc.getNodes(); + const navItems = SassDocNav.createNavigation(componentSassDoc); + // Find a default node which will be rendered before a selection is made. + const defaultNode = sassDocNodes.find(node => + node.name && + node.name.toLowerCase() === `${component.name.replace('-', '')}` || + node.name.toLowerCase() === `${component.name.replace('-', '')}all` + ); + try { + response.render('sassdoc', { + title: `${component.name} SassDoc - ${app.ft.options.name}`, + component, + versions, + currentBrand, + sassDocNodes, + defaultNode, + navItems, + nav: 'sassdoc' + }); + } catch (error) { + next(error); + } + }); + + // Individual component readme page + app.get('/components/:componentId/readme', cacheForFiveMinutes, findComponent, findBrand, async (request, response, next) => { + const component = request.component; + const versions = request.versions; + const currentBrand = request.currentBrand; + try { + const readmeMarkdown = await app.repoData.getMarkdown(component.repo, component.id, 'readme'); + const readme = new ReadMe(readmeMarkdown, request.headers.host); + const navItems = readme.createNavigation(); + + response.render('readme', { + title: `${component.name} README - ${app.ft.options.name}`, + component, + versions, + currentBrand, + readme, + navItems, + nav: 'readme' + }); + } catch (error) { next(error); } }); diff --git a/package-lock.json b/package-lock.json index 22461912..a4eca61a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,32 +9,32 @@ "resolved": "https://registry.npmjs.org/@financial-times/express-web-service/-/express-web-service-3.4.4.tgz", "integrity": "sha512-ARz6eu3/OODyE92avlXXt9kvP960ytWKf0oWDYSgQXJ9ICg5Yi5frrKJFwqsab5EbYEzIMGtoIAyOzcSXkwHhA==", "requires": { - "@financial-times/origami-service-makefile": "6.1.1", - "lodash": "4.17.4" + "@financial-times/origami-service-makefile": "^6.0.1", + "lodash": "^4.17.4" } }, "@financial-times/grafana-tools": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@financial-times/grafana-tools/-/grafana-tools-1.0.0.tgz", - "integrity": "sha1-I1cDLHTHthO5tesAlar3dyjntoM=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@financial-times/grafana-tools/-/grafana-tools-1.0.1.tgz", + "integrity": "sha512-LQO642H7YdcSACQ4lE2lIA00PF8EIzcDj43fy6MiZQkGXk3eV7E6eij2eHejcUFfN0SpdRm89+psD4FF80ebVQ==", "dev": true, "requires": { - "chalk": "1.1.3", - "commander": "2.13.0", - "isomorphic-fetch": "2.2.1", - "node.extend": "1.1.6" + "chalk": "^1.1.3", + "commander": "^2.9.0", + "isomorphic-fetch": "^2.2.1", + "node.extend": "^1.1.6" } }, "@financial-times/health-check": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@financial-times/health-check/-/health-check-1.3.0.tgz", - "integrity": "sha512-z5axSvOVraB8aCqqo0dXpxA7RvwKjEIzlbMLC31RkC+dmHtqgWAPCzsPf8MjoKLxROW/XpgFTsNOdCGwglRfUg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@financial-times/health-check/-/health-check-1.4.0.tgz", + "integrity": "sha512-E0oij+BWcMTmGEoC4TdXfqZnngtXD+rNNVXy8+yPxGrhW1VzsFyBbF8GZm2eofJy6OgLBNJBQgr4Dsk2K6msOA==", "requires": { - "diskusage": "0.2.4", - "lodash": "4.17.4", - "request": "2.83.0", - "request-promise-native": "1.0.5", - "usage": "0.7.1" + "diskusage": "^0.2.1", + "lodash": "^4.17.2", + "request": "^2.83.0", + "request-promise-native": "^1.0.5", + "usage": "^0.7.1" } }, "@financial-times/n-logger": { @@ -42,51 +42,20 @@ "resolved": "https://registry.npmjs.org/@financial-times/n-logger/-/n-logger-5.7.2.tgz", "integrity": "sha1-tR/WW6c4FdklaEQUl2yQOIUZsU8=", "requires": { - "isomorphic-fetch": "2.2.1", - "request": "2.83.0", - "winston": "2.4.4" + "isomorphic-fetch": "^2.2.1", + "request": "^2.83.0", + "winston": "^2.4.0" } }, "@financial-times/origami-repo-data-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@financial-times/origami-repo-data-client/-/origami-repo-data-client-1.4.0.tgz", - "integrity": "sha512-4QHLrLwsUvhZGFlyFbovGVSD5p2R9DOu1sJ94S2HAf01BFdIFBurdRvANsRINesCWGmZ3E7w7hXZZjodEPlIEA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@financial-times/origami-repo-data-client/-/origami-repo-data-client-1.4.1.tgz", + "integrity": "sha512-dzK/nlH6xTjjosoGrgLNd52HwrC21zdQI3+rLRqeg/x85zQDUQGJteqMVzdvT6rFg5QPRP81ZQ2O6j2sTmdRIA==", "requires": { - "@financial-times/origami-service-makefile": "6.1.1", - "lodash": "4.17.4", - "request": "2.85.0", - "request-promise-native": "1.0.5" - }, - "dependencies": { - "request": { - "version": "2.85.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", - "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.1", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" - } - } + "@financial-times/origami-service-makefile": "^6.1.0", + "lodash": "^4.17.4", + "request": "^2.85.0", + "request-promise-native": "^1.0.5" } }, "@financial-times/origami-service": { @@ -94,30 +63,56 @@ "resolved": "https://registry.npmjs.org/@financial-times/origami-service/-/origami-service-4.0.0.tgz", "integrity": "sha512-sfSCGcMT+hCsGneDzCr2vd9T6kXVIoXE+Vag2J8Bzd20q20xtID3BPTnOKGaterQj7cGGisu9k7FJA9VBnwRkw==", "requires": { - "@financial-times/express-web-service": "3.4.4", - "express": "4.16.3", - "express-handlebars": "3.0.0", - "http-errors": "1.6.2", - "lodash": "4.17.4", - "morgan": "1.9.1", - "ms": "2.1.1", - "next-metrics": "3.0.3", - "raven": "2.6.4", - "request": "2.83.0", - "request-promise-native": "1.0.5", - "require-all": "2.2.0", - "varname": "2.0.3" + "@financial-times/express-web-service": "^3.3.1", + "express": "^4.16.0", + "express-handlebars": "^3.0.0", + "http-errors": "^1.6.2", + "lodash": "^4.17.4", + "morgan": "^1.9.0", + "ms": "^2.0.0", + "next-metrics": "^3.0.3", + "raven": "^2.2.1", + "request": "^2.83.0", + "request-promise-native": "^1.0.5", + "require-all": "^2.2.0", + "varname": "^2.0.3" } }, "@financial-times/origami-service-makefile": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@financial-times/origami-service-makefile/-/origami-service-makefile-6.1.1.tgz", - "integrity": "sha1-D33dluq2OXPW+9JOq/Flwdj5Fk8=" + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@financial-times/origami-service-makefile/-/origami-service-makefile-6.2.1.tgz", + "integrity": "sha512-swPi5Gmac7jd19k/tiDk7p8aYjeQFJQ7vimEvOzTlANLbK8URI5eDgU0e5JxH7QgHSmuoyzg86lT67GPaB8veg==", + "requires": { + "esm": "^3.0.18" + } + }, + "@sinonjs/formatio": { + "version": "2.0.0", + "resolved": "http://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", + "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", + "dev": true, + "requires": { + "samsam": "1.3.0" + } + }, + "@sinonjs/samsam": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-2.1.0.tgz", + "integrity": "sha512-5x2kFgJYupaF1ns/RmharQ90lQkd2ELS8A9X0ymkAAdemYHGtI2KiUHG8nX2WU0T1qgnOU5YMqnBM2V7NUanNw==", + "dev": true, + "requires": { + "array-from": "^2.1.1" + } + }, + "@types/node": { + "version": "10.11.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.11.3.tgz", + "integrity": "sha512-3AvcEJAh9EMatxs+OxAlvAEs7OTy6AG94mcH1iqyVDwVVndekLxzwkWQ/Z4SDbY6GO2oyUXyWW8tQ4rENSSQVQ==" }, "abab": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", - "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", + "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", "dev": true }, "abbrev": { @@ -131,66 +126,66 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "2.1.20", + "mime-types": "~2.1.18", "negotiator": "0.6.1" - }, - "dependencies": { - "mime-db": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", - "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==" - }, - "mime-types": { - "version": "2.1.20", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", - "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", - "requires": { - "mime-db": "1.36.0" - } - } } }, "acorn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.3.0.tgz", - "integrity": "sha512-Yej+zOJ1Dm/IMZzzj78OntP/r3zHEaKcyNoU2lAaxPtrseM6rF0xwqoz5Q5ysAiED9hTjI2hgtvLXitlCN1/Ug==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", "dev": true }, "acorn-globals": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", - "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.0.tgz", + "integrity": "sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw==", "dev": true, "requires": { - "acorn": "5.3.0" + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "acorn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.2.tgz", + "integrity": "sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg==", + "dev": true + } } }, "acorn-jsx": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "resolved": "http://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "3.3.0" + "acorn": "^3.0.4" }, "dependencies": { "acorn": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", "dev": true } } }, + "acorn-walk": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.0.tgz", + "integrity": "sha512-ugTb7Lq7u4GfWSqqpwE0bGyoBZNMTok/zDBXxfEG0QM50jNlGhIWjRC1pPN7bvV1anhF+bs+/gNcRw+o55Evbg==", + "dev": true + }, "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "ajv-keywords": { @@ -205,20 +200,19 @@ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "dev": true, "requires": { - "string-width": "2.1.1" + "string-width": "^2.0.0" } }, "ansi-escapes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", - "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", "dev": true }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "ansi-styles": { "version": "2.2.1", @@ -232,17 +226,17 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "3.1.5", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -274,6 +268,12 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", + "dev": true + }, "array-map": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", @@ -292,7 +292,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -319,9 +319,12 @@ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" }, "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } }, "assert-plus": { "version": "1.0.0", @@ -339,14 +342,7 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "requires": { - "lodash": "4.17.11" - }, - "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - } + "lodash": "^4.17.10" } }, "async-each": { @@ -367,9 +363,9 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", - "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, "aws-sign2": { @@ -378,9 +374,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "babel-code-frame": { "version": "6.26.0", @@ -388,9 +384,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, "balanced-match": { @@ -404,13 +400,53 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.0", - "pascalcase": "0.1.1" + "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" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } } }, "basic-auth": { @@ -419,28 +455,21 @@ "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", "requires": { "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } } }, "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", + "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", "dev": true }, "bindings": { @@ -454,24 +483,39 @@ "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.2", + "depd": "~1.1.1", + "http-errors": "~1.6.2", "iconv-lite": "0.4.19", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "1.6.16" + "type-is": "~1.6.15" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + } } }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "requires": { - "hoek": "4.2.0" - } + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" }, "boxen": { "version": "1.3.0", @@ -479,84 +523,88 @@ "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", "dev": true, "requires": { - "ansi-align": "2.0.0", - "camelcase": "4.1.0", - "chalk": "2.3.0", - "cli-boxes": "1.0.0", - "string-width": "2.1.1", - "term-size": "1.2.0", - "widest-line": "2.0.0" + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^3.0.0" } } } }, "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.0.tgz", - "integrity": "sha512-P4O8UQRdGiMLWSizsApmXVQDBS6KCt7dSexgLKBmH5Hr1CZq7vsnscFh8oR1sP1ab1Zj0uCHCEzZeV6SfUf3rA==", - "dev": true, - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "define-property": "1.0.0", - "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.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.1" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "browser-process-hrtime": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", - "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", + "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", "dev": true }, "browser-stdout": { @@ -565,6 +613,12 @@ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", "dev": true }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -576,15 +630,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "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" + "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" } }, "caller-path": { @@ -593,7 +647,7 @@ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "0.2.0" + "callsites": "^0.2.0" } }, "callsites": { @@ -602,10 +656,15 @@ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", "dev": true }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + }, "capture-stack-trace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", - "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", "dev": true }, "caseless": { @@ -615,15 +674,32 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "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" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "chardet": { @@ -637,25 +713,46 @@ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" }, - "chokidar": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.0.tgz", - "integrity": "sha512-OgXCNv2U6TnG04D3tth0gsvdbV4zdbxFG3sYUqcoQMoEFVd1j1pZR6TZ8iknC45o9IJ6PeQI/J6wT/+cHcniAw==", - "dev": true, + "cheerio": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.0", - "fsevents": "1.1.3", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" } }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "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" + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, "circular-json": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", @@ -668,10 +765,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -680,65 +777,8 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-descriptor": "^0.1.0" } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, @@ -754,7 +794,7 @@ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" } }, "cli-width": { @@ -764,14 +804,24 @@ "dev": true }, "clipboard": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-1.7.1.tgz", - "integrity": "sha1-Ng1taUbpmnof7zleQrqStem1oWs=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.1.tgz", + "integrity": "sha512-7yhQBmtN+uYZmfRjjVjKa0dZdWuabzpSKGtyQZN+9C8xlC788SSJjOHWh7tzurfwTqTD5UDYAhIv5fRJg3sHjQ==", "optional": true, "requires": { - "good-listener": "1.2.2", - "select": "1.1.2", - "tiny-emitter": "2.0.2" + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" } }, "co": { @@ -779,20 +829,25 @@ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" @@ -810,18 +865,17 @@ "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" }, "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" }, "component-emitter": { "version": "1.2.1", @@ -835,28 +889,29 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "configstore": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz", - "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", "dev": true, "requires": { - "dot-prop": "4.2.0", - "graceful-fs": "4.1.11", - "make-dir": "1.1.0", - "unique-string": "1.0.0", - "write-file-atomic": "2.3.0", - "xdg-basedir": "3.0.0" + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" } }, "content-disposition": { @@ -869,12 +924,6 @@ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, - "content-type-parser": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", - "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==", - "dev": true - }, "cookie": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", @@ -886,9 +935,9 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "cookiejar": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.1.tgz", - "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", "dev": true }, "copy-descriptor": { @@ -908,18 +957,17 @@ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", "dev": true, "requires": { - "capture-stack-trace": "1.0.0" + "capture-stack-trace": "^1.0.0" } }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypt": { @@ -927,43 +975,41 @@ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "requires": { - "boom": "5.2.0" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "requires": { - "hoek": "4.2.0" - } - } - } - }, "crypto-random-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", "dev": true }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=" + }, "cssom": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", - "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.4.tgz", + "integrity": "sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==", "dev": true }, "cssstyle": { - "version": "0.2.37", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", - "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.1.1.tgz", + "integrity": "sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog==", "dev": true, "requires": { - "cssom": "0.3.2" + "cssom": "0.3.x" } }, "cycle": { @@ -976,7 +1022,31 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.0.1.tgz", + "integrity": "sha512-0HdcMZzK6ubMUnsMmQmG0AcLQPvbvb47R0+7CCZQCYgcd8OUWG91CG7sM6GoXgjz+WLl4ArFzHtBMy/QqSF4eg==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^7.0.0" + }, + "dependencies": { + "whatwg-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", + "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } } }, "debug": { @@ -994,6 +1064,11 @@ } } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -1001,9 +1076,9 @@ "dev": true }, "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, "deep-is": { @@ -1017,16 +1092,48 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "requires": { - "object-keys": "1.0.12" + "object-keys": "^1.0.12" } }, "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } } }, "del": { @@ -1035,13 +1142,13 @@ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" } }, "delayed-stream": { @@ -1072,11 +1179,11 @@ "dev": true }, "diskusage": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/diskusage/-/diskusage-0.2.4.tgz", - "integrity": "sha512-XCLBopqnV6FUG/DdphILleiubqVERvF1ZRqkvOIiPQeMlU6Im1nvlsYqLUosgmRz1UQOXcwuO0vgqASl7DNg+w==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/diskusage/-/diskusage-0.2.5.tgz", + "integrity": "sha512-Ecq7I8Ch0dicIh3SvsH0xAwfzxzF44EtinNjJ/kZFZznkSeMcKsghjyZhvaAuaRMvqFu+QkNxW2ijV5I68/LXA==", "requires": { - "nan": "2.8.0" + "nan": "^2.5.0" } }, "doctrine": { @@ -1085,16 +1192,54 @@ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "2.0.2" + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "requires": { + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" + } } }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" + }, "domexception": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", "dev": true, "requires": { - "webidl-conversions": "4.0.2" + "webidl-conversions": "^4.0.2" + } + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0", + "domelementtype": "1" } }, "dot-prop": { @@ -1103,17 +1248,17 @@ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "dev": true, "requires": { - "is-obj": "1.0.1" + "is-obj": "^1.0.0" } }, "dotenv": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", + "resolved": "http://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=" }, "duplexer": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, @@ -1124,12 +1269,13 @@ "dev": true }, "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, "ee-first": { @@ -1147,9 +1293,14 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "iconv-lite": "0.4.19" + "iconv-lite": "~0.4.13" } }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1162,16 +1313,16 @@ "dev": true }, "escodegen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz", - "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.0.tgz", + "integrity": "sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==", "dev": true, "requires": { - "esprima": "3.1.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.5.7" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" }, "dependencies": { "esprima": { @@ -1179,144 +1330,117 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true } } }, "eslint": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.16.0.tgz", - "integrity": "sha512-YVXV4bDhNoHHcv0qzU4Meof7/P26B4EuaktMi5L1Tnt52Aov85KmYA8c5D+xyZr/BkhvwUqr011jDSD/QTULxg==", - "dev": true, - "requires": { - "ajv": "5.5.2", - "babel-code-frame": "6.26.0", - "chalk": "2.3.0", - "concat-stream": "1.6.0", - "cross-spawn": "5.1.0", - "debug": "3.1.0", - "doctrine": "2.1.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0", - "espree": "3.5.2", - "esquery": "1.0.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "11.1.0", - "ignore": "3.3.7", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.1.0", - "js-yaml": "3.10.0", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "7.0.0", - "progress": "2.0.0", - "require-uncached": "1.0.3", - "semver": "5.5.0", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", + "version": "4.19.1", + "resolved": "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", "table": "4.0.2", - "text-table": "0.2.0" + "text-table": "~0.2.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz", + "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "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" } }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^3.0.0" } } } }, "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", "dev": true, "requires": { - "esrecurse": "4.2.0", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint-visitor-keys": { @@ -1325,39 +1449,43 @@ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", "dev": true }, + "esm": { + "version": "3.0.84", + "resolved": "https://registry.npmjs.org/esm/-/esm-3.0.84.tgz", + "integrity": "sha512-SzSGoZc17S7P+12R9cg21Bdb7eybX25RnIeRZ80xZs+VZ3kdQKzqTp2k4hZJjR7p9l0186TTXSgrxzlMDBktlw==" + }, "espree": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.2.tgz", - "integrity": "sha512-sadKeYwaR/aJ3stC2CdvgXu1T16TdYN+qwCpcWbMnGJ8s0zNWemzrvb2GbD4OhmJ/fwpJjudThAlLobGbWZbCQ==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { - "acorn": "5.3.0", - "acorn-jsx": "3.0.1" + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" } }, "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.0.0" } }, "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0", - "object-assign": "4.1.1" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -1378,18 +1506,19 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.6.tgz", + "integrity": "sha512-dGXNg4F/FgVzlApjzItL+7naHutA3fDqbV/zAZqDDlXTjiMnQmZKu+prImWKszeBM5UQeGvAl3u1wBiKeDh61g==", "dev": true, "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", - "pause-stream": "0.0.11", - "split": "0.3.3", - "stream-combiner": "0.0.4", - "through": "2.3.8" + "duplexer": "^0.1.1", + "flatmap-stream": "^0.1.0", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" } }, "events": { @@ -1401,15 +1530,14 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "expand-brackets": { @@ -1418,13 +1546,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" + "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" }, "dependencies": { "define-property": { @@ -1433,65 +1561,17 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } + "is-descriptor": "^0.1.0" } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-extendable": "^0.1.0" } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, @@ -1500,42 +1580,47 @@ "resolved": "http://registry.npmjs.org/express/-/express-4.16.3.tgz", "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.2", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "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", + "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", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.4", + "proxy-addr": "~2.0.3", "qs": "6.5.1", - "range-parser": "1.2.0", + "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", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" } } }, @@ -1544,36 +1629,48 @@ "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-3.0.0.tgz", "integrity": "sha1-gKBwu4GbCeSvLKbQeA91zgXnXC8=", "requires": { - "glob": "6.0.4", - "graceful-fs": "4.1.11", - "handlebars": "4.0.12", - "object.assign": "4.1.0", - "promise": "7.3.1" + "glob": "^6.0.4", + "graceful-fs": "^4.1.2", + "handlebars": "^4.0.5", + "object.assign": "^4.0.3", + "promise": "^7.0.0" } }, "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "external-editor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", - "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", + "version": "2.2.0", + "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.19", - "tmp": "0.0.33" + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" } }, "extglob": { @@ -1582,14 +1679,63 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "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" + "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" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } } }, "extsprintf": { @@ -1603,9 +1749,9 @@ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" }, "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, "fast-json-stable-stringify": { "version": "2.0.0", @@ -1624,7 +1770,7 @@ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { @@ -1633,8 +1779,8 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, "fill-range": { @@ -1643,10 +1789,21 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "finalhandler": { @@ -1655,19 +1812,20 @@ "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { "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" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } + "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" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" } }, "flat-cache": { @@ -1676,46 +1834,59 @@ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", "dev": true, "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" } }, + "flatmap-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/flatmap-stream/-/flatmap-stream-0.1.0.tgz", + "integrity": "sha512-Nlic4ZRYxikqnK5rj3YoxDVKGGtUjcNDUtvQ7XsdGLZmMwdUYnXf10o1zcXtzEZTBgc6GxeRpQxV/Wu3WPIIHA==", + "dev": true + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, + "foreach": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.4.tgz", + "integrity": "sha1-zF0NiuHUbMmlVcJoL5EJd4WZNd8=", + "dev": true + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "formatio": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz", - "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=", - "dev": true, + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "requires": { - "samsam": "1.3.0" + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.6", + "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "~1.0.0" + } + } } }, "formidable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.1.1.tgz", - "integrity": "sha1-lriIb3w8NQi5Mta9cMTTqI818ak=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", + "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==", "dev": true }, "forwarded": { @@ -1729,7 +1900,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -1750,195 +1921,99 @@ "dev": true }, "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "dev": true, "optional": true, "requires": { - "nan": "2.8.0", - "node-pre-gyp": "0.6.39" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { - "version": "1.1.0", - "bundled": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "optional": true }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, "ansi-regex": { "version": "2.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "aproba": { - "version": "1.1.1", - "bundled": true, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, - "asynckit": { - "version": "0.4.0", - "bundled": true, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "optional": true + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, "concat-map": { "version": "0.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, "core-util-is": { "version": "1.0.2", - "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } + "optional": true }, "debug": { - "version": "2.6.8", - "bundled": true, + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "optional": true, "requires": { @@ -1946,328 +2021,181 @@ } }, "deep-extend": { - "version": "0.4.2", - "bundled": true, + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", + "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", "dev": true, "optional": true }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, "delegates": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "optional": true }, "detect-libc": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true, "optional": true }, - "form-data": { - "version": "2.1.4", - "bundled": true, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" + "minipass": "^2.2.1" } }, "fs.realpath": { "version": "1.0.0", - "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } + "optional": true }, "gauge": { "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "optional": true, "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } + "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" } }, "glob": { "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "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" } }, "has-unicode": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "optional": true }, - "hawk": { - "version": "3.1.3", - "bundled": true, + "iconv-lite": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.21.tgz", + "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", "dev": true, + "optional": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "safer-buffer": "^2.1.0" } }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" + "minimatch": "^3.0.4" } }, "inflight": { "version": "1.0.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, + "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { "version": "2.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "ini": { - "version": "1.3.4", - "bundled": true, + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, "isarray": { "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "optional": true }, - "jsprim": { - "version": "1.4.0", - "bundled": true, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "optional": true, "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } + "brace-expansion": "^1.1.7" } }, - "mime-db": { - "version": "1.27.0", - "bundled": true, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, - "mime-types": { - "version": "2.1.15", - "bundled": true, + "minipass": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", + "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", "dev": true, "requires": { - "mime-db": "1.27.0" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, - "minimatch": { - "version": "3.0.4", - "bundled": true, + "minizlib": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", + "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", "dev": true, + "optional": true, "requires": { - "brace-expansion": "1.1.7" + "minipass": "^2.2.1" } }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, "mkdirp": { "version": "0.5.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { "minimist": "0.0.8" @@ -2275,380 +2203,314 @@ }, "ms": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "optional": true }, + "needle": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.0.tgz", + "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, "node-pre-gyp": { - "version": "0.6.39", - "bundled": true, + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz", + "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==", "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { "version": "4.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.3.tgz", + "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.10.tgz", + "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", "dev": true, "optional": true, "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { - "version": "4.1.0", - "bundled": true, + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "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": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, "object-assign": { "version": "4.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "optional": true }, "once": { "version": "1.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "optional": true }, "osenv": { - "version": "0.1.4", - "bundled": true, + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { "version": "1.0.1", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "optional": true }, "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true, "optional": true }, "rc": { - "version": "1.2.1", - "bundled": true, + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.7.tgz", + "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", "dev": true, "optional": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true, "optional": true } } }, "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" + "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" } }, "rimraf": { - "version": "2.6.1", - "bundled": true, + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, + "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { - "version": "5.0.1", - "bundled": true, + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", "dev": true }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, "semver": { - "version": "5.3.0", - "bundled": true, + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true, "optional": true }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, "string-width": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { - "version": "1.0.1", - "bundled": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "optional": true, "requires": { - "safe-buffer": "5.0.1" + "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "optional": true }, "tar": { - "version": "2.2.1", - "bundled": true, + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", + "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", "dev": true, + "optional": true, "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, "util-deprecate": { "version": "1.0.2", - "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "optional": true }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, "wide-align": { "version": "1.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz", + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", "dev": true } } @@ -2664,11 +2526,15 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true + "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" }, "get-value": { "version": "2.0.6", @@ -2681,7 +2547,7 @@ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "glob": { @@ -2689,11 +2555,11 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { @@ -2702,8 +2568,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -2712,7 +2578,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -2723,13 +2589,13 @@ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "requires": { - "ini": "1.3.5" + "ini": "^1.3.4" } }, "globals": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.1.0.tgz", - "integrity": "sha512-uEuWt9mqTlPDwSqi+sHjD4nWU/1N+q0fiWI9T1mZpD2UENqX20CFD5T/ziLZvztPaBKl7ZylUi1q6Qfm7E2CiQ==", + "version": "11.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz", + "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==", "dev": true }, "globby": { @@ -2738,26 +2604,26 @@ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } } } @@ -2768,26 +2634,26 @@ "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", "optional": true, "requires": { - "delegate": "3.2.0" + "delegate": "^3.1.2" } }, "got": { "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { - "create-error-class": "3.0.2", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.0", - "safe-buffer": "5.1.1", - "timed-out": "4.0.1", - "unzip-response": "2.0.1", - "url-parse-lax": "1.0.0" + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" } }, "graceful-fs": { @@ -2806,10 +2672,10 @@ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", "requires": { - "async": "2.6.1", - "optimist": "0.6.1", - "source-map": "0.6.1", - "uglify-js": "3.4.9" + "async": "^2.5.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" } }, "har-schema": { @@ -2818,12 +2684,12 @@ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.0.tgz", + "integrity": "sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA==", "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" + "ajv": "^5.3.0", + "har-schema": "^2.0.0" } }, "has-ansi": { @@ -2832,13 +2698,21 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, "has-symbols": { @@ -2852,9 +2726,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -2863,8 +2737,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -2873,22 +2747,11 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", - "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.0", - "sntp": "2.1.0" - } - }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", @@ -2900,40 +2763,44 @@ "resolved": "https://registry.npmjs.org/heroku-node-settings/-/heroku-node-settings-1.1.0.tgz", "integrity": "sha1-vUDWdhpvQ1iwCQ/njrVgyNRXkiE=" }, - "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" - }, "html-encoding-sniffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", "dev": true, "requires": { - "whatwg-encoding": "1.0.3" + "whatwg-encoding": "^1.0.1" + } + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" } }, "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.1.tgz", + "integrity": "sha512-jWEUgtZWGSMba9I1N3gc1HmvpBUaNC9vDdA46yScAdp+C5rdEuKWUBLWTQpW9FwSWSbYYs++b6SDCxf9UEJzfw==", "requires": { - "depd": "1.1.1", + "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" + "setprototypeof": "1.1.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" }, "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" } } }, @@ -2942,9 +2809,9 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "iconv-lite": { @@ -2953,9 +2820,9 @@ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true }, "ignore-by-default": { @@ -2987,8 +2854,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -3008,68 +2875,58 @@ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, "requires": { - "ansi-escapes": "3.0.0", - "chalk": "2.3.0", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.1.0", - "figures": "2.0.0", - "lodash": "4.17.4", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^3.0.0" } } } }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, "ipaddr.js": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", @@ -3082,19 +2939,22 @@ "dev": true }, "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, @@ -3104,7 +2964,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -3112,38 +2972,50 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, + "is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "requires": { + "ci-info": "^1.5.0" + } + }, "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } } } }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true } } @@ -3163,8 +3035,7 @@ "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-glob": { "version": "4.0.0", @@ -3172,7 +3043,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-installed-globally": { @@ -3181,8 +3052,8 @@ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", "dev": true, "requires": { - "global-dirs": "0.1.1", - "is-path-inside": "1.0.1" + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" } }, "is-npm": { @@ -3197,24 +3068,26 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, - "is-odd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-1.0.0.tgz", - "integrity": "sha1-O4qTLrAos3dcObsJ6RdnrM22kIg=", - "dev": true, - "requires": { - "is-number": "3.0.0" - } - }, "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", @@ -3222,12 +3095,12 @@ "dev": true }, "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -3236,7 +3109,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-object": { @@ -3245,7 +3118,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-promise": { @@ -3282,17 +3155,21 @@ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "3.0.1", @@ -3305,8 +3182,8 @@ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "node-fetch": "1.7.3", - "whatwg-fetch": "2.0.3" + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" } }, "isstream": { @@ -3321,13 +3198,13 @@ "dev": true }, "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "dev": true, "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "jsbn": { @@ -3337,37 +3214,45 @@ "optional": true }, "jsdom": { - "version": "11.6.2", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.6.2.tgz", - "integrity": "sha512-pAeZhpbSlUp5yQcS6cBQJwkbzmv4tWFaYxHbFVSxzXefqjvtRA851Z5N2P+TguVG9YeUDcgb8pdeVQRJh0XR3Q==", - "dev": true, - "requires": { - "abab": "1.0.4", - "acorn": "5.3.0", - "acorn-globals": "4.1.0", - "array-equal": "1.0.0", - "browser-process-hrtime": "0.1.2", - "content-type-parser": "1.0.2", - "cssom": "0.3.2", - "cssstyle": "0.2.37", - "domexception": "1.0.1", - "escodegen": "1.9.0", - "html-encoding-sniffer": "1.0.2", - "left-pad": "1.2.0", - "nwmatcher": "1.4.3", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", "parse5": "4.0.0", - "pn": "1.1.0", - "request": "2.83.0", - "request-promise-native": "1.0.5", - "sax": "1.2.4", - "symbol-tree": "3.2.2", - "tough-cookie": "2.3.3", - "w3c-hr-time": "1.0.1", - "webidl-conversions": "4.0.2", - "whatwg-encoding": "1.0.3", - "whatwg-url": "6.4.0", - "ws": "4.0.0", - "xml-name-validator": "3.0.0" + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + } } }, "json-schema": { @@ -3409,19 +3294,16 @@ } }, "just-extend": { - "version": "1.1.27", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-1.1.27.tgz", - "integrity": "sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-3.0.0.tgz", + "integrity": "sha512-Fu3T6pKBuxjWT/p4DkqGHFRsysc8OauWr4ZRTY9dIx07Y9O0RkoR5jcv28aeD1vuAwhm3nLkDurwLXoALp4DpQ==", "dev": true }, "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true }, "latest-version": { "version": "3.1.0", @@ -3429,13 +3311,21 @@ "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "dev": true, "requires": { - "package-json": "4.0.1" + "package-json": "^4.0.0" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" } }, "left-pad": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.2.0.tgz", - "integrity": "sha1-0wpzxrggHY99jnlWupYWCHpo4O4=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", "dev": true }, "levn": { @@ -3444,14 +3334,29 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true }, "lodash.defaults": { "version": "4.2.0", @@ -3471,34 +3376,33 @@ "dev": true }, "lolex": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.1.tgz", - "integrity": "sha512-mQuW55GhduF3ppo+ZRUTz1PRjEh1hS5BbqU7d8D0ez2OKxHDod7StPPeAVKisZR5aLkHZjdGWSL42LSONUJsZw==", + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", + "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", "dev": true }, "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true }, "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true, + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "make-dir": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", - "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" }, "dependencies": { "pify": { @@ -3516,9 +3420,9 @@ "dev": true }, "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", "dev": true }, "map-visit": { @@ -3527,17 +3431,22 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, + "marked": { + "version": "0.3.19", + "resolved": "http://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==" + }, "md5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "1.1.6" + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" } }, "media-typer": { @@ -3545,6 +3454,14 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -3560,36 +3477,28 @@ "resolved": "https://registry.npmjs.org/metrics/-/metrics-0.1.17.tgz", "integrity": "sha512-PM/NzhYmmpOl8KsvK0jet9C8QTxEsBUvJ3uA5CmVps7MjOL9j3EN/fUhJMHmbIsVpD884gBsubX+wEcxGbhF/A==", "requires": { - "events": "2.1.0" + "events": "^2.0.0" } }, "micromatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.5.tgz", - "integrity": "sha512-ykttrLPQrz1PUJcXjwsTUjGoPJ64StIGNE2lGVD1c9CuguJ+L7/navsE8IcDNndOoCMvYV0qc/exfVbMHkUhvA==", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.0", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.7", - "object.pick": "1.3.0", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "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": { @@ -3598,30 +3507,29 @@ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", + "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==" }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.20", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", + "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", "requires": { - "mime-db": "1.30.0" + "mime-db": "~1.36.0" } }, "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", - "dev": true + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3630,13 +3538,13 @@ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" }, "mixin-deep": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.0.tgz", - "integrity": "sha512-dgaCvoh6i1nosAUBKb0l0pfJ78K8+S9fluyIR2YvAeUD/QuMahnFnF3xYty5eYXMjhGSsB0DsW6A0uAZyetoAg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -3645,14 +3553,14 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { @@ -3661,7 +3569,7 @@ "dependencies": { "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true } @@ -3706,14 +3614,20 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -3726,7 +3640,7 @@ "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -3742,11 +3656,11 @@ "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", "requires": { - "basic-auth": "2.0.1", + "basic-auth": "~2.0.0", "debug": "2.6.9", - "depd": "1.1.2", - "on-finished": "2.3.0", - "on-headers": "1.0.1" + "depd": "~1.1.2", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" } }, "ms": { @@ -3761,35 +3675,27 @@ "dev": true }, "nan": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", - "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=" + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", + "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==" }, "nanomatch": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.7.tgz", - "integrity": "sha512-/5ldsnyurvEw7wNpxLFgjVvBLMta43niEYOy0CJ4ntcYSbx6bugRUTQeFb4BR/WanEL1o3aQgHuVLHQaB6tOqg==", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "is-odd": "1.0.0", - "kind-of": "5.1.0", - "object.pick": "1.3.0", - "regex-not": "1.0.0", - "snapdragon": "0.8.1", - "to-regex": "3.0.1" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "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": { @@ -3804,47 +3710,43 @@ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, "next-metrics": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/next-metrics/-/next-metrics-3.0.3.tgz", - "integrity": "sha512-JZx1o3xZs8pAshEGW8F7B1NbciJ2CC7saK8Vg4+rl6Zxr/NgNQD0kEzMxrY3YTxCl8VAGVLLHJ/ZtWVkQ23kig==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/next-metrics/-/next-metrics-3.0.4.tgz", + "integrity": "sha512-JnDmJQe1wrCsJTmWtjfOU8ilh4WBfMl1Mbc5vgscbOPwR8PVbcePr1pTcd9n5jVdINlyPZ/k/ClH8N98Uoc+4A==", "requires": { - "@financial-times/n-logger": "5.7.2", - "lodash": "4.17.11", - "metrics": "0.1.17" - }, - "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - } + "@financial-times/n-logger": "^5.5.6", + "lodash": "^4.17.10", + "metrics": "^0.1.8" } }, "nise": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.2.0.tgz", - "integrity": "sha512-q9jXh3UNsMV28KeqI43ILz5+c3l+RiNW8mhurEwCKckuHQbL+hTJIKKTiUlCPKlgQ/OukFvSnKB/Jk3+sFbkGA==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.5.tgz", + "integrity": "sha512-OHRVvdxKgwZELf2DTgsJEIA4MOq8XWvpSUzoOXyxJ2mY0mMENWC66+70AShLR2z05B1dzrzWlUQJmJERlOUpZw==", "dev": true, "requires": { - "formatio": "1.2.0", - "just-extend": "1.1.27", - "lolex": "1.6.0", - "path-to-regexp": "1.7.0", - "text-encoding": "0.6.4" + "@sinonjs/formatio": "3.0.0", + "just-extend": "^3.0.0", + "lolex": "^2.3.2", + "path-to-regexp": "^1.7.0", + "text-encoding": "^0.6.4" }, "dependencies": { + "@sinonjs/formatio": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.0.0.tgz", + "integrity": "sha512-vdjoYLDptCgvtJs57ULshak3iJe4NW3sJ3g36xVDGff5AE8P30S6A093EIEPjdi2noGhfuNOEkbxt3J3awFW1w==", + "dev": true, + "requires": { + "@sinonjs/samsam": "2.1.0" + } + }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, - "lolex": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", - "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", - "dev": true - }, "path-to-regexp": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", @@ -3861,8 +3763,8 @@ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "requires": { - "encoding": "0.1.12", - "is-stream": "1.1.0" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } }, "node.extend": { @@ -3871,40 +3773,44 @@ "integrity": "sha1-p7iCyC1sk6SGOlUEvV3o7IYli5Y=", "dev": true, "requires": { - "is": "3.2.1" + "is": "^3.1.0" } }, "nodemon": { - "version": "1.14.11", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.14.11.tgz", - "integrity": "sha512-323uPopdzYcyDR2Ze1UOLF9zocwoQEyGPiKaLm/Y8Mbfjylt/YueAJUVHqox+vgG8TqZqZApcHv5lmUvrn/KQw==", - "dev": true, - "requires": { - "chokidar": "2.0.0", - "debug": "3.1.0", - "ignore-by-default": "1.0.1", - "minimatch": "3.0.4", - "pstree.remy": "1.1.0", - "semver": "5.5.0", - "touch": "3.1.0", - "undefsafe": "2.0.1", - "update-notifier": "2.3.0" + "version": "1.18.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.4.tgz", + "integrity": "sha512-hyK6vl65IPnky/ee+D3IWvVGgJa/m3No2/Xc/3wanS6Ce1MWjCzH6NnhPJ/vZM+6JFym16jtHx51lmCMB9HDtg==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "debug": "^3.1.0", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.0", + "semver": "^5.5.0", + "supports-color": "^5.2.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.2", + "update-notifier": "^2.3.0" }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz", + "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -3914,7 +3820,7 @@ "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", "dev": true, "requires": { - "abbrev": "1.1.1" + "abbrev": "1" } }, "normalize-path": { @@ -3923,292 +3829,487 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, - "nwmatcher": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.3.tgz", - "integrity": "sha512-IKdSTiDWCarf2JTS5e9e2+5tPZGdkRJ79XjYV0pzK8Q9BpsFyBq1RGKxzs7Q8UBushGw7m6TzVKz6fcY99iSWw==", + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "requires": { + "boolbase": "~1.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "nwsapi": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz", + "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ==", "dev": true }, "nyc": { - "version": "11.4.1", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.4.1.tgz", - "integrity": "sha512-5eCZpvaksFVjP2rt1r60cfXmt3MUtsQDw8bAzNqNEr4WLvUMLgiVENMf/B9bE9YAX0mGVvaGA3v9IS9ekNqB1Q==", - "dev": true, - "requires": { - "archy": "1.0.0", - "arrify": "1.0.1", - "caching-transform": "1.0.1", - "convert-source-map": "1.5.1", - "debug-log": "1.0.1", - "default-require-extensions": "1.0.0", - "find-cache-dir": "0.1.1", - "find-up": "2.1.0", - "foreground-child": "1.5.6", - "glob": "7.1.2", - "istanbul-lib-coverage": "1.1.1", - "istanbul-lib-hook": "1.1.0", - "istanbul-lib-instrument": "1.9.1", - "istanbul-lib-report": "1.1.2", - "istanbul-lib-source-maps": "1.2.2", - "istanbul-reports": "1.1.3", - "md5-hex": "1.3.0", - "merge-source-map": "1.0.4", - "micromatch": "2.3.11", - "mkdirp": "0.5.1", - "resolve-from": "2.0.0", - "rimraf": "2.6.2", - "signal-exit": "3.0.2", - "spawn-wrap": "1.4.2", - "test-exclude": "4.1.1", - "yargs": "10.0.3", - "yargs-parser": "8.0.0" + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-11.9.0.tgz", + "integrity": "sha512-w8OdJAhXL5izerzZMdqzYKMj/pgHJyY3qEPYBjLLxrhcVoHEY9pU5ENIiZyCgG9OR7x3VcUMoD40o6PtVpfR4g==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "arrify": "^1.0.1", + "caching-transform": "^1.0.0", + "convert-source-map": "^1.5.1", + "debug-log": "^1.0.1", + "default-require-extensions": "^1.0.0", + "find-cache-dir": "^0.1.1", + "find-up": "^2.1.0", + "foreground-child": "^1.5.3", + "glob": "^7.0.6", + "istanbul-lib-coverage": "^1.1.2", + "istanbul-lib-hook": "^1.1.0", + "istanbul-lib-instrument": "^1.10.0", + "istanbul-lib-report": "^1.1.3", + "istanbul-lib-source-maps": "^1.2.3", + "istanbul-reports": "^1.4.0", + "md5-hex": "^1.2.0", + "merge-source-map": "^1.1.0", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.0", + "resolve-from": "^2.0.0", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.1", + "spawn-wrap": "^1.4.2", + "test-exclude": "^4.2.0", + "yargs": "11.1.0", + "yargs-parser": "^8.0.0" }, "dependencies": { "align-text": { "version": "0.1.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" } }, "amdefine": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, "ansi-regex": { "version": "2.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "ansi-styles": { "version": "2.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, "append-transform": { "version": "0.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", "dev": true, "requires": { - "default-require-extensions": "1.0.0" + "default-require-extensions": "^1.0.0" } }, "archy": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, "arr-diff": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, "arr-flatten": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, "array-unique": { - "version": "0.2.1", - "bundled": true, + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, "arrify": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, "async": { "version": "1.5.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, - "babel-code-frame": { - "version": "6.26.0", - "bundled": true, + "atob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, "babel-generator": { - "version": "6.26.0", - "bundled": true, + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" } }, "babel-messages": { "version": "6.23.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-runtime": { "version": "6.26.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.3", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, "babel-template": { "version": "6.26.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.4" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { "version": "6.26.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, "babel-types": { "version": "6.26.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, "babylon": { "version": "6.18.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, "balanced-match": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, "brace-expansion": { - "version": "1.1.8", - "bundled": true, + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { - "version": "1.8.5", - "bundled": true, - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "builtin-modules": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, "caching-transform": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-1.0.1.tgz", + "integrity": "sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE=", "dev": true, "requires": { - "md5-hex": "1.3.0", - "mkdirp": "0.5.1", - "write-file-atomic": "1.3.4" + "md5-hex": "^1.2.0", + "mkdirp": "^0.5.1", + "write-file-atomic": "^1.1.4" } }, "camelcase": { "version": "1.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", "dev": true, "optional": true }, "center-align": { "version": "0.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "dev": true, "optional": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chalk": { "version": "1.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "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" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, "cliui": { "version": "2.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, "optional": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" }, "dependencies": { "wordwrap": { "version": "0.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", "dev": true, "optional": true } @@ -4216,41 +4317,70 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, "commondir": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, "concat-map": { "version": "0.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "convert-source-map": { "version": "1.5.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, "core-js": { - "version": "2.5.3", - "bundled": true, + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", + "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==", "dev": true }, "cross-spawn": { "version": "4.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", "dev": true, "requires": { - "lru-cache": "4.1.1", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "which": "^1.2.9" } }, "debug": { "version": "2.6.9", - "bundled": true, + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -4258,455 +4388,756 @@ }, "debug-log": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", + "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", "dev": true }, "decamelize": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, "default-require-extensions": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true, + "requires": { + "strip-bom": "^2.0.0" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "strip-bom": "2.0.0" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, "detect-indent": { "version": "4.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "error-ex": { "version": "1.3.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "escape-string-regexp": { "version": "1.0.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "esutils": { "version": "2.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, "execa": { "version": "0.7.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "dependencies": { "cross-spawn": { "version": "5.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } } } }, "expand-brackets": { - "version": "0.1.5", - "bundled": true, + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "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" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "expand-range": { - "version": "1.8.2", - "bundled": true, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "fill-range": "2.2.3" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "extglob": { - "version": "0.3.2", - "bundled": true, - "dev": true, - "requires": { - "is-extglob": "1.0.0" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, - "filename-regex": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, "fill-range": { - "version": "2.2.3", - "bundled": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "find-cache-dir": { "version": "0.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", "dev": true, "requires": { - "commondir": "1.0.1", - "mkdirp": "0.5.1", - "pkg-dir": "1.0.0" + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" } }, "find-up": { "version": "2.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "for-in": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "for-own": { - "version": "0.1.5", - "bundled": true, + "foreground-child": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", + "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", "dev": true, "requires": { - "for-in": "1.0.2" + "cross-spawn": "^4", + "signal-exit": "^3.0.0" } }, - "foreground-child": { - "version": "1.5.6", - "bundled": true, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "cross-spawn": "4.0.2", - "signal-exit": "3.0.2" + "map-cache": "^0.2.2" } }, "fs.realpath": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "get-caller-file": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", "dev": true }, "get-stream": { "version": "3.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, "glob": { "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "glob-base": { - "version": "0.3.0", - "bundled": true, - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "is-glob": "2.0.1" + "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" } }, "globals": { "version": "9.18.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true }, "graceful-fs": { "version": "4.1.11", - "bundled": true, + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, "handlebars": { "version": "4.0.11", - "bundled": true, + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "dev": true, "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" }, "dependencies": { "source-map": { "version": "0.4.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } }, "has-ansi": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "hosted-git-info": { - "version": "2.5.0", - "bundled": true, + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", "dev": true }, "imurmurhash": { "version": "0.1.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, "inflight": { "version": "1.0.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { "version": "2.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "invariant": { - "version": "2.2.2", - "bundled": true, + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", "dev": true }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, "is-arrayish": { "version": "0.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, "is-buffer": { "version": "1.1.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, "is-builtin-module": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, - "is-dotfile": { - "version": "1.0.3", - "bundled": true, - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "bundled": true, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "kind-of": "^3.0.2" } }, - "is-extendable": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "bundled": true, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true }, "is-finite": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "kind-of": "^3.0.2" } }, - "is-glob": { - "version": "2.0.1", - "bundled": true, + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } } }, - "is-number": { - "version": "2.1.0", - "bundled": true, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "kind-of": "3.2.2" + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, - "is-posix-bracket": { - "version": "0.1.1", - "bundled": true, - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, "is-stream": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, "is-utf8": { "version": "0.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, "isarray": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "isexe": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "isobject": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "isarray": "1.0.0" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "istanbul-lib-coverage": { - "version": "1.1.1", - "bundled": true, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", + "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", "dev": true }, "istanbul-lib-hook": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz", + "integrity": "sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg==", "dev": true, "requires": { - "append-transform": "0.4.0" + "append-transform": "^0.4.0" } }, "istanbul-lib-instrument": { - "version": "1.9.1", - "bundled": true, + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", + "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", "dev": true, "requires": { - "babel-generator": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.1.1", - "semver": "5.4.1" + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.0", + "semver": "^5.3.0" } }, "istanbul-lib-report": { - "version": "1.1.2", - "bundled": true, + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz", + "integrity": "sha512-D4jVbMDtT2dPmloPJS/rmeP626N5Pr3Rp+SovrPn1+zPChGHcggd/0sL29jnbm4oK9W0wHjCRsdch9oLd7cm6g==", "dev": true, "requires": { - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "path-parse": "1.0.5", - "supports-color": "3.2.3" + "istanbul-lib-coverage": "^1.1.2", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" }, "dependencies": { "supports-color": { "version": "3.2.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } }, "istanbul-lib-source-maps": { - "version": "1.2.2", - "bundled": true, + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz", + "integrity": "sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA==", "dev": true, "requires": { - "debug": "3.1.0", - "istanbul-lib-coverage": "1.1.1", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "source-map": "0.5.7" + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.1.2", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" }, "dependencies": { "debug": { "version": "3.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { "ms": "2.0.0" @@ -4715,170 +5146,244 @@ } }, "istanbul-reports": { - "version": "1.1.3", - "bundled": true, + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.4.0.tgz", + "integrity": "sha512-OPzVo1fPZ2H+owr8q/LYKLD+vquv9Pj4F+dj808MdHbuQLD7S4ACRjcX+0Tne5Vxt2lxXvdZaL7v+FOOAV281w==", "dev": true, "requires": { - "handlebars": "4.0.11" + "handlebars": "^4.0.3" } }, "js-tokens": { "version": "3.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "dev": true }, "jsesc": { "version": "1.3.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, "kind-of": { "version": "3.2.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "lazy-cache": { "version": "1.0.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", "dev": true, "optional": true }, "lcid": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "load-json-file": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, "locate-path": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "dependencies": { "path-exists": { "version": "3.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true } } }, "lodash": { - "version": "4.17.4", - "bundled": true, + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", "dev": true }, "longest": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", "dev": true }, "loose-envify": { "version": "1.3.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true, "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, "lru-cache": { - "version": "4.1.1", - "bundled": true, + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "object-visit": "^1.0.0" } }, "md5-hex": { "version": "1.3.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-1.3.0.tgz", + "integrity": "sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ=", "dev": true, "requires": { - "md5-o-matic": "0.1.1" + "md5-o-matic": "^0.1.1" } }, "md5-o-matic": { "version": "0.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/md5-o-matic/-/md5-o-matic-0.1.1.tgz", + "integrity": "sha1-givM1l4RfFFPqxdrJZRdVBAKA8M=", "dev": true }, "mem": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "^1.0.0" } }, "merge-source-map": { - "version": "1.0.4", - "bundled": true, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "micromatch": { - "version": "2.3.11", - "bundled": true, - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, "mimic-fn": { - "version": "1.1.0", - "bundled": true, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, "minimatch": { "version": "3.0.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.8" + "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "mkdirp": { "version": "0.5.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { "minimist": "0.0.8" @@ -4886,505 +5391,1133 @@ }, "ms": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "normalize-package-data": { - "version": "2.4.0", - "bundled": true, - "dev": true, - "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.4.1", - "validate-npm-package-license": "3.0.1" + "nanomatch": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "dev": true, + "requires": { + "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-odd": "^2.0.0", + "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" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } } }, - "normalize-path": { - "version": "2.1.1", - "bundled": true, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "npm-run-path": { "version": "2.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "number-is-nan": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, "object-assign": { "version": "4.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object.omit": { - "version": "2.0.1", - "bundled": true, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } } }, "once": { "version": "1.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "optimist": { "version": "0.6.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } }, "os-homedir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, "os-locale": { "version": "2.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "p-finally": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, "p-limit": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "p-locate": { - "version": "2.0.0", - "bundled": true, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", "dev": true, "requires": { - "p-limit": "1.1.0" + "p-try": "^1.0.0" } }, - "parse-glob": { - "version": "3.0.4", - "bundled": true, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "p-limit": "^1.1.0" } }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, "parse-json": { "version": "2.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, "path-exists": { "version": "2.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, "path-key": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, "path-parse": { "version": "1.0.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", "dev": true }, "path-type": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pify": { "version": "2.3.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, "pinkie": { "version": "2.0.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", "dev": true }, "pinkie-promise": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "^1.0.0" }, "dependencies": { "find-up": { "version": "1.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } } } }, - "preserve": { - "version": "0.2.0", - "bundled": true, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, "pseudomap": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, - "randomatic": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, "read-pkg": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" }, "dependencies": { "find-up": { "version": "1.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } } } }, "regenerator-runtime": { "version": "0.11.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, - "regex-cache": { - "version": "0.4.4", - "bundled": true, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, "repeat-element": { "version": "1.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", "dev": true }, "repeat-string": { "version": "1.6.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, "repeating": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "require-directory": { "version": "2.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "require-main-filename": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, "resolve-from": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, "right-align": { "version": "0.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dev": true, "optional": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { "version": "2.6.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "glob": "7.1.2" + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "dev": true, + "requires": { + "atob": "^2.0.0", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spawn-wrap": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.2.tgz", + "integrity": "sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg==", + "dev": true, + "requires": { + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" + } + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "test-exclude": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.1.tgz", + "integrity": "sha512-qpqlP/8Zl+sosLxBcVKl9vYy26T9NPalxSzzCP/OY6K7j938ui2oKgo+kRZYfxAeIpLqpbVnsHq1tyV70E4lWQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "micromatch": "^3.1.8", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "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" + } + } } }, - "semver": { - "version": "5.4.1", - "bundled": true, - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", "dev": true }, - "shebang-command": { - "version": "1.2.0", - "bundled": true, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "kind-of": "^3.0.2" } }, - "shebang-regex": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { + "to-regex": { "version": "3.0.2", - "bundled": true, - "dev": true - }, - "slide": { - "version": "1.1.6", - "bundled": true, - "dev": true - }, - "source-map": { - "version": "0.5.7", - "bundled": true, - "dev": true - }, - "spawn-wrap": { - "version": "1.4.2", - "bundled": true, - "dev": true, - "requires": { - "foreground-child": "1.5.6", - "mkdirp": "0.5.1", - "os-homedir": "1.0.2", - "rimraf": "2.6.2", - "signal-exit": "3.0.2", - "which": "1.3.0" - } - }, - "spdx-correct": { - "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "spdx-license-ids": "1.2.2" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, - "spdx-expression-parse": { - "version": "1.0.4", - "bundled": true, - "dev": true - }, - "spdx-license-ids": { - "version": "1.2.2", - "bundled": true, - "dev": true - }, - "string-width": { + "to-regex-range": { "version": "2.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" }, "dependencies": { - "ansi-regex": { + "is-number": { "version": "3.0.0", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "kind-of": "^3.0.2" } } } }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "test-exclude": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "require-main-filename": "1.0.1" - } - }, - "to-fast-properties": { - "version": "1.0.3", - "bundled": true, - "dev": true - }, "trim-right": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, "uglify-js": { "version": "2.8.29", - "bundled": true, + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "dev": true, "optional": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "yargs": { "version": "3.10.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, "optional": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } @@ -5392,143 +6525,290 @@ }, "uglify-to-browserify": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "dev": true, "optional": true }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, "validate-npm-package-license": { - "version": "3.0.1", - "bundled": true, + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "dev": true, "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "which": { "version": "1.3.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "window-size": { "version": "0.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", "dev": true, "optional": true }, "wordwrap": { "version": "0.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", "dev": true }, "wrap-ansi": { "version": "2.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, "string-width": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } }, "wrappy": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "write-file-atomic": { "version": "1.3.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "slide": "1.1.6" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" } }, "y18n": { "version": "3.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true }, "yallist": { "version": "2.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, "yargs": { - "version": "10.0.3", - "bundled": true, - "dev": true, - "requires": { - "cliui": "3.2.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "8.0.0" + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", + "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" }, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, "cliui": { - "version": "3.2.0", - "bundled": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - } + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" } } } }, "yargs-parser": { - "version": "8.0.0", - "bundled": true, + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { "version": "4.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true } } @@ -5536,9 +6816,9 @@ } }, "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, "object-assign": { "version": "4.1.1", @@ -5552,9 +6832,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -5563,44 +6843,16 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" + "is-descriptor": "^0.1.0" } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "is-buffer": "^1.1.5" } } } @@ -5616,7 +6868,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.assign": { @@ -5624,10 +6876,10 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "requires": { - "define-properties": "1.1.3", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "object-keys": "1.0.12" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, "object.pick": { @@ -5636,7 +6888,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "on-finished": { @@ -5657,7 +6909,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -5666,7 +6918,7 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "1.1.0" + "mimic-fn": "^1.0.0" } }, "optimist": { @@ -5674,8 +6926,8 @@ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } }, "optionator": { @@ -5684,12 +6936,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "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" }, "dependencies": { "wordwrap": { @@ -5700,6 +6952,16 @@ } } }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -5709,8 +6971,28 @@ "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" }, "package-json": { "version": "4.0.1", @@ -5718,17 +7000,19 @@ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "dev": true, "requires": { - "got": "6.7.1", - "registry-auth-token": "3.3.1", - "registry-url": "3.1.0", - "semver": "5.5.0" + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" } }, "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "requires": { + "@types/node": "*" + } }, "parseurl": { "version": "1.3.2", @@ -5747,6 +7031,11 @@ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "dev": true }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -5761,8 +7050,7 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-to-regexp": { "version": "0.1.7", @@ -5771,11 +7059,11 @@ }, "pause-stream": { "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "resolved": "http://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "dev": true, "requires": { - "through": "2.3.8" + "through": "~2.3" } }, "performance-now": { @@ -5801,7 +7089,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pluralize": { @@ -5835,18 +7123,17 @@ "dev": true }, "prismjs": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.11.0.tgz", - "integrity": "sha1-KXrvM+t5Qhv9sZJzpQkspRWXDSk=", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.15.0.tgz", + "integrity": "sha512-Lf2JrFYx8FanHrjoV5oL8YHCclLQgbJcVZR+gikGGMqz6ub5QVWDTM6YIwm3BuPxM/LOV+rKns3LssXNLIf+DA==", "requires": { - "clipboard": "1.7.1" + "clipboard": "^2.0.0" } }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "proclaim": { "version": "3.5.1", @@ -5854,7 +7141,7 @@ "integrity": "sha512-ZTEKBHyg2RU2AE6XZdOtU5y7pjqvQSTj4yAqcyuplSL/+YQXhPIOEcx+OUd4WyxCcVZBVALmsgiLZ/mmSu4I4g==", "dev": true, "requires": { - "util-inspect": "0.1.8" + "util-inspect": "^0.1.8" } }, "progress": { @@ -5868,7 +7155,7 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "requires": { - "asap": "2.0.6" + "asap": "~2.0.3" } }, "proxy-addr": { @@ -5876,7 +7163,7 @@ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.8.0" } }, @@ -5886,14 +7173,18 @@ "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", "dev": true, "requires": { - "event-stream": "3.3.4" + "event-stream": "~3.3.0" } }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "psl": { + "version": "1.1.29", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", + "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" }, "pstree.remy": { "version": "1.1.0", @@ -5901,7 +7192,7 @@ "integrity": "sha512-q5I5vLRMVtdWa8n/3UEzZX7Lfghzrg9eG2IKk2ENLSofKRCXVqMvMUHxCKgXNaqH/8ebhBxrqftHWnyTFweJ5Q==", "dev": true, "requires": { - "ps-tree": "1.1.0" + "ps-tree": "^1.1.0" } }, "punycode": { @@ -5910,9 +7201,9 @@ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "range-parser": { "version": "1.2.0", @@ -5925,17 +7216,10 @@ "integrity": "sha512-6PQdfC4+DQSFncowthLf+B6Hr0JpPsFBgTVYTAOq7tCmx/kR4SXbeawtPch20+3QfUcQDoJBLjWW1ybvZ4kXTw==", "requires": { "cookie": "0.3.1", - "md5": "2.2.1", + "md5": "^2.2.1", "stack-trace": "0.0.10", "timed-out": "4.0.1", "uuid": "3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - } } }, "raw-body": { @@ -5947,72 +7231,100 @@ "http-errors": "1.6.2", "iconv-lite": "0.4.19", "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } } }, "rc": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.4.tgz", - "integrity": "sha1-oPYGyq4qO4YrvQ74VILAElsxX6M=", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } }, "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, + "version": "2.3.6", + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "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": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, "regex-not": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.0.tgz", - "integrity": "sha1-Qvg+OXcWIt+CawKvF2Ul1qXxV/k=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "2.0.1" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, "registry-auth-token": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", - "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", + "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", "dev": true, "requires": { - "rc": "1.2.4", - "safe-buffer": "5.1.1" + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" } }, "registry-url": { @@ -6021,7 +7333,7 @@ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "dev": true, "requires": { - "rc": "1.2.4" + "rc": "^1.0.1" } }, "remove-trailing-separator": { @@ -6031,9 +7343,9 @@ "dev": true }, "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true }, "repeat-string": { @@ -6043,32 +7355,30 @@ "dev": true }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.1", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" } }, "request-promise-core": { @@ -6076,7 +7386,7 @@ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", "requires": { - "lodash": "4.17.4" + "lodash": "^4.13.1" } }, "request-promise-native": { @@ -6085,8 +7395,8 @@ "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", "requires": { "request-promise-core": "1.1.1", - "stealthy-require": "1.1.1", - "tough-cookie": "2.3.3" + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" } }, "require-all": { @@ -6094,14 +7404,24 @@ "resolved": "https://registry.npmjs.org/require-all/-/require-all-2.2.0.tgz", "integrity": "sha1-tEIMIzrAKC0P9Jsnf7iAqLXeCJQ=" }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, "require-uncached": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" } }, "resolve-from": { @@ -6122,31 +7442,37 @@ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" }, "dependencies": { "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } } } @@ -6157,7 +7483,7 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "rx-lite": { @@ -6172,13 +7498,27 @@ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, "requires": { - "rx-lite": "4.0.8" + "rx-lite": "*" } }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "samsam": { "version": "1.3.0", @@ -6186,6 +7526,14 @@ "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==", "dev": true }, + "sassdoc-extras": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/sassdoc-extras/-/sassdoc-extras-2.4.3.tgz", + "integrity": "sha512-oV42OSIRHDKn5xgNvZNNBCYjWGuX1u+PifHMi0JDZ9mJV+Y0m7KuvSvNTh+F7dLKSqXYZbbCZQa1b+AXgZjEHA==", + "requires": { + "marked": "^0.3.19" + } + }, "sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", @@ -6199,9 +7547,9 @@ "optional": true }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", "dev": true }, "semver-diff": { @@ -6210,7 +7558,7 @@ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "dev": true, "requires": { - "semver": "5.5.0" + "semver": "^5.0.3" } }, "send": { @@ -6219,29 +7567,35 @@ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { "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", + "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", + "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" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" }, "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" } } }, @@ -6250,26 +7604,16 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.2" } }, - "set-getter": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", - "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", - "dev": true, - "requires": { - "to-object-path": "0.3.0" - } - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "set-value": { "version": "2.0.0", @@ -6277,10 +7621,21 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "setprototypeof": { @@ -6292,45 +7647,56 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "showdown": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-1.8.6.tgz", + "integrity": "sha1-kepO47elRIqspoIKTifmkMatdxw=", + "requires": { + "yargs": "^10.0.3" + } }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "sinon": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.2.1.tgz", - "integrity": "sha512-lx9ZCoScNhvs6+n3ku78CqIpQNIiY9gLfvuIdhZjnKOkcVL6FfWfA1jkOrcO+n3mX4BIg2XwQnyCS/Ive21QMw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-5.1.1.tgz", + "integrity": "sha512-h/3uHscbt5pQNxkf7Y/Lb9/OM44YNCicHakcq73ncbrIS8lXg+ZGOZbtuU+/km4YnyiCYfQQEwANaReJz7KDfw==", "dev": true, "requires": { - "diff": "3.3.1", - "formatio": "1.2.0", - "lodash.get": "4.4.2", - "lolex": "2.3.1", - "nise": "1.2.0", - "supports-color": "5.1.0", - "type-detect": "4.0.7" + "@sinonjs/formatio": "^2.0.0", + "diff": "^3.5.0", + "lodash.get": "^4.4.2", + "lolex": "^2.4.2", + "nise": "^1.3.3", + "supports-color": "^5.4.0", + "type-detect": "^4.0.8" }, "dependencies": { + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, "supports-color": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", - "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^3.0.0" } } } @@ -6341,23 +7707,23 @@ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0" + "is-fullwidth-code-point": "^2.0.0" } }, "snapdragon": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", - "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", - "dev": true, - "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.1", - "use": "2.0.2" + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "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" }, "dependencies": { "define-property": { @@ -6366,66 +7732,18 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } + "is-descriptor": "^0.1.0" } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-extendable": "^0.1.0" } }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -6440,9 +7758,49 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } } }, "snapdragon-util": { @@ -6451,15 +7809,18 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" - } - }, - "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", - "requires": { - "hoek": "4.2.0" + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "source-map": { @@ -6468,16 +7829,16 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-resolve": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", - "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "2.0.3", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "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-url": { @@ -6487,12 +7848,12 @@ "dev": true }, "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "requires": { - "through": "2.3.8" + "through": "2" } }, "split-string": { @@ -6501,28 +7862,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "2.0.4" - } - } + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -6532,18 +7872,19 @@ "dev": true }, "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" } }, "stack-trace": { @@ -6557,8 +7898,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -6567,72 +7908,15 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-descriptor": "^0.1.0" } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, "stealthy-require": { "version": "1.1.1", @@ -6640,69 +7924,44 @@ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" }, "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "version": "0.2.2", + "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", + "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", "dev": true, "requires": { - "duplexer": "0.1.1" + "duplexer": "~0.1.1", + "through": "~2.3.4" } }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - } + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" - }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^3.0.0" } }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" }, "strip-json-comments": { "version": "2.0.1", @@ -6711,48 +7970,42 @@ "dev": true }, "superagent": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.2.tgz", - "integrity": "sha512-gVH4QfYHcY3P0f/BZzavLreHW3T1v7hG9B+hpMQotGQqurOvhv87GcMCd6LWySmBuf+BDR44TQd0aISjVHLeNQ==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "cookiejar": "2.1.1", - "debug": "3.1.0", - "extend": "3.0.1", - "form-data": "2.3.1", - "formidable": "1.1.1", - "methods": "1.1.2", - "mime": "1.4.1", - "qs": "6.5.1", - "readable-stream": "2.3.3" + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", + "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "dev": true, + "requires": { + "component-emitter": "^1.2.0", + "cookiejar": "^2.1.0", + "debug": "^3.1.0", + "extend": "^3.0.0", + "form-data": "^2.3.1", + "formidable": "^1.2.0", + "methods": "^1.1.1", + "mime": "^1.4.1", + "qs": "^6.5.1", + "readable-stream": "^2.3.5" }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz", + "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, "supertest": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.0.0.tgz", - "integrity": "sha1-jUu2j9GDDuBwM7HFpamkAhyWUpY=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-3.3.0.tgz", + "integrity": "sha512-dMQSzYdaZRSANH5LL8kX3UpgK9G1LRh/jnggs/TI0W2Sz7rkMx9Y48uia3K9NgcaWEV28tYkBnXE4tiFC77ygQ==", "dev": true, "requires": { - "methods": "1.1.2", - "superagent": "3.8.2" + "methods": "^1.1.2", + "superagent": "^3.8.3" } }, "supports-color": { @@ -6773,41 +8026,41 @@ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "dev": true, "requires": { - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", - "chalk": "2.3.0", - "lodash": "4.17.4", + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", "slice-ansi": "1.0.0", - "string-width": "2.1.1" + "string-width": "^2.1.1" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^3.0.0" } } } @@ -6818,12 +8071,12 @@ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", "dev": true, "requires": { - "execa": "0.7.0" + "execa": "^0.7.0" } }, "text-encoding": { "version": "0.6.4", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", + "resolved": "http://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", "dev": true }, @@ -6838,12 +8091,12 @@ "resolved": "https://registry.npmjs.org/throng/-/throng-4.0.0.tgz", "integrity": "sha1-mDxroZk7WOroWZmKpof/6I34TBc=", "requires": { - "lodash.defaults": "4.2.0" + "lodash.defaults": "^4.0.1" } }, "through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, @@ -6864,7 +8117,7 @@ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.2" } }, "to-object-path": { @@ -6873,113 +8126,63 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" - } - }, - "to-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.1.tgz", - "integrity": "sha1-FTWL7kosg712N3uh3ASdDxiDeq4=", - "dev": true, - "requires": { - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "regex-not": "1.0.0" + "kind-of": "^3.0.2" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-buffer": "^1.1.5" } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "dev": true, "requires": { - "nopt": "1.0.10" + "nopt": "~1.0.10" } }, "tough-cookie": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", - "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "requires": { - "punycode": "1.4.1" + "psl": "^1.1.24", + "punycode": "^1.4.1" } }, "tr46": { @@ -6988,13 +8191,13 @@ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "dev": true, "requires": { - "punycode": "2.1.0" + "punycode": "^2.1.0" }, "dependencies": { "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true } } @@ -7004,7 +8207,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -7019,13 +8222,13 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-detect": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.7.tgz", - "integrity": "sha512-4Rh17pAMVdMWzktddFhISRnUnFIStObtUMNGzDwlA6w/77bmGv3aBbRdCmQR6IjzfkTo9otnW+2K/cDRhKSxDA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, "type-is": { @@ -7034,22 +8237,7 @@ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.20" - }, - "dependencies": { - "mime-db": { - "version": "1.36.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", - "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==" - }, - "mime-types": { - "version": "2.1.20", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", - "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", - "requires": { - "mime-db": "1.36.0" - } - } + "mime-types": "~2.1.18" } }, "typedarray": { @@ -7064,31 +8252,17 @@ "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "optional": true, "requires": { - "commander": "2.17.1", - "source-map": "0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "optional": true - } + "commander": "~2.17.1", + "source-map": "~0.6.1" } }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, "undefsafe": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.1.tgz", - "integrity": "sha1-A7LyoWyUVW4Usu3vMmzWaq+CcHo=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", + "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", "dev": true, "requires": { - "debug": "2.6.9" + "debug": "^2.2.0" } }, "union-value": { @@ -7097,22 +8271,31 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, "set-value": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -7123,7 +8306,7 @@ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", "dev": true, "requires": { - "crypto-random-string": "1.0.0" + "crypto-random-string": "^1.0.0" } }, "unpipe": { @@ -7137,8 +8320,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -7147,9 +8330,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -7177,50 +8360,57 @@ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", "dev": true }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, "update-notifier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.3.0.tgz", - "integrity": "sha1-TognpruRUUCrCTVZ1wFOPruDdFE=", - "dev": true, - "requires": { - "boxen": "1.3.0", - "chalk": "2.3.0", - "configstore": "3.1.1", - "import-lazy": "2.1.0", - "is-installed-globally": "0.1.0", - "is-npm": "1.0.0", - "latest-version": "3.1.0", - "semver-diff": "2.1.0", - "xdg-basedir": "3.0.0" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^3.0.0" } } } @@ -7237,7 +8427,7 @@ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, "requires": { - "prepend-http": "1.0.4" + "prepend-http": "^1.0.1" } }, "usage": { @@ -7245,103 +8435,20 @@ "resolved": "https://registry.npmjs.org/usage/-/usage-0.7.1.tgz", "integrity": "sha1-JfMQalGVUKukG/bnaFvJvVMzYv8=", "requires": { - "bindings": "1.3.0", - "nan": "2.8.0" + "bindings": "1.x.x", + "nan": "^2.0.9" } }, "use": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", - "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", - "dev": true, - "requires": { - "define-property": "0.2.5", - "isobject": "3.0.1", - "lazy-cache": "2.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - }, - "lazy-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", - "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", - "dev": true, - "requires": { - "set-getter": "0.1.0" - } - } - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "util-inspect": { "version": "0.1.8", @@ -7358,12 +8465,6 @@ "object-keys": "0.5.0" }, "dependencies": { - "foreach": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.4.tgz", - "integrity": "sha1-zF0NiuHUbMmlVcJoL5EJd4WZNd8=", - "dev": true - }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -7384,9 +8485,9 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "varname": { "version": "2.0.3", @@ -7403,9 +8504,9 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" } }, "w3c-hr-time": { @@ -7414,7 +8515,7 @@ "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", "dev": true, "requires": { - "browser-process-hrtime": "0.1.2" + "browser-process-hrtime": "^0.1.2" } }, "webidl-conversions": { @@ -7424,46 +8525,67 @@ "dev": true }, "whatwg-encoding": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", - "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, "requires": { - "iconv-lite": "0.4.19" + "iconv-lite": "0.4.24" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, "whatwg-fetch": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", - "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" + }, + "whatwg-mimetype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.2.0.tgz", + "integrity": "sha512-5YSO1nMd5D1hY3WzAQV3PzZL83W3YeyR1yW9PcH26Weh1t+Vzh9B6XkDh7aXm83HBZ4nSMvkjvN2H2ySWIvBgw==", + "dev": true }, "whatwg-url": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz", - "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", "dev": true, "requires": { - "lodash.sortby": "4.7.0", - "tr46": "1.0.1", - "webidl-conversions": "4.0.2" + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true, + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, "widest-line": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", "dev": true, "requires": { - "string-width": "2.1.1" + "string-width": "^2.1.1" } }, "winston": { @@ -7471,12 +8593,12 @@ "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.4.tgz", "integrity": "sha512-NBo2Pepn4hK4V01UfcWcDlmiVTs7VTB1h7bgnB0rgP146bYhMxX0ypCz3lBOfNxCO4Zuek7yeT+y/zM1OfMw4Q==", "requires": { - "async": "1.0.0", - "colors": "1.0.3", - "cycle": "1.0.3", - "eyes": "0.1.8", - "isstream": "0.1.2", - "stack-trace": "0.0.10" + "async": "~1.0.0", + "colors": "1.0.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "stack-trace": "0.0.x" }, "dependencies": { "async": { @@ -7491,6 +8613,48 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -7502,7 +8666,7 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, "write-file-atomic": { @@ -7511,20 +8675,18 @@ "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, "ws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.0.0.tgz", - "integrity": "sha512-QYslsH44bH8O7/W2815u5DpnCpXWpEK44FmaHffNwgJI4JMaSZONgPBTOfrxJ29mXKbXak+LsJ2uAkDTYq2ptQ==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", "dev": true, "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", - "ultron": "1.1.1" + "async-limiter": "~1.0.0" } }, "xdg-basedir": { @@ -7539,11 +8701,42 @@ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", + "integrity": "sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig==", + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^8.1.0" + } + }, + "yargs-parser": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-8.1.0.tgz", + "integrity": "sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ==", + "requires": { + "camelcase": "^4.1.0" + } } } } diff --git a/package.json b/package.json index aa61a792..8eb6369b 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "url": "https://github.com/Financial-Times/origami-registry-ui.git" }, "engines": { - "node": "^8.6.0", + "node": "^10.8.0", "npm": "^5" }, "main": "./lib/service.js", @@ -29,12 +29,15 @@ "@financial-times/origami-repo-data-client": "^1.4.0", "@financial-times/origami-service": "^4.0.0", "@financial-times/origami-service-makefile": "^6.1.0", + "cheerio": "^1.0.0-rc.2", "dotenv": "^4.0.0", "heroku-node-settings": "^1.1.0", "http-errors": "^1.6.2", "prismjs": "^1.11.0", "request-promise-native": "^1.0.5", "require-all": "^2.2.0", + "sassdoc-extras": "^2.4.3", + "showdown": "^1.8.6", "throng": "^4.0.0" }, "devDependencies": { @@ -46,7 +49,7 @@ "nodemon": "^1.12.1", "nyc": "^11.2.1", "proclaim": "^3.5.0", - "sinon": "^4.0.1", + "sinon": "^5.0.0", "supertest": "^3.0.0" } } diff --git a/src/js/filterable-nav.js b/src/js/filterable-nav.js new file mode 100644 index 00000000..08bd11bc --- /dev/null +++ b/src/js/filterable-nav.js @@ -0,0 +1,79 @@ +'use strict'; + + +function setNavVisibility(navElement, searchTerm) { + // Create search Regex. + searchTerm = (typeof searchTerm === 'string' ? searchTerm.trim() : ''); + const regExpSafeQuery = searchTerm.trim().replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'); + const searchRegExp = new RegExp(`${regExpSafeQuery}`, 'i'); + // Given nav is hidden unless it has a visible item. + const items = Array.from(navElement.children).filter(element => element.tagName === 'LI'); + const navVisible = items.reduce((navVisible, item) => { + // Check item against query. + const itemMatches = !searchTerm || searchRegExp.test(item.textContent) ? true : false; + // Check subnavs against query. + const subNavs = Array.from(item.children).filter(element => element.tagName === 'UL'); + const itemHasVisibleSubnav = subNavs.reduce((itemHasVisibleSubnav, subNav) => { + const subnavVisible = setNavVisibility(subNav, searchTerm); + return subnavVisible ? true : itemHasVisibleSubnav; + }, false); + // Show item if it has a link which matches the query, or if it has a visible subnav. + const hasAnchor = Array.from(item.children).filter(element => element.tagName === 'A').length > 0; + const itemVisible = (itemMatches && hasAnchor) || itemHasVisibleSubnav; + item.setAttribute('aria-hidden', (itemVisible ? 'false' : 'true')); + // Show the nav if an item is visible. + return itemVisible ? true : navVisible; + }, false); + // Set nav visibility. + navElement.setAttribute('aria-hidden', (navVisible ? 'false' : 'true')); + return navVisible; +}; + +/** + * Represents a filterable nav. + */ +class FilterableNav { + constructor(navElement) { + const formId = navElement.getAttribute('data-filterable-nav'); + const formElement = document.querySelector(`#${formId}`); + if (!formElement) { + throw new Error(`Could not find a form by id "#${formId}" for an input to filter the nav.`); + } + const inputElement = formElement.querySelector('input'); + if (!inputElement) { + throw new Error(`Could not find an input in form "#${formId}" to filter the nav.`); + } + inputElement.addEventListener('input', event => this.filterNav(event.target.value)); + formElement.addEventListener('submit', event => this.feelingLucky(event)); + this.navElement = navElement; + this.inputElement = inputElement; + } + + filterNav(searchTerm) { + setNavVisibility(this.navElement, searchTerm); + } + + feelingLucky(event) { + event.preventDefault(); + const selector = 'ul:not([aria-hidden="true"]) li:not([aria-hidden="true"]) > a:first-of-type'; + const firstLink = this.navElement.querySelector(selector); + if (firstLink) { + window.location = firstLink.getAttribute('href'); + } + } + + static init(rootEl) { + if (!rootEl) { + rootEl = document.body; + } + if (!(rootEl instanceof HTMLElement)) { + rootEl = document.querySelector(rootEl); + } + if (rootEl instanceof HTMLElement && rootEl.getAttribute('data-filterable-nav')) { + return new FilterableNav(rootEl); + } + return Array.from(rootEl.querySelectorAll('[data-filterable-nav]'), rootEl => new FilterableNav(rootEl)); + } +} + +module.exports = FilterableNav; diff --git a/src/js/main.js b/src/js/main.js index df7b6b3a..1b775770 100644 --- a/src/js/main.js +++ b/src/js/main.js @@ -1,17 +1,20 @@ 'use strict'; +require('o-syntax-highlight'); require('./click-helper'); require('./demo'); require('./select-text'); require('./sticky-scroll'); require('./versioning'); +const FilterableNav = require('./filterable-nav'); const ComponentListing = require('./component-listing'); const FilterForm = require('./filter-form'); const LinkedHeading = require('./linked-heading'); // Initialise components document.addEventListener('o.DOMContentLoaded', () => { + FilterableNav.init(); ComponentListing.init(); FilterForm.init(); LinkedHeading.init(); diff --git a/src/js/sticky-scroll.js b/src/js/sticky-scroll.js index a2f931a5..279bb754 100644 --- a/src/js/sticky-scroll.js +++ b/src/js/sticky-scroll.js @@ -1,22 +1,20 @@ 'use strict'; module.exports = (function() { - const wrappers = document.querySelectorAll('.registry__container--wrapper'); - const header = document.querySelector('header'); - const footer = document.querySelector('footer'); + const stickyElements = document.querySelectorAll('.registry__container__sticky'); - document.addEventListener('scroll', () => { - Array.from(wrappers, wrapper => { - if (wrapper && wrapper.offsetHeight >= window.innerHeight) { - if ((wrapper.offsetHeight + window.scrollY) > footer.offsetTop) { - wrapper.classList.remove('registry__container--sticky'); - } else if (header.offsetHeight <= window.scrollY) { - wrapper.classList.add('registry__container--sticky'); - } else { - wrapper.classList.remove('registry__container--sticky'); - } + const updateStickyScroll = () => { + Array.from(stickyElements, element => { + // Scroll page rather than element unless the element has stuck. + if (element.parentElement.getBoundingClientRect().top > 0) { + element.scrollTop = 0; + element.style['overflow-x'] = 'unset'; + } else { + element.style['overflow-x'] = 'hidden'; } - }); - }); + }; + + document.addEventListener('scroll', () => window.requestAnimationFrame(updateStickyScroll)); + updateStickyScroll(); }()); diff --git a/src/main.js b/src/main.js index 35e17f95..855a2dd2 100644 --- a/src/main.js +++ b/src/main.js @@ -5,4 +5,5 @@ require('o-header-services'); require('o-message'); require('o-overlay'); require('o-tabs'); +require('o-table'); require('o-autoinit'); diff --git a/src/main.scss b/src/main.scss index 7a6fd8ed..b873b628 100644 --- a/src/main.scss +++ b/src/main.scss @@ -1,4 +1,5 @@ $o-normalise-is-silent: false; +$o-table-is-silent: false; $o-brand: 'internal'; @import 'o-colors/main'; @@ -15,6 +16,7 @@ $o-brand: 'internal'; @import 'o-typography/main'; @import 'o-syntax-highlight/main'; @import 'o-visual-effects/main'; +@import 'o-table/main'; @import 'src/scss/colors'; @import 'src/scss/component/main'; @@ -37,6 +39,14 @@ html, body { @include oTypographyLink(); } + .link-external { + @include oTypographyLinkExternal(); + } + + blockquote { + @include oTypographyBlockquote(); + } + .secondary-button { @include oButtons(big, mono); width: 100%; diff --git a/src/scss/component/_codedocs.scss b/src/scss/component/_codedocs.scss new file mode 100644 index 00000000..249d8313 --- /dev/null +++ b/src/scss/component/_codedocs.scss @@ -0,0 +1,30 @@ +.registry__doclet { + display: none; +} + +.registry__doclet--default, +.registry__doclet:target { + display: block; +} + +// Hide default doclet if another doclet is the target. +.registry__doclet:target ~ .registry__doclet--default { + display: none; +} + +.o-table--code-docs { + tr td:first-child, tr th:first-child { + padding-left: 0; + } + @include oGridRespondTo($until: S) { + th { + padding-left: 0; + } + } + .o-table__code-docs-shrink { + @include oGridRespondTo(M) { + width: 0.1%; + white-space: nowrap; + } + } +} diff --git a/src/scss/component/_list-sidebar.scss b/src/scss/component/_list-sidebar.scss index c84faeb2..388f844d 100644 --- a/src/scss/component/_list-sidebar.scss +++ b/src/scss/component/_list-sidebar.scss @@ -1,24 +1,31 @@ -.registry__component--list { - list-style: none; - padding: 0 24px 12px; - margin: 0; - - li:first-of-type:not([aria-hidden="true"]) { - padding-top: 0; +.registry__sidebar-list { + &, + ul { + margin: 0; + padding: 0; + list-style: none; + li:not([data-o-component-category]) > ul { + padding-left: oTypographySpacingSize(3); + @include oTypographyMargin($top: 3); + @include oTypographySans(0); + } } - .registry__component-listing--hidden { + [aria-hidden="true"] { display: none; } } -.registry__component--list-title { +.registry__sidebar-list-title { @include oTypographySansBold(2); - @include oTypographyPadding($top: 5, $bottom: 2); + @include oTypographyMargin($bottom: 3); + @include oTypographyMargin($top: 5); + display: block; } -.registry__component--list-item { - @include oTypographyPadding($top: 1, $bottom: 2); +.registry__sidebar-list-item { + @include oTypographyMargin($bottom: 3); + overflow-wrap: break-word; a { @include oTypographyLinkCustom( diff --git a/src/scss/component/_syntax-highlight.scss b/src/scss/component/_syntax-highlight.scss deleted file mode 100644 index 9cce0af3..00000000 --- a/src/scss/component/_syntax-highlight.scss +++ /dev/null @@ -1,2 +0,0 @@ -@include oSyntaxHighlightBase; -@include oSyntaxHighlightHTML; diff --git a/src/scss/component/main.scss b/src/scss/component/main.scss index abdc7683..d226ca76 100644 --- a/src/scss/component/main.scss +++ b/src/scss/component/main.scss @@ -6,9 +6,10 @@ @import 'list-sidebar'; @import 'overlay'; @import 'support'; -@import 'syntax-highlight'; +@import 'codedocs'; -@include oMessage($types: 'alert-inner' 'notice-inner', $status: 'error' 'warning-light' 'inform'); +@include oSyntaxHighlightAll(); +@include oMessage($types: 'alert-inner' 'notice-inner', $status: 'error' 'warning' 'warning-light' 'inform'); .registry__alert, .registry__notice { diff --git a/src/scss/layout/_header.scss b/src/scss/layout/_header.scss index 1b4b2f3c..3b930c60 100644 --- a/src/scss/layout/_header.scss +++ b/src/scss/layout/_header.scss @@ -1,6 +1,7 @@ @include oHeaderServicesTop; @include oHeaderServicesDrawer; @include oHeaderServicesPrimaryNav; +@include oHeaderServicesSubNav; .o-header-services__bleed-container { @include oHeaderServicesContainer($bleed: true); diff --git a/src/scss/layout/_main-container.scss b/src/scss/layout/_main-container.scss index 0fcfb5c2..4f1a99cc 100644 --- a/src/scss/layout/_main-container.scss +++ b/src/scss/layout/_main-container.scss @@ -1,46 +1,109 @@ - .registry__container { - display: flex; + display: grid; + grid: auto-flow / minmax(0, 1fr); - &-left { - @include oTypographySans(1); - background-color: oColorsGetPaletteColor('slate-white-5'); - border-right: 1px solid oColorsGetPaletteColor('slate-white-15'); + @include oGridRespondTo(M) { + grid: auto-flow / 260px minmax(0, 1fr); + }; - .registry__container--wrapper { - width: 260px; - } + @include oGridRespondTo(L) { + grid: auto-flow / 260px minmax(0, 1fr) 320px; + }; + + pre { + overflow: scroll; } - &-center { - @include oGridContainer($grid-mode: "fluid", $bleed: true); - width: 100%; - padding: 20px; + img { + max-width: 100%; } +} - &-right { - flex-shrink: 2; - background-color: oColorsGetPaletteColor('slate-white-5'); - border-left: 1px solid oColorsGetPaletteColor('slate-white-15'); - min-width: 25%; +.registry__container__left { + display: none; + @include oTypographySans(1); + background-color: oColorsGetPaletteColor('slate-white-5'); + padding: oTypographySpacingSize(5); + border-right: 1px solid oColorsGetPaletteColor('slate-white-15'); + @include oGridRespondTo(M) { + display: block; + }; + fieldset { + margin-bottom: oTypographySpacingSize(5); + } +} - h2, - h3, - h4 { - text-transform: uppercase; - } - .registry__container--wrapper { - padding: 0 20px; +.registry__container__center { + @include oGridContainer($grid-mode: "fluid"); + padding: oTypographySpacingSize(5); + width: 100%; +} + +.registry__container__right { + display: none; + background-color: oColorsGetPaletteColor('slate-white-5'); + padding: oTypographySpacingSize(5); + border-left: 1px solid oColorsGetPaletteColor('slate-white-15'); + @include oGridRespondTo(M) { + display: block; + }; + + > :first-child { + margin-top: 0; + } + + h2, + h3 { + @include oTypographyMargin($bottom: 3); + } + + h2, + h3, + h4 { + text-transform: uppercase; + } + + p { + margin: 0; + } + + ul { + @include oTypographyMargin($top: 1); + padding-left: oTypographySpacingSize(5); + } + + code { + font-size: 14px; + padding: 2px; + background-color: oColorsGetPaletteColor('slate-white-15'); + } + + pre { + font-size: 14px; + tab-size: 0; + padding: oTypographySpacingSize(2); + background-color: oColorsGetPaletteColor('slate-white-15'); + + &.overflow { + overflow: scroll; } } - &--wrapper { - top: 0; - bottom: 0; - overflow-x: hidden; + .github-link { + @include oButtons(big, 'primary-mono'); + width: 100%; + text-transform: uppercase; + border: none; } +} - &--sticky { - max-height: 100vh; +.registry__container__sticky { + position: sticky; + max-height: calc(100vh - #{oTypographySpacingSize(10)}); + top: oTypographySpacingSize(5); + bottom: oTypographySpacingSize(5); + overflow-x: hidden; + > :first-child { + margin-top: 0; } } diff --git a/src/scss/layout/_media-queries.scss b/src/scss/layout/_media-queries.scss index a255e15d..c40620ba 100644 --- a/src/scss/layout/_media-queries.scss +++ b/src/scss/layout/_media-queries.scss @@ -1,10 +1,10 @@ @include oGridRespondTo($until: S) { - .registry__container-left, .registry__component--demo-tabs span { display: none; } }; + @include oGridRespondTo($until: M) { .registry__table-cell-toggle, .registry__component--nav, @@ -30,9 +30,3 @@ margin: 0; } }; - -@include oGridRespondTo($until: L) { - .registry__container-right { - display: none; - } -}; diff --git a/src/scss/layout/_sidebar.scss b/src/scss/layout/_sidebar.scss index b3dbe385..e69de29b 100644 --- a/src/scss/layout/_sidebar.scss +++ b/src/scss/layout/_sidebar.scss @@ -1,44 +0,0 @@ -.registry__container-right__inner { - position: sticky; - top: 0; - align-self: flex-start; - - h2, - h3 { - @include oTypographyMargin($bottom: 3); - } - - p { - margin: 0; - } - - ul { - @include oTypographyMargin($top: 1); - padding-left: oTypographySpacingSize(5); - } - - code { - font-size: 14px; - padding: 2px; - background-color: oColorsGetPaletteColor('slate-white-15'); - } - - pre { - font-size: 14px; - tab-size: 0; - padding: oTypographySpacingSize(2); - background-color: oColorsGetPaletteColor('slate-white-15'); - - &.overflow { - overflow: scroll; - } - } - - .github-link { - @include oButtons(big, 'primary-mono'); - @include oTypographyMargin($top: 5); - width: 100%; - text-transform: uppercase; - border: none; - } -} diff --git a/src/scss/overview/_component-list.scss b/src/scss/overview/_component-list.scss index df093a55..c5eb0e68 100644 --- a/src/scss/overview/_component-list.scss +++ b/src/scss/overview/_component-list.scss @@ -1,6 +1,7 @@ .registry__component-list { list-style-type: none; padding-left: 0; + margin-top: 0; li { padding: 8px 0 8px 8px; @@ -50,7 +51,7 @@ width: 15%; } - &.registry__component-listing--hidden { + &[aria-hidden="true"] { display: none; } } diff --git a/src/scss/overview/_search-form.scss b/src/scss/overview/_search-form.scss index 6e6c57fe..d48670e4 100644 --- a/src/scss/overview/_search-form.scss +++ b/src/scss/overview/_search-form.scss @@ -1,32 +1,12 @@ .registry__form { - @include oTypographyPadding($bottom: 5); - .o-forms { - padding: 20px 20px 0; - - &__group { - margin: 0 - } + .o-forms, + .o-forms__group { + padding: 0; } fieldset.o-forms { @include oTypographyPadding($top: 0); - - .o-forms__additional-info { - @include oTypographyPadding($bottom: 4); - } - } - - &--overview { - position: sticky; - top: 0; - align-self: flex-start; - min-width: 260px; - } - - &--nav { - padding-bottom: 0; - min-width: 220px; } } diff --git a/test/integration/lib/code-docs/jsdoc/index.test.js b/test/integration/lib/code-docs/jsdoc/index.test.js new file mode 100644 index 00000000..3b2eb200 --- /dev/null +++ b/test/integration/lib/code-docs/jsdoc/index.test.js @@ -0,0 +1,79 @@ +'use strict'; + +const assert = require('proclaim'); +const JsDoc = require('../../../../../lib/code-docs/jsdoc'); +const ClassNode = require('../../../../../lib/code-docs/jsdoc/nodes/class'); +const EventNode = require('../../../../../lib/code-docs/jsdoc/nodes/event'); +const FunctionNode = require('../../../../../lib/code-docs/jsdoc/nodes/function'); +const MixinNode = require('../../../../../lib/code-docs/jsdoc/nodes/mixin'); +const NamespaceNode = require('../../../../../lib/code-docs/jsdoc/nodes/namespace'); +const PropertyNode = require('../../../../../lib/code-docs/jsdoc/nodes/property'); +const ModuleNode = require('../../../../../lib/code-docs/jsdoc/nodes/module'); +const jsDocExampleData = require('../../../../../test/jsdoc.json'); + +describe('lib/code-docs/jsdoc/index', () => { + + const testJsDoc = new JsDoc(jsDocExampleData); + + describe('getNodes', () => { + const nodes = testJsDoc.getNodes(); + it('Did not return array.', () => { + assert.isTrue(Array.isArray(nodes)); + }); + it('Returns the expected number of formatted class nodes.', () => { + assert.equal(nodes.filter(node => node instanceof ClassNode).length, 5); + }); + it('Returns the expected number of formatted event nodes.', () => { + assert.equal(nodes.filter(node => node instanceof EventNode).length, 1); + }); + it('Returns the expected number of formatted function nodes.', () => { + assert.equal(nodes.filter(node => node instanceof FunctionNode).length, 15); + }); + it('Returns the expected number of formatted mixin nodes.', () => { + assert.equal(nodes.filter(node => node instanceof MixinNode).length, 1); + }); + it('Returns the expected number of formatted namespace nodes.', () => { + assert.equal(nodes.filter(node => node instanceof NamespaceNode).length, 1); + }); + it('Returns the expected number of property nodes from constant and member doclets.', () => { + assert.equal(nodes.filter(node => node instanceof PropertyNode).length, 2); + }); + it('Returns the expected number of formatted module nodes.', () => { + assert.equal(nodes.filter(node => node instanceof ModuleNode).length, 2); + }); + }); + + describe('getNodesByTypeWithMembers', () => { + const nodesByHierarchy = testJsDoc.getNodesByTypeWithMembers(); + it('Returns an object with the expected number of global classes', () => { + assert.equal(nodesByHierarchy.classes.length, 4); + }); + it('Returns an object with the expected number of global events', () => { + assert.equal(nodesByHierarchy.events, undefined, 'No global events expected in this test'); + }); + it('Returns an object with the expected number of global functions', () => { + assert.equal(nodesByHierarchy.functions.length, 5); + }); + it('Returns an object with the expected number of global mixins', () => { + assert.equal(nodesByHierarchy.mixins.length, 1); + }); + it('Returns an object with the expected number of global namespaces', () => { + assert.equal(nodesByHierarchy.namespaces.length, 1); + }); + it('Returns an object with the expected number of global properties', () => { + assert.equal(nodesByHierarchy.properties.length, 1); + }); + it('Returns an object with the expected number of global modules', () => { + assert.equal(nodesByHierarchy.modules.length, 2); + }); + it('Nests non-global nodes', () => { + assert.ok(nodesByHierarchy.classes.find(classNode => { + return classNode.functions && classNode.functions[0] && classNode.functions[0] instanceof FunctionNode; + }), 'Expected at least one class to have nested functions.'); + assert.ok(nodesByHierarchy.classes.find(classNode => { + return classNode.properties && classNode.properties[0] && classNode.properties[0] instanceof PropertyNode; + }), 'Expected at least one class to have nested properties.'); + }); + }); + +}); diff --git a/test/integration/lib/code-docs/sassdoc/index.test.js b/test/integration/lib/code-docs/sassdoc/index.test.js new file mode 100644 index 00000000..9047ba7d --- /dev/null +++ b/test/integration/lib/code-docs/sassdoc/index.test.js @@ -0,0 +1,60 @@ +'use strict'; + +const assert = require('proclaim'); +const SassDoc = require('../../../../../lib/code-docs/sassdoc'); +const sassDocExampleData = require('../../../../../test/sassdoc.json'); +const Mixin = require('../../../../../lib/code-docs/sassdoc/nodes/mixin'); +const Function = require('../../../../../lib/code-docs/sassdoc/nodes/function'); +const Variable = require('../../../../../lib/code-docs/sassdoc/nodes/variable'); + +describe('lib/code-docs/sassdoc/index', () => { + const masterBrandSassDoc = new SassDoc('o-example', 'master', sassDocExampleData); + const internalBrandSassDoc = new SassDoc('o-example', 'internal', sassDocExampleData); + + describe('getNodesByKind', () => { + const masterBrandNodesByKind = masterBrandSassDoc.getNodesByKind(); + it('Returns an object with the expected number of mixins for the master brand', () => { + assert.equal(masterBrandNodesByKind.mixin.length, 7); + }); + it('Returns an object with the expected number of functions for the master brand', () => { + assert.equal(masterBrandNodesByKind.function.length, 2); + }); + it('Returns an object with the expected number of variables for the master brand', () => { + assert.equal(masterBrandNodesByKind.variable.length, 4); + }); + }); + + describe('getNodes', () => { + const masterBrandNodes = masterBrandSassDoc.getNodes(); + it('Did not return array for the master brand.', () => { + assert.isTrue(Array.isArray(masterBrandNodes)); + }); + it('Returns the expected number of formatted mixin nodes for the master brand.', () => { + assert.equal(masterBrandNodes.filter(node => node instanceof Mixin).length, 7); + }); + it('Returns the expected number of formatted function nodes for the master brand.', () => { + assert.equal(masterBrandNodes.filter(node => node instanceof Function).length, 2); + }); + it('Returns the expected number of formatted variable nodes for the master brand.', () => { + assert.equal(masterBrandNodes.filter(node => node instanceof Variable).length, 4); + }); + + const internalBrandNodes = internalBrandSassDoc.getNodes(); + it('Did not return array for the internal brand.', () => { + assert.isTrue(Array.isArray(internalBrandNodes)); + }); + it('Returns the expected number of formatted mixin nodes for the internal brand.', () => { + assert.equal( + internalBrandNodes.filter(node => node instanceof Mixin).length, + 5, + 'Expected the internal brand to have fewer mixins than the master brand in this case.' + ); + }); + it('Returns the expected number of formatted function nodes for the internal brand.', () => { + assert.equal(internalBrandNodes.filter(node => node instanceof Function).length, 2); + }); + it('Returns the expected number of formatted variable nodes for the internal brand.', () => { + assert.equal(internalBrandNodes.filter(node => node instanceof Variable).length, 4); + }); + }); +}); diff --git a/test/integration/mock/repo-data-api/data/repos.js b/test/integration/mock/repo-data-api/data/repos.js index b21e571d..bd82d524 100644 --- a/test/integration/mock/repo-data-api/data/repos.js +++ b/test/integration/mock/repo-data-api/data/repos.js @@ -22,6 +22,9 @@ module.exports = [ demos: null, dependencies: null }, + markdown: { + readme: '# o-example-active\n## test-readme\nExample content.' + }, // mock use only _versions: ['2.0.0', '1.1.1', '1.1.0', '1.0.1', '1.0.0'] diff --git a/test/integration/mock/repo-data-api/data/versions.js b/test/integration/mock/repo-data-api/data/versions.js index 805ab76d..49f8806c 100644 --- a/test/integration/mock/repo-data-api/data/versions.js +++ b/test/integration/mock/repo-data-api/data/versions.js @@ -10,6 +10,9 @@ const versions = module.exports = {}; // `_versions` property for (const repo of repos) { versions[repo.name] = repo._versions.map(version => { - return defaults({version}, repo); + return defaults({ + id: version, + repo: repo.name + }, {version}, repo); }); } diff --git a/test/integration/mock/repo-data-api/mock-service.js b/test/integration/mock/repo-data-api/mock-service.js index d76e49d7..e6f5fd23 100644 --- a/test/integration/mock/repo-data-api/mock-service.js +++ b/test/integration/mock/repo-data-api/mock-service.js @@ -28,6 +28,13 @@ module.exports = async function mockRepoDataApi() { } response.send(versions[request.params.name]); }); + api.get('/v1/repos/:name/versions/:versionId/markdown/:markdownType', (request, response, next) => { + const repo = repos.find(repo => repo.name === request.params.name); + if (!repo || !repo._versions.includes(request.params.versionId) || !repo.markdown.readme) { + return next(httpError(404)); + } + response.send(repo.markdown.readme); + }); api.use((error, request, response, next) => { // eslint-disable-line no-unused-vars response.status(error.status).send({ status: error.status, diff --git a/test/integration/routes/components-(id)-readme.test.js b/test/integration/routes/components-(id)-readme.test.js new file mode 100644 index 00000000..98507ed5 --- /dev/null +++ b/test/integration/routes/components-(id)-readme.test.js @@ -0,0 +1,106 @@ +/* global agent */ +'use strict'; + +const assert = require('proclaim'); +const { JSDOM } = require('jsdom'); + +describe('GET /components/:componentId/readme', () => { + let request; + + describe('when a component name and version is provided', () => { + + beforeEach(async () => { + request = agent.get('/components/o-example-active@2.0.0/readme'); + }); + + it('responds with a 200 status', () => { + return request.expect(200); + }); + + it('responds with HTML', () => { + return request.expect('Content-Type', /text\/html/); + }); + + // Assertions here are based on data in `../mock/repo-data-api/data` + describe('HTML response', () => { + let dom; + + beforeEach(async () => { + dom = new JSDOM((await request.then()).text); + }); + + it('includes the component\'s readme', () => { + const readmeContent = dom.window.document.querySelector('#test-readme'); + assert.isNotNull(readmeContent); + assert.strictEqual(readmeContent.textContent.trim(), 'test-readme'); + }); + + }); + + }); + + describe('when only a component name is provided', () => { + + beforeEach(async () => { + request = agent.get('/components/o-example-active/readme'); + }); + + it('responds with a 307 status', () => { + return request.expect(307); + }); + + it('responds with a Location header pointing to the latest version page', () => { + return request.expect('Location', '/components/o-example-active@2.0.0/readme'); + }); + + }); + + describe('when a component name and a "latest" version identifier is provided', () => { + + beforeEach(async () => { + request = agent.get('/components/o-example-active@latest/readme'); + }); + + it('responds with a 307 status', () => { + return request.expect(307); + }); + + it('responds with a Location header pointing to the latest version page', () => { + return request.expect('Location', '/components/o-example-active@2.0.0/readme'); + }); + + }); + + describe('when the named component does not exist', () => { + + beforeEach(async () => { + request = agent.get('/components/o-not-a-component/readme'); + }); + + it('responds with a 404 status', () => { + return request.expect(404); + }); + + it('responds with HTML', () => { + return request.expect('Content-Type', /text\/html/); + }); + + }); + + describe('when the named component version does not exist', () => { + + beforeEach(async () => { + request = agent.get('/components/o-example-active@123.456.789/readme'); + }); + + it('responds with a 404 status', () => { + return request.expect(404); + }); + + it('responds with HTML', () => { + return request.expect('Content-Type', /text\/html/); + }); + + }); + +}); diff --git a/test/jsdoc.json b/test/jsdoc.json new file mode 100644 index 00000000..1c5a0012 --- /dev/null +++ b/test/jsdoc.json @@ -0,0 +1,1701 @@ +[ + { + "comment": "/**\n * A global variable called 'foo'.\n * http://usejsdoc.org/tags-member.html\n * @type {number}\n */", + "meta": { + "range": [ + 107, + 115 + ], + "filename": "main.js", + "lineno": 6, + "columnno": 6, + "path": "", + "code": { + "id": "astnode100000003", + "name": "foo", + "type": "Literal", + "value": 42 + } + }, + "description": "A global variable called 'foo'.\nhttp://usejsdoc.org/tags-member.html", + "type": { + "names": [ + "number" + ] + }, + "name": "foo", + "longname": "foo", + "kind": "constant", + "scope": "global", + "params": [] + }, + { + "comment": "/**\n * A global function with param, to say hello to somebody. Anything could say hello!\n * Even an alian could say hello! If a person is saying hello consider using {@link Person#sayHello} instead.\n * This peculiar example is inspired by [a jsdoc example]{@link http://usejsdoc.org/tags-function.html}.\n * This comment is also a great test of the jsdoc {@link http://usejsdoc.org/tags-function.html link tag}\n * @param {string} somebody\n */", + "meta": { + "range": [ + 560, + 626 + ], + "filename": "main.js", + "lineno": 15, + "columnno": 0, + "path": "", + "code": { + "id": "astnode100000006", + "name": "sayHello", + "type": "FunctionDeclaration", + "paramnames": [ + "somebody" + ] + } + }, + "description": "A global function with param, to say hello to somebody. Anything could say hello!\nEven an alian could say hello! If a person is saying hello consider using {@link Person#sayHello} instead.\nThis peculiar example is inspired by [a jsdoc example]{@link http://usejsdoc.org/tags-function.html}.\nThis comment is also a great test of the jsdoc {@link http://usejsdoc.org/tags-function.html link tag}", + "params": [ + { + "type": { + "names": [ + "string" + ] + }, + "name": "somebody" + } + ], + "name": "sayHello", + "longname": "sayHello", + "kind": "function", + "scope": "global" + }, + { + "comment": "/**\n * An explicit private member.\n * http://usejsdoc.org/tags-private.html\n * @type {string}\n * @private\n */", + "meta": { + "range": [ + 116, + 138 + ], + "filename": "access.js", + "lineno": 7, + "columnno": 6, + "path": "/src/js", + "code": { + "id": "astnode100000030", + "name": "privateMember", + "type": "Literal", + "value": "shhh" + } + }, + "description": "An explicit private member.\nhttp://usejsdoc.org/tags-private.html", + "type": { + "names": [ + "string" + ] + }, + "access": "private", + "name": "privateMember", + "longname": "privateMember", + "kind": "constant", + "scope": "global", + "params": [] + }, + { + "comment": "/**\n * A explicit private function.\n * http://usejsdoc.org/tags-private.html\n * @private\n */", + "meta": { + "range": [ + 234, + 285 + ], + "filename": "access.js", + "lineno": 14, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000033", + "name": "whisper", + "type": "FunctionDeclaration", + "paramnames": [] + } + }, + "description": "A explicit private function.\nhttp://usejsdoc.org/tags-private.html", + "access": "private", + "name": "whisper", + "longname": "whisper", + "kind": "function", + "scope": "global", + "params": [] + }, + { + "comment": "/**\n * An Origami implicitly private function (with underscore).\n * http://usejsdoc.org/tags-private.html\n */", + "meta": { + "range": [ + 397, + 454 + ], + "filename": "access.js", + "lineno": 22, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000042", + "name": "_utterQuietly", + "type": "FunctionDeclaration", + "paramnames": [] + } + }, + "description": "An Origami implicitly private function (with underscore).\nhttp://usejsdoc.org/tags-private.html", + "name": "_utterQuietly", + "longname": "_utterQuietly", + "kind": "function", + "scope": "global", + "params": [] + }, + { + "comment": "", + "meta": { + "range": [ + 456, + 517 + ], + "filename": "access.js", + "lineno": 26, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000052", + "name": "module.exports", + "type": "ObjectExpression", + "value": "{\"privateMember\":\"\",\"whisper\":\"\",\"_utterQuietly\":\"\"}", + "paramnames": [] + } + }, + "undocumented": true, + "name": "exports", + "longname": "module.exports", + "kind": "member", + "memberof": "module", + "scope": "static" + }, + { + "comment": "", + "meta": { + "range": [ + 476, + 489 + ], + "filename": "access.js", + "lineno": 27, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000057", + "name": "privateMember", + "type": "Identifier", + "value": "privateMember" + } + }, + "undocumented": true, + "name": "privateMember", + "longname": "module.exports.privateMember", + "kind": "member", + "memberof": "module.exports", + "scope": "static" + }, + { + "comment": "", + "meta": { + "range": [ + 492, + 499 + ], + "filename": "access.js", + "lineno": 28, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000059", + "name": "whisper", + "type": "Identifier", + "value": "whisper" + } + }, + "undocumented": true, + "name": "whisper", + "longname": "module.exports.whisper", + "kind": "member", + "memberof": "module.exports", + "scope": "static" + }, + { + "comment": "", + "meta": { + "range": [ + 502, + 515 + ], + "filename": "access.js", + "lineno": 29, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000061", + "name": "_utterQuietly", + "type": "Identifier", + "value": "_utterQuietly" + } + }, + "undocumented": true, + "name": "_utterQuietly", + "longname": "module.exports._utterQuietly", + "kind": "member", + "memberof": "module.exports", + "scope": "static" + }, + { + "comment": "/**\n * Creates a new Person.\n * http://usejsdoc.org/tags-class.html\n * @constructor\n * @param {string} name\n */", + "meta": { + "range": [ + 112, + 181 + ], + "filename": "class.js", + "lineno": 7, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000065", + "name": "Person", + "type": "FunctionDeclaration", + "paramnames": [ + "name" + ] + }, + "vars": { + "this.name": "Person#name" + } + }, + "description": "Creates a new Person.\nhttp://usejsdoc.org/tags-class.html", + "kind": "class", + "params": [ + { + "type": { + "names": [ + "string" + ] + }, + "name": "name" + } + ], + "name": "Person", + "longname": "Person", + "scope": "global" + }, + { + "comment": "/** @member {string} */", + "meta": { + "range": [ + 162, + 178 + ], + "filename": "class.js", + "lineno": 9, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000070", + "name": "this.name", + "type": "Identifier", + "value": "name", + "paramnames": [] + } + }, + "kind": "member", + "type": { + "names": [ + "string" + ] + }, + "name": "name", + "longname": "Person#name", + "memberof": "Person", + "scope": "instance" + }, + { + "comment": "/**\n * A function for a person to say hello.\n */", + "meta": { + "range": [ + 232, + 314 + ], + "filename": "class.js", + "lineno": 15, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000076", + "name": "Person.prototype.sayHello", + "type": "ArrowFunctionExpression", + "paramnames": [] + } + }, + "description": "A function for a person to say hello.", + "name": "sayHello", + "longname": "Person#sayHello", + "kind": "function", + "memberof": "Person", + "scope": "instance" + }, + { + "comment": "/**\n * Class representing a domesticated animal.\n */", + "meta": { + "range": [ + 370, + 509 + ], + "filename": "class.js", + "lineno": 22, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000095", + "name": "Pet", + "type": "ClassDeclaration", + "paramnames": [] + } + }, + "classdesc": "Class representing a domesticated animal.", + "name": "Pet", + "longname": "Pet", + "kind": "class", + "scope": "global", + "params": [] + }, + { + "comment": "", + "meta": { + "range": [ + 383, + 426 + ], + "filename": "class.js", + "lineno": 23, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000098", + "name": "Pet", + "type": "MethodDefinition", + "paramnames": [] + }, + "vars": { + "": null + } + }, + "undocumented": true, + "name": "Pet", + "longname": "Pet", + "kind": "class", + "scope": "global", + "params": [] + }, + { + "comment": "", + "meta": { + "range": [ + 401, + 422 + ], + "filename": "class.js", + "lineno": 24, + "columnno": 2, + "path": "/src/js", + "code": { + "id": "astnode100000103", + "name": "this.hasEaten", + "type": "Literal", + "value": false, + "paramnames": [] + } + }, + "undocumented": true, + "name": "hasEaten", + "longname": "Pet#hasEaten", + "kind": "member", + "memberof": "Pet", + "scope": "instance" + }, + { + "comment": "", + "meta": { + "range": [ + 428, + 507 + ], + "filename": "class.js", + "lineno": 26, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000108", + "name": "Pet#eat", + "type": "MethodDefinition", + "paramnames": [ + "food" + ] + }, + "vars": { + "": null + } + }, + "undocumented": true, + "name": "eat", + "longname": "Pet#eat", + "kind": "function", + "memberof": "Pet", + "scope": "instance", + "params": [] + }, + { + "comment": "", + "meta": { + "range": [ + 442, + 462 + ], + "filename": "class.js", + "lineno": 27, + "columnno": 2, + "path": "/src/js", + "code": { + "id": "astnode100000114", + "name": "this.hasEaten", + "type": "Literal", + "value": true, + "paramnames": [] + } + }, + "undocumented": true, + "name": "hasEaten", + "longname": "Pet#hasEaten", + "kind": "member", + "memberof": "Pet", + "scope": "instance" + }, + { + "comment": "/**\n * Creates a new Cat.\n * Uses JSDoc class tag with doc comments on class and constructor.\n * http://usejsdoc.org/tags-class.html\n * @class\n * @extends Pet\n */", + "meta": { + "range": [ + 674, + 875 + ], + "filename": "class.js", + "lineno": 39, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000128", + "name": "Cat", + "type": "ClassDeclaration", + "paramnames": [ + "name" + ] + } + }, + "classdesc": "Creates a new Cat.\nUses JSDoc class tag with doc comments on class and constructor.\nhttp://usejsdoc.org/tags-class.html", + "kind": "class", + "augments": [ + "Pet" + ], + "name": "Cat", + "longname": "Cat", + "scope": "global", + "params": [ + { + "type": { + "names": [ + "string" + ] + }, + "name": "name" + } + ] + }, + { + "comment": "/**\n\t * @param {string} name\n\t */", + "meta": { + "range": [ + 734, + 787 + ], + "filename": "class.js", + "lineno": 43, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000132", + "name": "Cat", + "type": "MethodDefinition", + "paramnames": [ + "name" + ] + }, + "vars": { + "": null + } + }, + "params": [ + { + "type": { + "names": [ + "string" + ] + }, + "name": "name" + } + ], + "name": "Cat", + "longname": "Cat", + "kind": "class", + "scope": "global", + "undocumented": true + }, + { + "comment": "", + "meta": { + "range": [ + 767, + 783 + ], + "filename": "class.js", + "lineno": 45, + "columnno": 2, + "path": "/src/js", + "code": { + "id": "astnode100000141", + "name": "this.name", + "type": "Identifier", + "value": "name", + "paramnames": [] + } + }, + "undocumented": true, + "name": "name", + "longname": "Cat#name", + "kind": "member", + "memberof": "Cat", + "scope": "instance" + }, + { + "comment": "/**\n\t * Log a sound of a cat.\n\t */", + "meta": { + "range": [ + 826, + 873 + ], + "filename": "class.js", + "lineno": 51, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000146", + "name": "Cat.makeSound", + "type": "MethodDefinition", + "paramnames": [] + }, + "vars": { + "": null + } + }, + "description": "Log a sound of a cat.", + "name": "makeSound", + "longname": "Cat.makeSound", + "kind": "function", + "memberof": "Cat", + "scope": "static", + "params": [] + }, + { + "comment": "/**\n * @extends Pet\n */", + "meta": { + "range": [ + 901, + 1224 + ], + "filename": "class.js", + "lineno": 59, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000156", + "name": "Dog", + "type": "ClassDeclaration", + "paramnames": [ + "name" + ] + } + }, + "augments": [ + "Pet" + ], + "name": "Dog", + "longname": "Dog", + "kind": "class", + "scope": "global", + "description": "Creates a new Dog.\nMissing class tag and doc comment on constructor only.\nhttp://usejsdoc.org/tags-class.html", + "params": [ + { + "type": { + "names": [ + "string" + ] + }, + "name": "name" + } + ] + }, + { + "comment": "/**\n\t * Creates a new Dog.\n\t * Missing class tag and doc comment on constructor only.\n\t * http://usejsdoc.org/tags-class.html\n\t * @param {string} name\n\t */", + "meta": { + "range": [ + 1083, + 1136 + ], + "filename": "class.js", + "lineno": 66, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000160", + "name": "Dog", + "type": "MethodDefinition", + "paramnames": [ + "name" + ] + }, + "vars": { + "": null + } + }, + "description": "Creates a new Dog.\nMissing class tag and doc comment on constructor only.\nhttp://usejsdoc.org/tags-class.html", + "params": [ + { + "type": { + "names": [ + "string" + ] + }, + "name": "name" + } + ], + "name": "Dog", + "longname": "Dog", + "kind": "class", + "scope": "global", + "undocumented": true + }, + { + "comment": "", + "meta": { + "range": [ + 1116, + 1132 + ], + "filename": "class.js", + "lineno": 68, + "columnno": 2, + "path": "/src/js", + "code": { + "id": "astnode100000169", + "name": "this.name", + "type": "Identifier", + "value": "name", + "paramnames": [] + } + }, + "undocumented": true, + "name": "name", + "longname": "Dog#name", + "kind": "member", + "memberof": "Dog", + "scope": "instance" + }, + { + "comment": "/**\n\t * Log a sound of a dog.\n\t */", + "meta": { + "range": [ + 1175, + 1222 + ], + "filename": "class.js", + "lineno": 74, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000174", + "name": "Dog.makeSound", + "type": "MethodDefinition", + "paramnames": [] + }, + "vars": { + "": null + } + }, + "description": "Log a sound of a dog.", + "name": "makeSound", + "longname": "Dog.makeSound", + "kind": "function", + "memberof": "Dog", + "scope": "static", + "params": [] + }, + { + "comment": "", + "meta": { + "range": [ + 1226, + 1266 + ], + "filename": "class.js", + "lineno": 79, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000185", + "name": "module.exports", + "type": "ObjectExpression", + "value": "{\"Person\":\"\",\"Cat\":\"\",\"Dog\":\"\"}", + "paramnames": [] + } + }, + "undocumented": true, + "name": "exports", + "longname": "module.exports", + "kind": "member", + "memberof": "module", + "scope": "static" + }, + { + "comment": "", + "meta": { + "range": [ + 1246, + 1252 + ], + "filename": "class.js", + "lineno": 80, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000190", + "name": "Person", + "type": "Identifier", + "value": "Person" + } + }, + "undocumented": true, + "name": "Person", + "longname": "module.exports.Person", + "kind": "member", + "memberof": "module.exports", + "scope": "static" + }, + { + "comment": "", + "meta": { + "range": [ + 1255, + 1258 + ], + "filename": "class.js", + "lineno": 81, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000192", + "name": "Cat", + "type": "Identifier", + "value": "Cat" + } + }, + "undocumented": true, + "name": "Cat", + "longname": "module.exports.Cat", + "kind": "member", + "memberof": "module.exports", + "scope": "static" + }, + { + "comment": "", + "meta": { + "range": [ + 1261, + 1264 + ], + "filename": "class.js", + "lineno": 82, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000194", + "name": "Dog", + "type": "Identifier", + "value": "Dog" + } + }, + "undocumented": true, + "name": "Dog", + "longname": "module.exports.Dog", + "kind": "member", + "memberof": "module.exports", + "scope": "static" + }, + { + "comment": "/** @module ComplexModule */", + "meta": { + "filename": "complex-module.js", + "lineno": 1, + "columnno": 0, + "path": "/src/js", + "code": {} + }, + "kind": "module", + "name": "ComplexModule", + "longname": "module:ComplexModule" + }, + { + "comment": "/**\n * Test the JsDoc example tag.\n * http://usejsdoc.org/tags-example.html\n * Solves equations of the form a * x = b\n * @example\n * // returns 3\n * solveAsExample(5, 15);\n * @example Captioned example usage of solveAsExample.\n * // returns 2\n * solveAsExample(5, 10);\n * @returns {Number} Returns the value of x for the equation.\n */", + "meta": { + "range": [ + 384, + 464 + ], + "filename": "complex-module.js", + "lineno": 15, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000199", + "name": "module.exports.solveAsExample", + "type": "FunctionExpression", + "value": "solveAsExample", + "paramnames": [ + "a", + "b" + ] + } + }, + "description": "Test the JsDoc example tag.\nhttp://usejsdoc.org/tags-example.html\nSolves equations of the form a * x = b", + "examples": [ + "// returns 3\nsolveAsExample(5, 15);", + "Captioned example usage of solveAsExample.\n// returns 2\nsolveAsExample(5, 10);" + ], + "returns": [ + { + "type": { + "names": [ + "Number" + ] + }, + "description": "Returns the value of x for the equation." + } + ], + "name": "solveAsExample", + "longname": "module:ComplexModule.solveAsExample", + "kind": "function", + "memberof": "module:ComplexModule", + "scope": "static" + }, + { + "comment": "/**\n * An example constructor within a module.\n * @constructor\n * @example\n * const myIncrementer = new incrementer();\n * myIncrementer.increment(4); // 4\n * myIncrementer.increment(4); // 8\n * myIncrementer.increment(1); // 9\n */", + "meta": { + "range": [ + 698, + 996 + ], + "filename": "complex-module.js", + "lineno": 28, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000215", + "name": "module.exports.incrementer", + "type": "FunctionExpression", + "value": "incrementer", + "paramnames": [] + }, + "vars": { + "this.num": "module:ComplexModule.incrementer#num", + "this.increment": "module:ComplexModule.incrementer#increment", + "": null + } + }, + "description": "An example constructor within a module.", + "kind": "class", + "examples": [ + "const myIncrementer = new incrementer();\nmyIncrementer.increment(4); // 4\nmyIncrementer.increment(4); // 8\nmyIncrementer.increment(1); // 9" + ], + "name": "incrementer", + "longname": "module:ComplexModule.incrementer", + "memberof": "module:ComplexModule", + "scope": "static" + }, + { + "comment": "", + "meta": { + "range": [ + 753, + 765 + ], + "filename": "complex-module.js", + "lineno": 29, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000225", + "name": "this.num", + "type": "Literal", + "value": 0, + "paramnames": [] + } + }, + "undocumented": true, + "name": "num", + "longname": "module:ComplexModule.incrementer#num", + "kind": "member", + "memberof": "module:ComplexModule.incrementer", + "scope": "instance" + }, + { + "comment": "/**\n\t * An example constructor within a module.\n\t * @param {Number} num - The number to increment by.\n\t * @returns {Number} - The updated value.\n\t */", + "meta": { + "range": [ + 919, + 993 + ], + "filename": "complex-module.js", + "lineno": 35, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000231", + "name": "this.increment", + "type": "FunctionExpression", + "paramnames": [ + "num" + ] + }, + "vars": { + "this.num": "module:ComplexModule.incrementer#num" + } + }, + "description": "An example constructor within a module.", + "params": [ + { + "type": { + "names": [ + "Number" + ] + }, + "description": "The number to increment by.", + "name": "num" + } + ], + "returns": [ + { + "type": { + "names": [ + "Number" + ] + }, + "description": "- The updated value." + } + ], + "name": "increment", + "longname": "module:ComplexModule.incrementer#increment", + "kind": "function", + "memberof": "module:ComplexModule.incrementer", + "scope": "instance" + }, + { + "comment": "", + "meta": { + "range": [ + 955, + 970 + ], + "filename": "complex-module.js", + "lineno": 36, + "columnno": 2, + "path": "/src/js", + "code": { + "id": "astnode100000239", + "name": "this.num", + "type": "Identifier", + "value": "num", + "paramnames": [] + } + }, + "undocumented": true, + "name": "num", + "longname": "module:ComplexModule.incrementer#num", + "kind": "member", + "memberof": "module:ComplexModule.incrementer", + "scope": "instance" + }, + { + "comment": "/**\n * @deprecated Use {@link Person#sayHello} instead.\n * @param {string} name\n * To make a human says hello, announcing their name.\n */", + "meta": { + "range": [ + 138, + 213 + ], + "filename": "deprecated.js", + "lineno": 6, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000250", + "name": "humanSayHello", + "type": "FunctionDeclaration", + "paramnames": [ + "name" + ] + } + }, + "deprecated": "Use {@link Person#sayHello} instead.", + "params": [ + { + "type": { + "names": [ + "string" + ] + }, + "description": "To make a human says hello, announcing their name.", + "name": "name" + } + ], + "name": "humanSayHello", + "longname": "humanSayHello", + "kind": "function", + "scope": "global" + }, + { + "comment": "/**\n * Throws things to test JSDoc events.\n * http://usejsdoc.org/tags-event.html\n */", + "meta": { + "range": [ + 86, + 106 + ], + "filename": "event.js", + "lineno": 5, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000265", + "name": "Hurl", + "type": "FunctionDeclaration", + "paramnames": [] + } + }, + "description": "Throws things to test JSDoc events.\nhttp://usejsdoc.org/tags-event.html", + "name": "Hurl", + "longname": "Hurl", + "kind": "function", + "scope": "global", + "params": [] + }, + { + "comment": "/**\n * Throw a snowball.\n *\n * @fires Hurl#snowball\n */", + "meta": { + "range": [ + 164, + 484 + ], + "filename": "event.js", + "lineno": 14, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000269", + "name": "Hurl.prototype.snowball", + "type": "FunctionExpression", + "paramnames": [] + } + }, + "description": "Throw a snowball.", + "fires": [ + "Hurl#event:snowball" + ], + "name": "snowball", + "longname": "Hurl#snowball", + "kind": "function", + "memberof": "Hurl", + "scope": "instance" + }, + { + "comment": "/**\n\t * Snowball event.\n\t *\n\t * @event Hurl#snowball\n\t * @type {object}\n\t * @property {boolean} detail.isPacked - Indicates whether the snowball is tightly packed.\n\t */", + "meta": { + "filename": "event.js", + "lineno": 15, + "columnno": 1, + "path": "/src/js", + "code": {} + }, + "description": "Snowball event.", + "kind": "event", + "name": "snowball", + "type": { + "names": [ + "object" + ] + }, + "properties": [ + { + "type": { + "names": [ + "boolean" + ] + }, + "description": "Indicates whether the snowball is tightly packed.", + "name": "detail.isPacked" + } + ], + "memberof": "Hurl", + "longname": "Hurl#event:snowball", + "scope": "instance" + }, + { + "comment": "", + "meta": { + "range": [ + 426, + 476 + ], + "filename": "event.js", + "lineno": 23, + "columnno": 2, + "path": "/src/js", + "code": { + "id": "astnode100000286", + "name": "detail", + "type": "ObjectExpression", + "value": "{\"isPacked\":\"\"}" + } + }, + "undocumented": true, + "name": "detail", + "longname": "detail", + "kind": "member", + "scope": "global" + }, + { + "comment": "", + "meta": { + "range": [ + 439, + 472 + ], + "filename": "event.js", + "lineno": 24, + "columnno": 3, + "path": "/src/js", + "code": { + "id": "astnode100000288", + "name": "isPacked", + "type": "MemberExpression", + "value": "this._snowball.isPacked" + } + }, + "undocumented": true, + "name": "isPacked", + "longname": "detail.isPacked", + "kind": "member", + "memberof": "detail", + "scope": "static" + }, + { + "comment": "", + "meta": { + "range": [ + 488, + 509 + ], + "filename": "event.js", + "lineno": 30, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000295", + "name": "module.exports", + "type": "Identifier", + "value": "Hurl", + "paramnames": [] + } + }, + "undocumented": true, + "name": "exports", + "longname": "module.exports", + "kind": "member", + "memberof": "module", + "scope": "static" + }, + { + "comment": "/**\n *\n * Test the JSDoc mixin tag.\n * http://usejsdoc.org/tags-mixin.html\n *\n * This provides methods used for event handling. It's not meant to\n * be used directly.\n *\n * @mixin\n */", + "meta": { + "range": [ + 190, + 782 + ], + "filename": "mixin.js", + "lineno": 11, + "columnno": 6, + "path": "/src/js", + "code": { + "id": "astnode100000303", + "name": "Eventful", + "type": "ObjectExpression", + "value": "{\"on\":\"\",\"fire\":\"\"}" + } + }, + "description": "Test the JSDoc mixin tag.\nhttp://usejsdoc.org/tags-mixin.html\n\nThis provides methods used for event handling. It's not meant to\nbe used directly.", + "kind": "mixin", + "name": "Eventful", + "longname": "Eventful", + "scope": "global", + "params": [] + }, + { + "comment": "/**\n\t * Register a handler function to be called whenever this event is fired.\n\t * @param {string} eventName - Name of the event.\n\t * @param {function(Object)} handler - The handler to call.\n\t */", + "meta": { + "range": [ + 438, + 489 + ], + "filename": "mixin.js", + "lineno": 18, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000306", + "name": "on", + "type": "FunctionExpression" + } + }, + "description": "Register a handler function to be called whenever this event is fired.", + "params": [ + { + "type": { + "names": [ + "string" + ] + }, + "description": "Name of the event.", + "name": "eventName" + }, + { + "type": { + "names": [ + "function" + ] + }, + "description": "The handler to call.", + "name": "handler" + } + ], + "name": "on", + "longname": "Eventful.on", + "kind": "function", + "memberof": "Eventful", + "scope": "static" + }, + { + "comment": "/**\n\t * Fire an event, causing all handlers for that event name to run.\n\t * @param {string} eventName - Name of the event.\n\t * @param {Object} eventData - The data provided to each handler.\n\t */", + "meta": { + "range": [ + 689, + 744 + ], + "filename": "mixin.js", + "lineno": 27, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000311", + "name": "fire", + "type": "FunctionExpression" + } + }, + "description": "Fire an event, causing all handlers for that event name to run.", + "params": [ + { + "type": { + "names": [ + "string" + ] + }, + "description": "Name of the event.", + "name": "eventName" + }, + { + "type": { + "names": [ + "Object" + ] + }, + "description": "The data provided to each handler.", + "name": "eventData" + } + ], + "name": "fire", + "longname": "Eventful.fire", + "kind": "function", + "memberof": "Eventful", + "scope": "static" + }, + { + "comment": "", + "meta": { + "range": [ + 785, + 810 + ], + "filename": "mixin.js", + "lineno": 33, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000317", + "name": "module.exports", + "type": "Identifier", + "value": "Eventful", + "paramnames": [] + } + }, + "undocumented": true, + "name": "exports", + "longname": "module.exports", + "kind": "member", + "memberof": "module", + "scope": "static" + }, + { + "comment": "", + "meta": { + "range": [ + 0, + 346 + ], + "filename": "name.js", + "lineno": 1, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000325", + "name": "module.exports", + "type": "FunctionExpression", + "paramnames": [] + } + }, + "undocumented": true, + "name": "exports", + "longname": "module.exports", + "kind": "function", + "memberof": "module", + "scope": "static" + }, + { + "comment": "/**\n\t * Testing JsDoc name tag.\n\t * Casual use of eval :scream:\n\t * http://usejsdoc.org/tags-name.html\n\t *\n\t * @name highlightSearchTerm\n\t * @function\n\t * @global\n\t * @param {string} term - The search term to highlight.\n\t */", + "meta": { + "filename": "name.js", + "lineno": 2, + "columnno": 1, + "path": "/src/js", + "code": {} + }, + "description": "Testing JsDoc name tag.\nCasual use of eval :scream:\nhttp://usejsdoc.org/tags-name.html", + "name": "highlightSearchTerm", + "kind": "function", + "scope": "global", + "params": [ + { + "type": { + "names": [ + "string" + ] + }, + "description": "The search term to highlight.", + "name": "term" + } + ], + "longname": "highlightSearchTerm" + }, + { + "comment": "/** @namespace window */", + "meta": { + "filename": "namespace.js", + "lineno": 1, + "columnno": 0, + "path": "/src/js", + "code": {} + }, + "kind": "namespace", + "name": "window", + "longname": "window", + "scope": "global" + }, + { + "comment": "/**\n * Alertnate for the alert function.\n * Example of a namespace tag http://usejsdoc.org/tags-namespace.html\n * @param {string} msg - Message to show in an alert dialogue.\n */", + "meta": { + "range": [ + 204, + 248 + ], + "filename": "namespace.js", + "lineno": 8, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000338", + "name": "window[\"!\"]", + "type": "FunctionExpression", + "paramnames": [ + "msg" + ] + } + }, + "description": "Alertnate for the alert function.\nExample of a namespace tag http://usejsdoc.org/tags-namespace.html", + "params": [ + { + "type": { + "names": [ + "string" + ] + }, + "description": "Message to show in an alert dialogue.", + "name": "msg" + } + ], + "name": "\"!\"", + "longname": "window.\"!\"", + "kind": "function", + "memberof": "window", + "scope": "static" + }, + { + "comment": "/**\n * Returns the sum of a and b.\n * http://usejsdoc.org/tags-returns.html\n * @param {number} a\n * @param {number} b\n * @param {boolean} retArr If set to true, the function will return an array\n * @returns {(number|Array)} Sum of a and b or an array that contains a, b and the sum of a and b.\n */", + "meta": { + "range": [ + 298, + 393 + ], + "filename": "returns.js", + "lineno": 9, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000351", + "name": "myReturnSum", + "type": "FunctionDeclaration", + "paramnames": [ + "a", + "b", + "retArr" + ] + } + }, + "description": "Returns the sum of a and b.\nhttp://usejsdoc.org/tags-returns.html", + "params": [ + { + "type": { + "names": [ + "number" + ] + }, + "name": "a" + }, + { + "type": { + "names": [ + "number" + ] + }, + "name": "b" + }, + { + "type": { + "names": [ + "boolean" + ] + }, + "description": "If set to true, the function will return an array", + "name": "retArr" + } + ], + "returns": [ + { + "type": { + "names": [ + "number", + "Array" + ] + }, + "description": "Sum of a and b or an array that contains a, b and the sum of a and b." + } + ], + "name": "myReturnSum", + "longname": "myReturnSum", + "kind": "function", + "scope": "global" + }, + { + "comment": "", + "meta": { + "range": [ + 395, + 428 + ], + "filename": "returns.js", + "lineno": 16, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000372", + "name": "module.exports", + "type": "ObjectExpression", + "value": "{\"myReturnSum\":\"\"}", + "paramnames": [] + } + }, + "undocumented": true, + "name": "exports", + "longname": "module.exports", + "kind": "member", + "memberof": "module", + "scope": "static" + }, + { + "comment": "", + "meta": { + "range": [ + 415, + 426 + ], + "filename": "returns.js", + "lineno": 17, + "columnno": 1, + "path": "/src/js", + "code": { + "id": "astnode100000377", + "name": "myReturnSum", + "type": "Identifier", + "value": "myReturnSum" + } + }, + "undocumented": true, + "name": "myReturnSum", + "longname": "module.exports.myReturnSum", + "kind": "member", + "memberof": "module.exports", + "scope": "static" + }, + { + "comment": "/**\n * Tests a single export module.\n * @module SimpleModule\n * @see module:example-module for an example of multi export module documentation.\n * @returns {String} Returns a fixed string.\n */", + "meta": { + "filename": "simple-module.js", + "lineno": 1, + "columnno": 0, + "path": "/src/js", + "code": {} + }, + "description": "Tests a single export module.", + "kind": "module", + "name": "SimpleModule", + "see": [ + "module:example-module for an example of multi export module documentation." + ], + "returns": [ + { + "type": { + "names": [ + "String" + ] + }, + "description": "Returns a fixed string." + } + ], + "longname": "module:SimpleModule" + }, + { + "comment": "", + "meta": { + "range": [ + 193, + 265 + ], + "filename": "simple-module.js", + "lineno": 7, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000382", + "name": "module.exports", + "type": "FunctionExpression", + "paramnames": [] + } + }, + "undocumented": true, + "name": "module:SimpleModule", + "longname": "module:SimpleModule", + "kind": "function" + }, + { + "comment": "/**\n * Test the JsDoc throws tag.\n * http://usejsdoc.org/tags-throws.html\n * @throws {Error} This was never going to work.\n */", + "meta": { + "range": [ + 127, + 210 + ], + "filename": "throws.js", + "lineno": 6, + "columnno": 0, + "path": "/src/js", + "code": { + "id": "astnode100000393", + "name": "module.exports", + "type": "FunctionExpression", + "paramnames": [] + } + }, + "description": "Test the JsDoc throws tag.\nhttp://usejsdoc.org/tags-throws.html", + "exceptions": [ + { + "type": { + "names": [ + "Error" + ] + }, + "description": "This was never going to work." + } + ], + "name": "exports", + "longname": "module.exports", + "kind": "function", + "memberof": "module", + "scope": "static" + }, + { + "kind": "package", + "longname": "package:undefined", + "files": [ + "/main.js", + "/src/js/access.js", + "/src/js/class.js", + "/src/js/complex-module.js", + "/src/js/deprecated.js", + "/src/js/event.js", + "/src/js/mixin.js", + "/src/js/name.js", + "/src/js/namespace.js", + "/src/js/returns.js", + "/src/js/simple-module.js", + "/src/js/throws.js" + ] + } +] diff --git a/test/sassdoc.json b/test/sassdoc.json new file mode 100644 index 00000000..72e76b6d --- /dev/null +++ b/test/sassdoc.json @@ -0,0 +1,794 @@ +[ + { + "description": "", + "commentRange": { + "start": 17, + "end": 23 + }, + "context": { + "type": "function", + "name": "oTestComponentDouble", + "code": "\n @return 2 * $scale;\n", + "line": { + "start": 24, + "end": 26 + } + }, + "group": [ + "helpers" + ], + "return": { + "type": "Number" + }, + "example": [ + { + "type": "scss", + "code": "oTestComponentDouble(2) //4" + }, + { + "type": "scss", + "code": "oTestComponentDouble(10) //10" + } + ], + "deprecated": "This function has been replaced. Please contact Origami with any questions.", + "access": "public", + "require": [], + "file": { + "path": "src/scss/_functions.scss", + "name": "_functions.scss" + } + }, + { + "description": "", + "commentRange": { + "start": 28, + "end": 30 + }, + "context": { + "type": "function", + "name": "_oTestComponentGetSize", + "code": "\n @return 25 * $scale;\n", + "line": { + "start": 31, + "end": 33 + } + }, + "group": [ + "helpers" + ], + "return": { + "type": "Number" + }, + "access": "private", + "require": [], + "file": { + "path": "src/scss/_functions.scss", + "name": "_functions.scss" + }, + "usedBy": [ + { + "description": "The main stlyes fo a big test component.\n", + "context": { + "type": "mixin", + "name": "oTestComponentBig", + "code": "\n @include _oTestComponentBase();\n height: _oTestComponentGetSize(1);\n width: _oTestComponentGetSize(1);\n", + "line": { + "start": 2, + "end": 6 + } + } + }, + { + "description": "The main stlyes fo a big test component.\n", + "context": { + "type": "mixin", + "name": "oTestComponentBig", + "code": "\n @include _oTestComponentBase();\n height: _oTestComponentGetSize(1);\n width: _oTestComponentGetSize(1);\n", + "line": { + "start": 2, + "end": 6 + } + } + }, + { + "description": "The main styles for a small test component.\n", + "context": { + "type": "mixin", + "name": "oTestComponentSmall", + "code": "\n @include _oTestComponentBase();\n height: _oTestComponentGetSize(2);\n width: _oTestComponentGetSize(2);\n", + "line": { + "start": 9, + "end": 13 + } + } + }, + { + "description": "The main styles for a small test component.\n", + "context": { + "type": "mixin", + "name": "oTestComponentSmall", + "code": "\n @include _oTestComponentBase();\n height: _oTestComponentGetSize(2);\n width: _oTestComponentGetSize(2);\n", + "line": { + "start": 9, + "end": 13 + } + } + } + ] + }, + { + "description": "", + "commentRange": { + "start": 84, + "end": 87 + }, + "context": { + "type": "mixin", + "name": "_oTestComponentThrowError", + "code": "\n // :point-up: This is to test an implicitly private function.\n @error 'o-test-component says: #{$message}';\n", + "line": { + "start": 88, + "end": 91 + } + }, + "group": [ + "helpers" + ], + "throw": [ + "o-test-component says: #{$message}" + ], + "access": "private", + "require": [], + "file": { + "path": "src/scss/_mixins.scss", + "name": "_mixins.scss" + }, + "usedBy": [ + { + "description": "Applies to a test component.\n", + "context": { + "type": "mixin", + "name": "oTestComponentTheme", + "code": "\n @if type-of(theme) != 'map' {\n @include _oTestComponentThrowError('Invalid theme.');\n }\n background-color: map-get($theme, $primary-color);\n border-color: map-get($theme, $secondary-color);\n", + "line": { + "start": 39, + "end": 45 + } + } + } + ] + }, + { + "description": "A placeholder for shared styles.\nIt's \"naughty\" as we usually avoid them.\n", + "commentRange": { + "start": 4, + "end": 5 + }, + "context": { + "type": "placeholder", + "name": "o-test-component", + "code": "\n content: 'Naughty palceholder.';\n", + "line": { + "start": 6, + "end": 8 + } + }, + "access": "public", + "group": [ + "undefined" + ], + "file": { + "path": "main.scss", + "name": "main.scss" + } + }, + { + "description": "", + "commentRange": { + "start": 1, + "end": 6 + }, + "context": { + "type": "function", + "name": "oTestComponentTell", + "code": "\n @if $keep-quiet {\n @return null;\n }\n @if $truth {\n @return 'Copy-pasta: This code has an author.';\n }\n @return 'I made this.';\n", + "line": { + "start": 7, + "end": 15 + } + }, + "link": [ + { + "url": "https://www.google.co.uk/", + "caption": "" + } + ], + "author": [ + "Jane Madeup Smith", + "John Madeup Smith" + ], + "parameter": [ + { + "type": "Bool", + "name": "keep-quiet", + "default": "false", + "description": "Whether to tell (default) or keep quiet." + }, + { + "type": "Bool", + "name": "truth", + "default": "true", + "description": "Whether to tell the truth (default) or lie." + } + ], + "return": { + "type": "String|Null", + "description": "A made-up sentence." + }, + "access": "public", + "group": [ + "undefined" + ], + "require": [], + "file": { + "path": "src/scss/_functions.scss", + "name": "_functions.scss" + } + }, + { + "description": "The main stlyes fo a big test component.\n", + "commentRange": { + "start": 1, + "end": 1 + }, + "context": { + "type": "mixin", + "name": "oTestComponentBig", + "code": "\n @include _oTestComponentBase();\n height: _oTestComponentGetSize(1);\n width: _oTestComponentGetSize(1);\n", + "line": { + "start": 2, + "end": 6 + } + }, + "access": "public", + "group": [ + "undefined" + ], + "require": [ + { + "type": "mixin", + "name": "_oTestComponentBase" + }, + { + "type": "function", + "name": "_oTestComponentGetSize" + }, + { + "type": "function", + "name": "_oTestComponentGetSize" + } + ], + "file": { + "path": "src/scss/_mixins.scss", + "name": "_mixins.scss" + } + }, + { + "description": "The main styles for a small test component.\n", + "commentRange": { + "start": 8, + "end": 8 + }, + "context": { + "type": "mixin", + "name": "oTestComponentSmall", + "code": "\n @include _oTestComponentBase();\n height: _oTestComponentGetSize(2);\n width: _oTestComponentGetSize(2);\n", + "line": { + "start": 9, + "end": 13 + } + }, + "access": "public", + "group": [ + "undefined" + ], + "require": [ + { + "type": "mixin", + "name": "_oTestComponentBase" + }, + { + "type": "function", + "name": "_oTestComponentGetSize" + }, + { + "type": "function", + "name": "_oTestComponentGetSize" + } + ], + "file": { + "path": "src/scss/_mixins.scss", + "name": "_mixins.scss" + } + }, + { + "description": "Output CSS only if a given feature is supported.\n", + "commentRange": { + "start": 15, + "end": 22 + }, + "context": { + "type": "mixin", + "name": "oTestComponentIfFeature", + "code": "\n @if map-get($map: $o-test-component-features, $key: $feature) {\n @content;\n }\n", + "line": { + "start": 23, + "end": 27 + } + }, + "content": "Conditional CSS styles.", + "example": [ + { + "type": "scss", + "code": "@include oTestComponentIfFeature($feature: 'small') {\n .o-test-component-small--mymodifier {\n border-color: blue;\n };\n}" + } + ], + "access": "public", + "group": [ + "undefined" + ], + "require": [ + { + "type": "variable", + "name": "o-test-component-features" + } + ], + "file": { + "path": "src/scss/_mixins.scss", + "name": "_mixins.scss" + } + }, + { + "description": "Applies to a test component.\n", + "commentRange": { + "start": 29, + "end": 38 + }, + "context": { + "type": "mixin", + "name": "oTestComponentTheme", + "code": "\n @if type-of(theme) != 'map' {\n @include _oTestComponentThrowError('Invalid theme.');\n }\n background-color: map-get($theme, $primary-color);\n border-color: map-get($theme, $secondary-color);\n", + "line": { + "start": 39, + "end": 45 + } + }, + "example": [ + { + "type": "scss", + "code": ".my-test-component {\n @include oTestComponentBig();\n @include oTestComponentTheme($theme: (primary-color: red, secondary-color: blue));\n}", + "description": "A big test component with a custom theme." + } + ], + "see": [ + { + "description": "The main stlyes fo a big test component.\n", + "context": { + "type": "mixin", + "name": "oTestComponentBig", + "code": "\n @include _oTestComponentBase();\n height: _oTestComponentGetSize(1);\n width: _oTestComponentGetSize(1);\n", + "line": { + "start": 2, + "end": 6 + } + } + }, + { + "description": "The main styles for a small test component.\n", + "context": { + "type": "mixin", + "name": "oTestComponentSmall", + "code": "\n @include _oTestComponentBase();\n height: _oTestComponentGetSize(2);\n width: _oTestComponentGetSize(2);\n", + "line": { + "start": 9, + "end": 13 + } + } + } + ], + "parameter": [ + { + "type": "Map", + "name": "theme", + "description": "Apply a custom theme to the component. Theme keys include 'primary-color' and 'secondary-color' (see example)." + } + ], + "throw": [ + "An invalid theme will throw an error." + ], + "access": "public", + "group": [ + "undefined" + ], + "require": [ + { + "type": "mixin", + "name": "_oTestComponentThrowError" + } + ], + "file": { + "path": "src/scss/_mixins.scss", + "name": "_mixins.scss" + } + }, + { + "description": "B2b modifier.\n", + "commentRange": { + "start": 47, + "end": 52 + }, + "context": { + "type": "mixin", + "name": "oTestComponentB2b", + "code": "\n background-color: $o-test-component-b2b-color;\n @if $bold {\n font-weight: bold;\n }\n", + "line": { + "start": 53, + "end": 58 + } + }, + "output": "Modifiying, cosmetic styles to make a test component fit the B2B look.", + "link": [ + { + "url": "http://example.com", + "caption": "Some helpful link to B2b materials." + } + ], + "brand": { + "supported": [ + "master" + ], + "description": "" + }, + "since": [ + { + "version": "v2.0.0", + "description": "All versions since support B2b styles." + } + ], + "parameter": [ + { + "type": "Bool", + "name": "bold", + "default": "false", + "description": "To make the b2b component copy strong." + } + ], + "access": "public", + "group": [ + "undefined" + ], + "require": [ + { + "type": "variable", + "name": "o-test-component-b2b-color" + } + ], + "file": { + "path": "src/scss/_mixins.scss", + "name": "_mixins.scss" + } + }, + { + "description": "Marketing modifier.\n", + "commentRange": { + "start": 60, + "end": 63 + }, + "context": { + "type": "mixin", + "name": "oTestComponentMarketing", + "code": "\n background-color: aqua;\n", + "line": { + "start": 64, + "end": 66 + } + }, + "ignore": [], + "output": "Modifiying, cosmetic styles to make a test component fit the marketing look.", + "brand": { + "supported": [ + "master" + ], + "description": "" + }, + "access": "public", + "group": [ + "undefined" + ], + "file": { + "path": "src/scss/_mixins.scss", + "name": "_mixins.scss" + } + }, + { + "description": "Inverse modifier.\n", + "commentRange": { + "start": 68, + "end": 70 + }, + "context": { + "type": "mixin", + "name": "oTestComponentInverse", + "code": "\n background-color: white;\n color: darkslategray;\n", + "line": { + "start": 71, + "end": 74 + } + }, + "output": "Modifiying, cosmetic styles to make a test component work on a dark background.", + "brand": { + "supported": [ + "internal", + "master" + ], + "description": "" + }, + "access": "public", + "group": [ + "undefined" + ], + "file": { + "path": "src/scss/_mixins.scss", + "name": "_mixins.scss" + } + }, + { + "description": "", + "commentRange": { + "start": 76, + "end": 76 + }, + "context": { + "type": "mixin", + "name": "_oTestComponentBase", + "code": "\n border: 1px solid hotpink;\n &:after {\n content: 'Test component scss.';\n }\n", + "line": { + "start": 77, + "end": 82 + } + }, + "access": "private", + "group": [ + "undefined" + ], + "file": { + "path": "src/scss/_mixins.scss", + "name": "_mixins.scss" + }, + "usedBy": [ + { + "description": "The main stlyes fo a big test component.\n", + "context": { + "type": "mixin", + "name": "oTestComponentBig", + "code": "\n @include _oTestComponentBase();\n height: _oTestComponentGetSize(1);\n width: _oTestComponentGetSize(1);\n", + "line": { + "start": 2, + "end": 6 + } + } + }, + { + "description": "The main styles for a small test component.\n", + "context": { + "type": "mixin", + "name": "oTestComponentSmall", + "code": "\n @include _oTestComponentBase();\n height: _oTestComponentGetSize(2);\n width: _oTestComponentGetSize(2);\n", + "line": { + "start": 9, + "end": 13 + } + } + } + ] + }, + { + "description": "", + "commentRange": { + "start": 1, + "end": 1 + }, + "context": { + "type": "variable", + "name": "o-test-component-main-color", + "value": "hotpink", + "scope": "private", + "line": { + "start": 2, + "end": 2 + } + }, + "type": "Color", + "access": "public", + "group": [ + "undefined" + ], + "file": { + "path": "src/scss/_variables.scss", + "name": "_variables.scss" + }, + "aliased": [ + "o-test-component-primary-color" + ] + }, + { + "description": "B2b variant colour.\n", + "commentRange": { + "start": 4, + "end": 5 + }, + "context": { + "type": "variable", + "name": "o-test-component-b2b-color", + "value": "blue", + "scope": "private", + "line": { + "start": 6, + "end": 6 + } + }, + "type": "Color | Null", + "access": "public", + "group": [ + "undefined" + ], + "file": { + "path": "src/scss/_variables.scss", + "name": "_variables.scss" + }, + "usedBy": [ + { + "description": "B2b modifier.\n", + "context": { + "type": "mixin", + "name": "oTestComponentB2b", + "code": "\n background-color: $o-test-component-b2b-color;\n @if $bold {\n font-weight: bold;\n }\n", + "line": { + "start": 53, + "end": 58 + } + } + } + ] + }, + { + "description": "", + "commentRange": { + "start": 8, + "end": 9 + }, + "context": { + "type": "variable", + "name": "o-test-component-primary-color", + "value": "$o-test-component-main-color", + "scope": "private", + "line": { + "start": 10, + "end": 10 + } + }, + "type": "Color", + "alias": "o-test-component-main-color", + "access": "public", + "group": [ + "undefined" + ], + "file": { + "path": "src/scss/_variables.scss", + "name": "_variables.scss" + } + }, + { + "description": "", + "commentRange": { + "start": 12, + "end": 12 + }, + "context": { + "type": "variable", + "name": "o-test-component-features", + "value": "('big', 'small')", + "scope": "private", + "line": { + "start": 13, + "end": 13 + } + }, + "type": "Map", + "access": "public", + "group": [ + "undefined" + ], + "file": { + "path": "src/scss/_variables.scss", + "name": "_variables.scss" + }, + "usedBy": [ + { + "description": "Output CSS only if a given feature is supported.\n", + "context": { + "type": "mixin", + "name": "oTestComponentIfFeature", + "code": "\n @if map-get($map: $o-test-component-features, $key: $feature) {\n @content;\n }\n", + "line": { + "start": 23, + "end": 27 + } + } + } + ] + }, + { + "description": "", + "commentRange": { + "start": 15, + "end": 24 + }, + "context": { + "type": "variable", + "name": "o-test-component-scales", + "value": "(\n 'marketing': (\n 'miniture': -5,\n 'normal': 6,\n 'massive': 15,\n ),\n 'default': (\n 'miniture': -10,\n 'normal': 1,\n 'massive': 10,\n ),\n)", + "scope": "private", + "line": { + "start": 25, + "end": 36 + } + }, + "todo": [ + "Integrate scale with size related mixins." + ], + "type": "Map", + "property": [ + { + "type": "Map", + "name": "base.marketing" + }, + { + "type": "Map", + "name": "base.default" + }, + { + "type": "Number", + "name": "base.default.miniture" + }, + { + "type": "Number", + "name": "base.default.normal" + }, + { + "type": "Number", + "name": "base.default.massive" + }, + { + "type": "Number", + "name": "base.marketing.miniture" + }, + { + "type": "Number", + "name": "base.marketing.normal" + }, + { + "type": "Number", + "name": "base.marketing.massive" + } + ], + "access": "public", + "group": [ + "undefined" + ], + "file": { + "path": "src/scss/_variables.scss", + "name": "_variables.scss" + } + } +] diff --git a/test/unit/lib/code-docs/example.test.js b/test/unit/lib/code-docs/example.test.js new file mode 100644 index 00000000..e91e4003 --- /dev/null +++ b/test/unit/lib/code-docs/example.test.js @@ -0,0 +1,35 @@ +'use strict'; + +const assert = require('proclaim'); +const Example = require('../../../../lib/code-docs/example'); + +describe('lib/code-docs/example', () => { + const code = ` +

HTML

+

Code example!

+ `; + const type = 'html'; + const caption = 'My HTML example.'; + + it('creates an example with just code', () => { + const example = new Example(code); + assert.equal(example.code, code, 'Did not add code.'); + assert.equal(example.type, '', 'Did not add empty type.'); + assert.equal(example.caption, '', 'Did not add empty caption.'); + }); + it('creates an example with a type', () => { + const example = new Example(code, type); + assert.equal(example.type, type, 'Did not add type.'); + }); + it('creates an example with a caption, enforcing a newline to render as a paragraph via markdown', () => { + const example = new Example(code, null, caption); + assert.include(example.caption, caption, 'Did not add the caption.'); + assert.include(example.caption, '\n', 'Did not enforce newline on the caption.'); + }); + it('creates an example with code, a type, and a caption', () => { + const example = new Example(code, type, caption); + assert.equal(example.code, code, 'Did not add code.'); + assert.equal(example.type, type, 'Did not add type.'); + assert.include(example.caption, caption, 'Did not add the caption.'); + }); +}); diff --git a/test/unit/lib/code-docs/jsdoc/index.test.js b/test/unit/lib/code-docs/jsdoc/index.test.js new file mode 100644 index 00000000..a544c55c --- /dev/null +++ b/test/unit/lib/code-docs/jsdoc/index.test.js @@ -0,0 +1,145 @@ +'use strict'; + +const assert = require('proclaim'); +const JsDoc = require('../../../../../lib/code-docs/jsdoc'); +const ClassNode = require('../../../../../lib/code-docs/jsdoc/nodes/class'); +const FunctionNode = require('../../../../../lib/code-docs/jsdoc/nodes/function'); +const PropertyNode = require('../../../../../lib/code-docs/jsdoc/nodes/property'); +const EventNode = require('../../../../../lib/code-docs/jsdoc/nodes/event'); +const NamespaceNode = require('../../../../../lib/code-docs/jsdoc/nodes/namespace'); +const MixinNode = require('../../../../../lib/code-docs/jsdoc/nodes/mixin'); +const ModuleNode = require('../../../../../lib/code-docs/jsdoc/nodes/module'); +const ClassDoclet = require('../../../mock/code-docs/jsdoc/class'); +const FunctionDoclet = require('../../../mock/code-docs/jsdoc/function'); +const EventDoclet = require('../../../mock/code-docs/jsdoc/event'); +const PropertyDoclet = require('../../../mock/code-docs/jsdoc/property'); +const NamespaceDoclet = require('../../../mock/code-docs/jsdoc/namespace'); +const MixinDoclet = require('../../../mock/code-docs/jsdoc/mixin'); +const ModuleDoclet = require('../../../mock/code-docs/jsdoc/module'); + +describe('lib/code-docs/jsdoc/index', () => { + + describe('supportedDoclets', () => { + it('Returns an array of supported doclet kinds', () => { + assert.isTrue(Array.isArray(JsDoc.supportedDoclets()), 'Did not return an array.'); + assert.isTrue(JsDoc.supportedDoclets().includes('class'), 'Expected at least class doclets to be supported.'); + }); + }); + + describe('getNodes', () => { + let testDoclet = {}; + beforeEach(() => { + testDoclet = { + 'kind': 'function', + 'name': 'helloWorld', + 'longname': 'helloWorld', + }; + }); + it('Removes undocumented doclets', () => { + const undocumentedDoclet = testDoclet; + undocumentedDoclet.undocumented = true; + assert.deepEqual(new JsDoc([undocumentedDoclet]).getNodes(), [], 'Did not remove undocumented doclet.'); + }); + it('Removes unsupported doclet kinds', () => { + const unsuportedKindDoclet = testDoclet; + unsuportedKindDoclet.kind = 'notarealkind'; + assert.deepEqual(new JsDoc([unsuportedKindDoclet]).getNodes(), [], 'Did not remove a doclet of an unsupported kind.'); + }); + it('Removes doclets marked private', () => { + const privateDoclet = testDoclet; + privateDoclet.access = 'private'; + assert.deepEqual(new JsDoc([privateDoclet]).getNodes(), [], 'Did not remove a private doclet.'); + }); + it('Removes pseudo private doclets (where the name starts with an underscore)', () => { + const pseudoPrivateDoclet = testDoclet; + pseudoPrivateDoclet.name = `_${pseudoPrivateDoclet.name}`; + pseudoPrivateDoclet.longname = `_${pseudoPrivateDoclet.longname}`; + assert.deepEqual(new JsDoc([pseudoPrivateDoclet]).getNodes(), [], 'Did not remove a pseudo private doclet.'); + }); + it('Does not remove a documented, supported, public doclet', () => { + assert.ok(new JsDoc([testDoclet]).getNodes()[0], 'Removed supported doclet.'); + }); + it('Formats doclets', () => { + const testJsDoc = new JsDoc([ + ClassDoclet.classDeclarationDoclet, + FunctionDoclet.globalFunctionDoclet, + ]); + const nodes = testJsDoc.getNodes(); + assert.isTrue(Array.isArray(nodes), 'Did not return an array containing formatted nodes.'); + assert.ok(nodes.find(node => node instanceof ClassNode),'Did not format the class node.'); + assert.ok(nodes.find(node => node instanceof FunctionNode),'Did not format the function node.'); + }); + }); + + describe('getNodesByTypeWithMembers', () => { + const classDoclet = { + 'kind': 'class', + 'name': 'World', + 'longname': 'World', + }; + const memberFunctionDoclet = { + 'kind': 'function', + 'name': 'hello', + 'longname': 'World#hello', + 'memberof': 'World', + }; + const testJsDoc = new JsDoc([ + classDoclet, + memberFunctionDoclet, + ]); + const nodes = testJsDoc.getNodesByTypeWithMembers(); + assert.isTrue(nodes.classes[0] instanceof ClassNode, 'Did not return an object with a classes property containing the formatted class node.'); + assert.ok(nodes.classes[0].functions.find(node => node instanceof FunctionNode), 'Did not format the function node as a member of the class node as expected.'); + }); + + describe('formatDoclet', () => { + it('Formats a class doclet', () => { + const doclet = ClassDoclet.classDeclarationDoclet; + const node = JsDoc.formatDoclet(doclet); + assert.isTrue(node instanceof ClassNode, 'Did not create a class node from a class doclet.'); + }); + it('Formats a function doclet', () => { + const doclet = FunctionDoclet.globalFunctionDoclet; + const node = JsDoc.formatDoclet(doclet); + assert.isTrue(node instanceof FunctionNode, 'Did not create a function node from a function doclet.'); + }); + it('Formats a member doclet', () => { + const doclet = PropertyDoclet.memberDoclet; + const node = JsDoc.formatDoclet(doclet); + assert.isTrue(node instanceof PropertyNode, 'Did not create a property node from a member doclet.'); + }); + it('Formats a constant doclet', () => { + const doclet = PropertyDoclet.constantDoclet; + const node = JsDoc.formatDoclet(doclet); + assert.isTrue(node instanceof PropertyNode, 'Did not create a property node from a constant doclet.'); + }); + it('Formats an event doclet', () => { + const doclet = EventDoclet.eventDoclet; + const node = JsDoc.formatDoclet(doclet); + assert.isTrue(node instanceof EventNode, 'Did not create a event node from a event doclet.'); + }); + it('Formats a namespace doclet', () => { + const doclet = NamespaceDoclet.namespaceDoclet; + const node = JsDoc.formatDoclet(doclet); + assert.isTrue(node instanceof NamespaceNode, 'Did not create a namespace node from a namespace doclet.'); + }); + it('Formats a mixin doclet', () => { + const doclet = MixinDoclet.mixinDoclet; + const node = JsDoc.formatDoclet(doclet); + assert.isTrue(node instanceof MixinNode, 'Did not create a mixin node from a mixin doclet.'); + }); + it('Formats a module doclet', () => { + const doclet = ModuleDoclet.moduleDoclet; + const node = JsDoc.formatDoclet(doclet); + assert.isTrue(node instanceof ModuleNode, 'Did not create a module node from a module doclet.'); + }); + it('Throws an error for an unsupported doclet kind', () => { + const doclet = { + kind: 'somethingunknown' + }; + const formatDoclet = JsDoc.formatDoclet.bind(null, doclet); + assert.throws(formatDoclet, null, 'Should throw an error for an unsupported doclet kind.'); + }); + }); + +}); diff --git a/test/unit/lib/code-docs/jsdoc/nav.test.js b/test/unit/lib/code-docs/jsdoc/nav.test.js new file mode 100644 index 00000000..c7773107 --- /dev/null +++ b/test/unit/lib/code-docs/jsdoc/nav.test.js @@ -0,0 +1,132 @@ +'use strict'; + +const assert = require('proclaim'); +const sinon = require('sinon'); +const JsDocNav = require('../../../../../lib/code-docs/jsdoc/nav'); +const JsDoc = require('../../../../../lib/code-docs/jsdoc'); + +describe('lib/code-docs/jsdoc/nav', () => { + // Mock nodes (simplified) + // @see lib/code-docs/nodes/ + const classNode = { + kind: 'class', + group: 'classes', + label: 'Class', + name: 'TestDoclet', + longname: 'TestDoclet', + }; + const memberPropertyNode = { + kind: 'member', + group: 'properties', + label: 'Property', + name: 'name', + longname: 'TestDoclet#name', + memberof: 'TestDoclet' + }; + const memberFunctionNode = { + kind: 'function', + group: 'functions', + label: 'Method', + name: 'helloWorld', + longname: 'TestDoclet#helloWorld', + memberof: 'TestDoclet' + }; + const memberEventNode = { + kind: 'event', + group: 'events', + label: 'Event', + name: 'componentReady', + longname: 'TestDoclet#event:componentReady', + memberof: 'TestDoclet', + }; + const propertyNode = { + kind: 'member', + group: 'properties', + label: 'Property', + name: 'thing', + longname: 'thing', + }; + const functionNode = { + kind: 'function', + group: 'functions', + label: 'Function', + name: 'sayHello', + longname: 'sayHello' + }; + + it('creates a nav item for each class, with its properties and functions in a subnav', () => { + const jsDoc = new JsDoc([]); + sinon.stub(jsDoc, 'getNodes').callsFake(() => { + return [ + classNode, + memberPropertyNode, + memberFunctionNode + ]; + }); + sinon.stub(jsDoc, 'getNodesByTypeWithMembers').callsFake(() => { + const classWithMembers = classNode; + classWithMembers.properties = [memberPropertyNode]; + classWithMembers.functions = [memberFunctionNode]; + return { + classes: [classWithMembers] + }; + }); + const nav = JsDocNav.createNavigation(jsDoc); + // Check the class node is in the root of the nav. + const classSubNav = nav.find(subnav => subnav.title === classNode.name); + assert.equal(typeof classSubNav, 'object', 'Did not add the class node to the root of the nav by its name.'); + // Check the class node has a subnav with its constructor, properties, and methods. + const classConstructorSubNavItem = classSubNav.items.find(subnav => subnav.title.includes('Constructor')); + assert.equal(typeof classConstructorSubNavItem, 'object', 'Did not add the class\'s constructor to a subnav.'); + const classPropertiesSubNav = classSubNav.items.find(subnav => subnav.title.includes(memberPropertyNode.name)); + assert.equal(typeof classPropertiesSubNav, 'object', 'Did not add the class\'s property to a subnav.'); + const classFunctionsSubNav = classSubNav.items.find(subnav => subnav.title.includes(memberFunctionNode.name)); + assert.equal(typeof classFunctionsSubNav, 'object', 'Did not add the class\'s function to a subnav.'); + }); + + it('creates a "global" nav item for nodes which are not a member of another node', () => { + const jsDoc = new JsDoc([]); + sinon.stub(jsDoc, 'getNodes').callsFake(() => { + return [ + propertyNode, + functionNode + ]; + }); + sinon.stub(jsDoc, 'getNodesByTypeWithMembers').callsFake(() => { + return { + properties: [propertyNode], + functions: [functionNode] + }; + }); + const nav = JsDocNav.createNavigation(jsDoc); + // Check a global node is in the root of the nav with the global property and function. + const globalSubNav = nav.find(subnav => subnav.title === 'Global'); + assert.equal(typeof globalSubNav, 'object', 'Did not add global nodes to the root of the nav.'); + }); + + it('creates an "events" nav item for all event nodes', () => { + const jsDoc = new JsDoc([]); + sinon.stub(jsDoc, 'getNodes').callsFake(() => { + return [ + classNode, + memberEventNode, + ]; + }); + sinon.stub(jsDoc, 'getNodesByTypeWithMembers').callsFake(() => { + const classWithMembers = classNode; + classWithMembers.events = [memberEventNode]; + return { + classes: [classWithMembers] + }; + }); + const nav = JsDocNav.createNavigation(jsDoc); + // Check Event node is added to the root of nav reglardless of its "memberof" property. + const eventSubNav = nav.find(subnav => subnav.title === 'Events'); + assert.equal(typeof eventSubNav, 'object', 'Did not add the event node to the root of the nav.'); + assert.equal(eventSubNav.items.length, 1, 'Did not add all the event nodes to the root of the nav as expected.'); + // Check Event node is not added under the class + const classSubNav = nav.find(subnav => subnav.title === classNode.name); + const classEventItem = classSubNav.items.find(subnav => subnav.title.includes(memberEventNode.name)); + assert.equal(classEventItem, undefined, 'Events should not be added as a subnav item to the class they belong to.'); + }); +}); diff --git a/test/unit/lib/code-docs/jsdoc/nodes/base.test.js b/test/unit/lib/code-docs/jsdoc/nodes/base.test.js new file mode 100644 index 00000000..d223e9b7 --- /dev/null +++ b/test/unit/lib/code-docs/jsdoc/nodes/base.test.js @@ -0,0 +1,202 @@ +'use strict'; + +const assert = require('proclaim'); +const JsDocBaseNode = require('../../../../../../lib/code-docs/jsdoc/nodes/base'); +const Example = require('../../../../../../lib/code-docs/example'); + +describe('lib/code-docs/jsdoc/nodes/base', () => { + const comprehensiveDoclet = { + 'comment': '/**\n * A description of the function.\n * And {@link http://usejsdoc.org/tags-function.html a link}.\n * @param {string} worldName\n */', + 'meta': { + 'range': [ + 560, + 626 + ], + 'filename': 'test-doclet.js', + 'lineno': 15, + 'columnno': 0, + 'path': '/src/js', + 'code': { + 'id': 'astnode100000006', + 'name': 'TestDoclet.prototype.helloWorld', + 'type': 'FunctionDeclaration', + 'paramnames': [ + 'worldName' + ] + } + }, + 'description': 'A description of the function.\nAnd {@link http://usejsdoc.org/tags-function.html a link}.', + 'params': [ + { + 'type': { + 'names': [ + 'String' + ] + }, + 'description': 'Name of the world to say hello to e.g. Earth.', + 'name': 'worldName' + } + ], + 'returns': [ + { + 'type': { + 'names': [ + 'String' + ] + }, + 'description': 'Returns a hello.' + } + ], + 'name': 'helloWorld', + 'longname': 'TestDoclet#helloWorld', + 'kind': 'function', + 'scope': 'instance', + 'deprecated': 'See {@link http://example.com} for details.', + 'access': 'private', + 'examples': [ + '// a new test doclet\nnew TestDoclet();', + 'Say hello with a TestDoclet.\n// returns "hello world"\ntestDoclet.helloWorld();' + ], + }; + + const simpleDoclet = { + 'comment': '', + 'meta': { + 'code': { + 'id': 'astnode100000006', + 'name': 'helloWorld', + 'type': 'FunctionDeclaration', + 'paramnames': [] + } + }, + 'params': [], + 'name': 'helloWorld', + 'longname': 'helloWorld', + 'kind': 'function', + 'scope': 'global' + }; + + it('creates a node to represent a JSDoc doclet with basic properties', () => { + const doclet = comprehensiveDoclet; + const node = new JsDocBaseNode(doclet); + assert.equal(node.name, doclet.name, 'Did not add name property.'); + assert.equal(node.longname, doclet.longname, 'Did not add longname property.'); + assert.equal(node.kind, doclet.kind, 'Did not add kind property.'); + assert.equal(node.memberof, doclet.memberof, 'Did not add memberof property.'); + assert.equal(node.access, doclet.access, 'Did not add access property.'); + assert.equal(node.description, + 'A description of the function.\nAnd [a link](http://usejsdoc.org/tags-function.html).' + , 'Did not add description property with links replaced correctly.'); + assert.equal(node.deprecated, + 'See [http://example.com](http://example.com) for details.' + , 'Did not add deprecated property, with deprecation message and links replaced correctly.'); + assert.strictEqual(node.virtual, false, 'Did not add `false` virtual property.'); + assert.deepEqual(node.file, { + path: doclet.meta.path, + name: doclet.meta.filename, + lineno: doclet.meta.lineno, + columnno: doclet.meta.columnno + }, 'Did not add file information as expected.'); + }); + + describe('replaceLinks()', () => { + it('Replaces @link tags of a given string', () => { + const doclet = comprehensiveDoclet; + const node = new JsDocBaseNode(doclet); + const linkCopy = [ + { + 'original': 'Copy with a namepath link {@link fooBar}', + 'expected': 'Copy with a namepath link [fooBar](#fooBar)' + }, + { + 'original': 'Copy with a web link {@link http://usejsdoc.org/tags-function.html}.', + 'expected': 'Copy with a web link [http://usejsdoc.org/tags-function.html](http://usejsdoc.org/tags-function.html).' + }, + { + 'original': 'Copy with {@link fooBar a namepath link}.', + 'expected': 'Copy with [a namepath link](#fooBar).' + }, + { + 'original': 'Copy with {@link http://usejsdoc.org/tags-function.html a web link}.', + 'expected': 'Copy with [a web link](http://usejsdoc.org/tags-function.html).' + }, + { + 'original': 'Copy with [another namepath link]{@link fooBar}', + 'expected': 'Copy with [another namepath link](#fooBar)' + }, + { + 'original': 'Copy with [another web link]{@link http://usejsdoc.org/tags-function.html}', + 'expected': 'Copy with [another web link](http://usejsdoc.org/tags-function.html)' + } + ]; + + linkCopy.forEach(linkCopy => { + assert.equal(node.replaceLinks( + linkCopy.original), + linkCopy.expected, + `Did not replace @link tags as expected for "${linkCopy.original}"` + ); + }); + }); + }); + + describe('addExamples()', () => { + it('Adds doclet examples to node', () => { + const doclet = comprehensiveDoclet; + const node = new JsDocBaseNode(doclet); + node.addExamples(doclet); + assert.deepEqual(node.examples, [ + new Example('// a new test doclet\nnew TestDoclet();', 'js'), + new Example('// returns "hello world"\ntestDoclet.helloWorld();', 'js', 'Say hello with a TestDoclet.') + ], 'Did not add examples as expected.'); + }); + it('Adds empty examples array to node if the doclet has no examples', () => { + const doclet = simpleDoclet; + const node = new JsDocBaseNode(doclet); + node.addExamples(doclet); + assert.deepEqual(node.examples, [], 'Did not add empty examples array.'); + }); + }); + + describe('addParameters()', () => { + it('Adds doclet parameters to node', () => { + const doclet = comprehensiveDoclet; + const node = new JsDocBaseNode(doclet); + node.addParameters(doclet); + assert.deepEqual(node.parameters, [ + { + 'name': doclet.params[0].name, + 'type': ['String'], + 'description': doclet.params[0].description, + 'default': '', + 'optional': '', + 'nullable': '' + } + ], 'Did not add parameters as expected.'); + }); + it('Adds empty parameters array to node if the doclet has no parameters', () => { + const doclet = simpleDoclet; + const node = new JsDocBaseNode(doclet); + node.addParameters(doclet); + assert.deepEqual(node.parameters, [], 'Did not add empty parameters array.'); + }); + }); + + describe('addReturns()', () => { + it('Adds doclet return data to node', () => { + const doclet = comprehensiveDoclet; + const node = new JsDocBaseNode(doclet); + node.addReturns(doclet); + assert.deepEqual(node.returns, { + 'type': ['String'], + 'description': 'Returns a hello.' + }, 'Did not add return data as expected.'); + }); + it('Does not add return data if the doclet has no return value', () => { + const doclet = simpleDoclet; + const node = new JsDocBaseNode(doclet); + node.addReturns(doclet); + assert.deepEqual(node.returns, undefined, 'Should not add returns property for a doclet with no return value.'); + }); + }); +}); diff --git a/test/unit/lib/code-docs/jsdoc/nodes/class.test.js b/test/unit/lib/code-docs/jsdoc/nodes/class.test.js new file mode 100644 index 00000000..535fb94d --- /dev/null +++ b/test/unit/lib/code-docs/jsdoc/nodes/class.test.js @@ -0,0 +1,44 @@ +'use strict'; + +const assert = require('proclaim'); +const JsDocClassNode = require('../../../../../../lib/code-docs/jsdoc/nodes/class'); +const Example = require('../../../../../../lib/code-docs/example'); +const ClassDoclet = require('../../../../mock/code-docs/jsdoc/class'); + +describe('lib/code-docs/jsdoc/nodes/class', () => { + + const constructorDoclet = ClassDoclet.constructorDoclet; + const classDeclarationDoclet = ClassDoclet.classDeclarationDoclet; + + it('adds properties for a doclet which represents a constructor function', () => { + const node = new JsDocClassNode(constructorDoclet); + assert.equal(node.longname, constructorDoclet.longname, 'Did not add the "longname" property as expected.'); + assert.equal(node.group, 'classes', 'Did not add the "group" property as expected.'); + assert.equal(node.label, 'Constructor Function', 'Did not add the "label" property as expected.'); + assert.equal(node.description, '', 'Did not add the "description" property as expected.'); + assert.deepEqual(node.extends, [], 'Did not add an emptry array for the "extends" property.'); + assert.deepEqual(node.fires, [], 'Did not add an emptry array for the "fires" property as the test doclet fires no events.'); + assert.deepEqual(node.constructor, { + 'name': constructorDoclet.name, + 'description': constructorDoclet.description, + 'parameters': [], + 'examples': [new Example(constructorDoclet.examples[0], 'js')] + }, 'Did not create a constructor property from the constructor function as expected.'); + }); + + it('adds properties for a doclet which represents a class declaration', () => { + const node = new JsDocClassNode(classDeclarationDoclet); + assert.equal(node.longname, classDeclarationDoclet.longname, 'Did not add the "longname" property as expected.'); + assert.equal(node.group, 'classes', 'Did not add the "group" property as expected.'); + assert.equal(node.label, 'Class', 'Did not add the "label" property as expected.'); + assert.equal(node.description, classDeclarationDoclet.classdesc, 'Did not add the "description" property as expected.'); + assert.deepEqual(node.extends, [], 'Did not add an emptry array for the "extends" property.'); + assert.deepEqual(node.fires, [], 'Did not add an emptry array for the "fires" property as the test doclet fires no events.'); + assert.deepEqual(node.constructor, { + 'name': classDeclarationDoclet.name, + 'description': '', + 'parameters': [], + 'examples': [] + }, 'Did not create a constructor property from the class declaration as expected.'); + }); +}); diff --git a/test/unit/lib/code-docs/jsdoc/nodes/event.test.js b/test/unit/lib/code-docs/jsdoc/nodes/event.test.js new file mode 100644 index 00000000..9df54615 --- /dev/null +++ b/test/unit/lib/code-docs/jsdoc/nodes/event.test.js @@ -0,0 +1,36 @@ +'use strict'; + +const assert = require('proclaim'); +const JsDocEventNode = require('../../../../../../lib/code-docs/jsdoc/nodes/event'); +const EventDoclet = require('../../../../mock/code-docs/jsdoc/event'); + +describe('lib/code-docs/jsdoc/nodes/event', () => { + const eventDoclet = EventDoclet.eventDoclet; + const simpleEventDoclet = EventDoclet.simpleEventDoclet; + + it('adds properties for a doclet which represents an event', () => { + const node = new JsDocEventNode(eventDoclet); + assert.equal(node.longname, eventDoclet.longname, 'Did not add the "longname" property as expected.'); + assert.equal(node.group, 'events', 'Did not add the "group" property as expected.'); + assert.equal(node.label, 'Event', 'Did not add the "label" property as expected.'); + assert.deepEqual(node.type, ['object'], 'Did not add the "type" property as expected.'); + assert.deepEqual(node.examples, [], 'Did not add the "examples" property as expected.'); + assert.deepEqual(node.properties, [ + { + 'name': eventDoclet.properties[0].name, + 'type': eventDoclet.properties[0].type.names, + 'description': eventDoclet.properties[0].description + } + ], 'Did not add the "properties" property as expected.'); + }); + + it('adds properties for a event doclet which has no type or properties defined ', () => { + const node = new JsDocEventNode(simpleEventDoclet); + assert.equal(node.longname, eventDoclet.longname, 'Did not add the "longname" property as expected.'); + assert.equal(node.group, 'events', 'Did not add the "group" property as expected.'); + assert.equal(node.label, 'Event', 'Did not add the "label" property as expected.'); + assert.deepEqual(node.type, [], 'Did not add the "type" property as expected.'); + assert.deepEqual(node.examples, [], 'Did not add the "examples" property as expected.'); + assert.deepEqual(node.properties, [], 'Did not add the "properties" property as expected.'); + }); +}); diff --git a/test/unit/lib/code-docs/jsdoc/nodes/function.test.js b/test/unit/lib/code-docs/jsdoc/nodes/function.test.js new file mode 100644 index 00000000..07027f5b --- /dev/null +++ b/test/unit/lib/code-docs/jsdoc/nodes/function.test.js @@ -0,0 +1,35 @@ +'use strict'; + +const assert = require('proclaim'); +const JsDocFunctionNode = require('../../../../../../lib/code-docs/jsdoc/nodes/function'); +const FunctionDoclet = require('../../../../mock/code-docs/jsdoc/function'); + +describe('lib/code-docs/jsdoc/nodes/function', () => { + + const globalFunctionDoclet = FunctionDoclet.globalFunctionDoclet; + const instanceFunctionDocletWhichFires = FunctionDoclet.instanceFunctionDocletWhichFires; + + it('adds properties for a doclet which represents a global function and does not fire an event', () => { + const doclet = globalFunctionDoclet; + const node = new JsDocFunctionNode(doclet); + assert.equal(node.longname, doclet.longname, 'Did not add the "longname" property as expected.'); + assert.equal(node.group, 'functions', 'Did not add the "group" property as expected.'); + assert.equal(node.label, 'Function', 'Did not add the "label" property as expected.'); + assert.deepEqual(node.scope, doclet.scope, 'Did not add the "scope" property as expected.'); + assert.deepEqual(node.fires, [], 'Did not add the "fires" property as expected.'); + assert.equal(Array.isArray(node.examples), true, 'Did not attempt to add the "examples" property as expected.'); + assert.equal(Array.isArray(node.parameters), true, 'Did not attempt to add the "parameters" property as expected.'); + }); + + it('adds properties for a doclet which represents an instance function and fires an event', () => { + const doclet = instanceFunctionDocletWhichFires; + const node = new JsDocFunctionNode(doclet); + assert.equal(node.longname, doclet.longname, 'Did not add the "longname" property as expected.'); + assert.equal(node.group, 'functions', 'Did not add the "group" property as expected.'); + assert.equal(node.label, 'Method', 'Did not add the "label" property as expected.'); + assert.deepEqual(node.scope, doclet.scope, 'Did not add the "scope" property as expected.'); + assert.deepEqual(node.fires, doclet.fires, 'Did not add the "fires" property as expected.'); + assert.equal(Array.isArray(node.examples), true, 'Did not attempt to add the "examples" property as expected.'); + assert.equal(Array.isArray(node.parameters), true, 'Did not attempt to add the "parameters" property as expected.'); + }); +}); diff --git a/test/unit/lib/code-docs/jsdoc/nodes/mixin.test.js b/test/unit/lib/code-docs/jsdoc/nodes/mixin.test.js new file mode 100644 index 00000000..53b48f88 --- /dev/null +++ b/test/unit/lib/code-docs/jsdoc/nodes/mixin.test.js @@ -0,0 +1,18 @@ +'use strict'; + +const assert = require('proclaim'); +const JsDocMixinNode = require('../../../../../../lib/code-docs/jsdoc/nodes/mixin'); +const MixinDoclet = require('../../../../mock/code-docs/jsdoc/mixin'); + +describe('lib/code-docs/jsdoc/nodes/mixin', () => { + + const mixinDoclet = MixinDoclet.mixinDoclet; + + it('adds properties for a doclet which represents a mixin', () => { + const doclet = mixinDoclet; + const node = new JsDocMixinNode(doclet); + assert.equal(node.longname, doclet.longname, 'Did not add the "longname" property as expected.'); + assert.equal(node.group, 'mixins', 'Did not add the "group" property as expected.'); + assert.equal(node.label, 'Mixin', 'Did not add the "label" property as expected.'); + }); +}); diff --git a/test/unit/lib/code-docs/jsdoc/nodes/module.test.js b/test/unit/lib/code-docs/jsdoc/nodes/module.test.js new file mode 100644 index 00000000..a3783d7e --- /dev/null +++ b/test/unit/lib/code-docs/jsdoc/nodes/module.test.js @@ -0,0 +1,21 @@ +'use strict'; + +const assert = require('proclaim'); +const JsDocModuleNode = require('../../../../../../lib/code-docs/jsdoc/nodes/module'); +const ModuleDoclet = require('../../../../mock/code-docs/jsdoc/module'); + +describe('lib/code-docs/jsdoc/nodes/module', () => { + + const moduleDoclet = ModuleDoclet.moduleDoclet; + + it('adds properties for a doclet which represents a module', () => { + const doclet = moduleDoclet; + const node = new JsDocModuleNode(doclet); + assert.equal(node.longname, doclet.longname, 'Did not add the "longname" property as expected.'); + assert.equal(node.group, 'modules', 'Did not add the "group" property as expected.'); + assert.equal(node.label, 'Module', 'Did not add the "label" property as expected.'); + assert.equal(Array.isArray(node.examples), true, 'Did not attempt to add the "examples" property as expected.'); + assert.equal(Array.isArray(node.parameters), true, 'Did not attempt to add the "parameters" property as expected.'); + assert.equal(typeof node.returns, 'object', 'Did not attempt to add the "returns" property as expected.'); + }); +}); diff --git a/test/unit/lib/code-docs/jsdoc/nodes/namespace.test.js b/test/unit/lib/code-docs/jsdoc/nodes/namespace.test.js new file mode 100644 index 00000000..980338e3 --- /dev/null +++ b/test/unit/lib/code-docs/jsdoc/nodes/namespace.test.js @@ -0,0 +1,17 @@ +'use strict'; + +const assert = require('proclaim'); +const JsDocNamespaceNode = require('../../../../../../lib/code-docs/jsdoc/nodes/namespace'); +const NamespaceDoclet = require('../../../../mock/code-docs/jsdoc/namespace'); + +describe('lib/code-docs/jsdoc/nodes/namespace', () => { + const namespaceDoclet = NamespaceDoclet.namespaceDoclet; + + it('adds properties for a doclet which represents a namespace', () => { + const doclet = namespaceDoclet; + const node = new JsDocNamespaceNode(doclet); + assert.equal(node.longname, doclet.longname, 'Did not add the "longname" property as expected.'); + assert.equal(node.group, 'namespaces', 'Did not add the "group" property as expected.'); + assert.equal(node.label, 'Namespace', 'Did not add the "label" property as expected.'); + }); +}); diff --git a/test/unit/lib/code-docs/jsdoc/nodes/property.test.js b/test/unit/lib/code-docs/jsdoc/nodes/property.test.js new file mode 100644 index 00000000..db4ba207 --- /dev/null +++ b/test/unit/lib/code-docs/jsdoc/nodes/property.test.js @@ -0,0 +1,28 @@ +'use strict'; + +const assert = require('proclaim'); +const JsDocPropertyNode = require('../../../../../../lib/code-docs/jsdoc/nodes/property'); +const PropertyDoclet = require('../../../../mock/code-docs/jsdoc/property'); + +describe('lib/code-docs/jsdoc/nodes/namespace', () => { + const propertyDoclet = PropertyDoclet.memberDoclet; + + it('adds properties for a doclet which represents a property with a defined type', () => { + const doclet = propertyDoclet; + const node = new JsDocPropertyNode(doclet); + assert.equal(node.longname, doclet.longname, 'Did not add the "longname" property as expected.'); + assert.equal(node.group, 'properties', 'Did not add the "group" property as expected.'); + assert.equal(node.label, 'Property', 'Did not add the "label" property as expected.'); + assert.deepEqual(node.type, ['string'], 'Did not add the "type" property as expected.'); + }); + + it('adds properties for a doclet which represents a property with unknown type', () => { + const doclet = propertyDoclet; + doclet.type = {}; + const node = new JsDocPropertyNode(doclet); + assert.equal(node.longname, doclet.longname, 'Did not add the "longname" property as expected.'); + assert.equal(node.group, 'properties', 'Did not add the "group" property as expected.'); + assert.equal(node.label, 'Property', 'Did not add the "label" property as expected.'); + assert.deepEqual(node.type, [], 'Did not add the "type" property as expected.'); + }); +}); diff --git a/test/unit/lib/code-docs/nav-node.test.js b/test/unit/lib/code-docs/nav-node.test.js new file mode 100644 index 00000000..89af7943 --- /dev/null +++ b/test/unit/lib/code-docs/nav-node.test.js @@ -0,0 +1,101 @@ +'use strict'; + +const assert = require('proclaim'); +const NavNode = require('../../../../lib/code-docs/nav-node'); + +describe('lib/code-docs/nav-node', () => { + it('creates a nav item with title and link', () => { + const title = 'my title'; + const link = '#myLink'; + const testNavNode = new NavNode(title, link); + assert.equal(testNavNode.link, link, 'Did not add link.'); + assert.equal(testNavNode.title, title, 'Did not add title.'); + assert.deepEqual(testNavNode.items, [], 'Did not create empty sub items array.'); + }); + it('creates a nav item with title, link, and sub items', () => { + const title = 'my title'; + const link = '#myLink'; + const items = [ + new NavNode('item 1', '#item1'), + new NavNode('item 2', '#item2') + ]; + const testNavNode = new NavNode(title, link, items); + assert.equal(testNavNode.link, link); + assert.equal(testNavNode.title, title); + assert.deepEqual(testNavNode.items, items); + }); + it('creates a nav node with title and sub items, without a link', () => { + const title = 'my title'; + const items = [ + new NavNode('item 1', '#item1'), + new NavNode('item 2', '#item2') + ]; + const testNavNode = new NavNode(title, items); + assert.equal(testNavNode.title, title); + assert.equal(testNavNode.items, items); + assert.deepEqual(testNavNode.link, undefined); + }); + + describe('addItem', () => { + it('adds a given sub item to a nav node with no existing items', () => { + const title = 'my title'; + const link = '#myLink'; + const item = new NavNode('item 1', '#item1'); + const testNavNode = new NavNode(title, link); + testNavNode.addItem(item); + assert.deepEqual(testNavNode.items, [item]); + }); + it('adds a given sub item to a nav node which already has items', () => { + const title = 'my title'; + const item1 = new NavNode('item 1', '#item1'); + const item2 = new NavNode('item 2', '#item2'); + const testNavNode = new NavNode(title, [item1]); + testNavNode.addItem(item2); + assert.deepEqual(testNavNode.items, [item1, item2]); + }); + }); + + describe('getItems', () => { + it('returns the sub items of a nav node', () => { + const title = 'my title'; + const items = [ + new NavNode('item 1', '#item1'), + new NavNode('item 2', '#item2') + ]; + const testNavNode = new NavNode(title, items); + assert.deepEqual(testNavNode.getItems(), items); + }); + }); + + describe('getLastItem', () => { + it('returns the last items of a nav node', () => { + const title = 'my title'; + const item1 = new NavNode('item 1', '#item1'); + const item2 = new NavNode('item 2', '#item2'); + const items = [ + item1, + item2 + ]; + const testNavNode = new NavNode(title, items); + assert.deepEqual(testNavNode.getLastItem(), item2); + }); + }); + + describe('hasItems', () => { + it('returns false for a nav node with no sub items', () => { + const title = 'my title'; + const link = '#myLink'; + const testNavNode = new NavNode(title, link); + assert.strictEqual(testNavNode.hasItems(), false); + }); + it('returns true for a nav node with no sub items', () => { + const title = 'my title'; + const link = '#myLink'; + const items = [ + new NavNode('item 1', '#item1') + ]; + const testNavNode = new NavNode(title, link, items); + assert.strictEqual(testNavNode.hasItems(), true); + }); + }); +}); diff --git a/test/unit/lib/code-docs/readme/index.test.js b/test/unit/lib/code-docs/readme/index.test.js new file mode 100644 index 00000000..f45f0cc3 --- /dev/null +++ b/test/unit/lib/code-docs/readme/index.test.js @@ -0,0 +1,85 @@ +'use strict'; + +const fs = require('fs'); +const path = require('path'); +const assert = require('proclaim'); +const Readme = require('../../../../../lib/code-docs/readme'); +const NavNode = require('../../../../../lib/code-docs/nav-node'); + +describe('lib/code-docs/readme/index', () => { + describe('createNavigation', () => { + const createNavReadme = new Readme('# H1\n## H2a\n### H3a\nSome actual content.\n## H2b\n## H2c\n#### H4a\n\n### H3b\n### H3c\n## H2d\nMore content.'); + const nav = createNavReadme.createNavigation(); + const readmeNavNode = nav[0]; + it('creates one "readme" nav node', () => { + assert.equal(nav.length, 1); + assert.isTrue(readmeNavNode instanceof NavNode); + assert.equal(readmeNavNode.title, 'Readme'); + }); + it('creates sub navs on the readme nav node for level two headings', () => { + assert.equal(readmeNavNode.items.length, 4); + readmeNavNode.items.forEach((navItem) => { + assert.isTrue(navItem.title.includes('H2')); + assert.isTrue(navItem.link.includes('#h2')); + }); + }); + it('creates sub navs on the level two headings for level three headings', () => { + const firstHeadingLevelTwo = readmeNavNode.items[0]; + assert.equal(firstHeadingLevelTwo.items[0].title, 'H3a'); + assert.equal(firstHeadingLevelTwo.items[0].link, '#h3a'); + }); + }); + describe('removeNav', () => { + it('removes the first list of the readme which includes an item we expect from an Origami readme nav e.g. usage, migration, license', () => { + const navReadme = new Readme('Copy before nav\n- [Usage](#usage)\n - [Migration guide](#migration-guide)\n- [Contact](#contact)\n\nPost nav content.'); + assert.notOk(navReadme.toString().includes('Usage'), `Found usage nav item in content: ${navReadme.toString()}`); + assert.notOk(navReadme.toString().includes('Migration'), `Found migration nav item in content: ${navReadme.toString()}`); + assert.notOk(navReadme.toString().includes('Contact'), `Found contact nav item in content: ${navReadme.toString()}`); + }); + }); + describe('formatCode', () => { + it('formats code blocks for o-syntax-hightlight', () => { + const codeReadme = new Readme('```js\nconst example = "hi"\n```'); + assert.ok(codeReadme.toString().includes('
const example = "hi"
')); + }); + it('formats code blocks with space before the language declaration for o-syntax-hightlight', () => { + const codeReadme = new Readme('``` scss\nbody: {background-color: hotpink;}\n```'); + assert.ok(codeReadme.toString().includes('
body: {background-color: hotpink;}
')); + }); + it('formats inline code blocks for o-syntax-hightlight', () => { + const codeReadme = new Readme('`obt install`'); + assert.ok(codeReadme.toString().includes('obt install')); + }); + }); + describe('formatTables', () => { + it('formats tables for o-table "responsive scroll"', () => { + const codeReadme = new Readme('| example | number |\n|---------|--------|\n| 1 | one |\n| 2 | two |\n'); + assert.ok(codeReadme.toString().includes('
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
examplenumber
1one
2two
')); + }); + }); + describe('formatAnchors', () => { + it('formats relative anchors as Origami style links', () => { + const anchorReadme = new Readme('[relative link](/relative/link)'); + assert.ok(anchorReadme.toString().includes('relative link')); + }); + it('formats absolute anchors as Origami style external links', () => { + const anchorReadme = new Readme('[relative link](https://google.com)'); + assert.ok(anchorReadme.toString().includes('relative link')); + }); + it('formats absolute anchors as Origami style internal links if the current host matches', () => { + const anchorReadme = new Readme('[internal link](https://localhost.com)', 'localhost.com'); + assert.ok(anchorReadme.toString().includes('internal link')); + }); + it('does not format anchors which contain an image e.g. the circle ci build image ', () => { + const anchorReadme = new Readme('[![CircleCI](https://circleci.com/gh/Financial-Times/o-test-component.png)](https://circleci.com/gh/Financial-Times/o-test-component)'); + assert.ok(anchorReadme.toString().includes('')); // no link class + }); + }); + describe('toString', () => { + const readmeMarkdown = fs.readFileSync(path.resolve(__dirname, '../../../mock/code-docs/readme/readme.md')); + const testReadme = new Readme(readmeMarkdown.toString()); + it('outputs readme as html', () => { + assert.equal(testReadme.toString(), '

o-test-component CircleCI

\n

FT-branded styles for test elements.

\n\n

Usage

\n

Markup

\n

Add content to o-test-component:

\n
<div class="o-test-component" data-o-component="o-test-component">\n    <!-- My content -->\n</div>
\n

For an example see the registry demos.

\n

Sass

\n

Silent mode

\n

In silent mode o-test-component provides mixins for each part of the test component.

\n

The oTestComponent mixin will output all features of o-test-component. Turn off silent mode to output all o-test-component features using this mixin automatically.

\n
$o-test-component-is-silent: false;\n@import 'o-test-component/main';
\n

Mixins

\n

If your project does not need all o-test-component features, you may reduce your project's CSS bundle size by using the following mixins to only output what you need.

\n

JavaScript

\n

o-test-component provides some JavaScript to make things even better.

\n

Troubleshooting:

\n\n
\n

Migration Guide

\n

Upgrading from v1.x.x to v2.x.x

\n
-<div class="o-test-component-original">\n+<div class="o-test-component">
\n

Contact

\n

If you have any questions or comments about this component, or need help using it, please either raise an issue, visit #ft-origami or email Origami Support.

\n

Licence

\n

This software is published by the Financial Times under the MIT licence.

'); + }); + }); +}); diff --git a/test/unit/lib/code-docs/sassdoc/index.test.js b/test/unit/lib/code-docs/sassdoc/index.test.js new file mode 100644 index 00000000..9ca0c383 --- /dev/null +++ b/test/unit/lib/code-docs/sassdoc/index.test.js @@ -0,0 +1,143 @@ +'use strict'; + +const assert = require('proclaim'); +const SassDoc = require('../../../../../lib/code-docs/sassdoc'); +const VariableNode = require('../../../../../lib/code-docs/sassdoc/nodes/variable'); +const MixinNode = require('../../../../../lib/code-docs/sassdoc/nodes/mixin'); +const FunctionNode = require('../../../../../lib/code-docs/sassdoc/nodes/function'); +const MixinDoclet = require('../../../mock/code-docs/sassdoc/mixin'); +const FunctionDoclet = require('../../../mock/code-docs/sassdoc/function'); +const VariableDoclet = require('../../../mock/code-docs/sassdoc/variable'); + +describe('lib/code-docs/sassdoc/index', () => { + + it('has a groupNameAliases property which maps a group name of "undefined" to the component name', () => { + const testSassDoc = new SassDoc('o-test-component', 'master', []); + assert.deepEqual(testSassDoc.groupNameAliases, { + 'undefined': 'o-test-component', + }); + }); + + describe('supportedDoclets', () => { + it('returns an array of supported doclet kinds', () => { + assert.isTrue(Array.isArray(SassDoc.supportedDoclets()), 'Did not return an array.'); + assert.isTrue(SassDoc.supportedDoclets().includes('mixin'), 'Expected at least mixin doclets to be supported.'); + }); + }); + + describe('getNodesByKind', () => { + const testSassDoc = new SassDoc('o-test-component', 'master', [ + MixinDoclet.simpleDoclet, + MixinDoclet.comprehensiveDoclet, + FunctionDoclet.simpleDoclet, + FunctionDoclet.comprehensiveDoclet, + VariableDoclet.simpleDoclet, + VariableDoclet.comprehensiveDoclet + ]); + const nodes = testSassDoc.getNodesByKind(); + assert.isTrue(nodes.mixin[0] instanceof MixinNode, 'Did not return an object with a mixins property containing the formatted mixin node.'); + assert.isTrue(nodes.function[0] instanceof FunctionNode, 'Did not return an object with a functions property containing the formatted function node.'); + assert.isTrue(nodes.variable[0] instanceof VariableNode, 'Did not return an object with a variables property containing the formatted variable node.'); + }); + + describe('formatDoclet', () => { + it('formats a function doclet', () => { + const doclet = FunctionDoclet.comprehensiveDoclet; + const node = SassDoc.formatDoclet(doclet); + assert.isTrue(node instanceof FunctionNode, 'Did not create a function node from a function doclet.'); + }); + it('formats a mixin doclet', () => { + const doclet = MixinDoclet.comprehensiveDoclet; + const node = SassDoc.formatDoclet(doclet); + assert.isTrue(node instanceof MixinNode, 'Did not create a mixin node from a mixin doclet.'); + }); + it('formats a variable doclet', () => { + const doclet = VariableDoclet.comprehensiveDoclet; + const node = SassDoc.formatDoclet(doclet); + assert.isTrue(node instanceof VariableNode, 'Did not create a variable node from a variable doclet.'); + }); + it('throws an error for a placheolder doclet', () => { + const doclet = { + kind: 'placeholder' + }; + const formatDoclet = SassDoc.formatDoclet.bind(null, doclet); + assert.throws(formatDoclet, null, 'Should throw an error for an placeholder doclet kind.'); + }); + it('throws an error for an unsupported doclet', () => { + const doclet = { + kind: 'somethingunknown' + }; + const formatDoclet = SassDoc.formatDoclet.bind(null, doclet); + assert.throws(formatDoclet, null, 'Should throw an error for an unsupported doclet kind.'); + }); + }); + + describe('getNodes', () => { + const componentName = 'o-example'; + const brand = 'master'; + let doclet = {}; + + beforeEach(() => { + doclet = { + 'description': '', + 'context': { + 'type': 'function', + 'name': 'oTestComponentDouble', + }, + 'group': [ + 'undefined' + ], + 'access': 'public' + }; + }); + + it('removes doclets which do not have an access property', () => { + delete doclet.access; + assert.deepEqual(new SassDoc(componentName, brand, [doclet]).getNodes(), []); + }); + it('removes doclets which do not have a public access property', () => { + doclet.access = 'private'; + assert.deepEqual(new SassDoc(componentName, brand, [doclet]).getNodes(), []); + }); + it('removes doclets which are implicity private (name with underscore), ignoring the access property', () => { + doclet.context.name = '_oTestComponentDouble'; + assert.deepEqual(new SassDoc(componentName, brand, [doclet]).getNodes(), []); + }); + it('removes doclets which do not belong to the current brand', () => { + doclet.brand = { + 'supported': [ + 'internal' + ], + 'description': '' + }; + assert.deepEqual(new SassDoc(componentName, brand, [doclet]).getNodes(), []); + }); + it('does not remove doclets which define a brand property with no supported brands defined', () => { + doclet.brand = { + 'supported': [ + ], + 'description': '' + }; + assert.equal(new SassDoc(componentName, brand, [doclet]).getNodes().length, 1); + }); + it('removes placeholder doclets', () => { + doclet.context.type = 'placeholder'; + assert.deepEqual(new SassDoc(componentName, brand, [doclet]).getNodes(), []); + }); + it('removes unsupported doclets', () => { + doclet.context.type = 'notsupportedmadeup'; + assert.deepEqual(new SassDoc(componentName, brand, [doclet]).getNodes(), []); + }); + it('does not remove supported, public doclets which are for the current brand', () => { + assert.ok(new SassDoc(componentName, brand, [doclet]).getNodes()[0]); + }); + it('uses the component name instead of an "undefined" doclet group', () => { + assert.equal(new SassDoc(componentName, brand, [doclet]).getNodes()[0].group.name, componentName); + }); + it('returns array with formatted doclets', () => { + const nodes = new SassDoc(componentName, brand, [doclet]).getNodes(); + assert.isTrue(Array.isArray(nodes)); + assert.isTrue(nodes[0] instanceof FunctionNode); + }); + }); +}); diff --git a/test/unit/lib/code-docs/sassdoc/nav.test.js b/test/unit/lib/code-docs/sassdoc/nav.test.js new file mode 100644 index 00000000..a26b0c2c --- /dev/null +++ b/test/unit/lib/code-docs/sassdoc/nav.test.js @@ -0,0 +1,49 @@ +'use strict'; + +const assert = require('proclaim'); +const SassDocNav = require('../../../../../lib/code-docs/sassdoc/nav'); +const SassDoc = require('../../../../../lib/code-docs/sassdoc'); +const NavNode = require('../../../../../lib/code-docs/nav-node'); +const MixinDoclet = require('../../../mock/code-docs/sassdoc/mixin'); +const FunctionDoclet = require('../../../mock/code-docs/sassdoc/function'); +const VariableDoclet = require('../../../mock/code-docs/sassdoc/variable'); + +describe('lib/code-docs/sassdoc/nav', () => { + describe('createNavigation', () => { + const testSassDoc = new SassDoc('o-test-component', 'master', [ + FunctionDoclet.simpleDoclet, + FunctionDoclet.comprehensiveDoclet, + VariableDoclet.simpleDoclet, + VariableDoclet.comprehensiveDoclet, + MixinDoclet.simpleDoclet, + MixinDoclet.comprehensiveDoclet, + ]); + const testSassDocNav = SassDocNav.createNavigation(testSassDoc); + it('creates a subnav of the mixins', () => { + const mixinSubnav = testSassDocNav.find(navNode => navNode.title.toLowerCase().includes('mixin')); + assert.ok(mixinSubnav); + const expectedItemName = MixinDoclet.simpleDoclet.context.name; + const mixinNavItem = mixinSubnav.items.find(navNode => navNode.title.toLowerCase().includes(expectedItemName.toLowerCase())); + assert.isTrue(mixinNavItem instanceof NavNode); + }); + it('creates a subnav of the functions', () => { + const functionSubnav = testSassDocNav.find(navNode => navNode.title.toLowerCase().includes('function')); + assert.ok(functionSubnav); + const expectedItemName = FunctionDoclet.simpleDoclet.context.name; + const functionNavItem = functionSubnav.items.find(navNode => navNode.title.toLowerCase().includes(expectedItemName.toLowerCase())); + assert.isTrue(functionNavItem instanceof NavNode); + }); + it('creates a subnav of the variables', () => { + const variableSubnav = testSassDocNav.find(navNode => navNode.title.toLowerCase().includes('variable')); + assert.ok(variableSubnav); + const expectedItemName = VariableDoclet.simpleDoclet.context.name; + const variableNavItem = variableSubnav.items.find(navNode => navNode.title.toLowerCase().includes(expectedItemName.toLowerCase())); + assert.isTrue(variableNavItem instanceof NavNode); + }); + it('orders nav mixins then functions then variables', () => { + assert.ok(testSassDocNav[0].title.toLowerCase().includes('mixin')); + assert.ok(testSassDocNav[1].title.toLowerCase().includes('function')); + assert.ok(testSassDocNav[2].title.toLowerCase().includes('variable')); + }); + }); +}); diff --git a/test/unit/lib/code-docs/sassdoc/nodes/base.test.js b/test/unit/lib/code-docs/sassdoc/nodes/base.test.js new file mode 100644 index 00000000..a1a9b95f --- /dev/null +++ b/test/unit/lib/code-docs/sassdoc/nodes/base.test.js @@ -0,0 +1,262 @@ +'use strict'; + +const assert = require('proclaim'); +const SassDocBaseNode = require('../../../../../../lib/code-docs/sassdoc/nodes/base'); +const Example = require('../../../../../../lib/code-docs/example'); + +describe('lib/code-docs/sassdoc/nodes/base', () => { + + const comprehensiveDoclet = { + 'description': '', + 'commentRange': { + 'start': 17, + 'end': 23 + }, + 'context': { + 'type': 'function', + 'name': 'oTestComponentDouble', + 'code': '\n @return 2 * $scale;\n', + 'line': { + 'start': 24, + 'end': 26 + } + }, + 'group': [ + 'helpers' + ], + 'return': { + 'type': 'Number' + }, + 'example': [ + { + 'type': 'scss', + 'code': 'oTestComponentDouble(2) //4' + }, + { + 'type': 'scss', + 'code': 'oTestComponentDouble(10) //20' + } + ], + 'deprecated': 'This function has been replaced. Please contact Origami with any questions.', + 'access': 'public', + 'require': [], + 'file': { + 'path': 'src/scss/_functions.scss', + 'name': '_functions.scss' + }, + 'brand': { + 'supported': [ + 'master' + ], + 'description': 'Only master brand supported in this example' + }, + 'link': [ + { + 'url': 'https://www.google.co.uk/', + 'caption': '' + } + ], + 'parameter': [ + { + 'type': 'Number', + 'name': 'to-double', + 'description': 'The number to double' + }, + { + 'type': 'Bool', + 'name': 'example-param', + 'default': 'false', + 'description': '' + } + ], + 'aliased': [ + 'oTestComponentDoubler' + ] + }; + + const simpleDoclet = { + 'description': '', + 'commentRange': { + 'start': 17, + 'end': 23 + }, + 'context': { + 'type': 'function', + 'name': 'oTestComponentDouble', + 'code': '\n @return 2 * $scale;\n', + 'line': { + 'start': 24, + 'end': 26 + } + }, + 'group': [ + undefined + ], + 'access': 'public', + 'require': [], + 'file': { + 'path': 'src/scss/_functions.scss', + 'name': '_functions.scss' + } + }; + + it('creates a node to represent a complex SassDoc doclet with basic properties', () => { + const doclet = comprehensiveDoclet; + const node = new SassDocBaseNode(doclet); + assert.equal(node.name, 'oTestComponentDouble', 'Did not add expected name property.'); + assert.equal(node.description, '', 'Did not add expected description property.'); + assert.equal(node.longname, 'helpers-function-oTestComponentDouble', 'Did not add expected longname property.'); + assert.deepEqual(node.file, { + 'path': 'src/scss/_functions.scss', + 'name': '_functions.scss', + 'lineno': 24 + }, 'Did not add expected file property.'); + assert.deepEqual(node.group, { + key: 'helpers', + name: 'helpers' + }, 'Did not add expected group property.'); + assert.deepEqual(node.brand, { + description: 'Only master brand supported in this example', + supported: ['master'] + }, 'Did not add expected brand property.'); + assert.equal(node.deprecated, 'This function has been replaced. Please contact Origami with any questions.', 'Did not add expected deprecated property.'); + assert.deepEqual(node.links, [ + { + 'url': 'https://www.google.co.uk/', + 'caption': '' + } + ], 'Did not add expected links property.'); + assert.deepEqual(node.examples, [ + new Example('oTestComponentDouble(2) //4', 'scss'), + new Example('oTestComponentDouble(10) //20', 'scss') + ], 'Did not add expected examples property.'); + }); + + it('creates a node to represent a simple SassDoc doclet with basic properties', () => { + const doclet = simpleDoclet; + const node = new SassDocBaseNode(doclet); + assert.equal(node.name, 'oTestComponentDouble', 'Did not add expected name property.'); + assert.equal(node.description, '', 'Did not add expected description property.'); + assert.equal(node.longname, 'function-oTestComponentDouble', 'Did not add expected longname property.'); + assert.deepEqual(node.file, { + 'path': 'src/scss/_functions.scss', + 'name': '_functions.scss', + 'lineno': 24 + }, 'Did not add expected file property.'); + assert.deepEqual(node.group, { + key: '', + name: '' + }, 'Did not add expected group property.'); + assert.deepEqual(node.links, [], 'Expect an empty links array.'); + assert.deepEqual(node.examples, [], 'Expect an empty examples array.'); + assert.equal(node.brand, undefined, 'Did not expect a brand property on the simple SassDoc example.'); + assert.equal(node.deprecated, undefined, 'Did not expect a deprecation notice on the simple SassDoc example.'); + }); + + it('uses groupName for the node group property, if the groupName is provided by SassDoc extras', () => { + // @see https://github.com/SassDoc/sassdoc-extras/blob/2.4.3/src/groupName.js#L30 + const simpleExampleDoclet = simpleDoclet; + simpleExampleDoclet.groupName = { + // group : label + undefined: 'o-example' + }; + const simpleNode = new SassDocBaseNode(simpleExampleDoclet); + assert.deepEqual(simpleNode.group, { + key: '', + name: 'o-example' + }); + + const comprehensiveExampleDoclet = comprehensiveDoclet; + comprehensiveExampleDoclet.groupName = { + // group : label + 'helpers': 'Utils' + }; + const comprehensiveNode = new SassDocBaseNode(comprehensiveExampleDoclet); + assert.deepEqual(comprehensiveNode.group, { + key: 'helpers', + name: 'Utils' + }); + }); + + it('does not add a brand property if no brands are defined', () => { + const doclet = simpleDoclet; + doclet.brand = { + 'supported': [], + 'description': 'Have not specified brands.' + }; + const node = new SassDocBaseNode(doclet); + assert.equal(node.brand, undefined); + }); + + describe('addAliases', () => { + it('Adds aliases to the node', () => { + const doclet = comprehensiveDoclet; + const node = new SassDocBaseNode(doclet); + node.addAliases(doclet); + assert.deepEqual(node.aliases, ['oTestComponentDoubler'], 'Did not add expected aliases property.'); + }); + + it('Adds an empty aliases array for doclets which have no aliases', () => { + const doclet = simpleDoclet; + const node = new SassDocBaseNode(doclet); + node.addAliases(doclet); + assert.deepEqual(node.aliases, []); + }); + }); + + describe('addParameters', () => { + it('Adds parameters to the node', () => { + const doclet = comprehensiveDoclet; + const node = new SassDocBaseNode(doclet); + node.addParameters(doclet); + assert.deepEqual(node.parameters, [{ + name: 'to-double', + type: ['Number'], + description: 'The number to double', + optional: false + }, { + name: 'example-param', + type: ['Bool'], + description: '', + default: 'false', + optional: true + }], 'Did not add expected parameters property.'); + }); + + it('Adds an empty parameters array for doclets which have no parameters', () => { + const doclet = simpleDoclet; + const node = new SassDocBaseNode(doclet); + node.addParameters(doclet); + assert.deepEqual(node.parameters, []); + }); + + it('Names any unnamed parameter', () => { + const doclet = comprehensiveDoclet; + // Add mock parameter with no name + doclet.parameter = []; + doclet.parameter.push({ + 'type': 'Bool', + 'default': 'false', + 'description': 'Some unname parameter.' + }); + const node = new SassDocBaseNode(doclet); + node.addParameters(doclet); + assert.deepEqual(node.parameters, [{ + name: '[param #1]', // name added + type: ['Bool'], + default: 'false', + optional: true, + description: 'Some unname parameter.' + }]); + }); + }); + + describe('parseTypes', () => { + it('Transform a string of SassDoc types to an array.', () => { + const doclet = comprehensiveDoclet; + const node = new SassDocBaseNode(doclet); + assert.deepEqual(node.parseTypes('Color | Null'), ['Color', 'Null']); + assert.deepEqual(node.parseTypes(''), []); + }); + }); +}); diff --git a/test/unit/lib/code-docs/sassdoc/nodes/function.test.js b/test/unit/lib/code-docs/sassdoc/nodes/function.test.js new file mode 100644 index 00000000..a06b20c9 --- /dev/null +++ b/test/unit/lib/code-docs/sassdoc/nodes/function.test.js @@ -0,0 +1,55 @@ +'use strict'; + +const assert = require('proclaim'); +const SassDocFunctionNode = require('../../../../../../lib/code-docs/sassdoc/nodes/function'); +const FunctionDoclet = require('../../../../mock/code-docs/sassdoc/function'); + +describe('lib/code-docs/sassdoc/nodes/function', () => { + const comprehensiveNode = new SassDocFunctionNode(FunctionDoclet.comprehensiveDoclet); + const simpleNode = new SassDocFunctionNode(FunctionDoclet.simpleDoclet); + it('creates a function node from a function doclet', () => { + assert.isTrue(simpleNode instanceof SassDocFunctionNode); + assert.isTrue(comprehensiveNode instanceof SassDocFunctionNode); + }); + it('has a kind property', () => { + assert.equal(simpleNode.kind, 'function'); + assert.equal(comprehensiveNode.kind, 'function'); + }); + it('has a return property if the function doclet defines one', () => { + assert.deepEqual(comprehensiveNode.return.types, ['String', 'Null']); + assert.equal(comprehensiveNode.return.description, 'A made-up sentence.'); + }); + it('has a blank return property if the function doclet defines no return value', () => { + assert.equal(simpleNode.return.types, ''); + assert.equal(simpleNode.return.description, ''); + }); + it('has a blank aliases property if the function doclet defines no alias', () => { + assert.deepEqual(comprehensiveNode.aliases, [ + 'oTestComponentDoTell' + ]); + }); + it('has an aliases property if the function doclet has an alias', () => { + assert.deepEqual(simpleNode.aliases, []); + }); + it('has a parameters property if the function doclet defines parameters', () => { + assert.deepEqual(comprehensiveNode.parameters, [ + { + 'type': ['Bool'], + 'name': 'keep-quiet', + 'default': 'false', + 'optional': true, + 'description': 'Whether to tell (default) or keep quiet.' + }, + { + 'type': ['Bool'], + 'name': 'truth', + 'default': 'true', + 'optional': true, + 'description': 'Whether to tell the truth (default) or lie.' + } + ]); + }); + it('has has blank parameters property if the function doclet has no parameters', () => { + assert.deepEqual(simpleNode.parameters, []); + }); +}); diff --git a/test/unit/lib/code-docs/sassdoc/nodes/mixin.test.js b/test/unit/lib/code-docs/sassdoc/nodes/mixin.test.js new file mode 100644 index 00000000..59d3f06f --- /dev/null +++ b/test/unit/lib/code-docs/sassdoc/nodes/mixin.test.js @@ -0,0 +1,47 @@ +'use strict'; + +const assert = require('proclaim'); +const SassDocMixinNode = require('../../../../../../lib/code-docs/sassdoc/nodes/mixin'); +const MixinDoclet = require('../../../../mock/code-docs/sassdoc/mixin'); + +describe('lib/code-docs/sassdoc/nodes/mixin', () => { + const comprehensiveNode = new SassDocMixinNode(MixinDoclet.comprehensiveDoclet); + const simpleNode = new SassDocMixinNode(MixinDoclet.simpleDoclet); + it('creates a mixin node from a mixin doclet', () => { + assert.isTrue(simpleNode instanceof SassDocMixinNode); + assert.isTrue(comprehensiveNode instanceof SassDocMixinNode); + }); + it('has an output property', () => { + assert.equal(simpleNode.output, ''); + assert.equal(comprehensiveNode.output, 'Modifiying, cosmetic styles'); + }); + it('has a content property', () => { + assert.equal(simpleNode.content, ''); + assert.equal(comprehensiveNode.content, 'Extra styles to modify test component theme.'); + }); + it('has a kind property', () => { + assert.equal(simpleNode.kind, 'mixin'); + assert.equal(comprehensiveNode.kind, 'mixin'); + }); + it('has a blank aliases property if the mixin doclet defines no alias', () => { + assert.deepEqual(comprehensiveNode.aliases, [ + 'oTestComponentCustomTheme' + ]); + }); + it('has an aliases property if the mixin doclet has an alias', () => { + assert.deepEqual(simpleNode.aliases, []); + }); + it('has a parameters property if the mixin doclet defines parameters', () => { + assert.deepEqual(comprehensiveNode.parameters, [ + { + 'type': ['Map'], + 'name': 'theme', + 'description': 'Apply a custom theme to the component. Theme keys include \'primary-color\' and \'secondary-color\' (see example).', + 'optional': false + } + ]); + }); + it('has a blank parameters property if the mixin doclet has no parameters', () => { + assert.deepEqual(simpleNode.parameters, []); + }); +}); diff --git a/test/unit/lib/code-docs/sassdoc/nodes/variable.test.js b/test/unit/lib/code-docs/sassdoc/nodes/variable.test.js new file mode 100644 index 00000000..75184a38 --- /dev/null +++ b/test/unit/lib/code-docs/sassdoc/nodes/variable.test.js @@ -0,0 +1,32 @@ +'use strict'; + +const assert = require('proclaim'); +const SassDocVariableNode = require('../../../../../../lib/code-docs/sassdoc/nodes/variable'); +const VariableDoclet = require('../../../../mock/code-docs/sassdoc/variable'); + +describe('lib/code-docs/sassdoc/nodes/variable', () => { + const comprehensiveNode = new SassDocVariableNode(VariableDoclet.comprehensiveDoclet); + const simpleNode = new SassDocVariableNode(VariableDoclet.simpleDoclet); + it('creates a variable node from a variable doclet', () => { + assert.isTrue(simpleNode instanceof SassDocVariableNode); + assert.isTrue(comprehensiveNode instanceof SassDocVariableNode); + }); + it('has a kind property', () => { + assert.equal(simpleNode.kind, 'variable'); + assert.equal(comprehensiveNode.kind, 'variable'); + }); + it('adds types property if the variable doclet defines its type', () => { + assert.deepEqual(comprehensiveNode.types, ['Color']); + }); + it('has a blank types property if the variable doclet defines no type', () => { + assert.deepEqual(simpleNode.types, []); + }); + it('has a blank aliases property if the variable doclet defines no alias', () => { + assert.deepEqual(comprehensiveNode.aliases, [ + 'o-test-component-primary-color' + ]); + }); + it('has an aliases property if the variable doclet has an alias', () => { + assert.deepEqual(simpleNode.aliases, []); + }); +}); diff --git a/test/unit/mock/code-docs/jsdoc/class.js b/test/unit/mock/code-docs/jsdoc/class.js new file mode 100644 index 00000000..af1ef223 --- /dev/null +++ b/test/unit/mock/code-docs/jsdoc/class.js @@ -0,0 +1,62 @@ +'use strict'; + +module.exports.constructorDoclet = { + 'comment': '/**\n * An example constructor within a module.\n * @constructor\n * @example\n * const myIncrementer = new incrementer();\n * myIncrementer.increment(4); // 4\n * myIncrementer.increment(4); // 8\n * myIncrementer.increment(1); // 9\n */', + 'meta': { + 'range': [ + 698, + 996 + ], + 'filename': 'complex-module.js', + 'lineno': 28, + 'columnno': 0, + 'path': '/src/js', + 'code': { + 'id': 'astnode100000215', + 'name': 'module.exports.incrementer', + 'type': 'FunctionExpression', + 'value': 'incrementer', + 'paramnames': [] + }, + 'vars': { + 'this.num': 'module:ComplexModule.incrementer#num', + 'this.increment': 'module:ComplexModule.incrementer#increment', + '': null + } + }, + 'description': 'An example constructor within a module.', + 'kind': 'class', + 'examples': [ + 'const myIncrementer = new incrementer();\nmyIncrementer.increment(4); // 4' + ], + 'name': 'incrementer', + 'longname': 'module:ComplexModule.incrementer', + 'memberof': 'module:ComplexModule', + 'scope': 'static' +}; + +module.exports.classDeclarationDoclet = { + 'comment': '/**\n * Class representing a domesticated animal.\n */', + 'meta': { + 'range': [ + 370, + 509 + ], + 'filename': 'class.js', + 'lineno': 22, + 'columnno': 0, + 'path': '/src/js', + 'code': { + 'id': 'astnode100000095', + 'name': 'Pet', + 'type': 'ClassDeclaration', + 'paramnames': [] + } + }, + 'classdesc': 'Class representing a domesticated animal.', + 'name': 'Pet', + 'longname': 'Pet', + 'kind': 'class', + 'scope': 'global', + 'params': [] +}; diff --git a/test/unit/mock/code-docs/jsdoc/event.js b/test/unit/mock/code-docs/jsdoc/event.js new file mode 100644 index 00000000..b32ca6fe --- /dev/null +++ b/test/unit/mock/code-docs/jsdoc/event.js @@ -0,0 +1,50 @@ +'use strict'; + +module.exports.eventDoclet = { + 'comment': '/**\n\t * Snowball event.\n\t *\n\t * @event Hurl#snowball\n\t * @type {object}\n\t * @property {boolean} detail.isPacked - Indicates whether the snowball is tightly packed.\n\t */', + 'meta': { + 'filename': 'event.js', + 'lineno': 15, + 'columnno': 1, + 'path': '/src/js', + 'code': {} + }, + 'description': 'Snowball event.', + 'kind': 'event', + 'name': 'snowball', + 'type': { + 'names': [ + 'object' + ] + }, + 'properties': [ + { + 'type': { + 'names': [ + 'boolean' + ] + }, + 'description': 'Indicates whether the snowball is tightly packed.', + 'name': 'detail.isPacked' + } + ], + 'memberof': 'Hurl', + 'longname': 'Hurl#event:snowball', + 'scope': 'instance' +}; + +module.exports.simpleEventDoclet = { + 'comment': '/**\n\t * Snowball event.\n\t *\n\t * @event Hurl#snowball\n\t */', + 'meta': { + 'filename': 'event.js', + 'lineno': 15, + 'columnno': 1, + 'path': '/src/js', + 'code': {} + }, + 'kind': 'event', + 'name': 'snowball', + 'memberof': 'Hurl', + 'longname': 'Hurl#event:snowball', + 'scope': 'instance' +}; diff --git a/test/unit/mock/code-docs/jsdoc/function.js b/test/unit/mock/code-docs/jsdoc/function.js new file mode 100644 index 00000000..e95fcca1 --- /dev/null +++ b/test/unit/mock/code-docs/jsdoc/function.js @@ -0,0 +1,68 @@ +'use strict'; + +module.exports.globalFunctionDoclet = { + 'comment': '/**\n * @deprecated Use {@link Person#sayHello} instead.\n * @param {string} name\n * To make a human says hello, announcing their name.\n */', + 'meta': { + 'range': [ + 138, + 213 + ], + 'filename': 'deprecated.js', + 'lineno': 6, + 'columnno': 0, + 'path': '/src/js', + 'code': { + 'id': 'astnode100000250', + 'name': 'humanSayHello', + 'type': 'FunctionDeclaration', + 'paramnames': [ + 'name' + ] + } + }, + 'deprecated': 'Use {@link Person#sayHello} instead.', + 'params': [ + { + 'type': { + 'names': [ + 'string' + ] + }, + 'description': 'To make a human says hello, announcing their name.', + 'name': 'name' + } + ], + 'name': 'humanSayHello', + 'longname': 'humanSayHello', + 'kind': 'function', + 'scope': 'global' +}; + +module.exports.instanceFunctionDocletWhichFires = { + 'comment': '/**\n * Throw a snowball.\n *\n * @fires Hurl#snowball\n */', + 'meta': { + 'range': [ + 164, + 484 + ], + 'filename': 'event.js', + 'lineno': 14, + 'columnno': 0, + 'path': '/src/js', + 'code': { + 'id': 'astnode100000269', + 'name': 'Hurl.prototype.snowball', + 'type': 'FunctionExpression', + 'paramnames': [] + } + }, + 'description': 'Throw a snowball.', + 'fires': [ + 'Hurl#event:snowball' + ], + 'name': 'snowball', + 'longname': 'Hurl#snowball', + 'kind': 'function', + 'memberof': 'Hurl', + 'scope': 'instance' +}; diff --git a/test/unit/mock/code-docs/jsdoc/mixin.js b/test/unit/mock/code-docs/jsdoc/mixin.js new file mode 100644 index 00000000..a21827c5 --- /dev/null +++ b/test/unit/mock/code-docs/jsdoc/mixin.js @@ -0,0 +1,27 @@ +'use strict'; + +module.exports.mixinDoclet = { + 'comment': '/**\n *\n * Test the JSDoc mixin tag.\n * http://usejsdoc.org/tags-mixin.html\n *\n * This provides methods used for event handling. It\'s not meant to\n * be used directly.\n *\n * @mixin\n */', + 'meta': { + 'range': [ + 190, + 782 + ], + 'filename': 'mixin.js', + 'lineno': 11, + 'columnno': 6, + 'path': '/src/js', + 'code': { + 'id': 'astnode100000303', + 'name': 'Eventful', + 'type': 'ObjectExpression', + 'value': '{"on":"","fire":""}' + } + }, + 'description': 'Test the JSDoc mixin tag.\nhttp://usejsdoc.org/tags-mixin.html\n\nThis provides methods used for event handling. It\'s not meant to\nbe used directly.', + 'kind': 'mixin', + 'name': 'Eventful', + 'longname': 'Eventful', + 'scope': 'global', + 'params': [] +}; diff --git a/test/unit/mock/code-docs/jsdoc/module.js b/test/unit/mock/code-docs/jsdoc/module.js new file mode 100644 index 00000000..479f859d --- /dev/null +++ b/test/unit/mock/code-docs/jsdoc/module.js @@ -0,0 +1,29 @@ +'use strict'; + +module.exports.moduleDoclet = { + 'comment': '/**\n * Tests a single export module.\n * @module SimpleModule\n * @see module:example-module for an example of multi export module documentation.\n * @returns {String} Returns a fixed string.\n */', + 'meta': { + 'filename': 'simple-module.js', + 'lineno': 1, + 'columnno': 0, + 'path': '/src/js', + 'code': {} + }, + 'description': 'Tests a single export module.', + 'kind': 'module', + 'name': 'SimpleModule', + 'see': [ + 'module:example-module for an example of multi export module documentation.' + ], + 'returns': [ + { + 'type': { + 'names': [ + 'String' + ] + }, + 'description': 'Returns a fixed string.' + } + ], + 'longname': 'module:SimpleModule' +}; diff --git a/test/unit/mock/code-docs/jsdoc/namespace.js b/test/unit/mock/code-docs/jsdoc/namespace.js new file mode 100644 index 00000000..34cbf4d3 --- /dev/null +++ b/test/unit/mock/code-docs/jsdoc/namespace.js @@ -0,0 +1,16 @@ +'use strict'; + +module.exports.namespaceDoclet = { + 'comment': '/** @namespace window */', + 'meta': { + 'filename': 'namespace.js', + 'lineno': 1, + 'columnno': 0, + 'path': '/src/js', + 'code': {} + }, + 'kind': 'namespace', + 'name': 'window', + 'longname': 'window', + 'scope': 'global' +}; diff --git a/test/unit/mock/code-docs/jsdoc/property.js b/test/unit/mock/code-docs/jsdoc/property.js new file mode 100644 index 00000000..7cc79cfc --- /dev/null +++ b/test/unit/mock/code-docs/jsdoc/property.js @@ -0,0 +1,63 @@ +'use strict'; + +module.exports.memberDoclet = { + 'comment': '/** @member {string} */', + 'meta': { + 'range': [ + 162, + 178 + ], + 'filename': 'class.js', + 'lineno': 9, + 'columnno': 1, + 'path': '/src/js', + 'code': { + 'id': 'astnode100000070', + 'name': 'this.name', + 'type': 'Identifier', + 'value': 'name', + 'paramnames': [] + } + }, + 'kind': 'member', + 'type': { + 'names': [ + 'string' + ] + }, + 'name': 'name', + 'longname': 'Person#name', + 'memberof': 'Person', + 'scope': 'instance' +}; + +module.exports.constantDoclet = { + 'comment': '/**\n * A global variable called \'foo\'.\n * http://usejsdoc.org/tags-member.html\n * @type {number}\n */', + 'meta': { + 'range': [ + 107, + 115 + ], + 'filename': 'main.js', + 'lineno': 6, + 'columnno': 6, + 'path': '', + 'code': { + 'id': 'astnode100000003', + 'name': 'foo', + 'type': 'Literal', + 'value': 42 + } + }, + 'description': 'A global variable called \'foo\'.\nhttp://usejsdoc.org/tags-member.html', + 'type': { + 'names': [ + 'number' + ] + }, + 'name': 'foo', + 'longname': 'foo', + 'kind': 'constant', + 'scope': 'global', + 'params': [] +}; diff --git a/test/unit/mock/code-docs/readme/readme.md b/test/unit/mock/code-docs/readme/readme.md new file mode 100644 index 00000000..a210fcd4 --- /dev/null +++ b/test/unit/mock/code-docs/readme/readme.md @@ -0,0 +1,73 @@ +# o-test-component [![CircleCI](https://circleci.com/gh/Financial-Times/o-test-component.png?style=shield&circle-token=8d39afee1e3c3b1f586770034db9673b791cb4f8)](https://circleci.com/gh/Financial-Times/o-test-component) + +FT-branded styles for test elements. + +- [Usage](#usage) + - [Markup](#markup) + - [Sass](#sass) + - [JavaScript](#javascript) +- [Troubleshooting](#troubleshooting) +- [Migration guide](#migration-guide) +- [Contact](#contact) +- [Licence](#licence) + + +## Usage + +### Markup + +Add content to `o-test-component`: + +```html +
+ +
+``` + +For an example see the [registry demos](https://www.ft.com/__origami/service/build/v2/demos/o-test-component/). + +### Sass + +#### Silent mode + +In silent mode `o-test-component` provides mixins for each part of the test component. + +The `oTestComponent` mixin will output all features of `o-test-component`. Turn off silent mode to output all `o-test-component` features using this mixin automatically. + +``` sass +$o-test-component-is-silent: false; +@import 'o-test-component/main'; +``` + +#### Mixins + +If your project does not need all `o-test-component` features, you may reduce your project's CSS bundle size by using the following mixins to only output what you need. + +### JavaScript + +`o-test-component` provides some JavaScript to make things even better. + +## Troubleshooting: + +* Turn it off and on again? + +---- + +## Migration Guide + +## Upgrading from v1.x.x to v2.x.x + +```diff +-
++
+``` + +## Contact + +If you have any questions or comments about this component, or need help using it, please either [raise an issue](https://github.com/Financial-Times/o-test-component/issues), visit [#ft-origami](https://financialtimes.slack.com/messages/ft-origami/) or email [Origami Support](mailto:origami-support@ft.com). + +## Licence + +This software is published by the Financial Times under the [MIT licence](http://opensource.org/licenses/MIT). + +[bem]: http://getbem.com/naming/ diff --git a/test/unit/mock/code-docs/sassdoc/function.js b/test/unit/mock/code-docs/sassdoc/function.js new file mode 100644 index 00000000..bfdf14d4 --- /dev/null +++ b/test/unit/mock/code-docs/sassdoc/function.js @@ -0,0 +1,84 @@ +'use strict'; + +module.exports.comprehensiveDoclet = { + 'description': '', + 'commentRange': { + 'start': 1, + 'end': 6 + }, + 'context': { + 'type': 'function', + 'name': 'oTestComponentTell', + 'code': '\n @if $keep-quiet {\n @return null;\n }\n @if $truth {\n @return \'Copy-pasta: This code has an author.\';\n }\n @return \'I made this.\';\n', + 'line': { + 'start': 7, + 'end': 15 + } + }, + 'link': [ + { + 'url': 'https://www.google.co.uk/', + 'caption': '' + } + ], + 'author': [ + 'Jane Madeup Smith', + 'John Madeup Smith' + ], + 'parameter': [ + { + 'type': 'Bool', + 'name': 'keep-quiet', + 'default': 'false', + 'description': 'Whether to tell (default) or keep quiet.' + }, + { + 'type': 'Bool', + 'name': 'truth', + 'default': 'true', + 'description': 'Whether to tell the truth (default) or lie.' + } + ], + 'return': { + 'type': 'String|Null', + 'description': 'A made-up sentence.' + }, + 'access': 'public', + 'group': [ + 'undefined' + ], + 'require': [], + 'file': { + 'path': 'src/scss/_functions.scss', + 'name': '_functions.scss' + }, + 'aliased': [ + 'oTestComponentDoTell' + ] +}; + +module.exports.simpleDoclet = { + 'description': '', + 'commentRange': { + 'start': 1, + 'end': 6 + }, + 'context': { + 'type': 'function', + 'name': 'oTestComponentTell', + 'code': '\n @if $keep-quiet {\n @return null;\n }\n @if $truth {\n @return \'Copy-pasta: This code has an author.\';\n }\n @return \'I made this.\';\n', + 'line': { + 'start': 7, + 'end': 15 + } + }, + 'access': 'public', + 'group': [ + 'undefined' + ], + 'require': [], + 'file': { + 'path': 'src/scss/_functions.scss', + 'name': '_functions.scss' + } +}; diff --git a/test/unit/mock/code-docs/sassdoc/mixin.js b/test/unit/mock/code-docs/sassdoc/mixin.js new file mode 100644 index 00000000..d47040fa --- /dev/null +++ b/test/unit/mock/code-docs/sassdoc/mixin.js @@ -0,0 +1,104 @@ +'use strict'; + +module.exports.comprehensiveDoclet = { + 'description': 'Applies to a test component.\n', + 'content': 'Extra styles to modify test component theme.', + 'output': 'Modifiying, cosmetic styles', + 'commentRange': { + 'start': 29, + 'end': 38 + }, + 'context': { + 'type': 'mixin', + 'name': 'oTestComponentTheme', + 'code': '\n @if type-of(theme) != \'map\' {\n @include _oTestComponentThrowError(\'Invalid theme.\');\n }\n background-color: map-get($theme, $primary-color);\n border-color: map-get($theme, $secondary-color);\n', + 'line': { + 'start': 39, + 'end': 45 + } + }, + 'example': [ + { + 'type': 'scss', + 'code': '.my-test-component {\n @include oTestComponentBig();\n @include oTestComponentTheme($theme: (primary-color: red, secondary-color: blue));\n}', + 'description': 'A big test component with a custom theme.' + } + ], + 'see': [ + { + 'description': 'The main stlyes fo a big test component.\n', + 'context': { + 'type': 'mixin', + 'name': 'oTestComponentBig', + 'code': '\n @include _oTestComponentBase();\n height: _oTestComponentGetSize(1);\n width: _oTestComponentGetSize(1);\n', + 'line': { + 'start': 2, + 'end': 6 + } + } + }, + { + 'description': 'The main styles for a small test component.\n', + 'context': { + 'type': 'mixin', + 'name': 'oTestComponentSmall', + 'code': '\n @include _oTestComponentBase();\n height: _oTestComponentGetSize(2);\n width: _oTestComponentGetSize(2);\n', + 'line': { + 'start': 9, + 'end': 13 + } + } + } + ], + 'aliased': [ + 'oTestComponentCustomTheme' + ], + 'parameter': [ + { + 'type': 'Map', + 'name': 'theme', + 'description': 'Apply a custom theme to the component. Theme keys include \'primary-color\' and \'secondary-color\' (see example).' + } + ], + 'throw': [ + 'An invalid theme will throw an error.' + ], + 'access': 'public', + 'group': [ + 'undefined' + ], + 'require': [ + { + 'type': 'mixin', + 'name': '_oTestComponentThrowError' + } + ], + 'file': { + 'path': 'src/scss/_mixins.scss', + 'name': '_mixins.scss' + } +}; + +module.exports.simpleDoclet = { + 'commentRange': { + 'start': 29, + 'end': 38 + }, + 'context': { + 'type': 'mixin', + 'name': 'oTestComponentTheme', + 'code': '\n @if type-of(theme) != \'map\' {\n @include _oTestComponentThrowError(\'Invalid theme.\');\n }\n background-color: map-get($theme, $primary-color);\n border-color: map-get($theme, $secondary-color);\n', + 'line': { + 'start': 39, + 'end': 45 + } + }, + 'access': 'public', + 'group': [ + 'undefined' + ], + 'file': { + 'path': 'src/scss/_mixins.scss', + 'name': '_mixins.scss' + } +}; diff --git a/test/unit/mock/code-docs/sassdoc/variable.js b/test/unit/mock/code-docs/sassdoc/variable.js new file mode 100644 index 00000000..25df0335 --- /dev/null +++ b/test/unit/mock/code-docs/sassdoc/variable.js @@ -0,0 +1,57 @@ +'use strict'; + +module.exports.comprehensiveDoclet = { + 'description': '', + 'commentRange': { + 'start': 1, + 'end': 1 + }, + 'context': { + 'type': 'variable', + 'name': 'o-test-component-main-color', + 'value': 'hotpink', + 'scope': 'private', + 'line': { + 'start': 2, + 'end': 2 + } + }, + 'type': 'Color', + 'access': 'public', + 'group': [ + 'undefined' + ], + 'file': { + 'path': 'src/scss/_variables.scss', + 'name': '_variables.scss' + }, + 'aliased': [ + 'o-test-component-primary-color' + ] +}; + +module.exports.simpleDoclet = { + 'description': '', + 'commentRange': { + 'start': 1, + 'end': 1 + }, + 'context': { + 'type': 'variable', + 'name': 'o-test-component-main-color', + 'value': 'hotpink', + 'scope': 'private', + 'line': { + 'start': 2, + 'end': 2 + } + }, + 'access': 'public', + 'group': [ + 'undefined' + ], + 'file': { + 'path': 'src/scss/_variables.scss', + 'name': '_variables.scss' + } +}; diff --git a/views/component.html b/views/component.html index 172588f7..7860f092 100644 --- a/views/component.html +++ b/views/component.html @@ -1,13 +1,35 @@
-
+
{{> component/list-sidebar}}
-
- {{> component/brand-tabs}} +
+ {{#> component/container}} + {{#*inline "content"}} + {{> component/brand-tabs}} + + {{> component/header}} + + {{#if demos}} + {{> component/type/demos}} + {{/if}} + + {{#if images}} + {{> component/type/images}} + {{/if}} + + {{#if service}} + {{> component/type/service}} + {{/if}} + + {{#ifEither dependencies.bower.length dependencies.npm.length}} + {{> component/dependencies dependencies}} + {{/ifEither}} + {{/inline}} + {{/component/container}}
-
+
{{> component/quickstart-sidebar}}
diff --git a/views/jsdoc.html b/views/jsdoc.html new file mode 100644 index 00000000..9ca021c5 --- /dev/null +++ b/views/jsdoc.html @@ -0,0 +1,35 @@ +
+
+ {{> codedocs/codedocs-sidebar }} +
+ +
+
+ {{> component/messages}} + + {{!-- {{ Output message for no JSDocs. }} --}} + {{#unless navItems }} +

{{ component.name }} JsDocs

+

It looks like JsDocs for {{ component.name }}@{{ component.version }} are missing or formatted incorrectly.

+

For component documentation see the readme.

+ {{/unless}} + + {{!-- {{ Output global JSDoc nodes with links to their member nodes. }} --}} + {{#each jsDocByTypeWithMembers }} + {{#each this}} + {{> jsdoc/jsdoc-node }} + {{/each}} + {{/each}} + + {{!-- {{ Output member nodes so they can be viewed in more detail. }} --}} + {{#each memberJsDocs}} + {{> jsdoc/jsdoc-node }} + {{/each}} + + {{!-- {{ Output default node to display before selection is made. }} --}} + {{#if defaultNode}} + {{> jsdoc/jsdoc-node defaultNode default=true }} + {{/if}} +
+
+
diff --git a/views/overview.html b/views/overview.html index d97ad5e6..bf3c1b1d 100644 --- a/views/overview.html +++ b/views/overview.html @@ -1,13 +1,13 @@
-
+
{{> overview/search-form}}
-
+
{{> overview/component-list}}
-
+
{{> overview/sidebar }}
diff --git a/views/partials/codedocs/codedocs-sidebar-items.html b/views/partials/codedocs/codedocs-sidebar-items.html new file mode 100644 index 00000000..3bc079bc --- /dev/null +++ b/views/partials/codedocs/codedocs-sidebar-items.html @@ -0,0 +1,10 @@ +{{#if items}} +
    + {{#each items}} +
  • + {{title}} + {{> codedocs/codedocs-sidebar-items }} +
  • + {{/each}} +
+{{/if}} diff --git a/views/partials/codedocs/codedocs-sidebar-subnav.html b/views/partials/codedocs/codedocs-sidebar-subnav.html new file mode 100644 index 00000000..ee723975 --- /dev/null +++ b/views/partials/codedocs/codedocs-sidebar-subnav.html @@ -0,0 +1,10 @@ +
  • + {{#if link }} + {{title}} + {{ else }} + {{title}} + {{/if}} + {{#if items}} + {{> codedocs/codedocs-sidebar-items }} + {{/if}} +
  • diff --git a/views/partials/codedocs/codedocs-sidebar.html b/views/partials/codedocs/codedocs-sidebar.html new file mode 100644 index 00000000..b20a4ebc --- /dev/null +++ b/views/partials/codedocs/codedocs-sidebar.html @@ -0,0 +1,16 @@ +{{#if navItems}} +
    +
    + + +
    +
    + +
      + {{#each navItems}} + {{> codedocs/codedocs-sidebar-subnav }} + {{/each}} +
    +{{/if}} + + diff --git a/views/partials/codedocs/nodes/sections/deprecation-warning.html b/views/partials/codedocs/nodes/sections/deprecation-warning.html new file mode 100644 index 00000000..75e11b6a --- /dev/null +++ b/views/partials/codedocs/nodes/sections/deprecation-warning.html @@ -0,0 +1,14 @@ +{{#if deprecated }} +
    +
    +
    +
    + The {{ kind }} "{{ name }}" is deprecated. +
    + {{{ markdown deprecated }}} {{#unless deprecated }} Please contact the Origami team with any questions. {{/unless}} +
    +
    +
    +
    +
    +{{/if}} diff --git a/views/partials/codedocs/nodes/sections/examples.html b/views/partials/codedocs/nodes/sections/examples.html new file mode 100644 index 00000000..034d0983 --- /dev/null +++ b/views/partials/codedocs/nodes/sections/examples.html @@ -0,0 +1,14 @@ +{{#if this.length }} +

    Example{{#unlessEquals this.length 1}}s{{/unlessEquals}}

    +{{#each this}} + {{#unlessEquals ../length 1}} +

    Example #{{increment @index}}

    + {{/unlessEquals}} + {{#if this.caption}} + {{{markdown this.caption 4}}} + {{/if}} +
    +
    {{ this.code }}
    +
    +{{/each}} +{{/if}} diff --git a/views/partials/codedocs/nodes/sections/github-link.html b/views/partials/codedocs/nodes/sections/github-link.html new file mode 100644 index 00000000..27cd5810 --- /dev/null +++ b/views/partials/codedocs/nodes/sections/github-link.html @@ -0,0 +1,3 @@ + + "{{ name }}" {{ kind }} on Github + diff --git a/views/partials/codedocs/nodes/sections/links.html b/views/partials/codedocs/nodes/sections/links.html new file mode 100644 index 00000000..308b2049 --- /dev/null +++ b/views/partials/codedocs/nodes/sections/links.html @@ -0,0 +1,8 @@ +{{#if file}} +

    Links

    +
      +
    • + {{> codedocs/nodes/sections/github-link name=name kind=kind file=file }} +
    • +
    +{{/if}} diff --git a/views/partials/codedocs/nodes/sections/name.html b/views/partials/codedocs/nodes/sections/name.html new file mode 100644 index 00000000..c45e3e27 --- /dev/null +++ b/views/partials/codedocs/nodes/sections/name.html @@ -0,0 +1,9 @@ +{{#if parameters }} + {{#ifAny parameters.length 1 2}} + {{ name }}({{#each parameters}}{{name}}{{#unless @last}}, {{/unless}}{{/each}}) + {{else}} + {{ name }}(...) + {{/ifAny}} +{{else}} + {{ name }} +{{/if}} diff --git a/views/partials/codedocs/nodes/sections/parameters-table.html b/views/partials/codedocs/nodes/sections/parameters-table.html new file mode 100644 index 00000000..f3d90cc8 --- /dev/null +++ b/views/partials/codedocs/nodes/sections/parameters-table.html @@ -0,0 +1,25 @@ + + + + + + + + + + + {{#each this}} + + + + + + + {{/each}} + +
    parametertypedefaultdescription
    {{name}}{{#if optional}} (optional){{/if}} + {{#each type}} + {{ this }} + {{#unless @last}} | {{/unless}} + {{/each}} + {{default}}{{description}}
    diff --git a/views/partials/codedocs/sassdoc/sassdoc-node.html b/views/partials/codedocs/sassdoc/sassdoc-node.html new file mode 100644 index 00000000..775de702 --- /dev/null +++ b/views/partials/codedocs/sassdoc/sassdoc-node.html @@ -0,0 +1,51 @@ +
    + {{> codedocs/nodes/sections/deprecation-warning }} + +

    + {{> codedocs/nodes/sections/name }} +

    + + {{#if description }} + {{{ markdown description }}} + {{/if}} + + {{#if output }} + {{{ markdown output }}} + {{/if}} + + {{#if parameters }} + {{> codedocs/nodes/sections/parameters-table parameters }} + {{/if}} + + {{#if content }} +

    Content Block

    + {{{ markdown content }}} + {{/if}} + + {{#if return }} +

    Returns

    + {{#if return.types}} + {{#each return.types}}{{this}}{{#unless @last}} | {{/unless}}{{/each}} + {{/if}} + {{#if return.description}} + {{#if return.types}} - {{/if}} + {{return.description}} + {{/if}} + + {{/if}} + + {{#if aliases }} +

    Aliases

    +
      + {{#each aliases}} +
    • {{ this }}
    • + {{/each}} +
    + {{/if}} + + {{> codedocs/nodes/sections/examples examples }} + + {{> codedocs/nodes/sections/links }} +
    diff --git a/views/partials/component/brand-tabs.html b/views/partials/component/brand-tabs.html index 13693460..a513cb96 100644 --- a/views/partials/component/brand-tabs.html +++ b/views/partials/component/brand-tabs.html @@ -1,15 +1,8 @@ -
    - {{#if component.hasBrands}} -
    - {{#component.brands}} - + {{#component.brands}} + {{this}} brand - {{/component.brands}} -
    - - {{> component/container @root}} - - {{else}} - {{> component/container }} - {{/if}} -
    + {{/component.brands}} +
    +{{/if}} diff --git a/views/partials/component/container.html b/views/partials/component/container.html index 402ddae9..dcea3336 100644 --- a/views/partials/component/container.html +++ b/views/partials/component/container.html @@ -1,30 +1,7 @@ -{{> component/messages}} +
    + {{> component/messages}} -{{> component/header}} + {{> content}} -{{#if demos}} - {{> component/type/demos}} -{{/if}} - -{{#if images}} - {{> component/type/images}} -{{/if}} - -{{#if service}} - {{> component/type/service}} -{{/if}} - -{{#ifEither dependencies.bower.length dependencies.npm.length}} - {{> component/dependencies dependencies}} -{{/ifEither}} - -
    -
    -

    Support

    -

    Email {{component.support.email}}

    - {{#if component.support.channel}} -

    Slack {{component.support.channel.name}}

    - {{/if}} -
    - Report an issue on GitHub + {{> component/support}}
    diff --git a/views/partials/component/header.html b/views/partials/component/header.html index a62f88f6..36c9b338 100644 --- a/views/partials/component/header.html +++ b/views/partials/component/header.html @@ -3,9 +3,7 @@

    {{component.name}}

    {{component.description}}

    diff --git a/views/partials/component/list-sidebar.html b/views/partials/component/list-sidebar.html index aa69add3..0e542e21 100644 --- a/views/partials/component/list-sidebar.html +++ b/views/partials/component/list-sidebar.html @@ -5,19 +5,23 @@
    -
      +
        {{#each categories}} {{#if repos.length}} -
      • {{name}}
      • - {{#repos}} -
      • - {{name}} -
      • - {{/repos}} +
      • + {{name}} +
          + {{#repos}} +
        • + {{name}} +
        • + {{/repos}} +
        +
      • {{/if}} {{/each}}
      diff --git a/views/partials/component/quickstart-sidebar.html b/views/partials/component/quickstart-sidebar.html index 827b2e77..1de6d043 100644 --- a/views/partials/component/quickstart-sidebar.html +++ b/views/partials/component/quickstart-sidebar.html @@ -1,13 +1,11 @@ -
      -
      - GitHub Repository +
      + GitHub Repository - {{#ifEquals component.type 'imageset'}} - {{> component/quickstart/imageset}} - {{/ifEquals}} + {{#ifEquals component.type 'imageset'}} + {{> component/quickstart/imageset}} + {{/ifEquals}} - {{#ifEquals component.type 'module'}} - {{> component/quickstart/build-service component}} - {{/ifEquals}} -
      + {{#ifEquals component.type 'module'}} + {{> component/quickstart/build-service component}} + {{/ifEquals}}
      diff --git a/views/partials/component/support.html b/views/partials/component/support.html new file mode 100644 index 00000000..cb808132 --- /dev/null +++ b/views/partials/component/support.html @@ -0,0 +1,10 @@ +
      +
      +

      Support

      +

      Email {{component.support.email}}

      + {{#if component.support.channel}} +

      Slack {{component.support.channel.name}}

      + {{/if}} +
      + Report an issue on GitHub +
      diff --git a/views/partials/component/type/demos.html b/views/partials/component/type/demos.html index 54109f21..cc880211 100644 --- a/views/partials/component/type/demos.html +++ b/views/partials/component/type/demos.html @@ -32,7 +32,7 @@

      +
      {{#if display.plainHTML}}
      {{{display.highlightedHTML}}}
      diff --git a/views/partials/header/nav.html b/views/partials/header/nav.html index d1c2eed0..5e0ddb32 100644 --- a/views/partials/header/nav.html +++ b/views/partials/header/nav.html @@ -19,3 +19,52 @@

    + +{{#if component}} + +{{/if}} diff --git a/views/partials/jsdoc/jsdoc-node.html b/views/partials/jsdoc/jsdoc-node.html new file mode 100644 index 00000000..6192342e --- /dev/null +++ b/views/partials/jsdoc/jsdoc-node.html @@ -0,0 +1,28 @@ +
    + {{#ifEquals kind 'class'}} + {{> jsdoc/nodes/class-node }} + {{/ifEquals}} + {{#ifEquals kind 'function'}} + {{> jsdoc/nodes/function-node }} + {{/ifEquals}} + {{#ifEquals kind 'event'}} + {{> jsdoc/nodes/event-node }} + {{/ifEquals}} + {{#ifEquals kind 'module'}} + {{> jsdoc/nodes/module-node }} + {{/ifEquals}} + {{#ifEquals kind 'namespace'}} + {{> jsdoc/nodes/namespace-node }} + {{/ifEquals}} + {{#ifEquals kind 'mixin'}} + {{> jsdoc/nodes/mixin-node }} + {{/ifEquals}} + {{#ifEquals kind 'constant'}} + {{> jsdoc/nodes/property-node }} + {{/ifEquals}} + {{#ifEquals kind 'member'}} + {{> jsdoc/nodes/property-node }} + {{/ifEquals}} + + {{> codedocs/nodes/sections/links }} +
    diff --git a/views/partials/jsdoc/nodes/class-node.html b/views/partials/jsdoc/nodes/class-node.html new file mode 100644 index 00000000..245150c7 --- /dev/null +++ b/views/partials/jsdoc/nodes/class-node.html @@ -0,0 +1,37 @@ +

    new {{#if constructor}}{{> codedocs/nodes/sections/name name=longname parameters=constructor.parameters}}{{/if}}

    + +{{#if description}} +

    {{description}}

    +{{/if}} + +{{#if constructor}} + {{#if constructor.description}} +

    {{constructor.description}}

    + {{/if}} + + {{#if constructor.parameters}} + {{> codedocs/nodes/sections/parameters-table constructor.parameters }} + {{/if}} +{{/if}} + +{{#if functions}} + {{> jsdoc/nodes/sections/functions functions }} +{{/if}} + +{{#if properties}} + {{> jsdoc/nodes/sections/properties properties }} +{{/if}} + +{{#if extends}} + {{> jsdoc/nodes/sections/extends extends }} +{{/if}} + +{{#if fires}} + {{> jsdoc/nodes/sections/fires-events fires }} +{{/if}} + +{{#if constructor}} + {{#if constructor.examples}} + {{> codedocs/nodes/sections/examples constructor.examples }} + {{/if}} +{{/if}} diff --git a/views/partials/jsdoc/nodes/event-node.html b/views/partials/jsdoc/nodes/event-node.html new file mode 100644 index 00000000..2a4ac7af --- /dev/null +++ b/views/partials/jsdoc/nodes/event-node.html @@ -0,0 +1,18 @@ +

    {{longname}}

    + +{{#if type}} +

    Type: {{#each type}}{{ this }}{{#unless @last}} | {{/unless}}{{/each}}

    +{{/if}} + +{{#if description}} +

    {{description}}

    +{{/if}} + +{{#if properties}} + {{> jsdoc/nodes/sections/properties-table properties }} +{{/if}} + +{{#if examples}} + {{> codedocs/nodes/sections/examples this }} +{{/if}} + diff --git a/views/partials/jsdoc/nodes/function-node.html b/views/partials/jsdoc/nodes/function-node.html new file mode 100644 index 00000000..88c405cc --- /dev/null +++ b/views/partials/jsdoc/nodes/function-node.html @@ -0,0 +1,23 @@ +{{> codedocs/nodes/sections/deprecation-warning }} + +

    {{> codedocs/nodes/sections/name name=longname parameters=parameters}}

    +

    {{ capitalise scope }} {{ label }}

    +{{#if description}} + {{{markdown description}}} +{{/if}} + +{{#if parameters}} + {{> codedocs/nodes/sections/parameters-table parameters }} +{{/if}} + +{{#if returns}} + {{> jsdoc/nodes/sections/returns returns }} +{{/if}} + +{{#if fires}} + {{> jsdoc/nodes/sections/fires-events fires }} +{{/if}} + +{{#if examples}} + {{> codedocs/nodes/sections/examples examples }} +{{/if}} diff --git a/views/partials/jsdoc/nodes/generic.html b/views/partials/jsdoc/nodes/generic.html new file mode 100644 index 00000000..19d23f27 --- /dev/null +++ b/views/partials/jsdoc/nodes/generic.html @@ -0,0 +1,37 @@ +

    {{> codedocs/nodes/sections/name name=longname parameters=parameters}}

    + +{{#if description}} +

    {{description}}

    +{{/if}} + +{{#if parameters}} + {{> codedocs/nodes/sections/parameters-table parameters }} +{{/if}} + +{{#if returns}} + {{> jsdoc/nodes/sections/returns returns }} +{{/if}} + +{{#if fires}} + {{> jsdoc/nodes/sections/fires-events fires }} +{{/if}} + +{{#if functions}} + {{> jsdoc/nodes/sections/functions functions }} +{{/if}} + +{{#if classes}} + {{> jsdoc/nodes/sections/classes classes }} +{{/if}} + +{{#if properties}} + {{> jsdoc/nodes/sections/properties properties }} +{{/if}} + +{{#if extends}} + {{> jsdoc/nodes/sections/extends extends }} +{{/if}} + +{{#if examples}} + {{> codedocs/nodes/sections/examples examples }} +{{/if}} diff --git a/views/partials/jsdoc/nodes/mixin-node.html b/views/partials/jsdoc/nodes/mixin-node.html new file mode 100644 index 00000000..2d19ec20 --- /dev/null +++ b/views/partials/jsdoc/nodes/mixin-node.html @@ -0,0 +1,2 @@ +{{!-- {{ A mixin may take one of many forms. }} --}} +{{> jsdoc/nodes/generic this }} diff --git a/views/partials/jsdoc/nodes/module-node.html b/views/partials/jsdoc/nodes/module-node.html new file mode 100644 index 00000000..76489bce --- /dev/null +++ b/views/partials/jsdoc/nodes/module-node.html @@ -0,0 +1,2 @@ +{{!-- {{ A module may take one of many forms. }} --}} +{{> jsdoc/nodes/generic this }} diff --git a/views/partials/jsdoc/nodes/namespace-node.html b/views/partials/jsdoc/nodes/namespace-node.html new file mode 100644 index 00000000..bf155d3c --- /dev/null +++ b/views/partials/jsdoc/nodes/namespace-node.html @@ -0,0 +1,17 @@ +

    {{longname}}

    + +{{#if description}} +

    {{description}}

    +{{/if}} + +{{#if functions}} + {{> jsdoc/nodes/sections/functions functions }} +{{/if}} + +{{#if classes}} + {{> jsdoc/nodes/sections/classes classes }} +{{/if}} + +{{#if properties}} + {{> jsdoc/nodes/sections/properties properties }} +{{/if}} diff --git a/views/partials/jsdoc/nodes/property-node.html b/views/partials/jsdoc/nodes/property-node.html new file mode 100644 index 00000000..3ff1a5a3 --- /dev/null +++ b/views/partials/jsdoc/nodes/property-node.html @@ -0,0 +1,14 @@ +

    {{longname}}

    +

    {{ capitalise scope }} Property

    +{{#if type}} +

    Type{{#unlessEquals type.length 1}}s{{/unlessEquals}}

    +
      + {{#each type}} +
    • {{ this }}
    • + {{/each}} +
    +{{/if}} + +{{#if description}} +

    {{description}}

    +{{/if}} diff --git a/views/partials/jsdoc/nodes/sections/classes.html b/views/partials/jsdoc/nodes/sections/classes.html new file mode 100644 index 00000000..7f3abc74 --- /dev/null +++ b/views/partials/jsdoc/nodes/sections/classes.html @@ -0,0 +1,13 @@ +{{#if this}} +

    Constructor Functions / Classes

    + +{{/if}} diff --git a/views/partials/jsdoc/nodes/sections/extends.html b/views/partials/jsdoc/nodes/sections/extends.html new file mode 100644 index 00000000..498645ad --- /dev/null +++ b/views/partials/jsdoc/nodes/sections/extends.html @@ -0,0 +1,10 @@ +{{#if this}} +

    Extends

    +
      + {{#each this}} +
    • + {{this}} +
    • + {{/each}} +
    +{{/if}} diff --git a/views/partials/jsdoc/nodes/sections/fires-events.html b/views/partials/jsdoc/nodes/sections/fires-events.html new file mode 100644 index 00000000..b2cd562b --- /dev/null +++ b/views/partials/jsdoc/nodes/sections/fires-events.html @@ -0,0 +1,10 @@ +{{#if this}} +

    Fires Event{{#unlessEquals this.length 1}}s{{/unlessEquals}}

    +
      + {{#each this}} +
    • + {{this}} +
    • + {{/each}} +
    +{{/if}} diff --git a/views/partials/jsdoc/nodes/sections/functions.html b/views/partials/jsdoc/nodes/sections/functions.html new file mode 100644 index 00000000..9b592ac7 --- /dev/null +++ b/views/partials/jsdoc/nodes/sections/functions.html @@ -0,0 +1,13 @@ +{{#if this}} +

    Methods

    + +{{/if}} diff --git a/views/partials/jsdoc/nodes/sections/properties-table.html b/views/partials/jsdoc/nodes/sections/properties-table.html new file mode 100644 index 00000000..22a6df1d --- /dev/null +++ b/views/partials/jsdoc/nodes/sections/properties-table.html @@ -0,0 +1,22 @@ +{{#if this.length}} + + + + + + + + + + {{#each this}} + + + + + + {{/each}} + +
    propertytypedescription
    {{name}} + {{#each type}} {{ this }} {{#unless @last}} | {{/unless}} {{/each}} + {{description}}
    +{{/if}} diff --git a/views/partials/jsdoc/nodes/sections/properties.html b/views/partials/jsdoc/nodes/sections/properties.html new file mode 100644 index 00000000..2865f8bc --- /dev/null +++ b/views/partials/jsdoc/nodes/sections/properties.html @@ -0,0 +1,17 @@ +{{#if this}} +

    Properties

    +
      + {{#each this}} +
    • + {{name}} + {{#if type}} + - ({{#each type}}type{{#unlessEquals ../type.length 1}}s{{/unlessEquals}}: {{this}}{{#unless @last}} | {{/unless}}{{/each}}) + {{/if}} + {{#if description}} + {{#unless type}}-{{/unless}} + {{description}} + {{/if}} +
    • + {{/each}} +
    +{{/if}} diff --git a/views/partials/jsdoc/nodes/sections/returns.html b/views/partials/jsdoc/nodes/sections/returns.html new file mode 100644 index 00000000..300f9f43 --- /dev/null +++ b/views/partials/jsdoc/nodes/sections/returns.html @@ -0,0 +1,14 @@ +{{#if this}} +

    Returns

    +
      +
    • + {{name}} + {{#if type}} + {{#each type}}{{this}}{{#unless @last}} | {{/unless}}{{/each}} + {{/if}} + {{#if description}} + - {{description}} + {{/if}} +
    • +
    +{{/if}} diff --git a/views/partials/overview/search-form.html b/views/partials/overview/search-form.html index c1e3bef3..691ecc61 100644 --- a/views/partials/overview/search-form.html +++ b/views/partials/overview/search-form.html @@ -1,42 +1,46 @@ -
    -
    -
    - -
    Filter components by name or tag
    - + +
    + +
    Filter components by name or tag
    + +
    -
    - -
    Filter components by type
    -
    - - - - - - -
    -
    +
    + +
    Filter components by type
    +
    + + + + + + +
    +
    -
    - -
    Filter components by status
    -
    - - - - - - - - - - -
    -
    -
    +
    + +
    Filter components by status
    +
    + + + + + + + + + + +
    +
    diff --git a/views/partials/overview/sidebar.html b/views/partials/overview/sidebar.html index 346395d3..eacdd945 100644 --- a/views/partials/overview/sidebar.html +++ b/views/partials/overview/sidebar.html @@ -1,5 +1,4 @@ -
    -
    +

    Library Updates

    The registry is updated whenever a new tag is pushed to a repository that has an origami.json file in it. If your repository meets the following criteria then it should be ingested within 5 minutes:

    @@ -21,17 +20,14 @@

    Library Updates

    Bower Registry

    -

    The Origami components library provides a read-only API conforming to the Bower Registry API spec (excluding registration and publishing). To specify the Origami components library as your source for Bower components, create a .bowerrc file in your home directory or the root of your project's working tree, with the following content:

    +

    The Origami components library provides a read-only API conforming to the Bower Registry API spec (excluding registration and publishing). To specify the Origami components library as your source for Bower components, create a .bowerrc file in your home directory or the root of your project's working tree, with the following content:

    -
    -{
    -  "registry": {
    -    "search": [
    -      "https://origami-bower-registry.ft.com",
    -      "https://registry.bower.io"
    -    ]
    -  }
    -}
    -
    -
    +
    {
    +			"registry": {
    +				"search": [
    +					"https://origami-bower-registry.ft.com",
    +					"https://registry.bower.io"
    +				]
    +			}
    +		}
    diff --git a/views/readme.html b/views/readme.html new file mode 100644 index 00000000..af2ec3a1 --- /dev/null +++ b/views/readme.html @@ -0,0 +1,11 @@ +
    +
    + {{> codedocs/codedocs-sidebar }} +
    + +
    +
    + {{{ readme }}} +
    +
    +
    diff --git a/views/sassdoc.html b/views/sassdoc.html new file mode 100644 index 00000000..4a694d61 --- /dev/null +++ b/views/sassdoc.html @@ -0,0 +1,26 @@ +
    +
    + {{> codedocs/codedocs-sidebar }} +
    + +
    +
    + {{> component/messages}} + + {{#unless navItems }} +

    {{ component.name }} SassDocs

    +

    It looks like SassDocs for {{ component.name }}@{{ component.version }} are missing or formatted incorrectly.

    +

    For component documentation see the readme.

    + {{/unless}} + + {{#each sassDocNodes}} + {{> codedocs/sassdoc/sassdoc-node }} + {{/each}} + + {{!-- {{ Output default node to display before selection is made. }} --}} + {{#if defaultNode}} + {{> codedocs/sassdoc/sassdoc-node defaultNode default=true }} + {{/if}} +
    +
    +
    diff --git a/whitesource.config.json b/whitesource.config.json deleted file mode 100644 index e4ab5328..00000000 --- a/whitesource.config.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "checkPolicies": true, - "projectName": "origami-registry-ui", - "productName": "origami services and node modules", - "devDep": false, - "failOnError": true -}