diff --git a/.gitignore b/.gitignore index e75c2a9..682c00f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,8 @@ coverage/ node_modules/ test-lib/ +java/ js/**/ElectroGrammar* -python3/**/ElectroGrammar* \ No newline at end of file +js/**/cpl_* +python3/**/ElectroGrammar* +python3/**/cpl_* \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 045ded4..5b3ceb6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,8 +7,15 @@ matrix: include: - node_js: node env: TEST_BROWSERS=true +before_install: + - cd travis + - wget --no-check-certificate https://www.antlr.org/download/antlr-4.7.1-complete.jar + - export CLASSPATH=".:$TRAVIS_BUILD_DIR/travis/antlr-4.7.1-complete.jar:$CLASSPATH" + - export PATH=$PATH:$TRAVIS_BUILD_DIR/travis + - cd .. script: + - make + - cd js + - yarn - yarn test - - yarn demo - - git diff --quiet - - if [ "${TEST_BROWSERS}" = "true" ] && [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then yarn test:sauce; fi + - if [ "${TEST_BROWSERS}" = "true" ] && [ "${TRAVIS_BRANCH}" = "master" ]; then yarn test:sauce; fi diff --git a/Makefile b/Makefile index 1d5c15d..430386d 100644 --- a/Makefile +++ b/Makefile @@ -13,10 +13,10 @@ clean-java: python3: $(GRAMMAR) $(GRAMMAR_FILES) - $(ANTLR) -Dlanguage=Python3 $< -o python3/ + $(ANTLR) -Dlanguage=Python3 $< -o python3/electro_grammar/ clean-python3: - rm -f python3/ElectroGrammar* + rm -f python3/electro_grammar/ElectroGrammar* js: $(GRAMMAR) $(GRAMMAR_FILES) diff --git a/js/.prettierrc b/js/.prettierrc new file mode 100644 index 0000000..b31f38f --- /dev/null +++ b/js/.prettierrc @@ -0,0 +1,5 @@ +tabWidth: 2 +semi: true +singleQuote: true +bracketSpacing: false +trailingComma: es5 diff --git a/js/lib/index.js b/js/lib/index.js index 8f4dc18..d5c586c 100644 --- a/js/lib/index.js +++ b/js/lib/index.js @@ -1,35 +1,271 @@ -var {ElectroGrammarLexer} = require('./ElectroGrammarLexer'); -var {ElectroGrammarParser} = require('./ElectroGrammarParser'); -var {ElectroGrammarListener} = require('./ElectroGrammarListener'); -var antlr4 = require('antlr4'); - -var ElectroGrammarToObjectListener = function() { - ElectroGrammarListener.call(this); - this.obj = {}; - return this; -}; - -ElectroGrammarToObjectListener.prototype = Object.create(ElectroGrammarListener.prototype); -ElectroGrammarToObjectListener.prototype.constructor = ElectroGrammarToObjectListener; - -ElectroGrammarToObjectListener.prototype.enterCapacitance = function(ctx) { - var cprefix_lookup = {'u': 10e-6, 'n': 10e-9, 'p': 10e-12}; - var number = Number(ctx.NUMBER().getText()); - var cprefix = cprefix_lookup[ctx.CPREFIX().getText()]; - this.obj['capacitance'] = number * cprefix; -}; - -var parse = function(input) { - var chars = new antlr4.InputStream(input); - var lexer = new ElectroGrammarLexer(chars); - var tokens = new antlr4.CommonTokenStream(lexer); - var parser = new ElectroGrammarParser(tokens); - parser.buildParseTrees = true; - - var tree = parser.electro_grammar(); - var listener = new ElectroGrammarToObjectListener(); - var walker = antlr4.tree.ParseTreeWalker.DEFAULT.walk(listener, tree); - return listener.obj; -}; - -module.exports = {'parse': parse}; +const {ElectroGrammarLexer} = require('./ElectroGrammarLexer'); +const {ElectroGrammarParser} = require('./ElectroGrammarParser'); +const {ElectroGrammarListener} = require('./ElectroGrammarListener'); +const antlr4 = require('antlr4'); + +function handle_unit(ctx, prefix) { + return Number(ctx.NUMBER().getText() + prefix); +} + +function handle_prefix(ctx) { + if ('GIGA' in ctx && ctx.GIGA()) { + return 'e9'; + } + if ('MEGA' in ctx && ctx.MEGA()) { + return 'e6'; + } + if ('KILO' in ctx && ctx.KILO()) { + return 'e3'; + } + if ('MILI' in ctx && ctx.MILI()) { + return 'e-3'; + } + if ('MICRO' in ctx && ctx.MICRO()) { + return 'e-6'; + } + if ('NANO' in ctx && ctx.NANO()) { + return 'e-9'; + } + if ('PICO' in ctx && ctx.PICO()) { + return 'e-12'; + } + return ''; +} + +function handle_package_size(ctx) { + if ('METRIC_SIZE' in ctx && ctx.METRIC_SIZE()) { + return ctx.METRIC_SIZE().getText(); + } + if ('IMPERIAL_SIZE' in ctx && ctx.IMPERIAL_SIZE()) { + return ctx.IMPERIAL_SIZE().getText(); + } + if ('AMBIGUOUS_SIZE' in ctx && ctx.AMBIGUOUS_SIZE()) { + return ctx.AMBIGUOUS_SIZE().getText(); + } + return ''; +} + +class ElectroGrammarToObjectListener extends ElectroGrammarListener { + constructor() { + super(); + this.obj = {}; + this.prefix = ''; + } + exitVprefix(ctx) { + this.prefix = handle_prefix(ctx); + } + exitVoltage(ctx) { + this.obj['voltage'] = handle_unit(ctx, this.prefix); + this.prefix = ''; + } + exitAprefix(ctx) { + this.prefix = handle_prefix(ctx); + } + exitCurrent(ctx) { + this.obj['current'] = handle_unit(ctx, this.prefix); + this.prefix = ''; + } + exitPprefix(ctx) { + this.prefix = handle_prefix(ctx); + } + exitPower(ctx) { + this.obj['power'] = handle_unit(ctx, this.prefix); + this.prefix = ''; + } + exitRprefix(ctx) { + this.prefix = handle_prefix(ctx); + } + exitResistance(ctx) { + this.obj['resistance'] = handle_unit(ctx, this.prefix); + this.prefix = ''; + } + exitCprefix(ctx) { + this.prefix = handle_prefix(ctx); + } + exitCapacitance(ctx) { + this.obj['capacitance'] = handle_unit(ctx, this.prefix); + this.prefix = ''; + } + exitLprefix(ctx) { + this.prefix = handle_prefix(ctx); + } + exitInductance(ctx) { + this.obj['inductance'] = handle_unit(ctx, this.prefix); + this.prefix = ''; + } + exitFprefix(ctx) { + this.prefix = handle_prefix(ctx); + } + exitFrequency(ctx) { + this.obj['frequency'] = handle_unit(ctx, this.prefix); + this.prefix = ''; + } + exitTprefix(ctx) { + this.prefix = handle_prefix(ctx, this.prefix); + } + exitTime(ctx) { + this.obj['time'] = handle_unit(ctx, this.prefix); + this.prefix = ''; + } + exitTemperature(ctx) { + this.obj['temperature'] = handle_unit(ctx, ''); + } + exitTolerance(ctx) { + this.obj['tolerance'] = handle_unit(ctx, ''); + } + exitMetric_size(ctx) { + var imperial_lookup = { + '0201': '008004', + '03015': '009005', + '0402': '01005', + '0603': '0201', + '1005': '0402', + '1608': '0603', + '2012': '0805', + '2520': '1008', + '3216': '1206', + '3225': '1210', + '4516': '1806', + '4532': '1812', + '4564': '1825', + '5025': '2010', + '6332': '2512', + '7451': '2920' + }; + this.obj['package_size'] = imperial_lookup[handle_package_size(ctx)]; + } + exitImperial_size(ctx) { + this.obj['package_size'] = handle_package_size(ctx); + } + exitAmbiguous_size(ctx) { + console.log('Warn: Ambiguous package size found'); + this.obj['package_size'] = handle_package_size(ctx); + } + exitClass1(ctx) { + var dielectric; + if (ctx.M7G()) { + dielectric = 'M7G'; + } + else if (ctx.C0G()) { + dielectric = 'C0G'; + } + else if (ctx.H2G()) { + dielectric = 'H2G'; + } + else if (ctx.L2G()) { + dielectric = 'L2G'; + } + else if (ctx.P2H()) { + dielectric = 'P2H'; + } + else if (ctx.R2H()) { + dielectric = 'R2H'; + } + else if (ctx.S2H()) { + dielectric = 'S2H'; + } + else if (ctx.T2H()) { + dielectric = 'T2H'; + } + else if (ctx.U2J()) { + dielectric = 'U2J'; + } + else if (ctx.Q3K()) { + dielectric = 'Q3K'; + } + else if (ctx.P3K()) { + dielectric = 'P3K'; + } + + this.obj['dielectric'] = dielectric; + } + exitClass2(ctx) { + this.obj['dielectric'] = ctx.CLASS2().getText().toUpperCase(); + } + exitAlu(ctx) { + this.obj['dielectric'] = 'ALU'; + } + exitTan(ctx) { + this.obj['dielectric'] = 'TAN'; + } + exitResistor(ctx) { + this.obj['type'] = 'resistor'; + } + exitCapacitor(ctx) { + this.obj['type'] = 'capacitor'; + } + exitInductor(ctx) { + this.obj['type'] = 'inductor'; + } + exitOscillator(ctx) { + this.obj['type'] = 'oscillator'; + } + exitRtype(ctx) { + if (ctx.POT()) + this.obj['rtype'] = 'pot'; + } + exitDiode(ctx) { + this.obj['type'] = 'diode'; + } + exitDcode(ctx) { + this.obj['code'] = ctx.DCODE().getText().toUpperCase(); + } + exitSignal(ctx) { + this.obj['dtype'] = 'signal'; + } + exitRectifier(ctx) { + this.obj['dtype'] = 'rectifier'; + } + exitLed(ctx) { + this.obj['dtype'] = 'led'; + } + exitSchottky(ctx) { + this.obj['dtype'] = 'schottky'; + } + exitZener(ctx) { + this.obj['dtype'] = 'zener'; + } + exitColor(ctx) { + this.obj['color'] = ctx.COLOR().getText().toLowerCase(); + } + exitTransistor(ctx) { + this.obj['type'] = 'transistor'; + } + exitTtype(ctx) { + this.obj['ttype'] = ctx.TTYPE().getText().toLowerCase(); + } + exitTcode(ctx) { + this.obj['code'] = ctx.TCODE().getText().toUpperCase(); + } +} + +function get_parser(start_rule) { + function parse(input) { + const chars = new antlr4.InputStream(input); + const lexer = new ElectroGrammarLexer(chars); + const tokens = new antlr4.CommonTokenStream(lexer); + const parser = new ElectroGrammarParser(tokens); + + // enable grammar ambiguity diagnostic output + // see Antlr book ch 9.2, page 156 + // https://github.com/antlr/antlr4/issues/2206 + parser.removeErrorListeners(); + parser.addErrorListener(new antlr4.error.DiagnosticErrorListener()); + parser._interp.PredictionMode = + antlr4.atn.PredictionMode.LL_EXACT_AMBIG_DETECTION; + + parser.buildParseTrees = true; + + const tree = parser[start_rule](); + const listener = new ElectroGrammarToObjectListener(); + const walker = antlr4.tree.ParseTreeWalker.DEFAULT.walk(listener, tree); + return listener.obj; + } + return parse; +} + +function parse(input) { + return get_parser('electro_grammar')(input); +} + +module.exports = {get_parser, parse}; diff --git a/js/lib/lax_parser.js b/js/lib/lax_parser.js new file mode 100644 index 0000000..a2b83aa --- /dev/null +++ b/js/lib/lax_parser.js @@ -0,0 +1,63 @@ +const {ElectroGrammarLexer} = require('./ElectroGrammarLexer'); +const {ElectroGrammarParser} = require('./ElectroGrammarParser'); +const {ElectroGrammarListener} = require('./ElectroGrammarListener'); +const antlr4 = require('antlr4'); + +class ElectroGrammarToObjectListener extends ElectroGrammarListener { + constructor() { + super(); + this.obj = {}; + } + enterCapacitance(ctx) { + const cprefix_lookup = {u: 'e-6', n: 'e-9', p: 'e-12'}; + const number = ctx.NUMBER().getText(); + const cprefix = cprefix_lookup[ctx.CPREFIX().getText()]; + this.obj.capacitance = Number(number + cprefix); + this.obj.type = 'capacitor'; + } +} + +class LexerIgnoreListener extends antlr4.error.ErrorListener { + constructor() { + super(); + this.ignored = ''; + } + syntaxError(lexer, offendingSymbol, line, char, err) { + // hopefully there is a better way to get the input, but I haven't found it + let input = err.split(':')[1].trim(); + input = input.substring(1, input.length - 1); + this.ignored += input; + } +} + +class ParserIgnoreListener extends antlr4.error.ErrorListener { + constructor() { + super(); + this.ignored = ''; + } + syntaxError(lexer, offendingSymbol, line, char, err) { + this.ignored += offendingSymbol.getText(); + } +} + +function parse(input) { + const chars = new antlr4.InputStream(input); + const lexer = new ElectroGrammarLexer(chars); + const lexerIgnorer = new LexerIgnoreListener(); + lexer.removeErrorListeners(); + lexer.addErrorListener(lexerIgnorer); + const tokens = new antlr4.CommonTokenStream(lexer); + const parser = new ElectroGrammarParser(tokens); + const parserIgnorer = new ParserIgnoreListener(); + parser.buildParseTrees = true; + parser.removeErrorListeners(); + parser.addErrorListener(parserIgnorer); + + const tree = parser.electro_grammar(); + const listener = new ElectroGrammarToObjectListener(); + const walker = antlr4.tree.ParseTreeWalker.DEFAULT.walk(listener, tree); + console.log({lexer: lexerIgnorer.ignored, parser: parserIgnorer.ignored}); + return {component: listener.obj, ignored: ''}; +} + +module.exports = {parse}; diff --git a/js/package-lock.json b/js/package-lock.json index 93af2c6..4376b5f 100644 --- a/js/package-lock.json +++ b/js/package-lock.json @@ -2,7 +2,24 @@ "name": "electro-grammar", "version": "1.0.0", "lockfileVersion": 1, + "requires": true, "dependencies": { + "JSON2": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/JSON2/-/JSON2-0.1.0.tgz", + "integrity": "sha1-jXSTBApj1YNa919H3suDq2yMB5A=", + "dev": true + }, + "JSONStream": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", + "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", + "dev": true, + "requires": { + "jsonparse": "1.3.1", + "through": "2.3.8" + } + }, "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", @@ -13,7 +30,11 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.13.tgz", "integrity": "sha1-5fHzkoxtlf2WVYw27D2dDeSm7Oo=", - "dev": true + "dev": true, + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.5.3" + } }, "acorn": { "version": "4.0.13", @@ -31,7 +52,12 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } }, "amdefine": { "version": "1.0.1", @@ -60,13 +86,24 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true + "dev": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } }, "archiver": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-0.7.1.tgz", "integrity": "sha1-zxUteU+Gu9k/mFjaYNNqrqutm78=", "dev": true, + "requires": { + "file-utils": "0.1.5", + "lazystream": "0.1.0", + "lodash": "2.4.2", + "readable-stream": "1.0.34", + "zip-stream": "0.2.3" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -84,7 +121,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -98,13 +141,19 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } }, "arr-flatten": { "version": "1.1.0", @@ -158,13 +207,21 @@ "version": "4.9.2", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } }, "assert": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true + "dev": true, + "requires": { + "util": "0.10.3" + } }, "assert-plus": { "version": "0.1.5", @@ -176,7 +233,10 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", - "dev": true + "dev": true, + "requires": { + "acorn": "4.0.13" + } }, "async": { "version": "0.9.2", @@ -194,7 +254,10 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/asyncreduce/-/asyncreduce-0.1.4.tgz", "integrity": "sha1-GCEOAZeL/cugQ5VUl6XNMVwKakE=", - "dev": true + "dev": true, + "requires": { + "runnel": "0.5.3" + } }, "aws-sign2": { "version": "0.5.0", @@ -206,247 +269,471 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.26.0.tgz", "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", - "dev": true + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-polyfill": "6.26.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "chokidar": "1.7.0", + "commander": "2.13.0", + "convert-source-map": "1.5.1", + "fs-readdir-recursive": "1.1.0", + "glob": "7.1.2", + "lodash": "4.17.4", + "output-file-sync": "1.1.2", + "path-is-absolute": "1.0.1", + "slash": "1.0.0", + "source-map": "0.5.7", + "v8flags": "2.1.1" + } }, "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 + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } }, "babel-core": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", - "dev": true + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } }, "babel-generator": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", - "dev": true + "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-helper-call-delegate": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } }, "babel-helper-define-map": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } }, "babel-helper-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } }, "babel-helper-get-function-arity": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } }, "babel-helper-hoist-variables": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } }, "babel-helper-optimise-call-expression": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } }, "babel-helper-regex": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } }, "babel-helper-replace-supers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } }, "babel-helpers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } }, "babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } }, "babel-plugin-check-es2015-constants": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } }, "babel-plugin-transform-es2015-arrow-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } }, "babel-plugin-transform-es2015-block-scoped-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } }, "babel-plugin-transform-es2015-block-scoping": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } }, "babel-plugin-transform-es2015-classes": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true + "dev": true, + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } }, "babel-plugin-transform-es2015-computed-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } }, "babel-plugin-transform-es2015-destructuring": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } }, "babel-plugin-transform-es2015-duplicate-keys": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } }, "babel-plugin-transform-es2015-for-of": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } }, "babel-plugin-transform-es2015-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } }, "babel-plugin-transform-es2015-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } }, "babel-plugin-transform-es2015-modules-amd": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } }, "babel-plugin-transform-es2015-modules-commonjs": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } }, "babel-plugin-transform-es2015-modules-systemjs": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } }, "babel-plugin-transform-es2015-modules-umd": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } }, "babel-plugin-transform-es2015-object-super": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } }, "babel-plugin-transform-es2015-parameters": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } }, "babel-plugin-transform-es2015-shorthand-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } }, "babel-plugin-transform-es2015-spread": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } }, "babel-plugin-transform-es2015-sticky-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } }, "babel-plugin-transform-es2015-template-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } }, "babel-plugin-transform-es2015-typeof-symbol": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } }, "babel-plugin-transform-es2015-unicode-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } }, "babel-plugin-transform-object-assign": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz", "integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } }, "babel-plugin-transform-regenerator": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true + "dev": true, + "requires": { + "regenerator-transform": "0.10.1" + } }, "babel-plugin-transform-strict-mode": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } }, "babel-polyfill": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "core-js": "2.5.3", + "regenerator-runtime": "0.10.5" + }, "dependencies": { "regenerator-runtime": { "version": "0.10.5", @@ -460,37 +747,100 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", - "dev": true + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0" + } }, "babel-register": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.3", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true + "dev": true, + "requires": { + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" + } }, "babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true + "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-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true + "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-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } }, "babylon": { "version": "6.18.0", @@ -520,7 +870,10 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true + "dev": true, + "requires": { + "callsite": "1.0.0" + } }, "binary-extensions": { "version": "1.11.0", @@ -533,6 +886,9 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", "dev": true, + "requires": { + "readable-stream": "1.0.34" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -544,7 +900,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -565,6 +927,17 @@ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.12.4.tgz", "integrity": "sha1-CQcAxLoohiqFIO83g5X97l9hwik=", "dev": true, + "requires": { + "bytes": "1.0.0", + "content-type": "1.0.4", + "debug": "2.2.0", + "depd": "1.0.1", + "iconv-lite": "0.4.8", + "on-finished": "2.2.1", + "qs": "2.4.2", + "raw-body": "2.0.2", + "type-is": "1.6.15" + }, "dependencies": { "bytes": { "version": "1.0.0", @@ -576,7 +949,10 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "iconv-lite": { "version": "0.4.8", @@ -601,6 +977,10 @@ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.0.2.tgz", "integrity": "sha1-osL5jIUxzumcY9jSOLfel7tln8o=", "dev": true, + "requires": { + "bytes": "2.1.0", + "iconv-lite": "0.4.8" + }, "dependencies": { "bytes": { "version": "2.1.0", @@ -616,19 +996,31 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz", "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=", - "dev": true + "dev": true, + "requires": { + "hoek": "0.9.1" + } }, "brace-expansion": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } }, "braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } }, "brorand": { "version": "1.1.0", @@ -640,13 +1032,24 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.3.tgz", "integrity": "sha512-Jo+RYsn8X8OhyP9tMXXg0ueR2fW696HUu1Hf3/DeiwNean1oGiPtdgGRNuUHBpPHzBH3x4n1kzAlgOgHSIq88g==", - "dev": true + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "combine-source-map": "0.8.0", + "defined": "1.0.0", + "safe-buffer": "5.1.1", + "through2": "2.0.3", + "umd": "3.0.1" + } }, "browser-resolve": { "version": "1.11.2", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", "dev": true, + "requires": { + "resolve": "1.1.7" + }, "dependencies": { "resolve": { "version": "1.1.7", @@ -666,37 +1069,113 @@ "version": "14.5.0", "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.5.0.tgz", "integrity": "sha512-gKfOsNQv/toWz+60nSPfYzuwSEdzvV2WdxrVPUbPD/qui44rAkB3t3muNtmmGYHqrG56FGwX9SUEQmzNLAeS7g==", - "dev": true + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "assert": "1.4.1", + "browser-pack": "6.0.3", + "browser-resolve": "1.11.2", + "browserify-zlib": "0.2.0", + "buffer": "5.0.8", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "defined": "1.0.0", + "deps-sort": "2.0.0", + "domain-browser": "1.1.7", + "duplexer2": "0.1.4", + "events": "1.1.1", + "glob": "7.1.2", + "has": "1.0.1", + "htmlescape": "1.1.1", + "https-browserify": "1.0.0", + "inherits": "2.0.3", + "insert-module-globals": "7.0.1", + "labeled-stream-splicer": "2.0.0", + "module-deps": "4.1.1", + "os-browserify": "0.3.0", + "parents": "1.0.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "read-only-stream": "2.0.0", + "readable-stream": "2.3.3", + "resolve": "1.5.0", + "shasum": "1.0.2", + "shell-quote": "1.6.1", + "stream-browserify": "2.0.1", + "stream-http": "2.8.0", + "string_decoder": "1.0.3", + "subarg": "1.0.0", + "syntax-error": "1.3.0", + "through2": "2.0.3", + "timers-browserify": "1.4.2", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4", + "xtend": "4.0.1" + } }, "browserify-aes": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", - "dev": true + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } }, "browserify-cipher": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", - "dev": true + "dev": true, + "requires": { + "browserify-aes": "1.1.1", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.3" + } }, "browserify-des": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", - "dev": true + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } }, "browserify-istanbul": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/browserify-istanbul/-/browserify-istanbul-0.1.5.tgz", "integrity": "sha1-AcjjHWo1juUVD0Mhw/KJlalkw58=", "dev": true, + "requires": { + "istanbul": "0.2.16", + "minimatch": "0.2.14", + "through": "2.3.8" + }, "dependencies": { "minimatch": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } } } }, @@ -704,25 +1183,45 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.6" + } }, "browserify-sign": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } }, "browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true + "dev": true, + "requires": { + "pako": "1.0.6" + } }, "buffer": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.0.8.tgz", "integrity": "sha512-xXvjQhVNz50v2nPeoOsNqWCLGfiv4ji/gXZM28jnVwdLJxH4mFyqgqCKfaK9zf1KUbG6zTkjLOy7ou+jSMarGA==", - "dev": true + "dev": true, + "requires": { + "base64-js": "1.2.1", + "ieee754": "1.1.8" + } }, "buffer-crc32": { "version": "0.2.1", @@ -778,19 +1277,33 @@ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "dev": true, - "optional": true + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true + "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" + } }, "char-split": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/char-split/-/char-split-0.2.0.tgz", "integrity": "sha1-h1XtpkHl2yd90PUJtRfIJ+UKjt8=", "dev": true, + "requires": { + "through": "2.3.4" + }, "dependencies": { "through": { "version": "2.3.4", @@ -804,13 +1317,28 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true + "dev": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.1.3", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } }, "cliui": { "version": "2.1.0", @@ -818,6 +1346,11 @@ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, "dependencies": { "wordwrap": { "version": "0.0.2", @@ -839,6 +1372,12 @@ "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", "dev": true, + "requires": { + "convert-source-map": "1.1.3", + "inline-source-map": "0.6.2", + "lodash.memoize": "3.0.4", + "source-map": "0.5.7" + }, "dependencies": { "convert-source-map": { "version": "1.1.3", @@ -852,7 +1391,10 @@ "version": "0.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", - "dev": true + "dev": true, + "requires": { + "delayed-stream": "0.0.5" + } }, "commander": { "version": "2.13.0", @@ -865,6 +1407,12 @@ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-0.2.9.tgz", "integrity": "sha1-Qi2SdDDAGr0GzUVbbfwEy0z4ADw=", "dev": true, + "requires": { + "buffer-crc32": "0.2.1", + "crc32-stream": "0.3.4", + "node-int64": "0.3.3", + "readable-stream": "1.0.34" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -876,7 +1424,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -890,19 +1444,33 @@ "version": "2.0.12", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz", "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=", - "dev": true + "dev": true, + "requires": { + "mime-db": "1.30.0" + } }, "compression": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/compression/-/compression-1.5.0.tgz", "integrity": "sha1-zMGlR4jaGzrXcpxJ9qALOsmt9H8=", "dev": true, + "requires": { + "accepts": "1.2.13", + "bytes": "2.1.0", + "compressible": "2.0.12", + "debug": "2.2.0", + "on-headers": "1.0.1", + "vary": "1.0.1" + }, "dependencies": { "debug": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true + "dev": true, + "requires": { + "ms": "0.7.1" + } }, "ms": { "version": "0.7.1", @@ -923,12 +1491,25 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + }, "dependencies": { "readable-stream": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } }, "string_decoder": { "version": "0.10.31", @@ -943,6 +1524,23 @@ "resolved": "https://registry.npmjs.org/connect/-/connect-2.12.0.tgz", "integrity": "sha1-Mdj6DcrN8ZCNgivSkjvootKn7Zo=", "dev": true, + "requires": { + "batch": "0.5.0", + "buffer-crc32": "0.2.1", + "bytes": "0.2.1", + "cookie": "0.1.0", + "cookie-signature": "1.0.1", + "debug": "0.8.1", + "fresh": "0.2.0", + "methods": "0.1.0", + "multiparty": "2.2.0", + "negotiator": "0.3.0", + "pause": "0.0.1", + "qs": "0.6.6", + "raw-body": "1.1.2", + "send": "0.1.4", + "uid2": "0.0.3" + }, "dependencies": { "bytes": { "version": "0.2.1", @@ -968,7 +1566,10 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true + "dev": true, + "requires": { + "date-now": "0.1.4" + } }, "constants-browserify": { "version": "1.0.0", @@ -1029,6 +1630,10 @@ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-0.3.4.tgz", "integrity": "sha1-c7wltF+sHbZjIjGnv86JJ+nwZVI=", "dev": true, + "requires": { + "buffer-crc32": "0.2.1", + "readable-stream": "1.0.34" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -1040,7 +1645,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -1054,31 +1665,65 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } }, "create-hash": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", - "dev": true + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.9" + } }, "create-hmac": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", - "dev": true + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.9" + } }, "cryptiles": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz", "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=", - "dev": true + "dev": true, + "requires": { + "boom": "0.4.2" + } }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true + "dev": true, + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.0", + "randombytes": "2.0.6", + "randomfill": "1.0.3" + } }, "ctype": { "version": "0.5.3", @@ -1096,7 +1741,10 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "decamelize": { "version": "1.2.0", @@ -1133,13 +1781,23 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", - "dev": true + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "shasum": "1.0.2", + "subarg": "1.0.0", + "through2": "2.0.3" + } }, "des.js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } }, "destroy": { "version": "1.0.4", @@ -1151,13 +1809,20 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true + "dev": true, + "requires": { + "repeating": "2.0.1" + } }, "detective": { "version": "4.7.1", "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", "dev": true, + "requires": { + "acorn": "5.3.0", + "defined": "1.0.0" + }, "dependencies": { "acorn": { "version": "5.3.0", @@ -1177,7 +1842,12 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" + } }, "domain-browser": { "version": "1.1.7", @@ -1189,7 +1859,10 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } }, "ee-first": { "version": "1.1.0", @@ -1201,7 +1874,16 @@ "version": "6.4.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } }, "emitter-component": { "version": "1.0.0", @@ -1219,7 +1901,10 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true + "dev": true, + "requires": { + "once": "1.4.0" + } }, "escape-html": { "version": "1.0.3", @@ -1238,6 +1923,12 @@ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.3.3.tgz", "integrity": "sha1-8CQBb1qI4Eb9EgBQVek5gC5sXyM=", "dev": true, + "requires": { + "esprima": "1.1.1", + "estraverse": "1.5.1", + "esutils": "1.0.0", + "source-map": "0.1.43" + }, "dependencies": { "esprima": { "version": "1.1.1", @@ -1256,7 +1947,10 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, - "optional": true + "optional": true, + "requires": { + "amdefine": "1.0.1" + } } } }, @@ -1300,31 +1994,58 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true + "dev": true, + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" + } }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } }, "expand-range": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true + "dev": true, + "requires": { + "fill-range": "2.2.3" + } }, "express": { "version": "3.4.8", "resolved": "https://registry.npmjs.org/express/-/express-3.4.8.tgz", "integrity": "sha1-qnqJht4HBTM39Lxe2aZFPZzI4uE=", "dev": true, + "requires": { + "buffer-crc32": "0.2.1", + "commander": "1.3.2", + "connect": "2.12.0", + "cookie": "0.1.0", + "cookie-signature": "1.0.1", + "debug": "0.8.1", + "fresh": "0.2.0", + "merge-descriptors": "0.0.1", + "methods": "0.1.0", + "mkdirp": "0.3.5", + "range-parser": "0.0.4", + "send": "0.1.4" + }, "dependencies": { "commander": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/commander/-/commander-1.3.2.tgz", "integrity": "sha1-io8w7GcKb91kr1LxkUuQfXnq1bU=", - "dev": true + "dev": true, + "requires": { + "keypress": "0.1.0" + } }, "debug": { "version": "0.8.1", @@ -1350,7 +2071,10 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } }, "fast-levenshtein": { "version": "2.0.6", @@ -1363,18 +2087,35 @@ "resolved": "https://registry.npmjs.org/file-utils/-/file-utils-0.1.5.tgz", "integrity": "sha1-3IFTyFU4fLTaywoXJVMfpESmtIw=", "dev": true, + "requires": { + "findup-sync": "0.1.3", + "glob": "3.2.11", + "iconv-lite": "0.2.11", + "isbinaryfile": "0.1.9", + "lodash": "2.1.0", + "minimatch": "0.2.14", + "rimraf": "2.2.8" + }, "dependencies": { "glob": { "version": "3.2.11", "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", "dev": true, + "requires": { + "inherits": "2.0.3", + "minimatch": "0.3.0" + }, "dependencies": { "minimatch": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } } } }, @@ -1388,7 +2129,11 @@ "version": "0.2.14", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } } } }, @@ -1403,18 +2148,30 @@ "resolved": "https://registry.npmjs.org/fileset/-/fileset-0.1.8.tgz", "integrity": "sha1-UGuRqTluqn4y+0KoQHfHoMc2t0E=", "dev": true, + "requires": { + "glob": "3.2.11", + "minimatch": "0.4.0" + }, "dependencies": { "glob": { "version": "3.2.11", "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", "dev": true, + "requires": { + "inherits": "2.0.3", + "minimatch": "0.3.0" + }, "dependencies": { "minimatch": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } } } }, @@ -1422,7 +2179,11 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.4.0.tgz", "integrity": "sha1-vSx9Bg0sjI/Xzefx8u0tWycP2xs=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } } } }, @@ -1430,13 +2191,29 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true + "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" + } }, "finalhandler": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + }, "dependencies": { "ee-first": { "version": "1.1.1", @@ -1448,7 +2225,10 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true + "dev": true, + "requires": { + "ee-first": "1.1.1" + } } } }, @@ -1463,12 +2243,20 @@ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", "dev": true, + "requires": { + "glob": "3.2.11", + "lodash": "2.4.2" + }, "dependencies": { "glob": { "version": "3.2.11", "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimatch": "0.3.0" + } }, "lodash": { "version": "2.4.2", @@ -1480,7 +2268,11 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } } } }, @@ -1489,6 +2281,16 @@ "resolved": "https://registry.npmjs.org/firefox-profile/-/firefox-profile-0.2.7.tgz", "integrity": "sha1-/kavwu1qlvYsXDvURvoln2AUqQk=", "dev": true, + "requires": { + "adm-zip": "0.4.7", + "archiver": "0.7.1", + "async": "0.2.10", + "fs-extra": "0.8.1", + "lazystream": "0.1.0", + "node-uuid": "1.4.8", + "wrench": "1.5.9", + "xml2js": "0.4.19" + }, "dependencies": { "async": { "version": "0.2.10", @@ -1508,18 +2310,24 @@ "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true - }, - "foreach-shim": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/foreach-shim/-/foreach-shim-0.1.1.tgz", - "integrity": "sha1-vmHXX0artxdvWr0pXjWIV1G3HZQ=", - "dev": true + "dev": true, + "requires": { + "for-in": "1.0.2" + } }, "forEachAsync": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/forEachAsync/-/forEachAsync-2.2.1.tgz", "integrity": "sha1-43I/AJA5EOHrSx2zrVG1xkoxn+w=", + "dev": true, + "requires": { + "sequence": "2.2.1" + } + }, + "foreach-shim": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/foreach-shim/-/foreach-shim-0.1.1.tgz", + "integrity": "sha1-vmHXX0artxdvWr0pXjWIV1G3HZQ=", "dev": true }, "forever-agent": { @@ -1532,7 +2340,12 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz", "integrity": "sha1-kavXiKupcCsaq/qLwBAxoqyeOxI=", - "dev": true + "dev": true, + "requires": { + "async": "0.9.2", + "combined-stream": "0.0.7", + "mime": "1.2.11" + } }, "formidable": { "version": "1.0.14", @@ -1557,6 +2370,12 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.8.1.tgz", "integrity": "sha1-Dld5/7/t9RG8dVWVx/A8BtS0Po0=", "dev": true, + "requires": { + "jsonfile": "1.1.1", + "mkdirp": "0.3.5", + "ncp": "0.4.2", + "rimraf": "2.2.8" + }, "dependencies": { "mkdirp": { "version": "0.3.5", @@ -1584,6 +2403,10 @@ "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", "dev": true, "optional": true, + "requires": { + "nan": "2.8.0", + "node-pre-gyp": "0.6.39" + }, "dependencies": { "abbrev": { "version": "1.1.0", @@ -1595,7 +2418,11 @@ "version": "4.11.8", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } }, "ansi-regex": { "version": "2.1.1", @@ -1612,7 +2439,11 @@ "version": "1.1.4", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } }, "asn1": { "version": "0.2.3", @@ -1653,22 +2484,35 @@ "version": "1.0.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } }, "block-stream": { "version": "0.0.9", "bundled": true, - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "boom": { "version": "2.10.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "hoek": "2.16.3" + } }, "brace-expansion": { "version": "1.1.7", "bundled": true, - "dev": true + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } }, "buffer-shims": { "version": "1.0.0", @@ -1695,7 +2539,10 @@ "combined-stream": { "version": "1.0.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } }, "concat-map": { "version": "0.0.1", @@ -1715,13 +2562,19 @@ "cryptiles": { "version": "2.0.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "boom": "2.10.1" + } }, "dashdash": { "version": "1.14.1", "bundled": true, "dev": true, "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -1735,7 +2588,10 @@ "version": "2.6.8", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "ms": "2.0.0" + } }, "deep-extend": { "version": "0.4.2", @@ -1764,7 +2620,10 @@ "version": "0.1.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "extend": { "version": "3.0.1", @@ -1787,7 +2646,12 @@ "version": "2.1.4", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } }, "fs.realpath": { "version": "1.0.0", @@ -1797,25 +2661,49 @@ "fstream": { "version": "1.0.11", "bundled": true, - "dev": 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, "dev": true, - "optional": true + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } }, "gauge": { "version": "2.7.4", "bundled": true, "dev": true, - "optional": 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, "dev": true, "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, "dependencies": { "assert-plus": { "version": "1.0.0", @@ -1828,7 +2716,15 @@ "glob": { "version": "7.1.2", "bundled": true, - "dev": 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", @@ -1845,7 +2741,11 @@ "version": "4.2.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } }, "has-unicode": { "version": "2.0.1", @@ -1856,7 +2756,13 @@ "hawk": { "version": "3.1.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } }, "hoek": { "version": "2.16.3", @@ -1867,12 +2773,21 @@ "version": "1.1.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } }, "inflight": { "version": "1.0.6", "bundled": true, - "dev": true + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } }, "inherits": { "version": "2.0.3", @@ -1888,7 +2803,10 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-typedarray": { "version": "1.0.0", @@ -1911,7 +2829,10 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "jsbn": "0.1.1" + } }, "jsbn": { "version": "0.1.1", @@ -1929,7 +2850,10 @@ "version": "1.0.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "jsonify": "0.0.0" + } }, "json-stringify-safe": { "version": "5.0.1", @@ -1948,6 +2872,12 @@ "bundled": true, "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", @@ -1965,12 +2895,18 @@ "mime-types": { "version": "2.1.15", "bundled": true, - "dev": true + "dev": true, + "requires": { + "mime-db": "1.27.0" + } }, "minimatch": { "version": "3.0.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } }, "minimist": { "version": "0.0.8", @@ -1980,7 +2916,10 @@ "mkdirp": { "version": "0.5.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } }, "ms": { "version": "2.0.0", @@ -1992,19 +2931,42 @@ "version": "0.6.39", "bundled": true, "dev": true, - "optional": 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" + } }, "nopt": { "version": "4.0.1", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } }, "npmlog": { "version": "4.1.0", "bundled": true, "dev": true, - "optional": 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" + } }, "number-is-nan": { "version": "1.0.1", @@ -2026,7 +2988,10 @@ "once": { "version": "1.4.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "wrappy": "1.0.2" + } }, "os-homedir": { "version": "1.0.2", @@ -2044,7 +3009,11 @@ "version": "0.1.4", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } }, "path-is-absolute": { "version": "1.0.1", @@ -2079,6 +3048,12 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, "dependencies": { "minimist": { "version": "1.2.0", @@ -2091,18 +3066,54 @@ "readable-stream": { "version": "2.2.9", "bundled": true, - "dev": 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, "dev": true, - "optional": 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" + } }, "rimraf": { "version": "2.6.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2" + } }, "safe-buffer": { "version": "5.0.1", @@ -2130,13 +3141,27 @@ "sntp": { "version": "1.0.9", "bundled": true, - "dev": 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", @@ -2146,15 +3171,23 @@ } } }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, "string-width": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } }, "stringstream": { "version": "0.0.5", @@ -2165,7 +3198,10 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "strip-json-comments": { "version": "2.0.1", @@ -2176,25 +3212,46 @@ "tar": { "version": "2.2.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } }, "tar-pack": { "version": "3.4.0", "bundled": true, "dev": true, - "optional": 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 + "optional": true, + "requires": { + "punycode": "1.4.1" + } }, "tunnel-agent": { "version": "0.6.0", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } }, "tweetnacl": { "version": "0.14.5", @@ -2223,13 +3280,19 @@ "version": "1.3.6", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } }, "wide-align": { "version": "1.1.2", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "string-width": "1.0.2" + } }, "wrappy": { "version": "1.0.2", @@ -2248,19 +3311,34 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": 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", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } }, "glob-parent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true + "dev": true, + "requires": { + "is-glob": "2.0.1" + } }, "globals": { "version": "9.18.0", @@ -2273,12 +3351,25 @@ "resolved": "https://registry.npmjs.org/globs-to-files/-/globs-to-files-1.0.0.tgz", "integrity": "sha1-VEkPbR9Ln9LenZlEUUb/s3VQOA0=", "dev": true, + "requires": { + "array-uniq": "1.0.3", + "asyncreduce": "0.1.4", + "glob": "5.0.15", + "xtend": "4.0.1" + }, "dependencies": { "glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } } } }, @@ -2304,19 +3395,29 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-1.3.0.tgz", "integrity": "sha1-npsTCpPjiUkTItl1zz7BgYw3zjQ=", - "dev": true + "dev": true, + "requires": { + "optimist": "0.3.7", + "uglify-js": "2.3.6" + } }, "has": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true + "dev": true, + "requires": { + "function-bind": "1.1.1" + } }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "has-flag": { "version": "1.0.0", @@ -2328,31 +3429,52 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3" + } }, "hash.js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } }, "hawk": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz", "integrity": "sha1-h81JH5tG5OKurKM1QWdmiF0tHtk=", - "dev": true + "dev": true, + "requires": { + "boom": "0.4.2", + "cryptiles": "0.2.2", + "hoek": "0.9.1", + "sntp": "0.2.4" + } }, "hbs": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/hbs/-/hbs-2.4.0.tgz", "integrity": "sha1-9MlWy2YNaXTcYSFLfEmiH2qqP1E=", "dev": true, + "requires": { + "handlebars": "1.0.12", + "walk": "2.2.1" + }, "dependencies": { "handlebars": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-1.0.12.tgz", "integrity": "sha1-GMbTRAw16RsZs/9YK5FRq0mF1Pw=", - "dev": true + "dev": true, + "requires": { + "optimist": "0.3.7", + "uglify-js": "2.3.6" + } } } }, @@ -2372,7 +3494,12 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true + "dev": true, + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } }, "hoek": { "version": "0.9.1", @@ -2384,7 +3511,11 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } }, "htmlescape": { "version": "1.1.1", @@ -2397,6 +3528,12 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.3.1" + }, "dependencies": { "depd": { "version": "1.1.1", @@ -2416,13 +3553,22 @@ "version": "1.11.2", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.11.2.tgz", "integrity": "sha1-xQ0vsG7KedQjjmb9lDk9LkHmN0A=", - "dev": true + "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "0.0.1" + } }, "http-signature": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", - "dev": true + "dev": true, + "requires": { + "asn1": "0.1.11", + "assert-plus": "0.1.5", + "ctype": "0.5.3" + } }, "https-browserify": { "version": "1.0.0", @@ -2458,7 +3604,11 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } }, "inherits": { "version": "2.0.3", @@ -2470,19 +3620,38 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", - "dev": true + "dev": true, + "requires": { + "source-map": "0.5.7" + } }, "insert-module-globals": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.1.tgz", "integrity": "sha1-wDv04BywhtW15azorQr+eInWOMM=", "dev": true, + "requires": { + "JSONStream": "1.3.2", + "combine-source-map": "0.7.2", + "concat-stream": "1.5.2", + "is-buffer": "1.1.6", + "lexical-scope": "1.2.0", + "process": "0.11.10", + "through2": "2.0.3", + "xtend": "4.0.1" + }, "dependencies": { "combine-source-map": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", - "dev": true + "dev": true, + "requires": { + "convert-source-map": "1.1.3", + "inline-source-map": "0.6.2", + "lodash.memoize": "3.0.4", + "source-map": "0.5.7" + } }, "convert-source-map": { "version": "1.1.3", @@ -2496,7 +3665,10 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", - "dev": true + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } }, "ipaddr.js": { "version": "1.5.2", @@ -2508,7 +3680,10 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true + "dev": true, + "requires": { + "binary-extensions": "1.11.0" + } }, "is-buffer": { "version": "1.1.6", @@ -2526,7 +3701,10 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } }, "is-extendable": { "version": "0.1.1", @@ -2544,19 +3722,28 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } }, "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true + "dev": true, + "requires": { + "kind-of": "3.2.2" + } }, "is-posix-bracket": { "version": "0.1.1", @@ -2592,13 +3779,30 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true + "dev": true, + "requires": { + "isarray": "1.0.0" + } }, "istanbul": { "version": "0.2.16", "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.2.16.tgz", "integrity": "sha1-hwVFoNT0tM4WEDnp6AWpjCxwC9k=", "dev": true, + "requires": { + "abbrev": "1.0.9", + "async": "0.9.2", + "escodegen": "1.3.3", + "esprima": "1.2.5", + "fileset": "0.1.8", + "handlebars": "1.3.0", + "js-yaml": "3.10.0", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "resolve": "0.7.4", + "which": "1.0.9", + "wordwrap": "0.0.3" + }, "dependencies": { "esprima": { "version": "1.2.5", @@ -2619,18 +3823,38 @@ "resolved": "https://registry.npmjs.org/istanbul-middleware/-/istanbul-middleware-0.2.2.tgz", "integrity": "sha1-g8TBPBKOGg1qFHeSORrzwVqKuOA=", "dev": true, + "requires": { + "archiver": "0.14.4", + "body-parser": "1.12.4", + "express": "4.16.2", + "istanbul": "0.4.5" + }, "dependencies": { "accepts": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", - "dev": true + "dev": true, + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } }, "archiver": { "version": "0.14.4", "resolved": "https://registry.npmjs.org/archiver/-/archiver-0.14.4.tgz", "integrity": "sha1-W53bn17hzu8hy487Ag5iQOy0MVw=", - "dev": true + "dev": true, + "requires": { + "async": "0.9.2", + "buffer-crc32": "0.2.1", + "glob": "4.3.5", + "lazystream": "0.1.0", + "lodash": "3.2.0", + "readable-stream": "1.0.34", + "tar-stream": "1.1.5", + "zip-stream": "0.5.2" + } }, "bytes": { "version": "3.0.0", @@ -2666,7 +3890,14 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true + "dev": true, + "requires": { + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" + } }, "esprima": { "version": "2.7.3", @@ -2685,12 +3916,56 @@ "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", "dev": true, + "requires": { + "accepts": "1.3.4", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.0", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.2", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, "dependencies": { "body-parser": { "version": "1.18.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "dev": true + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.15" + } } } }, @@ -2704,13 +3979,25 @@ "version": "4.3.5", "resolved": "https://registry.npmjs.org/glob/-/glob-4.3.5.tgz", "integrity": "sha1-gPuwjKVA8jiszl0R0em8QedRc9M=", - "dev": true + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "2.0.10", + "once": "1.4.0" + } }, "handlebars": { "version": "4.0.11", "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" + }, "dependencies": { "async": { "version": "1.5.2", @@ -2722,7 +4009,10 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } } } }, @@ -2743,6 +4033,22 @@ "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, + "requires": { + "abbrev": "1.0.9", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "2.7.3", + "glob": "5.0.15", + "handlebars": "4.0.11", + "js-yaml": "3.10.0", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "once": "1.4.0", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "1.3.0", + "wordwrap": "1.0.0" + }, "dependencies": { "async": { "version": "1.5.2", @@ -2754,7 +4060,14 @@ "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "2.0.10", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } } } }, @@ -2786,7 +4099,10 @@ "version": "2.0.10", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } }, "negotiator": { "version": "0.6.1", @@ -2798,13 +4114,20 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true + "dev": true, + "requires": { + "ee-first": "1.1.1" + } }, "optimist": { "version": "0.6.1", "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" + }, "dependencies": { "wordwrap": { "version": "0.0.3", @@ -2830,13 +4153,25 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "dev": true + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } }, "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "resolve": { "version": "1.1.7", @@ -2848,14 +4183,32 @@ "version": "0.16.1", "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + } }, "source-map": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", "dev": true, - "optional": true + "optional": true, + "requires": { + "amdefine": "1.0.1" + } }, "string_decoder": { "version": "0.10.31", @@ -2867,7 +4220,10 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true + "dev": true, + "requires": { + "has-flag": "1.0.0" + } }, "uglify-js": { "version": "2.8.29", @@ -2875,6 +4231,11 @@ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "dev": true, "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, "dependencies": { "source-map": { "version": "0.5.7", @@ -2895,7 +4256,10 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true + "dev": true, + "requires": { + "isexe": "2.0.0" + } }, "wordwrap": { "version": "1.0.0", @@ -2907,7 +4271,12 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-0.5.2.tgz", "integrity": "sha1-Mty8UG0Nq00hNyYlvX66rDwv/1Y=", - "dev": true + "dev": true, + "requires": { + "compress-commons": "0.2.9", + "lodash": "3.2.0", + "readable-stream": "1.0.34" + } } } }, @@ -2921,7 +4290,11 @@ "version": "3.10.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", - "dev": true + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } }, "jsesc": { "version": "1.3.0", @@ -2933,7 +4306,10 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", - "dev": true + "dev": true, + "requires": { + "jsonify": "0.0.0" + } }, "json-stringify-safe": { "version": "5.0.1", @@ -2941,12 +4317,6 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, - "JSON2": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/JSON2/-/JSON2-0.1.0.tgz", - "integrity": "sha1-jXSTBApj1YNa919H3suDq2yMB5A=", - "dev": true - }, "json3": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", @@ -2977,12 +4347,6 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, - "JSONStream": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", - "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", - "dev": true - }, "keypress": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz", @@ -2993,13 +4357,21 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } }, "labeled-stream-splicer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", "dev": true, + "requires": { + "inherits": "2.0.3", + "isarray": "0.0.1", + "stream-splicer": "2.0.0" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -3021,6 +4393,9 @@ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-0.1.0.tgz", "integrity": "sha1-GyXWPHcqTCDwpe0KnXf0hLbhaSA=", "dev": true, + "requires": { + "readable-stream": "1.0.34" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -3032,7 +4407,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -3046,13 +4427,20 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } }, "lexical-scope": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", - "dev": true + "dev": true, + "requires": { + "astw": "2.2.0" + } }, "load-script": { "version": "0.0.5", @@ -3065,6 +4453,11 @@ "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.5.0.tgz", "integrity": "sha1-W+lJd5Ml6fMnMCGj840ueo3NfE8=", "dev": true, + "requires": { + "debug": "0.7.4", + "optimist": "0.3.4", + "request": "2.11.4" + }, "dependencies": { "debug": { "version": "0.7.4", @@ -3076,13 +4469,20 @@ "version": "0.3.4", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.4.tgz", "integrity": "sha1-TW0L1x/60NpLpPbYdtXusE4HSAs=", - "dev": true + "dev": true, + "requires": { + "wordwrap": "0.0.3" + } }, "request": { "version": "2.11.4", "resolved": "https://registry.npmjs.org/request/-/request-2.11.4.tgz", "integrity": "sha1-Y0fX1E5S3FiBCMwc5c7pdfyJJt4=", "dev": true, + "requires": { + "form-data": "0.0.3", + "mime": "1.2.7" + }, "dependencies": { "form-data": { "version": "0.0.3", @@ -3127,7 +4527,11 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } }, "lodash._basecopy": { "version": "3.0.1", @@ -3169,25 +4573,42 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=", - "dev": true + "dev": true, + "requires": { + "lodash._objecttypes": "2.4.1" + } }, "lodash.create": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", - "dev": true + "dev": true, + "requires": { + "lodash._baseassign": "3.2.0", + "lodash._basecreate": "3.0.3", + "lodash._isiterateecall": "3.0.9" + } }, "lodash.defaults": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz", "integrity": "sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=", "dev": true, + "requires": { + "lodash._objecttypes": "2.4.1", + "lodash.keys": "2.4.1" + }, "dependencies": { "lodash.keys": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", - "dev": true + "dev": true, + "requires": { + "lodash._isnative": "2.4.1", + "lodash._shimkeys": "2.4.1", + "lodash.isobject": "2.4.1" + } } } }, @@ -3207,13 +4628,21 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", - "dev": true + "dev": true, + "requires": { + "lodash._objecttypes": "2.4.1" + } }, "lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } }, "lodash.memoize": { "version": "3.0.4", @@ -3231,7 +4660,10 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } }, "lru-cache": { "version": "2.7.3", @@ -3244,12 +4676,20 @@ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + }, "dependencies": { "hash-base": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } } } }, @@ -3275,13 +4715,32 @@ "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": 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" + } }, "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } }, "mime": { "version": "1.2.11", @@ -3299,7 +4758,10 @@ "version": "2.1.17", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", - "dev": true + "dev": true, + "requires": { + "mime-db": "1.30.0" + } }, "minimalistic-assert": { "version": "1.0.0", @@ -3317,7 +4779,10 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } }, "minimist": { "version": "0.0.8", @@ -3329,37 +4794,71 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } }, "mocha": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.9.0", + "debug": "2.6.8", + "diff": "3.2.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.1", + "growl": "1.9.2", + "he": "1.1.1", + "json3": "3.3.2", + "lodash.create": "3.1.1", + "mkdirp": "0.5.1", + "supports-color": "3.1.2" + }, "dependencies": { "commander": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } }, "debug": { "version": "2.6.8", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "glob": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", - "dev": 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" + } }, "supports-color": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", - "dev": true + "dev": true, + "requires": { + "has-flag": "1.0.0" + } } } }, @@ -3367,7 +4866,24 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", - "dev": true + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "browser-resolve": "1.11.2", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "defined": "1.0.0", + "detective": "4.7.1", + "duplexer2": "0.1.4", + "inherits": "2.0.3", + "parents": "1.0.1", + "readable-stream": "2.3.3", + "resolve": "1.5.0", + "stream-combiner2": "1.1.1", + "subarg": "1.0.0", + "through2": "2.0.3", + "xtend": "4.0.1" + } }, "ms": { "version": "2.0.0", @@ -3380,6 +4896,10 @@ "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-2.2.0.tgz", "integrity": "sha1-pWfCrwAK0i3I8qZT2Rl4rh9TFvQ=", "dev": true, + "requires": { + "readable-stream": "1.1.14", + "stream-counter": "0.2.0" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -3391,7 +4911,13 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -3442,13 +4968,19 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true + "dev": true, + "requires": { + "abbrev": "1.0.9" + } }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } }, "number-is-nan": { "version": "1.0.1", @@ -3461,11 +4993,45 @@ "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" + }, "dependencies": { "align-text": { "version": "0.1.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } }, "amdefine": { "version": "1.0.1", @@ -3485,7 +5051,10 @@ "append-transform": { "version": "0.4.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "default-require-extensions": "1.0.0" + } }, "archy": { "version": "1.0.0", @@ -3495,7 +5064,10 @@ "arr-diff": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } }, "arr-flatten": { "version": "1.1.0", @@ -3520,37 +5092,83 @@ "babel-code-frame": { "version": "6.26.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } }, "babel-generator": { "version": "6.26.0", "bundled": true, - "dev": true + "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": { "version": "6.23.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } }, "babel-runtime": { "version": "6.26.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" + } }, "babel-template": { "version": "6.26.0", "bundled": true, - "dev": true + "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-traverse": { "version": "6.26.0", "bundled": true, - "dev": true + "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-types": { "version": "6.26.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } }, "babylon": { "version": "6.18.0", @@ -3565,12 +5183,21 @@ "brace-expansion": { "version": "1.1.8", "bundled": true, - "dev": true + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } }, "braces": { "version": "1.8.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } }, "builtin-modules": { "version": "1.1.1", @@ -3580,7 +5207,12 @@ "caching-transform": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "md5-hex": "1.3.0", + "mkdirp": "0.5.1", + "write-file-atomic": "1.3.4" + } }, "camelcase": { "version": "1.2.1", @@ -3592,18 +5224,34 @@ "version": "0.1.3", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } }, "chalk": { "version": "1.1.3", "bundled": true, - "dev": true + "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" + } }, "cliui": { "version": "2.1.0", "bundled": true, "dev": true, "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, "dependencies": { "wordwrap": { "version": "0.0.2", @@ -3641,12 +5289,19 @@ "cross-spawn": { "version": "4.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.3.0" + } }, "debug": { "version": "2.6.9", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } }, "debug-log": { "version": "1.0.1", @@ -3661,17 +5316,26 @@ "default-require-extensions": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "strip-bom": "2.0.0" + } }, "detect-indent": { "version": "4.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "repeating": "2.0.1" + } }, "error-ex": { "version": "1.3.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } }, "escape-string-regexp": { "version": "1.0.5", @@ -3687,28 +5351,51 @@ "version": "0.7.0", "bundled": true, "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" + }, "dependencies": { "cross-spawn": { "version": "5.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } } } }, "expand-brackets": { "version": "0.1.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } }, "expand-range": { "version": "1.8.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "fill-range": "2.2.3" + } }, "extglob": { "version": "0.3.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } }, "filename-regex": { "version": "2.0.1", @@ -3718,17 +5405,32 @@ "fill-range": { "version": "2.2.3", "bundled": true, - "dev": true + "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" + } }, "find-cache-dir": { "version": "0.1.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" + } }, "find-up": { "version": "2.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "locate-path": "2.0.0" + } }, "for-in": { "version": "1.0.2", @@ -3738,12 +5440,19 @@ "for-own": { "version": "0.1.5", "bundled": true, - "dev": true + "dev": true, + "requires": { + "for-in": "1.0.2" + } }, "foreground-child": { "version": "1.5.6", "bundled": true, - "dev": true + "dev": true, + "requires": { + "cross-spawn": "4.0.2", + "signal-exit": "3.0.2" + } }, "fs.realpath": { "version": "1.0.0", @@ -3763,17 +5472,32 @@ "glob": { "version": "7.1.2", "bundled": true, - "dev": 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 + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } }, "glob-parent": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-glob": "2.0.1" + } }, "globals": { "version": "9.18.0", @@ -3789,18 +5513,30 @@ "version": "4.0.11", "bundled": true, "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, "dependencies": { "source-map": { "version": "0.4.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } } } }, "has-ansi": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "has-flag": { "version": "1.0.0", @@ -3820,7 +5556,11 @@ "inflight": { "version": "1.0.6", "bundled": true, - "dev": true + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } }, "inherits": { "version": "2.0.3", @@ -3830,7 +5570,10 @@ "invariant": { "version": "2.2.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } }, "invert-kv": { "version": "1.0.0", @@ -3850,7 +5593,10 @@ "is-builtin-module": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } }, "is-dotfile": { "version": "1.0.3", @@ -3860,7 +5606,10 @@ "is-equal-shallow": { "version": "0.1.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } }, "is-extendable": { "version": "0.1.1", @@ -3875,22 +5624,34 @@ "is-finite": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } }, "is-glob": { "version": "2.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } }, "is-number": { "version": "2.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "kind-of": "3.2.2" + } }, "is-posix-bracket": { "version": "0.1.1", @@ -3925,7 +5686,10 @@ "isobject": { "version": "2.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "isarray": "1.0.0" + } }, "istanbul-lib-coverage": { "version": "1.1.1", @@ -3935,22 +5699,43 @@ "istanbul-lib-hook": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "append-transform": "0.4.0" + } }, "istanbul-lib-instrument": { "version": "1.9.1", "bundled": true, - "dev": true + "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" + } }, "istanbul-lib-report": { "version": "1.1.2", "bundled": true, "dev": true, + "requires": { + "istanbul-lib-coverage": "1.1.1", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" + }, "dependencies": { "supports-color": { "version": "3.2.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "has-flag": "1.0.0" + } } } }, @@ -3958,18 +5743,31 @@ "version": "1.2.2", "bundled": true, "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" + }, "dependencies": { "debug": { "version": "3.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ms": "2.0.0" + } } } }, "istanbul-reports": { "version": "1.1.3", "bundled": true, - "dev": true + "dev": true, + "requires": { + "handlebars": "4.0.11" + } }, "js-tokens": { "version": "3.0.2", @@ -3984,7 +5782,10 @@ "kind-of": { "version": "3.2.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } }, "lazy-cache": { "version": "1.0.4", @@ -3995,17 +5796,31 @@ "lcid": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } }, "load-json-file": { "version": "1.1.0", "bundled": true, - "dev": true + "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" + } }, "locate-path": { "version": "2.0.0", "bundled": true, "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, "dependencies": { "path-exists": { "version": "3.0.0", @@ -4027,17 +5842,27 @@ "loose-envify": { "version": "1.3.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } }, "lru-cache": { "version": "4.1.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } }, "md5-hex": { "version": "1.3.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "md5-o-matic": "0.1.1" + } }, "md5-o-matic": { "version": "0.1.1", @@ -4047,17 +5872,38 @@ "mem": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "mimic-fn": "1.1.0" + } }, "merge-source-map": { "version": "1.0.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "source-map": "0.5.7" + } }, "micromatch": { "version": "2.3.11", "bundled": true, - "dev": 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" + } }, "mimic-fn": { "version": "1.1.0", @@ -4067,7 +5913,10 @@ "minimatch": { "version": "3.0.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } }, "minimist": { "version": "0.0.8", @@ -4077,7 +5926,10 @@ "mkdirp": { "version": "0.5.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8" + } }, "ms": { "version": "2.0.0", @@ -4087,17 +5939,29 @@ "normalize-package-data": { "version": "2.4.0", "bundled": true, - "dev": 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" + } }, "normalize-path": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } }, "npm-run-path": { "version": "2.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "path-key": "2.0.1" + } }, "number-is-nan": { "version": "1.0.1", @@ -4112,17 +5976,28 @@ "object.omit": { "version": "2.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } }, "once": { "version": "1.4.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "wrappy": "1.0.2" + } }, "optimist": { "version": "0.6.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + } }, "os-homedir": { "version": "1.0.2", @@ -4132,7 +6007,12 @@ "os-locale": { "version": "2.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } }, "p-finally": { "version": "1.0.0", @@ -4147,22 +6027,37 @@ "p-locate": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "p-limit": "1.1.0" + } }, "parse-glob": { "version": "3.0.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } }, "parse-json": { "version": "2.2.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "error-ex": "1.3.1" + } }, "path-exists": { "version": "2.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } }, "path-is-absolute": { "version": "1.0.1", @@ -4182,7 +6077,12 @@ "path-type": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } }, "pify": { "version": "2.3.0", @@ -4197,17 +6097,27 @@ "pinkie-promise": { "version": "2.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "pinkie": "2.0.4" + } }, "pkg-dir": { "version": "1.0.0", "bundled": true, "dev": true, + "requires": { + "find-up": "1.1.2" + }, "dependencies": { "find-up": { "version": "1.1.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } } } }, @@ -4225,40 +6135,66 @@ "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 + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } } } }, "kind-of": { "version": "4.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } } } }, "read-pkg": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } }, "read-pkg-up": { "version": "1.0.1", "bundled": true, "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + }, "dependencies": { "find-up": { "version": "1.1.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } } } }, @@ -4270,7 +6206,10 @@ "regex-cache": { "version": "0.4.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } }, "remove-trailing-separator": { "version": "1.1.0", @@ -4290,7 +6229,10 @@ "repeating": { "version": "2.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-finite": "1.0.2" + } }, "require-directory": { "version": "2.1.1", @@ -4311,12 +6253,18 @@ "version": "0.1.3", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "align-text": "0.1.4" + } }, "rimraf": { "version": "2.6.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "glob": "7.1.2" + } }, "semver": { "version": "5.4.1", @@ -4331,7 +6279,10 @@ "shebang-command": { "version": "1.2.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } }, "shebang-regex": { "version": "1.0.0", @@ -4356,12 +6307,23 @@ "spawn-wrap": { "version": "1.4.2", "bundled": true, - "dev": 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, - "dev": true + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } }, "spdx-expression-parse": { "version": "1.0.4", @@ -4377,6 +6339,10 @@ "version": "2.1.1", "bundled": true, "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, "dependencies": { "ansi-regex": { "version": "3.0.0", @@ -4391,19 +6357,28 @@ "strip-ansi": { "version": "4.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } } } }, "strip-ansi": { "version": "3.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "strip-bom": { "version": "2.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } }, "strip-eof": { "version": "1.0.0", @@ -4418,7 +6393,14 @@ "test-exclude": { "version": "4.1.1", "bundled": true, - "dev": 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", @@ -4435,12 +6417,23 @@ "bundled": true, "dev": true, "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, "dependencies": { "yargs": { "version": "3.10.0", "bundled": true, "dev": true, - "optional": true + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } } } }, @@ -4453,12 +6446,19 @@ "validate-npm-package-license": { "version": "3.0.1", "bundled": true, - "dev": true + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } }, "which": { "version": "1.3.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "isexe": "2.0.0" + } }, "which-module": { "version": "2.0.0", @@ -4480,11 +6480,20 @@ "version": "2.1.0", "bundled": true, "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, "dependencies": { "string-width": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } } } }, @@ -4496,7 +6505,12 @@ "write-file-atomic": { "version": "1.3.4", "bundled": true, - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "imurmurhash": "0.1.4", + "slide": "1.1.6" + } }, "y18n": { "version": "3.2.1", @@ -4512,16 +6526,40 @@ "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" + }, "dependencies": { "cliui": { "version": "3.2.0", "bundled": true, "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 + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } } } } @@ -4531,6 +6569,9 @@ "version": "8.0.0", "bundled": true, "dev": true, + "requires": { + "camelcase": "4.1.0" + }, "dependencies": { "camelcase": { "version": "4.1.0", @@ -4563,13 +6604,20 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } }, "on-finished": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.2.1.tgz", "integrity": "sha1-XIXBzDYpn3gCllP2Z/J7a5nrwCk=", - "dev": true + "dev": true, + "requires": { + "ee-first": "1.1.0" + } }, "on-headers": { "version": "1.0.1", @@ -4581,7 +6629,10 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true + "dev": true, + "requires": { + "wrappy": "1.0.2" + } }, "opener": { "version": "1.4.0", @@ -4593,13 +6644,24 @@ "version": "0.3.7", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", - "dev": true + "dev": true, + "requires": { + "wordwrap": "0.0.3" + } }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "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" + }, "dependencies": { "wordwrap": { "version": "1.0.0", @@ -4637,13 +6699,21 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/outpipe/-/outpipe-1.1.1.tgz", "integrity": "sha1-UM+GFjZeh+Ax4ppeyTOaPaRyX6I=", - "dev": true + "dev": true, + "requires": { + "shell-quote": "1.6.1" + } }, "output-file-sync": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1" + } }, "pako": { "version": "1.0.6", @@ -4655,19 +6725,35 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "dev": true + "dev": true, + "requires": { + "path-platform": "0.11.15" + } }, "parse-asn1": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", - "dev": true + "dev": true, + "requires": { + "asn1.js": "4.9.2", + "browserify-aes": "1.1.1", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" + } }, "parse-glob": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } }, "parseurl": { "version": "1.3.2", @@ -4715,7 +6801,14 @@ "version": "3.0.14", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", - "dev": true + "dev": true, + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.9" + } }, "prelude-ls": { "version": "1.1.2", @@ -4729,6 +6822,12 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true }, + "prettier": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.10.2.tgz", + "integrity": "sha512-TcdNoQIWFoHblurqqU6d1ysopjq7UX0oRcT/hJ8qvBAELiYWn+Ugf0AXdnzISEJ7vuhNnQ98N8jR8Sh53x4IZg==", + "dev": true + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -4751,13 +6850,24 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", - "dev": true + "dev": true, + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.5.2" + } }, "public-encrypt": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", - "dev": true + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.6" + } }, "punycode": { "version": "1.4.1", @@ -4794,18 +6904,28 @@ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "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.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 + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } } } }, @@ -4813,7 +6933,10 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } } } }, @@ -4821,13 +6944,20 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", - "dev": true + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } }, "randomfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", - "dev": true + "dev": true, + "requires": { + "randombytes": "2.0.6", + "safe-buffer": "5.1.1" + } }, "range-parser": { "version": "0.0.4", @@ -4840,6 +6970,9 @@ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.2.tgz", "integrity": "sha1-x0swBN6l3v0WlhcRBqx0DsMdYr4=", "dev": true, + "requires": { + "bytes": "0.2.1" + }, "dependencies": { "bytes": { "version": "0.2.1", @@ -4853,19 +6986,37 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } }, "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 + "dev": true, + "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" + } }, "readdirp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "set-immediate-shim": "1.0.1" + } }, "reduce-component": { "version": "1.0.1", @@ -4889,19 +7040,32 @@ "version": "0.10.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } }, "regex-cache": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } }, "regexpu-core": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } }, "regjsgen": { "version": "0.2.0", @@ -4914,6 +7078,9 @@ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, + "requires": { + "jsesc": "0.5.0" + }, "dependencies": { "jsesc": { "version": "0.5.0", @@ -4945,13 +7112,33 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true + "dev": true, + "requires": { + "is-finite": "1.0.2" + } }, "request": { "version": "2.46.0", "resolved": "https://registry.npmjs.org/request/-/request-2.46.0.tgz", "integrity": "sha1-NZGV1S6vcgvGl0JXnQStbSZagnQ=", "dev": true, + "requires": { + "aws-sign2": "0.5.0", + "bl": "0.9.5", + "caseless": "0.6.0", + "forever-agent": "0.5.2", + "form-data": "0.1.4", + "hawk": "1.1.1", + "http-signature": "0.10.1", + "json-stringify-safe": "5.0.1", + "mime-types": "1.0.2", + "node-uuid": "1.4.8", + "oauth-sign": "0.4.0", + "qs": "1.2.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.4.3" + }, "dependencies": { "mime-types": { "version": "1.0.2", @@ -4977,14 +7164,20 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", - "dev": true + "dev": true, + "requires": { + "path-parse": "1.0.5" + } }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dev": true, - "optional": true + "optional": true, + "requires": { + "align-text": "0.1.4" + } }, "rimraf": { "version": "2.2.8", @@ -4996,7 +7189,11 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", - "dev": true + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } }, "runnel": { "version": "0.5.3", @@ -5020,7 +7217,13 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/send/-/send-0.1.4.tgz", "integrity": "sha1-vnDY0b4B3mGCGvE3gLUDRaT3Gr0=", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.9", + "fresh": "0.2.0", + "mime": "1.2.11", + "range-parser": "0.0.4" + } }, "sequence": { "version": "2.2.1", @@ -5033,6 +7236,12 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", "dev": true, + "requires": { + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.1" + }, "dependencies": { "depd": { "version": "1.1.2", @@ -5062,7 +7271,10 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true + "dev": true, + "requires": { + "ee-first": "1.1.1" + } }, "range-parser": { "version": "1.2.0", @@ -5074,7 +7286,22 @@ "version": "0.16.1", "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", - "dev": true + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + } } } }, @@ -5094,7 +7321,11 @@ "version": "2.4.9", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } }, "shallow-copy": { "version": "0.0.1", @@ -5106,13 +7337,23 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", - "dev": true + "dev": true, + "requires": { + "json-stable-stringify": "0.0.1", + "sha.js": "2.4.9" + } }, "shell-quote": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true + "dev": true, + "requires": { + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" + } }, "sigmund": { "version": "1.0.1", @@ -5130,7 +7371,10 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz", "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=", - "dev": true + "dev": true, + "requires": { + "hoek": "0.9.1" + } }, "source-map": { "version": "0.5.7", @@ -5148,13 +7392,19 @@ "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true + "dev": true, + "requires": { + "source-map": "0.5.7" + } }, "split": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/split/-/split-0.1.2.tgz", "integrity": "sha1-8HEHRMRT1VH8cUPq2YPaYBTjNsw=", "dev": true, + "requires": { + "through": "1.1.2" + }, "dependencies": { "through": { "version": "1.1.2", @@ -5175,6 +7425,12 @@ "resolved": "https://registry.npmjs.org/stack-mapper/-/stack-mapper-0.2.2.tgz", "integrity": "sha1-eJApBUk3t9R8G1tnYSy7Hnz+cHE=", "dev": true, + "requires": { + "array-map": "0.0.0", + "foreach-shim": "0.1.1", + "isarray": "0.0.1", + "source-map-cjs": "0.1.32" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -5199,19 +7455,30 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } }, "stream-combiner2": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dev": true + "dev": true, + "requires": { + "duplexer2": "0.1.4", + "readable-stream": "2.3.3" + } }, "stream-counter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-0.2.0.tgz", "integrity": "sha1-3tJmVWMZyLDiIoErnPOyb6fZR94=", "dev": true, + "requires": { + "readable-stream": "1.1.14" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -5223,7 +7490,13 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -5237,19 +7510,33 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz", "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==", - "dev": true + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } }, "stream-splicer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", - "dev": true + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } }, "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 + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } }, "stringstream": { "version": "0.0.5", @@ -5261,13 +7548,19 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } }, "subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", "dev": true, + "requires": { + "minimist": "1.2.0" + }, "dependencies": { "minimist": { "version": "1.2.0", @@ -5282,6 +7575,16 @@ "resolved": "https://registry.npmjs.org/superagent/-/superagent-0.15.7.tgz", "integrity": "sha1-CVxwuK//vAcvFFjzloTUhU1jM6M=", "dev": true, + "requires": { + "cookiejar": "1.3.0", + "debug": "0.7.4", + "emitter-component": "1.0.0", + "formidable": "1.0.14", + "methods": "0.0.1", + "mime": "1.2.5", + "qs": "0.6.5", + "reduce-component": "1.0.1" + }, "dependencies": { "debug": { "version": "0.7.4", @@ -5319,19 +7622,29 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.3.0.tgz", "integrity": "sha1-HtkmbE1AvnXcVb+bsct3Biu5bKE=", - "dev": true + "dev": true, + "requires": { + "acorn": "4.0.13" + } }, "tap-finished": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tap-finished/-/tap-finished-0.0.1.tgz", "integrity": "sha1-CLW1Q/3ASDApDGxWEnlVLnHEvWc=", "dev": true, + "requires": { + "tap-parser": "0.2.1", + "through": "2.3.8" + }, "dependencies": { "tap-parser": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-0.2.1.tgz", "integrity": "sha1-jh6CPyEU7iHQMuLzHk+2QqKW9Qs=", - "dev": true + "dev": true, + "requires": { + "split": "0.1.2" + } } } }, @@ -5340,6 +7653,11 @@ "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-0.7.0.tgz", "integrity": "sha1-coph1kaApbSNXb2dvQpNSPXDW8s=", "dev": true, + "requires": { + "inherits": "2.0.3", + "minimist": "0.2.0", + "readable-stream": "1.1.14" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -5357,7 +7675,13 @@ "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -5372,6 +7696,12 @@ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.1.5.tgz", "integrity": "sha1-vpIYwTDCACnhB7D5Z/sj3gV50Tw=", "dev": true, + "requires": { + "bl": "0.9.5", + "end-of-stream": "1.4.1", + "readable-stream": "1.0.34", + "xtend": "4.0.1" + }, "dependencies": { "isarray": { "version": "0.0.1", @@ -5383,7 +7713,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -5403,13 +7739,20 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } }, "timers-browserify": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", - "dev": true + "dev": true, + "requires": { + "process": "0.11.10" + } }, "to-arraybuffer": { "version": "1.0.1", @@ -5427,7 +7770,10 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", - "dev": true + "dev": true, + "requires": { + "punycode": "1.4.1" + } }, "trim-right": { "version": "1.0.1", @@ -5451,13 +7797,20 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } }, "type-is": { "version": "1.6.15", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "dev": true + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.17" + } }, "typedarray": { "version": "0.0.6", @@ -5470,6 +7823,11 @@ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.3.6.tgz", "integrity": "sha1-+gmEdwtCi3qbKoBY9GNV0U/vIRo=", "dev": true, + "requires": { + "async": "0.2.10", + "optimist": "0.3.7", + "source-map": "0.1.43" + }, "dependencies": { "async": { "version": "0.2.10", @@ -5481,7 +7839,10 @@ "version": "0.1.43", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true + "dev": true, + "requires": { + "amdefine": "1.0.1" + } } } }, @@ -5527,6 +7888,10 @@ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, "dependencies": { "punycode": { "version": "1.3.2", @@ -5547,6 +7912,9 @@ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, + "requires": { + "inherits": "2.0.1" + }, "dependencies": { "inherits": { "version": "2.0.1", @@ -5572,7 +7940,10 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true + "dev": true, + "requires": { + "user-home": "1.1.1" + } }, "vargs": { "version": "0.1.0", @@ -5590,37 +7961,109 @@ "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true + "dev": true, + "requires": { + "indexof": "0.0.1" + } }, "walk": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/walk/-/walk-2.2.1.tgz", "integrity": "sha1-WtofjknkfUt0Rdi+ei4eYxq0MBY=", - "dev": true + "dev": true, + "requires": { + "forEachAsync": "2.2.1" + } }, "watchify": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/watchify/-/watchify-3.7.0.tgz", "integrity": "sha1-7i8sXIw3MSMD+Zi4GLKzRQ7v5kg=", "dev": true, + "requires": { + "anymatch": "1.3.2", + "browserify": "13.3.0", + "chokidar": "1.7.0", + "defined": "1.0.0", + "outpipe": "1.1.1", + "through2": "2.0.3", + "xtend": "4.0.1" + }, "dependencies": { "browserify": { "version": "13.3.0", "resolved": "https://registry.npmjs.org/browserify/-/browserify-13.3.0.tgz", "integrity": "sha1-tanJAgJD8McORnW+yCI7xifkFc4=", - "dev": true + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "assert": "1.4.1", + "browser-pack": "6.0.3", + "browser-resolve": "1.11.2", + "browserify-zlib": "0.1.4", + "buffer": "4.9.1", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "defined": "1.0.0", + "deps-sort": "2.0.0", + "domain-browser": "1.1.7", + "duplexer2": "0.1.4", + "events": "1.1.1", + "glob": "7.1.2", + "has": "1.0.1", + "htmlescape": "1.1.1", + "https-browserify": "0.0.1", + "inherits": "2.0.3", + "insert-module-globals": "7.0.1", + "labeled-stream-splicer": "2.0.0", + "module-deps": "4.1.1", + "os-browserify": "0.1.2", + "parents": "1.0.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "read-only-stream": "2.0.0", + "readable-stream": "2.3.3", + "resolve": "1.5.0", + "shasum": "1.0.2", + "shell-quote": "1.6.1", + "stream-browserify": "2.0.1", + "stream-http": "2.8.0", + "string_decoder": "0.10.31", + "subarg": "1.0.0", + "syntax-error": "1.3.0", + "through2": "2.0.3", + "timers-browserify": "1.4.2", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4", + "xtend": "4.0.1" + } }, "browserify-zlib": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "dev": true + "dev": true, + "requires": { + "pako": "0.2.9" + } }, "buffer": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true + "dev": true, + "requires": { + "base64-js": "1.2.1", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } }, "https-browserify": { "version": "0.0.1", @@ -5653,30 +8096,63 @@ "resolved": "https://registry.npmjs.org/wd/-/wd-0.3.11.tgz", "integrity": "sha1-UicWx5p6EOeBrLssbK/liPcB/MA=", "dev": true, + "requires": { + "archiver": "0.12.0", + "async": "0.9.2", + "lodash": "2.4.2", + "q": "1.0.1", + "request": "2.46.0", + "underscore.string": "2.3.3", + "vargs": "0.1.0" + }, "dependencies": { "archiver": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/archiver/-/archiver-0.12.0.tgz", "integrity": "sha1-uMzeJQjKuQkrtxBmMBOcDzmigMw=", - "dev": true + "dev": true, + "requires": { + "async": "0.9.2", + "buffer-crc32": "0.2.1", + "glob": "4.0.6", + "lazystream": "0.1.0", + "lodash": "2.4.2", + "readable-stream": "1.0.34", + "tar-stream": "1.0.2", + "zip-stream": "0.4.1" + } }, "compress-commons": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-0.1.6.tgz", "integrity": "sha1-DHQIcP3ljLpRbwrAyCLjOguF36M=", - "dev": true + "dev": true, + "requires": { + "buffer-crc32": "0.2.1", + "crc32-stream": "0.3.4", + "readable-stream": "1.0.34" + } }, "glob": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-4.0.6.tgz", "integrity": "sha1-aVxQvdTi+1xdNwsJHziNNwfikac=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "3.0.11", + "inherits": "2.0.3", + "minimatch": "1.0.0", + "once": "1.4.0" + } }, "graceful-fs": { "version": "3.0.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", - "dev": true + "dev": true, + "requires": { + "natives": "1.1.1" + } }, "isarray": { "version": "0.0.1", @@ -5694,13 +8170,23 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz", "integrity": "sha1-4N0hILSeG3JM6NcUxSCCKpQ4V20=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } }, "readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -5712,13 +8198,24 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.0.2.tgz", "integrity": "sha1-/Rm0oXkA+nBPahM+MEWurQViq5U=", - "dev": true + "dev": true, + "requires": { + "bl": "0.9.5", + "end-of-stream": "1.4.1", + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } }, "zip-stream": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-0.4.1.tgz", "integrity": "sha1-TqeVqM4Z6fq0mjHR0IdyFBWfA6M=", - "dev": true + "dev": true, + "requires": { + "compress-commons": "0.1.6", + "lodash": "2.4.2", + "readable-stream": "1.0.34" + } } } }, @@ -5757,7 +8254,11 @@ "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dev": true + "dev": true, + "requires": { + "sax": "1.2.4", + "xmlbuilder": "9.0.4" + } }, "xmlbuilder": { "version": "9.0.4", @@ -5776,18 +8277,31 @@ "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.1.4.tgz", "integrity": "sha1-ZleJr8KtS5Ar9APwDoW2Q04PMwA=", "dev": true, + "requires": { + "argparse": "0.1.16", + "glob": "3.1.21" + }, "dependencies": { "argparse": { "version": "0.1.16", "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", - "dev": true + "dev": true, + "requires": { + "underscore": "1.7.0", + "underscore.string": "2.4.0" + } }, "glob": { "version": "3.1.21", "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true + "dev": true, + "requires": { + "graceful-fs": "1.2.3", + "inherits": "1.0.2", + "minimatch": "0.2.14" + } }, "graceful-fs": { "version": "1.2.3", @@ -5805,7 +8319,11 @@ "version": "0.2.14", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } }, "underscore.string": { "version": "2.4.0", @@ -5820,13 +8338,24 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, - "optional": true + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } }, "zip-stream": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-0.2.3.tgz", "integrity": "sha1-rvCVN2z+E4lZqBNBmB0mM4tG2NM=", "dev": true, + "requires": { + "debug": "0.7.4", + "lodash.defaults": "2.4.1", + "readable-stream": "1.0.34" + }, "dependencies": { "debug": { "version": "0.7.4", @@ -5844,7 +8373,13 @@ "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } }, "string_decoder": { "version": "0.10.31", @@ -5859,24 +8394,120 @@ "resolved": "https://registry.npmjs.org/zuul/-/zuul-3.11.1.tgz", "integrity": "sha1-cIC7vyKm2X9gh5s7jyqCPFqZurI=", "dev": true, + "requires": { + "JSON2": "0.1.0", + "batch": "0.5.0", + "browserify": "13.0.0", + "browserify-istanbul": "0.1.5", + "char-split": "0.2.0", + "colors": "0.6.2", + "commander": "2.1.0", + "compression": "1.5.0", + "convert-source-map": "1.0.0", + "debug": "2.1.0", + "express": "3.4.8", + "express-state": "1.0.3", + "find-nearest-file": "1.0.0", + "firefox-profile": "0.2.7", + "globs-to-files": "1.0.0", + "hbs": "2.4.0", + "highlight.js": "7.5.0", + "http-proxy": "1.11.2", + "humanize-duration": "2.4.0", + "istanbul-middleware": "0.2.2", + "load-script": "0.0.5", + "lodash": "3.10.1", + "opener": "1.4.0", + "osenv": "0.0.3", + "shallow-copy": "0.0.1", + "shell-quote": "1.4.1", + "stack-mapper": "0.2.2", + "stacktrace-js": "http://github.com/defunctzombie/stacktrace.js/tarball/07e7b9516f1449f5c209e4f67f11a43f738c1712", + "superagent": "0.15.7", + "tap-finished": "0.0.1", + "tap-parser": "0.7.0", + "watchify": "3.7.0", + "wd": "0.3.11", + "xtend": "2.1.2", + "yamljs": "0.1.4", + "zuul-localtunnel": "1.1.0" + }, "dependencies": { "assert": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/assert/-/assert-1.3.0.tgz", "integrity": "sha1-A5OaYiWCqBLMICMgoLmlbJuBWEk=", - "dev": true + "dev": true, + "requires": { + "util": "0.10.3" + } }, "browserify": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/browserify/-/browserify-13.0.0.tgz", "integrity": "sha1-jyI7sk/07kM15r6pZx3ilOQ7pqM=", "dev": true, + "requires": { + "JSONStream": "1.3.2", + "assert": "1.3.0", + "browser-pack": "6.0.3", + "browser-resolve": "1.11.2", + "browserify-zlib": "0.1.4", + "buffer": "4.9.1", + "concat-stream": "1.5.2", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "defined": "1.0.0", + "deps-sort": "2.0.0", + "domain-browser": "1.1.7", + "duplexer2": "0.1.4", + "events": "1.1.1", + "glob": "5.0.15", + "has": "1.0.1", + "htmlescape": "1.1.1", + "https-browserify": "0.0.1", + "inherits": "2.0.3", + "insert-module-globals": "7.0.1", + "isarray": "0.0.1", + "labeled-stream-splicer": "2.0.0", + "module-deps": "4.1.1", + "os-browserify": "0.1.2", + "parents": "1.0.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "read-only-stream": "2.0.0", + "readable-stream": "2.3.3", + "resolve": "1.5.0", + "shasum": "1.0.2", + "shell-quote": "1.6.1", + "stream-browserify": "2.0.1", + "stream-http": "2.8.0", + "string_decoder": "0.10.31", + "subarg": "1.0.0", + "syntax-error": "1.3.0", + "through2": "2.0.3", + "timers-browserify": "1.4.2", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4", + "xtend": "4.0.1" + }, "dependencies": { "shell-quote": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true + "dev": true, + "requires": { + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" + } }, "xtend": { "version": "4.0.1", @@ -5890,13 +8521,21 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", - "dev": true + "dev": true, + "requires": { + "pako": "0.2.9" + } }, "buffer": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, + "requires": { + "base64-js": "1.2.1", + "ieee754": "1.1.8", + "isarray": "1.0.0" + }, "dependencies": { "isarray": { "version": "1.0.0", @@ -5922,13 +8561,23 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-2.1.0.tgz", "integrity": "sha1-M6uRVlnYwsyKQUQ9lNbr03aX7SE=", - "dev": true + "dev": true, + "requires": { + "ms": "0.6.2" + } }, "glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } }, "https-browserify": { "version": "0.0.1", @@ -5970,7 +8619,13 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.4.1.tgz", "integrity": "sha1-rhhEK1NqCMcgI5sHnS8iisvt7kA=", - "dev": true + "dev": true, + "requires": { + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" + } }, "string_decoder": { "version": "0.10.31", @@ -5982,7 +8637,10 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "dev": true + "dev": true, + "requires": { + "object-keys": "0.4.0" + } } } }, @@ -5990,7 +8648,10 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/zuul-localtunnel/-/zuul-localtunnel-1.1.0.tgz", "integrity": "sha1-cK0n+wpq+WiiFR/F1eiV2qGu0V0=", - "dev": true + "dev": true, + "requires": { + "localtunnel": "1.5.0" + } } } } diff --git a/js/package.json b/js/package.json index 25351ba..840ba39 100644 --- a/js/package.json +++ b/js/package.json @@ -11,7 +11,8 @@ "coverage:html": "nyc report --reporter=html", "test:browser": "zuul --local -- test/*.js", "pretest:sauce": "babel test/ -d test-lib/", - "test:sauce": "zuul -- test-lib/*.js" + "test:sauce": "zuul -- test-lib/*.js", + "fmt": "prettier --write test/**/*.js lib/**/*.js" }, "dependencies": { "antlr4": "^4.7.1" @@ -25,6 +26,7 @@ "js-yaml": "^3.9.1", "mocha": "^3.3.0", "nyc": "^11.1.0", + "prettier": "^1.10.2", "zuul": "^3.11.1" }, "babel": { diff --git a/js/test/test_equals.js b/js/test/test_equals.js index b4a5a15..2f52e51 100644 --- a/js/test/test_equals.js +++ b/js/test/test_equals.js @@ -2,7 +2,7 @@ const assert = require('better-assert') const equals = require('../lib/equals') -const parse = require('../lib/parse') +const parse = require('../lib/lax_parser') describe('equality check', () => { it('does not equal components of different types', () => { diff --git a/js/test/test_parse.js b/js/test/test_lax_parser.js similarity index 99% rename from js/test/test_parse.js rename to js/test/test_lax_parser.js index 37a5191..ec9f510 100644 --- a/js/test/test_parse.js +++ b/js/test/test_lax_parser.js @@ -1,6 +1,6 @@ -/*const assert = require('better-assert'); +const assert = require('better-assert'); -const {parse} = require('../lib/index'); +const {parse} = require('../lib/lax_parser') describe('parsing', () => { it("doesn't parse nonsense", () => { @@ -267,6 +267,7 @@ describe('SMD Capacitors', () => { }) }) +/* describe('SMD Resistors', () => { it('parses a resistor', () => { const c = parse('1k 0603').component diff --git a/js/test/test_strict_units.js b/js/test/test_strict_units.js new file mode 100644 index 0000000..5ab1076 --- /dev/null +++ b/js/test/test_strict_units.js @@ -0,0 +1,504 @@ +const assert = require('better-assert'); + +const {get_parser} = require('../lib/index'); + +function parser(start_rule, key=null) { + if (key === null) { + key = start_rule; + } + + function parse(input) { + var obj = get_parser(start_rule)(input); + if (key) { + return obj[key]; + } + return obj; + } + + return parse; +} + +function check_with_parser(parser) { + function check(cases) { + cases.forEach((test) => { + // console.log(test, parser(test[0])); + if (test.length == 2) { + assert(parser(test[0]) === test[1]); + } else { + assert(parser(test[0])[test[1]] === test[2]); + } + }); + } + return check; +} + +describe('strict units', () => { + it('parses voltage correctly', () => { + const check = check_with_parser(parser('voltage')); + + check([ + ['1kV', 1e3], + ['1V', 1], + ['1mV', 1e-3], + ]); + }); + + it('parses current correctly', () => { + const parse = parser('current'); + + const cases = [ + ['1A', 1], + ['1mA', 1e-3], + ['1uA', 1e-6], + ['1nA', 1e-9], + ['1pA', 1e-12], + ]; + + cases.forEach((test) => { + assert(parse(test[0]) === test[1]); + }); + }); + + it('parses power correctly', () => { + const parse = parser('power'); + + const cases = [ + ['1W', 1], + ['1mW', 1e-3], + ]; + + cases.forEach((test) => { + assert(parse(test[0]) === test[1]); + }); + }); + + it('parses resistance correctly', () => { + const parse = parser('resistance'); + + const cases = [ + ['1M', 1e6], + ['1K', 1e3], + ['1k', 1e3], + ['1', 1], + ['1R', 1], + ['1m', 1e-3], + ]; + + cases.forEach((test) => { + assert(parse(test[0]) === test[1]); + }); + }); + + it('parses capacitance correctly', () => { + const parse = parser('capacitance'); + + const cases = [ + ['1uF', 1e-6], + ['1nF', 1e-9], + ['1pF', 1e-12], + ]; + + cases.forEach((test) => { + assert(parse(test[0]) === test[1]); + }); + }); + + it('parses inductance correctly', () => { + const parse = parser('inductance'); + + const cases = [ + ['1H', 1], + ['1mH', 1e-3], + ['1uH', 1e-6], + ['1nH', 1e-9], + ]; + + cases.forEach((test) => { + assert(parse(test[0]) === test[1]); + }); + }); + + it('parses frequency correctly', () => { + const parse = parser('frequency'); + + const cases = [ + ['1GHz', 1e9], + ['1MHz', 1e6], + ['1KHz', 1e3], + ['1kHz', 1e3], + ['1Hz', 1], + ]; + + cases.forEach((test) => { + assert(parse(test[0]) === test[1]); + }); + }); + + it('parses time correctly', () => { + const parse = parser('time'); + + const cases = [ + ['1s', 1], + ['1ms', 1e-3], + ['1us', 1e-6], + ['1ns', 1e-9], + ['1ps', 1e-12], + ]; + + cases.forEach((test) => { + assert(parse(test[0]) === test[1]); + }); + }); + + it('parses temperature correctly', () => { + const parse = parser('temperature'); + + const cases = [ + ['1C', 1], + ['1°C', 1], + ]; + + cases.forEach((test) => { + assert(parse(test[0]) === test[1]); + }); + }); +}); + +describe('strict tolerance', () => { + it('parses tolerance correctly', () => { + const check = check_with_parser(parser('tolerance')); + + check([ + ['1%', 1], + ['+-1%', 1], + ['+/-1%', 1], + ['±1%', 1], + ]); + }); +}); + +describe('strict package size', () => { + const check = check_with_parser(parser('package_size')); + + it('parses imperial packages correctly', () => { + check([ + ['008004', '008004'], + ['009005', '009005'], + ['01005', '01005'], + ['0805', '0805'], + ['1008', '1008'], + ['1206', '1206'], + ['1210', '1210'], + ['1806', '1806'], + ['1825', '1825'], + ['2010', '2010'], + ['2512', '2512'], + ['2920', '2920'], + + ['imperial 0201', '0201'], + ['imperial 0402', '0402'], + ['imperial 0603', '0603'], + ]); + }); + + it('parses metric packages correctly', () => { + check([ + ['03015', '009005'], + ['1005', '0402'], + ['1608', '0603'], + ['2012', '0805'], + ['2520', '1008'], + ['3216', '1206'], + ['3225', '1210'], + ['4516', '1806'], + ['4532', '1812'], + ['4564', '1825'], + ['5025', '2010'], + ['6332', '2512'], + ['7451', '2920'], + + ['metric 0201', '008004'], + ['metric 0402', '01005'], + ['metric 0603', '0201'], + ]); + }); + + it('parses ambiguous packages correctly', () => { + check([ + ['0201', '0201'], + ['0402', '0402'], + ['0603', '0603'], + + ['i0402', '0402'], + ['0402i', '0402'], + ['imperial 0402', '0402'], + ['0402 imperial', '0402'], + + //['m0603', '0201'], + //['0603m', '0201'], + ['metric 0603', '0201'], + ['0603 metric', '0201'], + ]); + }); +}); + +describe('strict dielectric', () => { + check = check_with_parser(parser('dielectric')); + + it('parses class1 dielectrics correctly', () => { + check([ + ['M7G', 'M7G'], + ['TH', 'T2H'], + ['N1500', 'P3K'], + ]); + }); + + it('parses class2 dielectrics correctly', () => { + check([ + ['x4p', 'X4P'], + ['y5r', 'Y5R'], + ['z6s', 'Z6S'], + ]); + }); + + it('parses alu dielectrics correctly', () => { + check([ + ['alu', 'ALU'], + ['Aluminium', 'ALU'], + ['Elco', 'ALU'], + ['Electrolytic', 'ALU'], + ]); + }); + + it('parses tan dielectrics correctly', () => { + check([ + ['tan', 'TAN'], + ['tantalum', 'TAN'], + ]); + }); +}); + +describe('strict passive', () => { + const parse = parser('passive', key=false); + const check = check_with_parser(parse); + + it('parses resistors correctly', () => { + check([ + ['10k', 'type', 'resistor'], + ['10k', 'resistance', 10e3], + + ['10k 10%', 'type', 'resistor'], + ['10k 10%', 'tolerance', 10], + + ['10k 0805', 'type', 'resistor'], + ['10k 0805', 'package_size', '0805'], + + ['10k 125mW', 'type', 'resistor'], + ['10k 125mW', 'power', 125e-3], + + ['10k pot', 'type', 'resistor'], + ['10k pot', 'rtype', 'pot'], + + ['10k 10% 0805 125mW', 'type', 'resistor'], + ['10k 10% 0805 125mW', 'resistance', 10e3], + ['10k 10% 0805 125mW', 'tolerance', 10], + ['10k 10% 0805 125mW', 'package_size', '0805'], + ['10k 10% 0805 125mW', 'power', 125e-3], + ]); + }); + + it('parses capacitors correctly', () => { + check([ + ['10nF', 'type', 'capacitor'], + ['10nF', 'capacitance', 10e-9], + + ['10nF 10%', 'type', 'capacitor'], + ['10nF 10%', 'tolerance', 10], + + ['10nF 0805', 'type', 'capacitor'], + ['10nF 0805', 'package_size', '0805'], + + ['10nF 25V', 'type', 'capacitor'], + ['10nF 25V', 'voltage', 25], + + ['10uF alu', 'type', 'capacitor'], + ['10uF alu', 'dielectric', 'ALU'], + + ['10nF 10% 0805 25V X7R', 'type', 'capacitor'], + ['10nF 10% 0805 25V X7R', 'capacitance', 10e-9], + ['10nF 10% 0805 25V X7R', 'tolerance', 10], + ['10nF 10% 0805 25V X7R', 'package_size', '0805'], + ['10nF 10% 0805 25V X7R', 'voltage', 25], + ['10nF 10% 0805 25V X7R', 'dielectric', 'X7R'], + ]); + }); + + it('parses inductors correctly', () => { + check([ + ['10mH', 'type', 'inductor'], + ['10mH', 'inductance', 10e-3], + + ['10mH 10%', 'type', 'inductor'], + ['10mH 10%', 'tolerance', 10], + + ['10mH 0805', 'type', 'inductor'], + ['10mH 0805', 'package_size', '0805'], + + ['10mH 500mA', 'type', 'inductor'], + ['10mH 500mA', 'current', 500e-3], + + ['10mH 10% 0805 500mA', 'type', 'inductor'], + ['10mH 10% 0805 500mA', 'inductance', 10e-3], + ['10mH 10% 0805 500mA', 'tolerance', 10], + ['10mH 10% 0805 500mA', 'package_size', '0805'], + ['10mH 10% 0805 500mA', 'current', 500e-3], + ]); + }); + + it('parses oscillators correctly', () => { + check([ + ['16MHz', 'type', 'oscillator'], + ['16MHz', 'frequency', 16e6], + + // should be defined in ppm + ['16MHz 1%', 'type', 'oscillator'], + ['16MHz 1%', 'tolerance', 1], + + ['16MHz 12pF', 'type', 'oscillator'], + ['16MHz 12pF', 'capacitance', 12e-12], + + ['16MHz 1% 12pF', 'type', 'oscillator'], + ['16MHz 1% 12pF', 'frequency', 16e6], + ['16MHz 1% 12pF', 'tolerance', 1], + ['16MHz 1% 12pF', 'capacitance', 12e-12], + ]); + }); +}); + +describe('strict diode', () => { + const parse = parser('diode', key=false); + const check = check_with_parser(parse); + + it('parses codes correctly', () => { + check([ + ['1N4148', 'type', 'diode'], + ['1N4148', 'code', '1N4148'], + ]); + }); + + it('parses signal diodes correctly', () => { + check([ + ['sig', 'type', 'diode'], + ['sig', 'dtype', 'signal'], + + ['sig 1N4148', 'type', 'diode'], + ['sig 1N4148', 'dtype', 'signal'], + ['sig 1N4148', 'code', '1N4148'], + + ['1N4148 sig', 'type', 'diode'], + ['1N4148 sig', 'dtype', 'signal'], + ['1N4148 sig', 'code', '1N4148'], + ]); + }); + + it('parses rectifier diodes correctly', () => { + check([ + ['rect', 'type', 'diode'], + ['rect', 'dtype', 'rectifier'], + + ['rect 1N4007', 'type', 'diode'], + ['rect 1N4007', 'dtype', 'rectifier'], + ['rect 1N4007', 'code', '1N4007'], + + ['1N4007 rect', 'type', 'diode'], + ['1N4007 rect', 'dtype', 'rectifier'], + ['1N4007 rect', 'code', '1N4007'], + ]); + }); + + it('parses schottky diodes correctly', () => { + check([ + ['sk', 'type', 'diode'], + ['sk', 'dtype', 'schottky'], + + ['sk BAT54S', 'type', 'diode'], + ['sk BAT54S', 'dtype', 'schottky'], + ['sk BAT54S', 'code', 'BAT54S'], + + ['BAT54S sk', 'type', 'diode'], + ['BAT54S sk', 'dtype', 'schottky'], + ['BAT54S sk', 'code', 'BAT54S'], + ]); + }); + + it('parses leds correctly', () => { + check([ + ['led white', 'type', 'diode'], + ['led white', 'dtype', 'led'], + ['led white', 'color', 'white'], + ]); + }); + + it('parses zener diodes correctly', () => { + check([ + ['z 5V', 'type', 'diode'], + ['z 5V', 'dtype', 'zener'], + ['z 5V', 'voltage', 5], + ]); + }); +}); + +describe('strict transistor', () => { + const parse = parser('transistor', key=false); + const check = check_with_parser(parse); + + it('parses transistor codes correctly', () => { + check([ + ['2N2222', 'type', 'transistor'], + ['2N2222', 'code', '2N2222'], + ]); + }); + + it('parses npn transistors correctly', () => { + check([ + ['npn 2N2222', 'type', 'transistor'], + ['npn 2N2222', 'ttype', 'npn'], + ['npn 2N2222', 'code', '2N2222'], + + ['2N2222 npn', 'type', 'transistor'], + ['2N2222 npn', 'ttype', 'npn'], + ['2N2222 npn', 'code', '2N2222'], + ]); + }); + + it('parses pnp transistors correctly', () => { + check([ + ['pnp BC547', 'type', 'transistor'], + ['pnp BC547', 'ttype', 'pnp'], + ['pnp BC547', 'code', 'BC547'], + + ['BC547 pnp', 'type', 'transistor'], + ['BC547 pnp', 'ttype', 'pnp'], + ['BC547 pnp', 'code', 'BC547'], + ]); + }); + + it('parses nmos transistors correctly', () => { + check([ + ['nmos 2N7000', 'type', 'transistor'], + ['nmos 2N7000', 'ttype', 'nmos'], + ['nmos 2N7000', 'code', '2N7000'], + + ['2N7000 nmos', 'type', 'transistor'], + ['2N7000 nmos', 'ttype', 'nmos'], + ['2N7000 nmos', 'code', '2N7000'], + ]); + }); + + it('parses pmos transistors correctly', () => { + check([ + ['pmos', 'type', 'transistor'], + ['pmos', 'ttype', 'pmos'], + ]); + }); +}); diff --git a/js/test/test_units.js b/js/test/test_units.js deleted file mode 100644 index 0c8a31f..0000000 --- a/js/test/test_units.js +++ /dev/null @@ -1,41 +0,0 @@ -const assert = require('better-assert'); - -const {parse} = require('../lib/index'); - -describe('Capacitance', () => { - it('uF is parsed correctly', () => { - const cases = [ - '10uF', - ]; - - cases.forEach((text) => { - const obj = parse(text); - console.log(text, obj['capacitance']); - assert(obj['capacitance'] === 10e-5); - }); - }); - - it('nF is parsed correctly', () => { - const cases = [ - '10nF', - ]; - - cases.forEach((text) => { - const obj = parse(text); - console.log(text, obj['capacitance']); - assert(obj['capacitance'] === 10e-8); - }); - }); - - it('pF is parsed correctly', () => { - const cases = [ - '10pF', - ]; - - cases.forEach((text) => { - const obj = parse(text); - console.log(text, obj['capacitance']); - assert(obj['capacitance'] === 10e-11); - }); - }); -}); diff --git a/prepare_cpl.js b/prepare_cpl.js index a732f8b..2958884 100644 --- a/prepare_cpl.js +++ b/prepare_cpl.js @@ -32,10 +32,11 @@ fs.writeFileSync('./js/lib/cpl_capacitors.js', capacitors); let leds = fs.readFileSync('./cpl-data/CPL for Production/LEDs.yaml'); leds = yaml.safeLoad(leds); -leds = leds.rows.map(c => { - const v = parse(c.title); +leds = leds.rows.map(d => { + console.log(d.title); + const v = parse(d.title); if (v.type === 'led') { - v.cplid = c.cplid; + v.cplid = d.cplid; return v; } }).filter(v => v); diff --git a/python3/Pipfile b/python3/Pipfile index f2615db..c644b19 100644 --- a/python3/Pipfile +++ b/python3/Pipfile @@ -12,6 +12,7 @@ name = "pypi" [dev-packages] +pytest = "*" [requires] diff --git a/python3/Pipfile.lock b/python3/Pipfile.lock index 2bdfc9d..72c64b7 100644 --- a/python3/Pipfile.lock +++ b/python3/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "d3adad760ef2444eefa2d43bfc2e33387794b568af6bc9fd9f61797b25a46f44" + "sha256": "961440eb193af443554a4028478896f784783bc8bf34dd2496abfc7d9a644ad8" }, "host-environment-markers": { "implementation_name": "cpython", @@ -36,5 +36,40 @@ "version": "==4.7.1" } }, - "develop": {} + "develop": { + "attrs": { + "hashes": [ + "sha256:a17a9573a6f475c99b551c0e0a812707ddda1ec9653bed04c13841404ed6f450", + "sha256:1c7960ccfd6a005cd9f7ba884e6316b5e430a3f1a6c37c5f87d8b43f83b54ec9" + ], + "version": "==17.4.0" + }, + "pluggy": { + "hashes": [ + "sha256:7f8ae7f5bdf75671a718d2daf0a64b7885f74510bcd98b1a0bb420eb9a9d0cff" + ], + "version": "==0.6.0" + }, + "py": { + "hashes": [ + "sha256:8cca5c229d225f8c1e3085be4fcf306090b00850fefad892f9d96c7b6e2f310f", + "sha256:ca18943e28235417756316bfada6cd96b23ce60dd532642690dcfdaba988a76d" + ], + "version": "==1.5.2" + }, + "pytest": { + "hashes": [ + "sha256:b84878865558194630c6147f44bdaef27222a9f153bbd4a08908b16bf285e0b1", + "sha256:53548280ede7818f4dc2ad96608b9f08ae2cc2ca3874f2ceb6f97e3583f25bc4" + ], + "version": "==3.3.2" + }, + "six": { + "hashes": [ + "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb", + "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9" + ], + "version": "==1.11.0" + } + } } diff --git a/python3/cli.py b/python3/cli.py new file mode 100644 index 0000000..4f81ecb --- /dev/null +++ b/python3/cli.py @@ -0,0 +1,11 @@ +import sys +import electro_grammar as eg; + + +def main(argv): + tree = eg.parse(argv[1]) + print(tree) + + +if __name__ == '__main__': + main(sys.argv) diff --git a/python3/electro_grammar.py b/python3/electro_grammar.py deleted file mode 100644 index 28bd494..0000000 --- a/python3/electro_grammar.py +++ /dev/null @@ -1,38 +0,0 @@ -from antlr4 import * -from decimal import Decimal -from ElectroGrammarLexer import ElectroGrammarLexer -from ElectroGrammarListener import ElectroGrammarListener -from ElectroGrammarParser import ElectroGrammarParser - - -class ElectroGrammarToObjectListener(ElectroGrammarListener): - def __init__(self): - self.obj = {} - - def enterCapacitance(self, ctx): - cprefix_lookup = {'u': 10e-6, 'n': 10e-9, 'p': 10e-12} - number = Decimal(str(ctx.NUMBER())) - cprefix = cprefix_lookup[str(ctx.CPREFIX())] - self.obj['capacitance'] = number * cprefix - - -def parse(input): - input = InputStream(input) - lexer = ElectroGrammarLexer(input) - stream = CommonTokenStream(lexer) - parser = ElectroGrammarParser(stream) - tree = parser.electro_grammar() - listener = ElectroGrammarToObjectListener() - walker = ParseTreeWalker() - walker.walk(listener, tree) - return listener.obj - - -def main(argv): - tree = parse(argv[1]) - print(tree) - - -if __name__ == '__main__': - import sys - main(sys.argv) diff --git a/python3/electro_grammar/__init__.py b/python3/electro_grammar/__init__.py new file mode 100644 index 0000000..c5189c7 --- /dev/null +++ b/python3/electro_grammar/__init__.py @@ -0,0 +1,3 @@ +from electro_grammar.electro_grammar import parse, get_parser + +__all__ = ['electro_grammar'] diff --git a/python3/electro_grammar/electro_grammar.py b/python3/electro_grammar/electro_grammar.py new file mode 100644 index 0000000..272f8e9 --- /dev/null +++ b/python3/electro_grammar/electro_grammar.py @@ -0,0 +1,242 @@ +from antlr4 import * +from antlr4.error.DiagnosticErrorListener import DiagnosticErrorListener +from antlr4.atn.PredictionMode import PredictionMode +from decimal import Decimal +from electro_grammar.ElectroGrammarLexer import ElectroGrammarLexer +from electro_grammar.ElectroGrammarListener import ElectroGrammarListener +from electro_grammar.ElectroGrammarParser import ElectroGrammarParser + + +def handle_unit(ctx): + return Decimal(ctx.NUMBER().getText()) + + +def handle_prefix(ctx): + if hasattr(ctx, 'GIGA') and ctx.GIGA(): + return Decimal('1e9') + if hasattr(ctx, 'MEGA') and ctx.MEGA(): + return Decimal('1e6') + if hasattr(ctx, 'KILO') and ctx.KILO(): + return Decimal('1e3') + if hasattr(ctx, 'MILI') and ctx.MILI(): + return Decimal('1e-3') + if hasattr(ctx, 'MICRO') and ctx.MICRO(): + return Decimal('1e-6') + if hasattr(ctx, 'NANO') and ctx.NANO(): + return Decimal('1e-9') + if hasattr(ctx, 'PICO') and ctx.PICO(): + return Decimal('1e-12') + return 1 + + +def handle_package_size(ctx): + if hasattr(ctx, 'METRIC_SIZE') and ctx.METRIC_SIZE(): + return ctx.METRIC_SIZE().getText() + if hasattr(ctx, 'IMPERIAL_SIZE') and ctx.IMPERIAL_SIZE(): + return ctx.IMPERIAL_SIZE().getText() + if hasattr(ctx, 'AMBIGUOUS_SIZE') and ctx.AMBIGUOUS_SIZE(): + return ctx.AMBIGUOUS_SIZE().getText() + +class ElectroGrammarToObjectListener(ElectroGrammarListener): + def __init__(self): + self.obj = {} + self.prefix = 1 + + def exitVprefix(self, ctx): + self.prefix = handle_prefix(ctx) + + def exitVoltage(self, ctx): + self.obj['voltage'] = handle_unit(ctx) * self.prefix + self.prefix = 1 + + def exitAprefix(self, ctx): + self.prefix = handle_prefix(ctx) + + def exitCurrent(self, ctx): + self.obj['current'] = handle_unit(ctx) * self.prefix + self.prefix = 1 + + def exitPprefix(self, ctx): + self.prefix = handle_prefix(ctx) + + def exitPower(self, ctx): + self.obj['power'] = handle_unit(ctx) * self.prefix + self.prefix = 1 + + def exitRprefix(self, ctx): + self.prefix = handle_prefix(ctx) + + def exitResistance(self, ctx): + self.obj['resistance'] = handle_unit(ctx) * self.prefix + self.prefix = 1 + + def exitCprefix(self, ctx): + self.prefix = handle_prefix(ctx) + + def exitCapacitance(self, ctx): + self.obj['capacitance'] = handle_unit(ctx) * self.prefix + self.prefix = 1 + + def exitLprefix(self, ctx): + self.prefix = handle_prefix(ctx) + + def exitInductance(self, ctx): + self.obj['inductance'] = handle_unit(ctx) * self.prefix + self.prefix = 1 + + def exitFprefix(self, ctx): + self.prefix = handle_prefix(ctx) + + def exitFrequency(self, ctx): + self.obj['frequency'] = handle_unit(ctx) * self.prefix + self.prefix = 1 + + def exitTprefix(self, ctx): + self.prefix = handle_prefix(ctx) + + def exitTime(self, ctx): + self.obj['time'] = handle_unit(ctx) * self.prefix + self.prefix = 1 + + def exitTemperature(self, ctx): + self.obj['temperature'] = handle_unit(ctx) + + def exitTolerance(self, ctx): + self.obj['tolerance'] = handle_unit(ctx) + + def exitMetric_size(self, ctx): + imperial_lookup = { + '0201': '008004', + '03015': '009005', + '0402': '01005', + '0603': '0201', + '1005': '0402', + '1608': '0603', + '2012': '0805', + '2520': '1008', + '3216': '1206', + '3225': '1210', + '4516': '1806', + '4532': '1812', + '4564': '1825', + '5025': '2010', + '6332': '2512', + '7451': '2920' + } + self.obj['package_size'] = imperial_lookup[handle_package_size(ctx)] + + def exitImperial_size(self, ctx): + self.obj['package_size'] = handle_package_size(ctx) + + def exitAmbiguous_size(self, ctx): + print('Warn: Ambiguous package size found') + self.obj['package_size'] = handle_package_size(ctx) + + def exitClass1(self, ctx): + if ctx.M7G(): + dielectric = 'M7G' + elif ctx.C0G(): + dielectric = 'C0G' + elif ctx.H2G(): + dielectric = 'H2G' + elif ctx.L2G(): + dielectric = 'L2G' + elif ctx.P2H(): + dielectric = 'P2H' + elif ctx.R2H(): + dielectric = 'R2H' + elif ctx.S2H(): + dielectric = 'S2H' + elif ctx.T2H(): + dielectric = 'T2H' + elif ctx.U2J(): + dielectric = 'U2J' + elif ctx.Q3K(): + dielectric = 'Q3K' + elif ctx.P3K(): + dielectric = 'P3K' + + self.obj['dielectric'] = dielectric + + def exitClass2(self, ctx): + self.obj['dielectric'] = ctx.CLASS2().getText().upper() + + def exitAlu(self, ctx): + self.obj['dielectric'] = 'ALU' + + def exitTan(self, ctx): + self.obj['dielectric'] = 'TAN' + + def exitResistor(self, ctx): + self.obj['type'] = 'resistor' + + def exitCapacitor(self, ctx): + self.obj['type'] = 'capacitor' + + def exitInductor(self, ctx): + self.obj['type'] = 'inductor' + + def exitOscillator(self, ctx): + self.obj['type'] = 'oscillator' + + def exitRtype(self, ctx): + if ctx.POT(): + self.obj['rtype'] = 'pot' + + def exitDiode(self, ctx): + self.obj['type'] = 'diode' + + def exitDcode(self, ctx): + self.obj['code'] = ctx.DCODE().getText().upper() + + def exitSignal(self, ctx): + self.obj['dtype'] = 'signal' + + def exitRectifier(self, ctx): + self.obj['dtype'] = 'rectifier' + + def exitLed(self, ctx): + self.obj['dtype'] = 'led' + + def exitSchottky(self, ctx): + self.obj['dtype'] = 'schottky' + + def exitZener(self, ctx): + self.obj['dtype'] = 'zener' + + def exitColor(self, ctx): + self.obj['color'] = ctx.COLOR().getText().lower() + + def exitTransistor(self, ctx): + self.obj['type'] = 'transistor' + + def exitTtype(self, ctx): + self.obj['ttype'] = ctx.TTYPE().getText().lower() + + def exitTcode(self, ctx): + self.obj['code'] = ctx.TCODE().getText().upper() + + +def get_parser(start_rule): + def parse(input): + input = InputStream(input) + lexer = ElectroGrammarLexer(input) + stream = CommonTokenStream(lexer) + parser = ElectroGrammarParser(stream) + + # adding ambiguity diagnostics, see antlr book page 157 + # https://github.com/antlr/antlr4/issues/2206 + #parser.removeErrorListeners() + parser.addErrorListener(DiagnosticErrorListener()) + parser._interp.predictionMode = PredictionMode.LL_EXACT_AMBIG_DETECTION + + tree = getattr(parser, start_rule)() + listener = ElectroGrammarToObjectListener() + walker = ParseTreeWalker() + walker.walk(listener, tree) + return listener.obj + return parse + + +def parse(input): + return get_parser('electro_grammar')(input) diff --git a/python3/tests/__init__.py b/python3/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python3/tests/test_parser.py b/python3/tests/test_parser.py new file mode 100644 index 0000000..ccbf0f4 --- /dev/null +++ b/python3/tests/test_parser.py @@ -0,0 +1,408 @@ +from decimal import Decimal +import pytest +import unittest +import electro_grammar as eg; + + +def parser(unit, key=None): + if key is None: + key = unit + + def parse(input): + obj = eg.get_parser(unit)(input) + if key: + return obj[key] + else: + return obj + return parse + + +giga = Decimal('1e9') +mega = Decimal('1e6') +kilo = Decimal('1e3') +mili = Decimal('1e-3') +micro = Decimal('1e-6') +nano = Decimal('1e-9') +pico = Decimal('1e-12') + + +class ParseUnitsTests(unittest.TestCase): + def test_parse_voltage(self): + parse = parser('voltage') + assert parse('1kV') == kilo + assert parse('1V') == 1 + assert parse('1mV') == mili + + def test_parse_current(self): + parse = parser('current') + assert parse('1A') == 1 + assert parse('1mA') == mili + assert parse('1uA') == micro + assert parse('1nA') == nano + assert parse('1pA') == pico + + def test_parse_power(self): + parse = parser('power') + assert parse('1W') == 1 + assert parse('1mW') == mili + + def test_parse_resistance(self): + parse = parser('resistance') + assert parse('1M') == mega; + assert parse('1K') == kilo; + assert parse('1k') == kilo; + assert parse('1') == 1 + assert parse('1R') == 1 + assert parse('1m') == mili; + + def test_parse_capacitance(self): + parse = parser('capacitance') + assert parse('1uF') == micro; + assert parse('1nF') == nano; + assert parse('1pF') == pico; + + def test_parse_inductance(self): + parse = parser('inductance') + assert parse('1H') == 1 + assert parse('1mH') == mili + assert parse('1uH') == micro + assert parse('1nH') == nano + + def test_parse_frequency(self): + parse = parser('frequency') + assert parse('1GHz') == giga + assert parse('1MHz') == mega + assert parse('1KHz') == kilo + assert parse('1khz') == kilo + assert parse('1Hz') == 1 + + def test_parse_time(self): + parse = parser('time') + assert parse('1s') == 1 + assert parse('1ms') == mili + assert parse('1us') == micro + assert parse('1ns') == nano + assert parse('1ps') == pico + + def test_parse_temperature(self): + parse = parser('temperature') + assert parse('1C') == 1 + assert parse('1°C') == 1 + + def test_parse_tolerance(self): + parse = parser('tolerance') + assert parse('1%') == 1 + assert parse('+-1%') == 1 + assert parse('+/-1%') == 1 + assert parse('±1%') == 1 + + +class ParsePackageSizeTests(unittest.TestCase): + def test_parse_imperial(self): + parse = parser('package_size') + assert parse('008004') == '008004' + assert parse('009005') == '009005' + assert parse('01005') == '01005' + assert parse('0805') == '0805' + assert parse('1008') == '1008' + assert parse('1206') == '1206' + assert parse('1210') == '1210' + assert parse('1806') == '1806' + assert parse('1825') == '1825' + assert parse('2010') == '2010' + assert parse('2512') == '2512' + assert parse('2920') == '2920' + + assert parse('imperial 0201') == '0201' + assert parse('imperial 0402') == '0402' + assert parse('imperial 0603') == '0603' + + def test_parse_metric(self): + parse = parser('package_size') + assert parse('03015') == '009005' + assert parse('1005') == '0402' + assert parse('1608') == '0603' + assert parse('2012') == '0805' + assert parse('2520') == '1008' + assert parse('3216') == '1206' + assert parse('3225') == '1210' + assert parse('4516') == '1806' + assert parse('4532') == '1812' + assert parse('4564') == '1825' + assert parse('5025') == '2010' + assert parse('6332') == '2512' + assert parse('7451') == '2920' + + assert parse('metric 0201') == '008004' + assert parse('metric 0402') == '01005' + assert parse('metric 0603') == '0201' + + def test_parse_ambiguous(self): + parse = parser('package_size') + assert parse('0201') == '0201' + assert parse('0402') == '0402' + assert parse('0603') == '0603' + + assert parse('i0402') == '0402' + assert parse('0402i') == '0402' + assert parse('imperial 0402') == '0402' + assert parse('0402 imperial') == '0402' + + #assert parse('m0603') == '0201' + #assert parse('0603m') == '0201' + assert parse('metric 0603') == '0201' + assert parse('0603 metric') == '0201' + + +class ParseDielectricTests(unittest.TestCase): + def test_parse_class1(self): + parse = parser('dielectric') + assert parse('M7G') == 'M7G' + assert parse('TH') == 'T2H' + assert parse('N1500') == 'P3K' + + def test_parse_class2(self): + parse = parser('dielectric') + assert parse('x4p') == 'X4P' + assert parse('y5r') == 'Y5R' + assert parse('z6s') == 'Z6S' + + def test_parse_alu(self): + parse = parser('dielectric') + assert parse('alu') == 'ALU' + assert parse('Aluminium') == 'ALU' + assert parse('Elco') == 'ALU' + assert parse('Electrolytic') == 'ALU' + + def test_parse_tan(self): + parse = parser('dielectric') + assert parse('tan') == 'TAN' + assert parse('tantalum') == 'TAN' + + +class ParsePassiveTests(unittest.TestCase): + def test_parse_resistor(self): + parse = parser('passive', key=False) + res = parse('10k') + assert res['type'] == 'resistor' + assert res['resistance'] == 10 * kilo + + res = parse('10k 10%') + assert res['type'] == 'resistor' + assert res['tolerance'] == 10 + + res = parse('10k 0805') + assert res['type'] == 'resistor' + assert res['package_size'] == '0805' + + res = parse('10k 125mW') + assert res['type'] == 'resistor' + assert res['power'] == 125 * mili + + res = parse('10k 10% 0805 125mW') + assert res['type'] == 'resistor' + assert res['resistance'] == 10 * kilo + assert res['tolerance'] == 10 + assert res['package_size'] == '0805' + assert res['power'] == 125 * mili + + res = parse('10k pot') + assert res['type'] == 'resistor' + assert res['rtype'] == 'pot' + + def test_parse_capacitor(self): + parse = parser('passive', key=False) + cap = parse('10nF') + assert cap['type'] == 'capacitor' + assert cap['capacitance'] == 10 * nano + + cap = parse('10nF 10%') + assert cap['type'] == 'capacitor' + assert cap['tolerance'] == 10 + + cap = parse('10nF 0805') + assert cap['type'] == 'capacitor' + assert cap['package_size'] == '0805' + + cap = parse('10nF 25V') + assert cap['type'] == 'capacitor' + assert cap['voltage'] == 25 + + cap = parse('10uF alu') + assert cap['type'] == 'capacitor' + assert cap['dielectric'] == 'ALU' + + cap = parse('10nF 10% 0805 25V X7R') + assert cap['type'] == 'capacitor' + assert cap['capacitance'] == 10 * nano + assert cap['tolerance'] == 10 + assert cap['package_size'] == '0805' + assert cap['voltage'] == 25 + assert cap['dielectric'] == 'X7R' + + + def test_parse_inductor(self): + parse = parser('passive', key=False) + ind = parse('10mH') + assert ind['type'] == 'inductor' + assert ind['inductance'] == 10 * mili + + ind = parse('10mH 10%') + assert ind['type'] == 'inductor' + assert ind['tolerance'] == 10 + + ind = parse('10mH 0805') + assert ind['type'] == 'inductor' + assert ind['package_size'] == '0805' + + ind = parse('10mH 500mA') + assert ind['type'] == 'inductor' + assert ind['current'] == 500 * mili + + ind = parse('10mH 10% 0805 500mA') + assert ind['type'] == 'inductor' + assert ind['inductance'] == 10 * mili + assert ind['tolerance'] == 10 + assert ind['package_size'] == '0805' + assert ind['current'] == 500 * mili + + def test_parse_oscillator(self): + parse = parser('passive', key=False) + osc = parse('16MHz') + assert osc['type'] == 'oscillator' + assert osc['frequency'] == 16 * mega + + # should be defined in ppm + osc = parse('16MHz 1%') + assert osc['type'] == 'oscillator' + assert osc['tolerance'] == 1 + + osc = parse('16MHz 12pF') + assert osc['type'] == 'oscillator' + assert osc['capacitance'] == 12 * pico + + osc = parse('16MHz 1% 12pF') + assert osc['type'] == 'oscillator' + assert osc['frequency'] == 16 * mega + assert osc['tolerance'] == 1 + assert osc['capacitance'] == 12 * pico + + +class ParseDiodeTests(unittest.TestCase): + def test_parse_code(self): + parse = parser('electro_grammar', key=False) + d = parse('1N4148') + assert d['type'] == 'diode' + assert d['code'] == '1N4148' + + def test_parse_signal(self): + parse = parser('electro_grammar', key=False) + d = parse('sig') + assert d['type'] == 'diode' + assert d['dtype'] == 'signal' + + d = parse('sig 1N4148') + assert d['type'] == 'diode' + assert d['dtype'] == 'signal' + assert d['code'] == '1N4148' + + d = parse('1N4148 sig') + assert d['type'] == 'diode' + assert d['dtype'] == 'signal' + assert d['code'] == '1N4148' + + def test_parse_rectifier(self): + parse = parser('electro_grammar', key=False) + d = parse('rect') + assert d['type'] == 'diode' + assert d['dtype'] == 'rectifier' + + d = parse('rect 1N4007') + assert d['type'] == 'diode' + assert d['dtype'] == 'rectifier' + assert d['code'] == '1N4007' + + d = parse('1N4007 rect') + assert d['type'] == 'diode' + assert d['dtype'] == 'rectifier' + assert d['code'] == '1N4007' + + def test_parse_schottky(self): + parse = parser('electro_grammar', key=False) + d = parse('sk') + assert d['type'] == 'diode' + assert d['dtype'] == 'schottky' + + d = parse('sk BAT54S') + assert d['type'] == 'diode' + assert d['dtype'] == 'schottky' + assert d['code'] == 'BAT54S' + + d = parse('BAT54S sk') + assert d['type'] == 'diode' + assert d['dtype'] == 'schottky' + assert d['code'] == 'BAT54S' + + def test_parse_led(self): + parse = parser('electro_grammar', key=False) + d = parse('led white') + assert d['type'] == 'diode' + assert d['dtype'] == 'led' + assert d['color'] == 'white' + + def test_parse_zener(self): + parse = parser('electro_grammar', key=False) + d = parse('z 5V') + assert d['type'] == 'diode' + assert d['dtype'] == 'zener' + assert d['voltage'] == 5 + + +class ParseTransistorTests(unittest.TestCase): + def test_parse_code(self): + parse = parser('electro_grammar', key=False) + q = parse('2N2222') + assert q['type'] == 'transistor' + assert q['code'] == '2N2222' + + def test_parse_npn(self): + parse = parser('electro_grammar', key=False) + q = parse('npn 2N2222') + assert q['type'] == 'transistor' + assert q['ttype'] == 'npn' + assert q['code'] == '2N2222' + + q = parse('2N2222 npn') + assert q['type'] == 'transistor' + assert q['ttype'] == 'npn' + assert q['code'] == '2N2222' + + def test_parse_pnp(self): + parse = parser('electro_grammar', key=False) + q = parse('pnp BC547') + assert q['type'] == 'transistor' + assert q['ttype'] == 'pnp' + assert q['code'] == 'BC547' + + q = parse('BC547 pnp') + assert q['type'] == 'transistor' + assert q['ttype'] == 'pnp' + assert q['code'] == 'BC547' + + def test_parse_nmos(self): + parse = parser('electro_grammar', key=False) + q = parse('nmos 2N7000') + assert q['type'] == 'transistor' + assert q['ttype'] == 'nmos' + assert q['code'] == '2N7000' + + q = parse('2N7000 nmos') + assert q['type'] == 'transistor' + assert q['ttype'] == 'nmos' + assert q['code'] == '2N7000' + + def test_parse_pmos(self): + parse = parser('electro_grammar', key=False) + q = parse('pmos') + assert q['type'] == 'transistor' + assert q['ttype'] == 'pmos' diff --git a/src/Dielectric.g4 b/src/Dielectric.g4 new file mode 100644 index 0000000..dd5cf96 --- /dev/null +++ b/src/Dielectric.g4 @@ -0,0 +1,35 @@ +grammar Dielectric; +import Alphabet; + + +dielectric: class1_ | class2 | alu | tan; + +class1_: class1 ('/' class1)?; + +class1: M7G | C0G | H2G | L2G | P2H | R2H | S2H | T2H | U2J | Q3K | P3K; +class2: CLASS2; +alu: ALU; +tan: TAN; + +M7G: P '100' | A G | M '7' G; +C0G: N P '0' | C G | C '0' G; +H2G: N '33' | H G | H '2' G; +L2G: N '75' | L G | L '2' G; +P2H: N '150' | P H | P '2' H; +R2H: N '220' | R H | R '2' H; +S2H: N '330' | S H | S '2' H; +T2H: N '470' | T H | T '2' H; +U2J: N '750' | U J | U '2' J; +Q3K: N '1000' | Q K | Q '3' K; +P3K: N '1500' | V K | P '3' K; + + +CLASS2: (X | Y | Z) + ('4' | '5' | '6' | '7' | '8' | '9') + (P | R | S | T | U | V); + + +ALU: A L U | A L U M I N I U M | E L C O | E L E C T R O L Y T I C; + + +TAN: T A N | T A N T A L U M; \ No newline at end of file diff --git a/src/ElectroGrammar.g4 b/src/ElectroGrammar.g4 index 9c009f7..7469151 100644 --- a/src/ElectroGrammar.g4 +++ b/src/ElectroGrammar.g4 @@ -3,20 +3,12 @@ */ grammar ElectroGrammar; -import Alphabet; +import Passive, Semi; -electro_grammar : capacitance; +electro_grammar: (passive | semi) SPECIAL_CHARS? EOF; -capacitance : NUMBER CPREFIX FARAD?; +WHITESPACE: [\p{White_Space}] -> skip; -fragment DIGIT: [0-9]; -NUMBER: DIGIT* '.'? DIGIT+ | DIGIT+ '.'? DIGIT*; - -fragment NANO: 'n' | N A N O; -fragment PICO: 'p' | P I C O; -fragment MICRO: 'u' | M I C R O; -CPREFIX: MICRO | NANO | PICO; - -FARAD: F | F A R A D; - -WHITESPACE : [\p{White_Space}] -> skip; +THROUGHHOLE: T H R O U G H '-'? H O L E -> skip; +SMD: S M D -> skip; +SPECIAL_CHARS: '–'; \ No newline at end of file diff --git a/src/PackageSize.g4 b/src/PackageSize.g4 new file mode 100644 index 0000000..ad5a8cb --- /dev/null +++ b/src/PackageSize.g4 @@ -0,0 +1,51 @@ +grammar PackageSize; +import Alphabet, Units; + +package_size: metric_size + | imperial_size + | ambiguous_size; + +metric_size: METRIC_SIZE + | METRIC (METRIC_SIZE | AMBIGUOUS_SIZE) + | (METRIC_SIZE | AMBIGUOUS_SIZE) METRIC; + +imperial_size: IMPERIAL_SIZE + | IMPERIAL (IMPERIAL_SIZE | AMBIGUOUS_SIZE) + | (IMPERIAL_SIZE | AMBIGUOUS_SIZE) IMPERIAL; + +ambiguous_size: AMBIGUOUS_SIZE; + +METRIC_SIZE: '03015' + | '1005' + | '1608' + | '2012' + | '2520' + | '3216' + | '3225' + | '4516' + | '4532' + | '4564' + | '5025' + | '6332' + | '7451'; + +IMPERIAL_SIZE: '008004' + | '009005' + | '01005' + | '0805' + | '1008' + | '1206' + | '1210' + | '1806' + | '1812' + | '1825' + | '2010' + | '2512' + | '2920'; + +AMBIGUOUS_SIZE : '0201' + | '0402' + | '0603'; + +METRIC: M E T R I C; +IMPERIAL: I | I M P E R I A L; diff --git a/src/Passive.g4 b/src/Passive.g4 new file mode 100644 index 0000000..b36168d --- /dev/null +++ b/src/Passive.g4 @@ -0,0 +1,22 @@ +grammar Passive; +import Dielectric, PackageSize, Units; + + +passive: resistor | capacitor | inductor | oscillator; + + +resistor: RESISTOR? resistance rspec*; +rspec: rtype | package_size | power; +rtype: RESISTOR | POT; +RESISTOR: R E S I S T O R; +POT: P O T | P O T E N T I O M E T E R; + +capacitor: CAPACITOR? capacitance cspec*; +cspec: dielectric | package_size | voltage; +CAPACITOR: C A P A C I T O R; + +inductor: inductance lspec*; +lspec: package_size | current; + +oscillator: frequency ospec*; +ospec: capacitance; diff --git a/src/Semi.g4 b/src/Semi.g4 new file mode 100644 index 0000000..dc3b2f5 --- /dev/null +++ b/src/Semi.g4 @@ -0,0 +1,75 @@ +grammar Semi; +import Alphabet, Units; + + +semi: diode | transistor; + + +/* Diodes */ +diode: dspec+; + +dspec: dtype? dcode + | dcode? dtype; +dtype: signal | rectifier | led | schottky | zener; +dcode: DCODE; +DCODE: JEDEC_DIODE_CODE | PRO_ELECTRON_DIODE_CODE; + + +signal: SIGNAL; +SIGNAL: S I G | S I G N A L; + +rectifier: RECTIFIER; +RECTIFIER: R E C T | R E C T I F I E R; + +led: LED? color; +LED: L E D; + +color: COLOR; +COLOR: R E D + | G R E E N + | B L U E + | Y E L L O W + | O R A N G E + | W H I T E + | A M B E R + | C Y A N + | P U R P L E + | Y E L L O W G R E E N; + +schottky: SCHOTTKY; +SCHOTTKY: S K | S C H O T T K Y; + +zener: ZENER? voltage; +ZENER: Z | Z E N | Z E N E R; + + +/* Transistors */ +transistor: ttype? tcode + | tcode? ttype; +ttype: TTYPE; +tcode: TCODE; +TCODE: JEDEC_TRANSISTOR_CODE | PRO_ELECTRON_TRANSISTOR_CODE; + +TTYPE: NPN | PNP | NMOS | PMOS; +fragment NPN: N P N; +fragment PNP: P N P; +fragment NMOS: N M O S; +fragment PMOS: P M O S; + + +/* Device codes */ +fragment ALPHANUM: [0-9a-zA-Z]; + +JEDEC_DIODE_CODE: '1' N DIGIT+; +JEDEC_TRANSISTOR_CODE: [23] N DIGIT+; + +fragment PRO_ELECTRON_MATERIAL: A | B | C | R; + +fragment PRO_ELECTRON_DIODE_TYPE: A | B | E | H | X | Y | Z; +fragment PRO_ELECTRON_TRANSISTOR_TYPE: C | D | F | L | S | U; +fragment PRO_ELECTRON_OTHER_TYPE: G | N | P | Q | R | T | W; + +fragment PRO_ELECTRON_SERIAL: ALPHANUM DIGIT DIGIT ALPHANUM*; + +PRO_ELECTRON_DIODE_CODE: PRO_ELECTRON_MATERIAL PRO_ELECTRON_DIODE_TYPE PRO_ELECTRON_SERIAL; +PRO_ELECTRON_TRANSISTOR_CODE: PRO_ELECTRON_MATERIAL PRO_ELECTRON_TRANSISTOR_TYPE PRO_ELECTRON_SERIAL; \ No newline at end of file diff --git a/src/Units.g4 b/src/Units.g4 new file mode 100644 index 0000000..b911b36 --- /dev/null +++ b/src/Units.g4 @@ -0,0 +1,66 @@ +grammar Units; +import Alphabet; + + +fragment DIGIT: [0-9]; +NUMBER: DIGIT* '.'? DIGIT+ | DIGIT+ '.'? DIGIT*; + + +GIGA: G | G I G A; +MEGA: 'M' | M E G A; +KILO: K | K I L O; +MILI: 'm' | M I L I; +MICRO: U | M I C R O | 'µ'; +NANO: N | N A N O; +PICO: P | P I C O; + +VOLT: V | V O L T; +AMPERE: A | A M P E R E; +WATT: W | W A T T; +OHM: R | O H M | 'Ω'; +FARAD: F | F A R A D; +HENRY: H | H E N R Y; +HERZ: H Z | H E R Z; +SECOND: S | S E C O N D; +CELSIUS: C | C E L S I U S; + +PLUSMINUS: '+/-' | '±' | '+-'; + + +unit: voltage + | current + | power + | resistance + | capacitance + | inductance + | frequency + | time + | temperature; + +tolerance: PLUSMINUS? NUMBER '%'; + +voltage: NUMBER vprefix? VOLT tolerance?; +vprefix: KILO | MILI; + +current: NUMBER aprefix? AMPERE tolerance?; +aprefix: MILI | MICRO | NANO | PICO; + +power: NUMBER pprefix? WATT tolerance?; +pprefix: MILI; + +resistance: NUMBER (rprefix | OHM) tolerance?; +rprefix: MEGA | KILO | MILI; + +capacitance: NUMBER cprefix FARAD tolerance?; +cprefix: MICRO | NANO | PICO; + +inductance: NUMBER lprefix? HENRY tolerance?; +lprefix: MILI | MICRO | NANO; + +frequency: NUMBER fprefix? HERZ tolerance?; +fprefix: GIGA | MEGA | KILO; + +time: NUMBER tprefix? SECOND tolerance?; +tprefix: MILI | MICRO | NANO | PICO; + +temperature: NUMBER '°'? CELSIUS tolerance?; \ No newline at end of file diff --git a/travis/antlr4 b/travis/antlr4 new file mode 100755 index 0000000..696f387 --- /dev/null +++ b/travis/antlr4 @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +java -jar "$TRAVIS_BUILD_DIR/travis/antlr-4.7.1-complete.jar" $@