├── .eslintrc ├── .gitignore ├── .travis.yml ├── README.md ├── jsonplus.d.ts ├── package-lock.json ├── package.json ├── parse.js └── tests ├── fixtures ├── all-out.json ├── comments.json ├── complex-tags.json ├── deep-link.json ├── external-file-complex.json ├── external-file-wrong-path.json ├── external-file.json ├── external-file2.json ├── first-level-array-templates.json ├── first-level-array.json ├── not-found.json ├── reference-to-reference.json ├── simple-self-reference.json ├── template-tags.json └── template-tags2.json └── tests.js /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "standard", 3 | "rules": { 4 | "prefer-const": "error", 5 | "no-var": "error", 6 | "semi": ["error", "always"], 7 | "comma-dangle": ["error", "always-multiline"] 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 18 | .grunt 19 | 20 | # node-waf configuration 21 | .lock-wscript 22 | 23 | # Compiled binary addons (http://nodejs.org/api/addons.html) 24 | build/Release 25 | 26 | # Dependency directory 27 | # https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git 28 | node_modules 29 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.12.7" 4 | - "0.12" 5 | - "0.11" 6 | - "0.10" 7 | - "iojs" 8 | - "iojs-v3.0.0" 9 | - "iojs-v1.0.4" 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JSONPlus 2 | a JSON parser that supports comments and self references 3 | 4 | [![Build Status](https://travis-ci.org/serkanyersen/jsonplus.svg?branch=master)](https://travis-ci.org/serkanyersen/jsonplus) [![npm](https://img.shields.io/npm/v/jsonplus.svg)](https://www.npmjs.com/package/jsonplus) [![License](https://img.shields.io/npm/l/jsonplus.svg)](https://github.com/serkanyersen/jsonplus#mit-license) 5 | [![TypeScript definitions on DefinitelyTyped](http://definitelytyped.org/badges/standard-flat.svg)](https://github.com/serkanyersen/jsonplus/blob/master/jsonplus.d.ts) 6 | 7 | ## Usage 8 | Install using npm 9 | ``` 10 | npm install --save-dev jsonplus 11 | ``` 12 | 13 | It's really simple 14 | ```javascript 15 | var jsonplus = require('jsonplus'); 16 | 17 | // Parse like you would with JSON.parse 18 | var response = jsonplus.parse('{"foo": 5, "bar": "@self.foo"}'); 19 | 20 | console.log(response); // { foo: 5, bar: 5 } 21 | ``` 22 | 23 | jsonplus uses `JSON.parse` internally so there shouldn't be any performance impact. We only go through JSON object once to find the `reference` strings and replace them with actual values. The impact is minimal considering the gained value. 24 | 25 | ## Self referencing 26 | Self referencing only works on values at the moment. Values start with `@self` will be parsed as a reference. Think of `@self` as `this`; the rest of it is usual object navigation such as `@self.foo.bar.list[1]`. If a self reference cannot be found, it will be replaced with `undefined` 27 | 28 | ## Template tags 29 | You can also use template tags in the values, this is the same thing as self referencing but you can use multiple references in the same value. One of the advantages of having template tags is you can simply omit the `@self` prefix all together -- or keep using it it's up to you :) 30 | 31 | Example: 32 | ```JSON 33 | { 34 | "first": "john", 35 | "last": "doe", 36 | "full": "{{ first }} {{ last }}" 37 | } 38 | ``` 39 | If your JSON is a first level array you can use paths like this `{{ [0].first }}` or if you think it's more readable, `{{ @self[0].first }}` works as well. 40 | 41 | **Note:** Due to the nature of template tags, everything that passes through them will be converted to string, whereas `@self` notation can replace itself with whatever it is referencing. 42 | 43 | ## External File References 44 | You can also make references to external files. JSONPlus will fetch those files and allow you to share values between json files. 45 | 46 | ```javascript 47 | { 48 | // @ext means external 49 | "@ext": { 50 | // Value of `users` will be replaced with the contents of users.json 51 | "users": "/path/to/users.json" 52 | }, 53 | // Reach the values of external file using @ext prefix 54 | "name": "@ext.users[1].name" 55 | } 56 | ``` 57 | 58 | **Notes on external files**: 59 | - External references can only work on direct objects. json strings that starts with an array ie,`[{ "my": "json" }]` cannot reference to external files. 60 | - File paths are relative to where your script is running, *not* to the JSON file. 61 | - If you reference a file that references to your file back, you'll end up in infinite loop. 62 | 63 | ## Resolve function 64 | Additionally, you can use the reference resolver directly. You might be parsing your JSON files with your own system i.e. streaming and you might only want to have the reference resolver. Here is an example 65 | 66 | ```javascript 67 | var resolve = require('jsonplus').resolve 68 | 69 | // This will resolve all reference strings on the given object 70 | var object = resolve(AlreadyParsedJSON); 71 | 72 | // resolve has a second argument, which provides the context for references 73 | var object = resolve({ full: '{{ first }} {{ last }}' }, { first: 'john', last: 'doe' }); 74 | 75 | console.log(object) // { full: 'john doe' } 76 | ``` 77 | 78 | ## A complex example 79 | ```javascript 80 | { 81 | // Get all users 82 | "/api/users": { 83 | // Mock response 84 | "response": { 85 | "users": [{ 86 | "name": "john doe" 87 | }, { 88 | "name": "jane doe" 89 | }] 90 | } 91 | }, 92 | 93 | // Get individual user 94 | "/api/user/1": { 95 | // Get already defined user from users mock 96 | "response": "@self['/api/users'].response.users[0]" 97 | }, 98 | 99 | // Get individual user 100 | "/api/user/2": { 101 | // Get already defined user from users mock 102 | "response": "@self['/api/users'].response.users[1]" 103 | } 104 | } 105 | ``` 106 | It's quite self explanatory. As you can see it makes things a lot more clearer and shorter. 107 | 108 | ## Why? 109 | Self referencing and comments in JSON files can be really useful while creating fixture files. I don't expect anyone to use this for production purposes. JSONPlus should help you create simpler fixtures with comments and can be also used for configuration files. 110 | 111 | ## MIT License 112 | ``` 113 | Copyright (c) 2015 Serkan Yersen 114 | 115 | Permission is hereby granted, free of charge, to any person obtaining a 116 | copy of this software and associated documentation files (the "Software"), 117 | to deal in the Software without restriction, including without limitation 118 | the rights to use, copy, modify, merge, publish, distribute, sublicense, 119 | and/or sell copies of the Software, and to permit persons to whom the 120 | Software is furnished to do so, subject to the following conditions: 121 | 122 | The above copyright notice and this permission notice shall be included in 123 | all copies or substantial portions of the Software. 124 | 125 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 126 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 127 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 128 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 129 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 130 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 131 | DEALINGS IN THE SOFTWARE. 132 | ``` 133 | -------------------------------------------------------------------------------- /jsonplus.d.ts: -------------------------------------------------------------------------------- 1 | declare module "jsonplus" { 2 | /** 3 | * Takes a JSON string and returns back an object. 4 | * In JSON String values you can use `@self` 5 | * notation and reference the JSON itself. This will 6 | * replace the value with reference 7 | */ 8 | function parse(jsonString: string): any; 9 | 10 | /** 11 | * Resolves self references on an already parsed object 12 | * self here is where references will be resolved against 13 | */ 14 | function resolve(object: any, self?: any): any; 15 | } 16 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jsonplus", 3 | "version": "1.2.1", 4 | "lockfileVersion": 1, 5 | "dependencies": { 6 | "acorn": { 7 | "version": "5.2.1", 8 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", 9 | "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", 10 | "dev": true 11 | }, 12 | "acorn-jsx": { 13 | "version": "3.0.1", 14 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", 15 | "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", 16 | "dev": true, 17 | "dependencies": { 18 | "acorn": { 19 | "version": "3.3.0", 20 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", 21 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", 22 | "dev": true 23 | } 24 | } 25 | }, 26 | "ajv": { 27 | "version": "5.3.0", 28 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", 29 | "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=", 30 | "dev": true 31 | }, 32 | "ajv-keywords": { 33 | "version": "2.1.1", 34 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", 35 | "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", 36 | "dev": true 37 | }, 38 | "ansi-escapes": { 39 | "version": "3.0.0", 40 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", 41 | "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", 42 | "dev": true 43 | }, 44 | "ansi-regex": { 45 | "version": "2.1.1", 46 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 47 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 48 | "dev": true 49 | }, 50 | "ansi-styles": { 51 | "version": "2.2.1", 52 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 53 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 54 | "dev": true 55 | }, 56 | "argparse": { 57 | "version": "1.0.9", 58 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", 59 | "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", 60 | "dev": true 61 | }, 62 | "array-union": { 63 | "version": "1.0.2", 64 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", 65 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", 66 | "dev": true 67 | }, 68 | "array-uniq": { 69 | "version": "1.0.3", 70 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", 71 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", 72 | "dev": true 73 | }, 74 | "arrify": { 75 | "version": "1.0.1", 76 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 77 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", 78 | "dev": true 79 | }, 80 | "asn1": { 81 | "version": "0.2.3", 82 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 83 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", 84 | "dev": true 85 | }, 86 | "assert-plus": { 87 | "version": "0.2.0", 88 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", 89 | "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", 90 | "dev": true 91 | }, 92 | "asynckit": { 93 | "version": "0.4.0", 94 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 95 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 96 | "dev": true 97 | }, 98 | "aws-sign2": { 99 | "version": "0.6.0", 100 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", 101 | "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", 102 | "dev": true 103 | }, 104 | "aws4": { 105 | "version": "1.6.0", 106 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", 107 | "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", 108 | "dev": true 109 | }, 110 | "babel-code-frame": { 111 | "version": "6.26.0", 112 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 113 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 114 | "dev": true 115 | }, 116 | "balanced-match": { 117 | "version": "1.0.0", 118 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 119 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 120 | "dev": true 121 | }, 122 | "bcrypt-pbkdf": { 123 | "version": "1.0.1", 124 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 125 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 126 | "dev": true, 127 | "optional": true 128 | }, 129 | "bluebird": { 130 | "version": "3.5.1", 131 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", 132 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", 133 | "dev": true 134 | }, 135 | "boom": { 136 | "version": "2.10.1", 137 | "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", 138 | "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", 139 | "dev": true 140 | }, 141 | "brace-expansion": { 142 | "version": "1.1.8", 143 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 144 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 145 | "dev": true 146 | }, 147 | "builtin-modules": { 148 | "version": "1.1.1", 149 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 150 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 151 | "dev": true 152 | }, 153 | "caller-path": { 154 | "version": "0.1.0", 155 | "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", 156 | "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", 157 | "dev": true 158 | }, 159 | "callsites": { 160 | "version": "0.2.0", 161 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", 162 | "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", 163 | "dev": true 164 | }, 165 | "caseless": { 166 | "version": "0.11.0", 167 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", 168 | "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", 169 | "dev": true 170 | }, 171 | "chalk": { 172 | "version": "1.1.3", 173 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 174 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 175 | "dev": true 176 | }, 177 | "circular-json": { 178 | "version": "0.3.3", 179 | "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", 180 | "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", 181 | "dev": true 182 | }, 183 | "clean-yaml-object": { 184 | "version": "0.1.0", 185 | "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", 186 | "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=", 187 | "dev": true 188 | }, 189 | "cli-cursor": { 190 | "version": "2.1.0", 191 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 192 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", 193 | "dev": true 194 | }, 195 | "cli-width": { 196 | "version": "2.2.0", 197 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 198 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", 199 | "dev": true 200 | }, 201 | "co": { 202 | "version": "4.6.0", 203 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 204 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 205 | "dev": true 206 | }, 207 | "color-convert": { 208 | "version": "1.9.1", 209 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", 210 | "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", 211 | "dev": true 212 | }, 213 | "color-name": { 214 | "version": "1.1.3", 215 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 216 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 217 | "dev": true 218 | }, 219 | "color-support": { 220 | "version": "1.1.3", 221 | "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", 222 | "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", 223 | "dev": true 224 | }, 225 | "combined-stream": { 226 | "version": "1.0.5", 227 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", 228 | "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", 229 | "dev": true 230 | }, 231 | "commander": { 232 | "version": "2.11.0", 233 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", 234 | "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", 235 | "dev": true 236 | }, 237 | "concat-map": { 238 | "version": "0.0.1", 239 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 240 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 241 | "dev": true 242 | }, 243 | "concat-stream": { 244 | "version": "1.6.0", 245 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", 246 | "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", 247 | "dev": true 248 | }, 249 | "contains-path": { 250 | "version": "0.1.0", 251 | "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", 252 | "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", 253 | "dev": true 254 | }, 255 | "core-util-is": { 256 | "version": "1.0.2", 257 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 258 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 259 | "dev": true 260 | }, 261 | "coveralls": { 262 | "version": "2.13.3", 263 | "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-2.13.3.tgz", 264 | "integrity": "sha512-iiAmn+l1XqRwNLXhW8Rs5qHZRFMYp9ZIPjEOVRpC/c4so6Y/f4/lFi0FfR5B9cCqgyhkJ5cZmbvcVRfP8MHchw==", 265 | "dev": true, 266 | "dependencies": { 267 | "js-yaml": { 268 | "version": "3.6.1", 269 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.6.1.tgz", 270 | "integrity": "sha1-bl/mfYsgXOTSL60Ft3geja3MSzA=", 271 | "dev": true 272 | } 273 | } 274 | }, 275 | "cross-spawn": { 276 | "version": "4.0.2", 277 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", 278 | "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", 279 | "dev": true 280 | }, 281 | "cryptiles": { 282 | "version": "2.0.5", 283 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", 284 | "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", 285 | "dev": true 286 | }, 287 | "dashdash": { 288 | "version": "1.14.1", 289 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 290 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 291 | "dev": true, 292 | "dependencies": { 293 | "assert-plus": { 294 | "version": "1.0.0", 295 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 296 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 297 | "dev": true 298 | } 299 | } 300 | }, 301 | "debug": { 302 | "version": "2.6.9", 303 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 304 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 305 | "dev": true 306 | }, 307 | "deep-is": { 308 | "version": "0.1.3", 309 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 310 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 311 | "dev": true 312 | }, 313 | "deeper": { 314 | "version": "2.1.0", 315 | "resolved": "https://registry.npmjs.org/deeper/-/deeper-2.1.0.tgz", 316 | "integrity": "sha1-vFZOX3MXT98gHgiwADDooU2nQ2g=", 317 | "dev": true 318 | }, 319 | "del": { 320 | "version": "2.2.2", 321 | "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", 322 | "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", 323 | "dev": true 324 | }, 325 | "delayed-stream": { 326 | "version": "1.0.0", 327 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 328 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 329 | "dev": true 330 | }, 331 | "diff": { 332 | "version": "1.4.0", 333 | "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", 334 | "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", 335 | "dev": true 336 | }, 337 | "doctrine": { 338 | "version": "2.0.0", 339 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", 340 | "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", 341 | "dev": true 342 | }, 343 | "ecc-jsbn": { 344 | "version": "0.1.1", 345 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 346 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 347 | "dev": true, 348 | "optional": true 349 | }, 350 | "error-ex": { 351 | "version": "1.3.1", 352 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", 353 | "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", 354 | "dev": true 355 | }, 356 | "escape-string-regexp": { 357 | "version": "1.0.5", 358 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 359 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 360 | "dev": true 361 | }, 362 | "eslint": { 363 | "version": "4.10.0", 364 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.10.0.tgz", 365 | "integrity": "sha512-MMVl8P/dYUFZEvolL8PYt7qc5LNdS2lwheq9BYa5Y07FblhcZqFyaUqlS8TW5QITGex21tV4Lk0a3fK8lsJIkA==", 366 | "dev": true, 367 | "dependencies": { 368 | "ansi-regex": { 369 | "version": "3.0.0", 370 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 371 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 372 | "dev": true 373 | }, 374 | "ansi-styles": { 375 | "version": "3.2.0", 376 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 377 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 378 | "dev": true 379 | }, 380 | "chalk": { 381 | "version": "2.3.0", 382 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", 383 | "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", 384 | "dev": true 385 | }, 386 | "cross-spawn": { 387 | "version": "5.1.0", 388 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 389 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 390 | "dev": true 391 | }, 392 | "debug": { 393 | "version": "3.1.0", 394 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 395 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 396 | "dev": true 397 | }, 398 | "lodash": { 399 | "version": "4.17.4", 400 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 401 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", 402 | "dev": true 403 | }, 404 | "strip-ansi": { 405 | "version": "4.0.0", 406 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 407 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 408 | "dev": true 409 | }, 410 | "strip-json-comments": { 411 | "version": "2.0.1", 412 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 413 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 414 | "dev": true 415 | }, 416 | "supports-color": { 417 | "version": "4.5.0", 418 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", 419 | "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", 420 | "dev": true 421 | } 422 | } 423 | }, 424 | "eslint-config-standard": { 425 | "version": "10.2.1", 426 | "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", 427 | "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=", 428 | "dev": true 429 | }, 430 | "eslint-import-resolver-node": { 431 | "version": "0.3.1", 432 | "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz", 433 | "integrity": "sha512-yUtXS15gIcij68NmXmP9Ni77AQuCN0itXbCc/jWd8C6/yKZaSNXicpC8cgvjnxVdmfsosIXrjpzFq7GcDryb6A==", 434 | "dev": true 435 | }, 436 | "eslint-module-utils": { 437 | "version": "2.1.1", 438 | "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz", 439 | "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", 440 | "dev": true 441 | }, 442 | "eslint-plugin-import": { 443 | "version": "2.8.0", 444 | "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz", 445 | "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==", 446 | "dev": true, 447 | "dependencies": { 448 | "doctrine": { 449 | "version": "1.5.0", 450 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", 451 | "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", 452 | "dev": true 453 | } 454 | } 455 | }, 456 | "eslint-plugin-node": { 457 | "version": "5.2.1", 458 | "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz", 459 | "integrity": "sha512-xhPXrh0Vl/b7870uEbaumb2Q+LxaEcOQ3kS1jtIXanBAwpMre1l5q/l2l/hESYJGEFKuI78bp6Uw50hlpr7B+g==", 460 | "dev": true, 461 | "dependencies": { 462 | "semver": { 463 | "version": "5.3.0", 464 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", 465 | "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", 466 | "dev": true 467 | } 468 | } 469 | }, 470 | "eslint-plugin-promise": { 471 | "version": "3.6.0", 472 | "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz", 473 | "integrity": "sha512-YQzM6TLTlApAr7Li8vWKR+K3WghjwKcYzY0d2roWap4SLK+kzuagJX/leTetIDWsFcTFnKNJXWupDCD6aZkP2Q==", 474 | "dev": true 475 | }, 476 | "eslint-plugin-standard": { 477 | "version": "3.0.1", 478 | "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", 479 | "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=", 480 | "dev": true 481 | }, 482 | "eslint-scope": { 483 | "version": "3.7.1", 484 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", 485 | "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", 486 | "dev": true 487 | }, 488 | "espree": { 489 | "version": "3.5.1", 490 | "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.1.tgz", 491 | "integrity": "sha1-DJiLirRttTEAoZVK5LqZXd0n2H4=", 492 | "dev": true 493 | }, 494 | "esprima": { 495 | "version": "2.7.3", 496 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", 497 | "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", 498 | "dev": true 499 | }, 500 | "esquery": { 501 | "version": "1.0.0", 502 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", 503 | "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", 504 | "dev": true 505 | }, 506 | "esrecurse": { 507 | "version": "4.2.0", 508 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", 509 | "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", 510 | "dev": true 511 | }, 512 | "estraverse": { 513 | "version": "4.2.0", 514 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", 515 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", 516 | "dev": true 517 | }, 518 | "esutils": { 519 | "version": "2.0.2", 520 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 521 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 522 | "dev": true 523 | }, 524 | "events-to-array": { 525 | "version": "1.1.2", 526 | "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", 527 | "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", 528 | "dev": true 529 | }, 530 | "extend": { 531 | "version": "3.0.1", 532 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 533 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", 534 | "dev": true 535 | }, 536 | "external-editor": { 537 | "version": "2.0.5", 538 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.5.tgz", 539 | "integrity": "sha512-Msjo64WT5W+NhOpQXh0nOHm+n0RfU1QUwDnKYvJ8dEJ8zlwLrqXNTv5mSUTJpepf41PDJGyhueTw2vNZW+Fr/w==", 540 | "dev": true 541 | }, 542 | "extsprintf": { 543 | "version": "1.3.0", 544 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 545 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 546 | "dev": true 547 | }, 548 | "fast-deep-equal": { 549 | "version": "1.0.0", 550 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", 551 | "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", 552 | "dev": true 553 | }, 554 | "fast-json-stable-stringify": { 555 | "version": "2.0.0", 556 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 557 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 558 | "dev": true 559 | }, 560 | "fast-levenshtein": { 561 | "version": "2.0.6", 562 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 563 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 564 | "dev": true 565 | }, 566 | "figures": { 567 | "version": "2.0.0", 568 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 569 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", 570 | "dev": true 571 | }, 572 | "file-entry-cache": { 573 | "version": "2.0.0", 574 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", 575 | "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", 576 | "dev": true 577 | }, 578 | "find-up": { 579 | "version": "1.1.2", 580 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", 581 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", 582 | "dev": true 583 | }, 584 | "flat-cache": { 585 | "version": "1.3.0", 586 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", 587 | "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", 588 | "dev": true 589 | }, 590 | "foreground-child": { 591 | "version": "1.5.6", 592 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", 593 | "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", 594 | "dev": true 595 | }, 596 | "forever-agent": { 597 | "version": "0.6.1", 598 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 599 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 600 | "dev": true 601 | }, 602 | "form-data": { 603 | "version": "2.1.4", 604 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", 605 | "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", 606 | "dev": true 607 | }, 608 | "fs.realpath": { 609 | "version": "1.0.0", 610 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 611 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 612 | "dev": true 613 | }, 614 | "function-bind": { 615 | "version": "1.1.1", 616 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 617 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 618 | "dev": true 619 | }, 620 | "functional-red-black-tree": { 621 | "version": "1.0.1", 622 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 623 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 624 | "dev": true 625 | }, 626 | "generate-function": { 627 | "version": "2.0.0", 628 | "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", 629 | "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", 630 | "dev": true 631 | }, 632 | "generate-object-property": { 633 | "version": "1.2.0", 634 | "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", 635 | "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", 636 | "dev": true 637 | }, 638 | "getpass": { 639 | "version": "0.1.7", 640 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 641 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 642 | "dev": true, 643 | "dependencies": { 644 | "assert-plus": { 645 | "version": "1.0.0", 646 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 647 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 648 | "dev": true 649 | } 650 | } 651 | }, 652 | "glob": { 653 | "version": "7.1.2", 654 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 655 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 656 | "dev": true 657 | }, 658 | "globals": { 659 | "version": "9.18.0", 660 | "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", 661 | "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", 662 | "dev": true 663 | }, 664 | "globby": { 665 | "version": "5.0.0", 666 | "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", 667 | "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", 668 | "dev": true 669 | }, 670 | "graceful-fs": { 671 | "version": "4.1.11", 672 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 673 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 674 | "dev": true 675 | }, 676 | "har-validator": { 677 | "version": "2.0.6", 678 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", 679 | "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", 680 | "dev": true 681 | }, 682 | "has": { 683 | "version": "1.0.1", 684 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", 685 | "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", 686 | "dev": true 687 | }, 688 | "has-ansi": { 689 | "version": "2.0.0", 690 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 691 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 692 | "dev": true 693 | }, 694 | "has-flag": { 695 | "version": "2.0.0", 696 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 697 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", 698 | "dev": true 699 | }, 700 | "hawk": { 701 | "version": "3.1.3", 702 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", 703 | "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", 704 | "dev": true 705 | }, 706 | "hoek": { 707 | "version": "2.16.3", 708 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", 709 | "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", 710 | "dev": true 711 | }, 712 | "hosted-git-info": { 713 | "version": "2.5.0", 714 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", 715 | "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", 716 | "dev": true 717 | }, 718 | "http-signature": { 719 | "version": "1.1.1", 720 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", 721 | "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", 722 | "dev": true 723 | }, 724 | "iconv-lite": { 725 | "version": "0.4.19", 726 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 727 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", 728 | "dev": true 729 | }, 730 | "ignore": { 731 | "version": "3.3.7", 732 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", 733 | "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", 734 | "dev": true 735 | }, 736 | "imurmurhash": { 737 | "version": "0.1.4", 738 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 739 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 740 | "dev": true 741 | }, 742 | "inflight": { 743 | "version": "1.0.6", 744 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 745 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 746 | "dev": true 747 | }, 748 | "inherits": { 749 | "version": "2.0.3", 750 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 751 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 752 | "dev": true 753 | }, 754 | "inquirer": { 755 | "version": "3.3.0", 756 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", 757 | "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", 758 | "dev": true, 759 | "dependencies": { 760 | "ansi-regex": { 761 | "version": "3.0.0", 762 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 763 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 764 | "dev": true 765 | }, 766 | "ansi-styles": { 767 | "version": "3.2.0", 768 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 769 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 770 | "dev": true 771 | }, 772 | "chalk": { 773 | "version": "2.3.0", 774 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", 775 | "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", 776 | "dev": true 777 | }, 778 | "lodash": { 779 | "version": "4.17.4", 780 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 781 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", 782 | "dev": true 783 | }, 784 | "strip-ansi": { 785 | "version": "4.0.0", 786 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 787 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 788 | "dev": true 789 | }, 790 | "supports-color": { 791 | "version": "4.5.0", 792 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", 793 | "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", 794 | "dev": true 795 | } 796 | } 797 | }, 798 | "is-arrayish": { 799 | "version": "0.2.1", 800 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 801 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 802 | "dev": true 803 | }, 804 | "is-builtin-module": { 805 | "version": "1.0.0", 806 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", 807 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", 808 | "dev": true 809 | }, 810 | "is-fullwidth-code-point": { 811 | "version": "2.0.0", 812 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 813 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 814 | "dev": true 815 | }, 816 | "is-my-json-valid": { 817 | "version": "2.16.1", 818 | "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", 819 | "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", 820 | "dev": true 821 | }, 822 | "is-path-cwd": { 823 | "version": "1.0.0", 824 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", 825 | "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", 826 | "dev": true 827 | }, 828 | "is-path-in-cwd": { 829 | "version": "1.0.0", 830 | "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", 831 | "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", 832 | "dev": true 833 | }, 834 | "is-path-inside": { 835 | "version": "1.0.0", 836 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", 837 | "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", 838 | "dev": true 839 | }, 840 | "is-promise": { 841 | "version": "2.1.0", 842 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 843 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 844 | "dev": true 845 | }, 846 | "is-property": { 847 | "version": "1.0.2", 848 | "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", 849 | "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", 850 | "dev": true 851 | }, 852 | "is-resolvable": { 853 | "version": "1.0.0", 854 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", 855 | "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", 856 | "dev": true 857 | }, 858 | "is-typedarray": { 859 | "version": "1.0.0", 860 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 861 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 862 | "dev": true 863 | }, 864 | "isarray": { 865 | "version": "1.0.0", 866 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 867 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 868 | "dev": true 869 | }, 870 | "isexe": { 871 | "version": "1.1.2", 872 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", 873 | "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=", 874 | "dev": true 875 | }, 876 | "isstream": { 877 | "version": "0.1.2", 878 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 879 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 880 | "dev": true 881 | }, 882 | "js-tokens": { 883 | "version": "3.0.2", 884 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 885 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 886 | "dev": true 887 | }, 888 | "js-yaml": { 889 | "version": "3.10.0", 890 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", 891 | "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", 892 | "dev": true, 893 | "dependencies": { 894 | "esprima": { 895 | "version": "4.0.0", 896 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", 897 | "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", 898 | "dev": true 899 | } 900 | } 901 | }, 902 | "jsbn": { 903 | "version": "0.1.1", 904 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 905 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 906 | "dev": true, 907 | "optional": true 908 | }, 909 | "jschardet": { 910 | "version": "1.6.0", 911 | "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.6.0.tgz", 912 | "integrity": "sha512-xYuhvQ7I9PDJIGBWev9xm0+SMSed3ZDBAmvVjbFR1ZRLAF+vlXcQu6cRI9uAlj81rzikElRVteehwV7DuX2ZmQ==", 913 | "dev": true 914 | }, 915 | "json-schema": { 916 | "version": "0.2.3", 917 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 918 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 919 | "dev": true 920 | }, 921 | "json-schema-traverse": { 922 | "version": "0.3.1", 923 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 924 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", 925 | "dev": true 926 | }, 927 | "json-stable-stringify": { 928 | "version": "1.0.1", 929 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 930 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", 931 | "dev": true 932 | }, 933 | "json-stringify-safe": { 934 | "version": "5.0.1", 935 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 936 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 937 | "dev": true 938 | }, 939 | "jsonify": { 940 | "version": "0.0.0", 941 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 942 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 943 | "dev": true 944 | }, 945 | "jsonpointer": { 946 | "version": "4.0.1", 947 | "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", 948 | "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", 949 | "dev": true 950 | }, 951 | "jsprim": { 952 | "version": "1.4.1", 953 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 954 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 955 | "dev": true, 956 | "dependencies": { 957 | "assert-plus": { 958 | "version": "1.0.0", 959 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 960 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 961 | "dev": true 962 | } 963 | } 964 | }, 965 | "lcov-parse": { 966 | "version": "0.0.10", 967 | "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz", 968 | "integrity": "sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=", 969 | "dev": true 970 | }, 971 | "levn": { 972 | "version": "0.3.0", 973 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 974 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 975 | "dev": true 976 | }, 977 | "load-json-file": { 978 | "version": "2.0.0", 979 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", 980 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", 981 | "dev": true 982 | }, 983 | "locate-path": { 984 | "version": "2.0.0", 985 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", 986 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", 987 | "dev": true, 988 | "dependencies": { 989 | "path-exists": { 990 | "version": "3.0.0", 991 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 992 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 993 | "dev": true 994 | } 995 | } 996 | }, 997 | "lodash": { 998 | "version": "3.10.1", 999 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", 1000 | "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" 1001 | }, 1002 | "lodash.cond": { 1003 | "version": "4.5.2", 1004 | "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", 1005 | "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", 1006 | "dev": true 1007 | }, 1008 | "log-driver": { 1009 | "version": "1.2.5", 1010 | "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.5.tgz", 1011 | "integrity": "sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY=", 1012 | "dev": true 1013 | }, 1014 | "lru-cache": { 1015 | "version": "4.1.1", 1016 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", 1017 | "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", 1018 | "dev": true 1019 | }, 1020 | "mime-db": { 1021 | "version": "1.30.0", 1022 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", 1023 | "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", 1024 | "dev": true 1025 | }, 1026 | "mime-types": { 1027 | "version": "2.1.17", 1028 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", 1029 | "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", 1030 | "dev": true 1031 | }, 1032 | "mimic-fn": { 1033 | "version": "1.1.0", 1034 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", 1035 | "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", 1036 | "dev": true 1037 | }, 1038 | "minimatch": { 1039 | "version": "3.0.4", 1040 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1041 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1042 | "dev": true 1043 | }, 1044 | "minimist": { 1045 | "version": "1.2.0", 1046 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1047 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 1048 | "dev": true 1049 | }, 1050 | "mkdirp": { 1051 | "version": "0.5.1", 1052 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1053 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1054 | "dev": true, 1055 | "dependencies": { 1056 | "minimist": { 1057 | "version": "0.0.8", 1058 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1059 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 1060 | "dev": true 1061 | } 1062 | } 1063 | }, 1064 | "ms": { 1065 | "version": "2.0.0", 1066 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1067 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1068 | "dev": true 1069 | }, 1070 | "mute-stream": { 1071 | "version": "0.0.7", 1072 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 1073 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", 1074 | "dev": true 1075 | }, 1076 | "natural-compare": { 1077 | "version": "1.4.0", 1078 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1079 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1080 | "dev": true 1081 | }, 1082 | "nodeunit": { 1083 | "version": "0.9.5", 1084 | "resolved": "https://registry.npmjs.org/nodeunit/-/nodeunit-0.9.5.tgz", 1085 | "integrity": "sha1-C2MjaAB9lGUczwoYmZgHmC8HOGY=", 1086 | "dev": true 1087 | }, 1088 | "normalize-package-data": { 1089 | "version": "2.4.0", 1090 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", 1091 | "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", 1092 | "dev": true 1093 | }, 1094 | "nyc": { 1095 | "version": "7.1.0", 1096 | "resolved": "https://registry.npmjs.org/nyc/-/nyc-7.1.0.tgz", 1097 | "integrity": "sha1-jhSXHzoV0au+x6xhDvVMuInp/7Q=", 1098 | "dev": true, 1099 | "dependencies": { 1100 | "align-text": { 1101 | "version": "0.1.4", 1102 | "bundled": true, 1103 | "dev": true 1104 | }, 1105 | "amdefine": { 1106 | "version": "1.0.0", 1107 | "bundled": true, 1108 | "dev": true 1109 | }, 1110 | "ansi-regex": { 1111 | "version": "2.0.0", 1112 | "bundled": true, 1113 | "dev": true 1114 | }, 1115 | "ansi-styles": { 1116 | "version": "2.2.1", 1117 | "bundled": true, 1118 | "dev": true 1119 | }, 1120 | "append-transform": { 1121 | "version": "0.3.0", 1122 | "bundled": true, 1123 | "dev": true 1124 | }, 1125 | "arr-diff": { 1126 | "version": "2.0.0", 1127 | "bundled": true, 1128 | "dev": true 1129 | }, 1130 | "arr-flatten": { 1131 | "version": "1.0.1", 1132 | "bundled": true, 1133 | "dev": true 1134 | }, 1135 | "array-unique": { 1136 | "version": "0.2.1", 1137 | "bundled": true, 1138 | "dev": true 1139 | }, 1140 | "arrify": { 1141 | "version": "1.0.1", 1142 | "bundled": true, 1143 | "dev": true 1144 | }, 1145 | "async": { 1146 | "version": "1.5.2", 1147 | "bundled": true, 1148 | "dev": true 1149 | }, 1150 | "babel-code-frame": { 1151 | "version": "6.11.0", 1152 | "bundled": true, 1153 | "dev": true 1154 | }, 1155 | "babel-generator": { 1156 | "version": "6.11.4", 1157 | "bundled": true, 1158 | "dev": true 1159 | }, 1160 | "babel-messages": { 1161 | "version": "6.8.0", 1162 | "bundled": true, 1163 | "dev": true 1164 | }, 1165 | "babel-runtime": { 1166 | "version": "6.9.2", 1167 | "bundled": true, 1168 | "dev": true 1169 | }, 1170 | "babel-template": { 1171 | "version": "6.9.0", 1172 | "bundled": true, 1173 | "dev": true 1174 | }, 1175 | "babel-traverse": { 1176 | "version": "6.11.4", 1177 | "bundled": true, 1178 | "dev": true 1179 | }, 1180 | "babel-types": { 1181 | "version": "6.11.1", 1182 | "bundled": true, 1183 | "dev": true 1184 | }, 1185 | "babylon": { 1186 | "version": "6.8.4", 1187 | "bundled": true, 1188 | "dev": true 1189 | }, 1190 | "balanced-match": { 1191 | "version": "0.4.2", 1192 | "bundled": true, 1193 | "dev": true 1194 | }, 1195 | "brace-expansion": { 1196 | "version": "1.1.6", 1197 | "bundled": true, 1198 | "dev": true 1199 | }, 1200 | "braces": { 1201 | "version": "1.8.5", 1202 | "bundled": true, 1203 | "dev": true 1204 | }, 1205 | "builtin-modules": { 1206 | "version": "1.1.1", 1207 | "bundled": true, 1208 | "dev": true 1209 | }, 1210 | "caching-transform": { 1211 | "version": "1.0.1", 1212 | "bundled": true, 1213 | "dev": true 1214 | }, 1215 | "camelcase": { 1216 | "version": "1.2.1", 1217 | "bundled": true, 1218 | "dev": true, 1219 | "optional": true 1220 | }, 1221 | "center-align": { 1222 | "version": "0.1.3", 1223 | "bundled": true, 1224 | "dev": true, 1225 | "optional": true 1226 | }, 1227 | "chalk": { 1228 | "version": "1.1.3", 1229 | "bundled": true, 1230 | "dev": true 1231 | }, 1232 | "cliui": { 1233 | "version": "2.1.0", 1234 | "bundled": true, 1235 | "dev": true, 1236 | "optional": true, 1237 | "dependencies": { 1238 | "wordwrap": { 1239 | "version": "0.0.2", 1240 | "bundled": true, 1241 | "dev": true, 1242 | "optional": true 1243 | } 1244 | } 1245 | }, 1246 | "code-point-at": { 1247 | "version": "1.0.0", 1248 | "bundled": true, 1249 | "dev": true 1250 | }, 1251 | "commondir": { 1252 | "version": "1.0.1", 1253 | "bundled": true, 1254 | "dev": true 1255 | }, 1256 | "concat-map": { 1257 | "version": "0.0.1", 1258 | "bundled": true, 1259 | "dev": true 1260 | }, 1261 | "convert-source-map": { 1262 | "version": "1.3.0", 1263 | "bundled": true, 1264 | "dev": true 1265 | }, 1266 | "core-js": { 1267 | "version": "2.4.1", 1268 | "bundled": true, 1269 | "dev": true 1270 | }, 1271 | "cross-spawn": { 1272 | "version": "4.0.0", 1273 | "bundled": true, 1274 | "dev": true 1275 | }, 1276 | "debug": { 1277 | "version": "2.2.0", 1278 | "bundled": true, 1279 | "dev": true 1280 | }, 1281 | "decamelize": { 1282 | "version": "1.2.0", 1283 | "bundled": true, 1284 | "dev": true 1285 | }, 1286 | "default-require-extensions": { 1287 | "version": "1.0.0", 1288 | "bundled": true, 1289 | "dev": true 1290 | }, 1291 | "detect-indent": { 1292 | "version": "3.0.1", 1293 | "bundled": true, 1294 | "dev": true, 1295 | "dependencies": { 1296 | "minimist": { 1297 | "version": "1.2.0", 1298 | "bundled": true, 1299 | "dev": true 1300 | } 1301 | } 1302 | }, 1303 | "error-ex": { 1304 | "version": "1.3.0", 1305 | "bundled": true, 1306 | "dev": true 1307 | }, 1308 | "escape-string-regexp": { 1309 | "version": "1.0.5", 1310 | "bundled": true, 1311 | "dev": true 1312 | }, 1313 | "esutils": { 1314 | "version": "2.0.2", 1315 | "bundled": true, 1316 | "dev": true 1317 | }, 1318 | "expand-brackets": { 1319 | "version": "0.1.5", 1320 | "bundled": true, 1321 | "dev": true 1322 | }, 1323 | "expand-range": { 1324 | "version": "1.8.2", 1325 | "bundled": true, 1326 | "dev": true 1327 | }, 1328 | "extglob": { 1329 | "version": "0.3.2", 1330 | "bundled": true, 1331 | "dev": true 1332 | }, 1333 | "filename-regex": { 1334 | "version": "2.0.0", 1335 | "bundled": true, 1336 | "dev": true 1337 | }, 1338 | "fill-range": { 1339 | "version": "2.2.3", 1340 | "bundled": true, 1341 | "dev": true 1342 | }, 1343 | "find-cache-dir": { 1344 | "version": "0.1.1", 1345 | "bundled": true, 1346 | "dev": true 1347 | }, 1348 | "find-up": { 1349 | "version": "1.1.2", 1350 | "bundled": true, 1351 | "dev": true 1352 | }, 1353 | "for-in": { 1354 | "version": "0.1.5", 1355 | "bundled": true, 1356 | "dev": true 1357 | }, 1358 | "for-own": { 1359 | "version": "0.1.4", 1360 | "bundled": true, 1361 | "dev": true 1362 | }, 1363 | "foreground-child": { 1364 | "version": "1.5.3", 1365 | "bundled": true, 1366 | "dev": true 1367 | }, 1368 | "fs.realpath": { 1369 | "version": "1.0.0", 1370 | "bundled": true, 1371 | "dev": true 1372 | }, 1373 | "get-caller-file": { 1374 | "version": "1.0.1", 1375 | "bundled": true, 1376 | "dev": true 1377 | }, 1378 | "get-stdin": { 1379 | "version": "4.0.1", 1380 | "bundled": true, 1381 | "dev": true 1382 | }, 1383 | "glob": { 1384 | "version": "7.0.5", 1385 | "bundled": true, 1386 | "dev": true 1387 | }, 1388 | "glob-base": { 1389 | "version": "0.3.0", 1390 | "bundled": true, 1391 | "dev": true 1392 | }, 1393 | "glob-parent": { 1394 | "version": "2.0.0", 1395 | "bundled": true, 1396 | "dev": true 1397 | }, 1398 | "globals": { 1399 | "version": "8.18.0", 1400 | "bundled": true, 1401 | "dev": true 1402 | }, 1403 | "graceful-fs": { 1404 | "version": "4.1.4", 1405 | "bundled": true, 1406 | "dev": true 1407 | }, 1408 | "handlebars": { 1409 | "version": "4.0.5", 1410 | "bundled": true, 1411 | "dev": true, 1412 | "dependencies": { 1413 | "source-map": { 1414 | "version": "0.4.4", 1415 | "bundled": true, 1416 | "dev": true 1417 | } 1418 | } 1419 | }, 1420 | "has-ansi": { 1421 | "version": "2.0.0", 1422 | "bundled": true, 1423 | "dev": true 1424 | }, 1425 | "has-flag": { 1426 | "version": "1.0.0", 1427 | "bundled": true, 1428 | "dev": true 1429 | }, 1430 | "hosted-git-info": { 1431 | "version": "2.1.5", 1432 | "bundled": true, 1433 | "dev": true 1434 | }, 1435 | "imurmurhash": { 1436 | "version": "0.1.4", 1437 | "bundled": true, 1438 | "dev": true 1439 | }, 1440 | "inflight": { 1441 | "version": "1.0.5", 1442 | "bundled": true, 1443 | "dev": true 1444 | }, 1445 | "inherits": { 1446 | "version": "2.0.1", 1447 | "bundled": true, 1448 | "dev": true 1449 | }, 1450 | "invariant": { 1451 | "version": "2.2.1", 1452 | "bundled": true, 1453 | "dev": true 1454 | }, 1455 | "invert-kv": { 1456 | "version": "1.0.0", 1457 | "bundled": true, 1458 | "dev": true 1459 | }, 1460 | "is-arrayish": { 1461 | "version": "0.2.1", 1462 | "bundled": true, 1463 | "dev": true 1464 | }, 1465 | "is-buffer": { 1466 | "version": "1.1.3", 1467 | "bundled": true, 1468 | "dev": true 1469 | }, 1470 | "is-builtin-module": { 1471 | "version": "1.0.0", 1472 | "bundled": true, 1473 | "dev": true 1474 | }, 1475 | "is-dotfile": { 1476 | "version": "1.0.2", 1477 | "bundled": true, 1478 | "dev": true 1479 | }, 1480 | "is-equal-shallow": { 1481 | "version": "0.1.3", 1482 | "bundled": true, 1483 | "dev": true 1484 | }, 1485 | "is-extendable": { 1486 | "version": "0.1.1", 1487 | "bundled": true, 1488 | "dev": true 1489 | }, 1490 | "is-extglob": { 1491 | "version": "1.0.0", 1492 | "bundled": true, 1493 | "dev": true 1494 | }, 1495 | "is-finite": { 1496 | "version": "1.0.1", 1497 | "bundled": true, 1498 | "dev": true 1499 | }, 1500 | "is-fullwidth-code-point": { 1501 | "version": "1.0.0", 1502 | "bundled": true, 1503 | "dev": true 1504 | }, 1505 | "is-glob": { 1506 | "version": "2.0.1", 1507 | "bundled": true, 1508 | "dev": true 1509 | }, 1510 | "is-number": { 1511 | "version": "2.1.0", 1512 | "bundled": true, 1513 | "dev": true 1514 | }, 1515 | "is-posix-bracket": { 1516 | "version": "0.1.1", 1517 | "bundled": true, 1518 | "dev": true 1519 | }, 1520 | "is-primitive": { 1521 | "version": "2.0.0", 1522 | "bundled": true, 1523 | "dev": true 1524 | }, 1525 | "is-utf8": { 1526 | "version": "0.2.1", 1527 | "bundled": true, 1528 | "dev": true 1529 | }, 1530 | "isarray": { 1531 | "version": "1.0.0", 1532 | "bundled": true, 1533 | "dev": true 1534 | }, 1535 | "isexe": { 1536 | "version": "1.1.2", 1537 | "bundled": true, 1538 | "dev": true 1539 | }, 1540 | "isobject": { 1541 | "version": "2.1.0", 1542 | "bundled": true, 1543 | "dev": true 1544 | }, 1545 | "istanbul-lib-coverage": { 1546 | "version": "1.0.0-alpha.4", 1547 | "bundled": true, 1548 | "dev": true 1549 | }, 1550 | "istanbul-lib-hook": { 1551 | "version": "1.0.0-alpha.4", 1552 | "bundled": true, 1553 | "dev": true 1554 | }, 1555 | "istanbul-lib-instrument": { 1556 | "version": "1.1.0-alpha.4", 1557 | "bundled": true, 1558 | "dev": true 1559 | }, 1560 | "istanbul-lib-report": { 1561 | "version": "1.0.0-alpha.3", 1562 | "bundled": true, 1563 | "dev": true, 1564 | "dependencies": { 1565 | "supports-color": { 1566 | "version": "3.1.2", 1567 | "bundled": true, 1568 | "dev": true 1569 | } 1570 | } 1571 | }, 1572 | "istanbul-lib-source-maps": { 1573 | "version": "1.0.0-alpha.10", 1574 | "bundled": true, 1575 | "dev": true 1576 | }, 1577 | "istanbul-reports": { 1578 | "version": "1.0.0-alpha.8", 1579 | "bundled": true, 1580 | "dev": true 1581 | }, 1582 | "js-tokens": { 1583 | "version": "2.0.0", 1584 | "bundled": true, 1585 | "dev": true 1586 | }, 1587 | "kind-of": { 1588 | "version": "3.0.3", 1589 | "bundled": true, 1590 | "dev": true 1591 | }, 1592 | "lazy-cache": { 1593 | "version": "1.0.4", 1594 | "bundled": true, 1595 | "dev": true, 1596 | "optional": true 1597 | }, 1598 | "lcid": { 1599 | "version": "1.0.0", 1600 | "bundled": true, 1601 | "dev": true 1602 | }, 1603 | "load-json-file": { 1604 | "version": "1.1.0", 1605 | "bundled": true, 1606 | "dev": true 1607 | }, 1608 | "lodash": { 1609 | "version": "4.13.1", 1610 | "bundled": true, 1611 | "dev": true 1612 | }, 1613 | "lodash.assign": { 1614 | "version": "4.0.9", 1615 | "bundled": true, 1616 | "dev": true 1617 | }, 1618 | "lodash.keys": { 1619 | "version": "4.0.7", 1620 | "bundled": true, 1621 | "dev": true 1622 | }, 1623 | "lodash.rest": { 1624 | "version": "4.0.3", 1625 | "bundled": true, 1626 | "dev": true 1627 | }, 1628 | "longest": { 1629 | "version": "1.0.1", 1630 | "bundled": true, 1631 | "dev": true 1632 | }, 1633 | "loose-envify": { 1634 | "version": "1.2.0", 1635 | "bundled": true, 1636 | "dev": true, 1637 | "dependencies": { 1638 | "js-tokens": { 1639 | "version": "1.0.3", 1640 | "bundled": true, 1641 | "dev": true 1642 | } 1643 | } 1644 | }, 1645 | "lru-cache": { 1646 | "version": "4.0.1", 1647 | "bundled": true, 1648 | "dev": true 1649 | }, 1650 | "md5-hex": { 1651 | "version": "1.3.0", 1652 | "bundled": true, 1653 | "dev": true 1654 | }, 1655 | "md5-o-matic": { 1656 | "version": "0.1.1", 1657 | "bundled": true, 1658 | "dev": true 1659 | }, 1660 | "micromatch": { 1661 | "version": "2.3.11", 1662 | "bundled": true, 1663 | "dev": true 1664 | }, 1665 | "minimatch": { 1666 | "version": "3.0.2", 1667 | "bundled": true, 1668 | "dev": true 1669 | }, 1670 | "minimist": { 1671 | "version": "0.0.8", 1672 | "bundled": true, 1673 | "dev": true 1674 | }, 1675 | "mkdirp": { 1676 | "version": "0.5.1", 1677 | "bundled": true, 1678 | "dev": true 1679 | }, 1680 | "ms": { 1681 | "version": "0.7.1", 1682 | "bundled": true, 1683 | "dev": true 1684 | }, 1685 | "normalize-package-data": { 1686 | "version": "2.3.5", 1687 | "bundled": true, 1688 | "dev": true 1689 | }, 1690 | "normalize-path": { 1691 | "version": "2.0.1", 1692 | "bundled": true, 1693 | "dev": true 1694 | }, 1695 | "number-is-nan": { 1696 | "version": "1.0.0", 1697 | "bundled": true, 1698 | "dev": true 1699 | }, 1700 | "object.omit": { 1701 | "version": "2.0.0", 1702 | "bundled": true, 1703 | "dev": true 1704 | }, 1705 | "once": { 1706 | "version": "1.3.3", 1707 | "bundled": true, 1708 | "dev": true 1709 | }, 1710 | "optimist": { 1711 | "version": "0.6.1", 1712 | "bundled": true, 1713 | "dev": true 1714 | }, 1715 | "os-homedir": { 1716 | "version": "1.0.1", 1717 | "bundled": true, 1718 | "dev": true 1719 | }, 1720 | "os-locale": { 1721 | "version": "1.4.0", 1722 | "bundled": true, 1723 | "dev": true 1724 | }, 1725 | "parse-glob": { 1726 | "version": "3.0.4", 1727 | "bundled": true, 1728 | "dev": true 1729 | }, 1730 | "parse-json": { 1731 | "version": "2.2.0", 1732 | "bundled": true, 1733 | "dev": true 1734 | }, 1735 | "path-exists": { 1736 | "version": "2.1.0", 1737 | "bundled": true, 1738 | "dev": true 1739 | }, 1740 | "path-is-absolute": { 1741 | "version": "1.0.0", 1742 | "bundled": true, 1743 | "dev": true 1744 | }, 1745 | "path-parse": { 1746 | "version": "1.0.5", 1747 | "bundled": true, 1748 | "dev": true 1749 | }, 1750 | "path-type": { 1751 | "version": "1.1.0", 1752 | "bundled": true, 1753 | "dev": true 1754 | }, 1755 | "pify": { 1756 | "version": "2.3.0", 1757 | "bundled": true, 1758 | "dev": true 1759 | }, 1760 | "pinkie": { 1761 | "version": "2.0.4", 1762 | "bundled": true, 1763 | "dev": true 1764 | }, 1765 | "pinkie-promise": { 1766 | "version": "2.0.1", 1767 | "bundled": true, 1768 | "dev": true 1769 | }, 1770 | "pkg-dir": { 1771 | "version": "1.0.0", 1772 | "bundled": true, 1773 | "dev": true 1774 | }, 1775 | "pkg-up": { 1776 | "version": "1.0.0", 1777 | "bundled": true, 1778 | "dev": true 1779 | }, 1780 | "preserve": { 1781 | "version": "0.2.0", 1782 | "bundled": true, 1783 | "dev": true 1784 | }, 1785 | "pseudomap": { 1786 | "version": "1.0.2", 1787 | "bundled": true, 1788 | "dev": true 1789 | }, 1790 | "randomatic": { 1791 | "version": "1.1.5", 1792 | "bundled": true, 1793 | "dev": true 1794 | }, 1795 | "read-pkg": { 1796 | "version": "1.1.0", 1797 | "bundled": true, 1798 | "dev": true 1799 | }, 1800 | "read-pkg-up": { 1801 | "version": "1.0.1", 1802 | "bundled": true, 1803 | "dev": true 1804 | }, 1805 | "regenerator-runtime": { 1806 | "version": "0.9.5", 1807 | "bundled": true, 1808 | "dev": true 1809 | }, 1810 | "regex-cache": { 1811 | "version": "0.4.3", 1812 | "bundled": true, 1813 | "dev": true 1814 | }, 1815 | "repeat-element": { 1816 | "version": "1.1.2", 1817 | "bundled": true, 1818 | "dev": true 1819 | }, 1820 | "repeat-string": { 1821 | "version": "1.5.4", 1822 | "bundled": true, 1823 | "dev": true 1824 | }, 1825 | "repeating": { 1826 | "version": "1.1.3", 1827 | "bundled": true, 1828 | "dev": true 1829 | }, 1830 | "require-directory": { 1831 | "version": "2.1.1", 1832 | "bundled": true, 1833 | "dev": true 1834 | }, 1835 | "require-main-filename": { 1836 | "version": "1.0.1", 1837 | "bundled": true, 1838 | "dev": true 1839 | }, 1840 | "resolve-from": { 1841 | "version": "2.0.0", 1842 | "bundled": true, 1843 | "dev": true 1844 | }, 1845 | "right-align": { 1846 | "version": "0.1.3", 1847 | "bundled": true, 1848 | "dev": true, 1849 | "optional": true 1850 | }, 1851 | "rimraf": { 1852 | "version": "2.5.4", 1853 | "bundled": true, 1854 | "dev": true 1855 | }, 1856 | "semver": { 1857 | "version": "5.3.0", 1858 | "bundled": true, 1859 | "dev": true 1860 | }, 1861 | "set-blocking": { 1862 | "version": "2.0.0", 1863 | "bundled": true, 1864 | "dev": true 1865 | }, 1866 | "signal-exit": { 1867 | "version": "3.0.0", 1868 | "bundled": true, 1869 | "dev": true 1870 | }, 1871 | "slide": { 1872 | "version": "1.1.6", 1873 | "bundled": true, 1874 | "dev": true 1875 | }, 1876 | "source-map": { 1877 | "version": "0.5.6", 1878 | "bundled": true, 1879 | "dev": true 1880 | }, 1881 | "spawn-wrap": { 1882 | "version": "1.2.4", 1883 | "bundled": true, 1884 | "dev": true, 1885 | "dependencies": { 1886 | "signal-exit": { 1887 | "version": "2.1.2", 1888 | "bundled": true, 1889 | "dev": true 1890 | } 1891 | } 1892 | }, 1893 | "spdx-correct": { 1894 | "version": "1.0.2", 1895 | "bundled": true, 1896 | "dev": true 1897 | }, 1898 | "spdx-exceptions": { 1899 | "version": "1.0.5", 1900 | "bundled": true, 1901 | "dev": true 1902 | }, 1903 | "spdx-expression-parse": { 1904 | "version": "1.0.2", 1905 | "bundled": true, 1906 | "dev": true 1907 | }, 1908 | "spdx-license-ids": { 1909 | "version": "1.2.1", 1910 | "bundled": true, 1911 | "dev": true 1912 | }, 1913 | "string-width": { 1914 | "version": "1.0.1", 1915 | "bundled": true, 1916 | "dev": true 1917 | }, 1918 | "strip-ansi": { 1919 | "version": "3.0.1", 1920 | "bundled": true, 1921 | "dev": true 1922 | }, 1923 | "strip-bom": { 1924 | "version": "2.0.0", 1925 | "bundled": true, 1926 | "dev": true 1927 | }, 1928 | "supports-color": { 1929 | "version": "2.0.0", 1930 | "bundled": true, 1931 | "dev": true 1932 | }, 1933 | "test-exclude": { 1934 | "version": "1.1.0", 1935 | "bundled": true, 1936 | "dev": true 1937 | }, 1938 | "to-fast-properties": { 1939 | "version": "1.0.2", 1940 | "bundled": true, 1941 | "dev": true 1942 | }, 1943 | "uglify-js": { 1944 | "version": "2.7.0", 1945 | "bundled": true, 1946 | "dev": true, 1947 | "optional": true, 1948 | "dependencies": { 1949 | "async": { 1950 | "version": "0.2.10", 1951 | "bundled": true, 1952 | "dev": true, 1953 | "optional": true 1954 | }, 1955 | "yargs": { 1956 | "version": "3.10.0", 1957 | "bundled": true, 1958 | "dev": true, 1959 | "optional": true 1960 | } 1961 | } 1962 | }, 1963 | "uglify-to-browserify": { 1964 | "version": "1.0.2", 1965 | "bundled": true, 1966 | "dev": true, 1967 | "optional": true 1968 | }, 1969 | "validate-npm-package-license": { 1970 | "version": "3.0.1", 1971 | "bundled": true, 1972 | "dev": true 1973 | }, 1974 | "which": { 1975 | "version": "1.2.10", 1976 | "bundled": true, 1977 | "dev": true 1978 | }, 1979 | "which-module": { 1980 | "version": "1.0.0", 1981 | "bundled": true, 1982 | "dev": true 1983 | }, 1984 | "window-size": { 1985 | "version": "0.1.0", 1986 | "bundled": true, 1987 | "dev": true, 1988 | "optional": true 1989 | }, 1990 | "wordwrap": { 1991 | "version": "0.0.3", 1992 | "bundled": true, 1993 | "dev": true 1994 | }, 1995 | "wrap-ansi": { 1996 | "version": "2.0.0", 1997 | "bundled": true, 1998 | "dev": true 1999 | }, 2000 | "wrappy": { 2001 | "version": "1.0.2", 2002 | "bundled": true, 2003 | "dev": true 2004 | }, 2005 | "write-file-atomic": { 2006 | "version": "1.1.4", 2007 | "bundled": true, 2008 | "dev": true 2009 | }, 2010 | "y18n": { 2011 | "version": "3.2.1", 2012 | "bundled": true, 2013 | "dev": true 2014 | }, 2015 | "yallist": { 2016 | "version": "2.0.0", 2017 | "bundled": true, 2018 | "dev": true 2019 | }, 2020 | "yargs": { 2021 | "version": "4.8.1", 2022 | "bundled": true, 2023 | "dev": true, 2024 | "dependencies": { 2025 | "cliui": { 2026 | "version": "3.2.0", 2027 | "bundled": true, 2028 | "dev": true 2029 | }, 2030 | "window-size": { 2031 | "version": "0.2.0", 2032 | "bundled": true, 2033 | "dev": true 2034 | } 2035 | } 2036 | }, 2037 | "yargs-parser": { 2038 | "version": "2.4.1", 2039 | "bundled": true, 2040 | "dev": true, 2041 | "dependencies": { 2042 | "camelcase": { 2043 | "version": "3.0.0", 2044 | "bundled": true, 2045 | "dev": true 2046 | } 2047 | } 2048 | } 2049 | } 2050 | }, 2051 | "oauth-sign": { 2052 | "version": "0.8.2", 2053 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 2054 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", 2055 | "dev": true 2056 | }, 2057 | "object-assign": { 2058 | "version": "4.1.1", 2059 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2060 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 2061 | "dev": true 2062 | }, 2063 | "once": { 2064 | "version": "1.4.0", 2065 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2066 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2067 | "dev": true 2068 | }, 2069 | "onetime": { 2070 | "version": "2.0.1", 2071 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 2072 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", 2073 | "dev": true 2074 | }, 2075 | "only-shallow": { 2076 | "version": "1.2.0", 2077 | "resolved": "https://registry.npmjs.org/only-shallow/-/only-shallow-1.2.0.tgz", 2078 | "integrity": "sha1-cc7O26kyS8BRiu8Q7AgNMkncJGU=", 2079 | "dev": true 2080 | }, 2081 | "opener": { 2082 | "version": "1.4.3", 2083 | "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", 2084 | "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", 2085 | "dev": true 2086 | }, 2087 | "optionator": { 2088 | "version": "0.8.2", 2089 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 2090 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 2091 | "dev": true 2092 | }, 2093 | "os-homedir": { 2094 | "version": "1.0.1", 2095 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.1.tgz", 2096 | "integrity": "sha1-DWK99EuRb9O73PLKsZGUj7CU8Ac=", 2097 | "dev": true 2098 | }, 2099 | "os-tmpdir": { 2100 | "version": "1.0.2", 2101 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 2102 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 2103 | "dev": true 2104 | }, 2105 | "p-limit": { 2106 | "version": "1.1.0", 2107 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", 2108 | "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", 2109 | "dev": true 2110 | }, 2111 | "p-locate": { 2112 | "version": "2.0.0", 2113 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", 2114 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", 2115 | "dev": true 2116 | }, 2117 | "parse-json": { 2118 | "version": "2.2.0", 2119 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 2120 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 2121 | "dev": true 2122 | }, 2123 | "path-exists": { 2124 | "version": "2.1.0", 2125 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", 2126 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", 2127 | "dev": true 2128 | }, 2129 | "path-is-absolute": { 2130 | "version": "1.0.1", 2131 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2132 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2133 | "dev": true 2134 | }, 2135 | "path-is-inside": { 2136 | "version": "1.0.2", 2137 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 2138 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 2139 | "dev": true 2140 | }, 2141 | "path-parse": { 2142 | "version": "1.0.5", 2143 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", 2144 | "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", 2145 | "dev": true 2146 | }, 2147 | "path-type": { 2148 | "version": "2.0.0", 2149 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", 2150 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", 2151 | "dev": true 2152 | }, 2153 | "pify": { 2154 | "version": "2.3.0", 2155 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 2156 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 2157 | "dev": true 2158 | }, 2159 | "pinkie": { 2160 | "version": "2.0.4", 2161 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 2162 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 2163 | "dev": true 2164 | }, 2165 | "pinkie-promise": { 2166 | "version": "2.0.1", 2167 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 2168 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 2169 | "dev": true 2170 | }, 2171 | "pkg-dir": { 2172 | "version": "1.0.0", 2173 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", 2174 | "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", 2175 | "dev": true 2176 | }, 2177 | "pluralize": { 2178 | "version": "7.0.0", 2179 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", 2180 | "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", 2181 | "dev": true 2182 | }, 2183 | "prelude-ls": { 2184 | "version": "1.1.2", 2185 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 2186 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 2187 | "dev": true 2188 | }, 2189 | "process-nextick-args": { 2190 | "version": "1.0.7", 2191 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 2192 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", 2193 | "dev": true 2194 | }, 2195 | "progress": { 2196 | "version": "2.0.0", 2197 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", 2198 | "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", 2199 | "dev": true 2200 | }, 2201 | "pseudomap": { 2202 | "version": "1.0.2", 2203 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 2204 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 2205 | "dev": true 2206 | }, 2207 | "punycode": { 2208 | "version": "1.4.1", 2209 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2210 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 2211 | "dev": true 2212 | }, 2213 | "qs": { 2214 | "version": "6.3.2", 2215 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", 2216 | "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", 2217 | "dev": true 2218 | }, 2219 | "read-pkg": { 2220 | "version": "2.0.0", 2221 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", 2222 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", 2223 | "dev": true 2224 | }, 2225 | "read-pkg-up": { 2226 | "version": "2.0.0", 2227 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", 2228 | "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", 2229 | "dev": true, 2230 | "dependencies": { 2231 | "find-up": { 2232 | "version": "2.1.0", 2233 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", 2234 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", 2235 | "dev": true 2236 | } 2237 | } 2238 | }, 2239 | "readable-stream": { 2240 | "version": "2.3.3", 2241 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 2242 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 2243 | "dev": true 2244 | }, 2245 | "request": { 2246 | "version": "2.79.0", 2247 | "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", 2248 | "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", 2249 | "dev": true 2250 | }, 2251 | "require-uncached": { 2252 | "version": "1.0.3", 2253 | "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", 2254 | "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", 2255 | "dev": true 2256 | }, 2257 | "resolve": { 2258 | "version": "1.5.0", 2259 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", 2260 | "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", 2261 | "dev": true 2262 | }, 2263 | "resolve-from": { 2264 | "version": "1.0.1", 2265 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", 2266 | "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", 2267 | "dev": true 2268 | }, 2269 | "restore-cursor": { 2270 | "version": "2.0.0", 2271 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 2272 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", 2273 | "dev": true 2274 | }, 2275 | "rimraf": { 2276 | "version": "2.6.2", 2277 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 2278 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 2279 | "dev": true 2280 | }, 2281 | "run-async": { 2282 | "version": "2.3.0", 2283 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", 2284 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", 2285 | "dev": true 2286 | }, 2287 | "rx-lite": { 2288 | "version": "4.0.8", 2289 | "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", 2290 | "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", 2291 | "dev": true 2292 | }, 2293 | "rx-lite-aggregates": { 2294 | "version": "4.0.8", 2295 | "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", 2296 | "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", 2297 | "dev": true 2298 | }, 2299 | "safe-buffer": { 2300 | "version": "5.1.1", 2301 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 2302 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", 2303 | "dev": true 2304 | }, 2305 | "semver": { 2306 | "version": "5.4.1", 2307 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", 2308 | "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", 2309 | "dev": true 2310 | }, 2311 | "shebang-command": { 2312 | "version": "1.2.0", 2313 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 2314 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 2315 | "dev": true 2316 | }, 2317 | "shebang-regex": { 2318 | "version": "1.0.0", 2319 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 2320 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 2321 | "dev": true 2322 | }, 2323 | "signal-exit": { 2324 | "version": "3.0.2", 2325 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 2326 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 2327 | "dev": true 2328 | }, 2329 | "slice-ansi": { 2330 | "version": "1.0.0", 2331 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", 2332 | "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", 2333 | "dev": true 2334 | }, 2335 | "sntp": { 2336 | "version": "1.0.9", 2337 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", 2338 | "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", 2339 | "dev": true 2340 | }, 2341 | "spdx-correct": { 2342 | "version": "1.0.2", 2343 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", 2344 | "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", 2345 | "dev": true 2346 | }, 2347 | "spdx-expression-parse": { 2348 | "version": "1.0.4", 2349 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", 2350 | "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", 2351 | "dev": true 2352 | }, 2353 | "spdx-license-ids": { 2354 | "version": "1.2.2", 2355 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", 2356 | "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", 2357 | "dev": true 2358 | }, 2359 | "sprintf-js": { 2360 | "version": "1.0.3", 2361 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2362 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 2363 | "dev": true 2364 | }, 2365 | "sshpk": { 2366 | "version": "1.13.1", 2367 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", 2368 | "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", 2369 | "dev": true, 2370 | "dependencies": { 2371 | "assert-plus": { 2372 | "version": "1.0.0", 2373 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 2374 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 2375 | "dev": true 2376 | } 2377 | } 2378 | }, 2379 | "stack-utils": { 2380 | "version": "0.4.0", 2381 | "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-0.4.0.tgz", 2382 | "integrity": "sha1-lAy4L8z6hOj/Lz/fKT/ngBa+zNE=", 2383 | "dev": true 2384 | }, 2385 | "string_decoder": { 2386 | "version": "1.0.3", 2387 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 2388 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 2389 | "dev": true 2390 | }, 2391 | "string-width": { 2392 | "version": "2.1.1", 2393 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 2394 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 2395 | "dev": true, 2396 | "dependencies": { 2397 | "ansi-regex": { 2398 | "version": "3.0.0", 2399 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 2400 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 2401 | "dev": true 2402 | }, 2403 | "strip-ansi": { 2404 | "version": "4.0.0", 2405 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 2406 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 2407 | "dev": true 2408 | } 2409 | } 2410 | }, 2411 | "stringstream": { 2412 | "version": "0.0.5", 2413 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 2414 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", 2415 | "dev": true 2416 | }, 2417 | "strip-ansi": { 2418 | "version": "3.0.1", 2419 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2420 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2421 | "dev": true 2422 | }, 2423 | "strip-bom": { 2424 | "version": "3.0.0", 2425 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 2426 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", 2427 | "dev": true 2428 | }, 2429 | "strip-json-comments": { 2430 | "version": "1.0.4", 2431 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", 2432 | "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=" 2433 | }, 2434 | "supports-color": { 2435 | "version": "2.0.0", 2436 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 2437 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 2438 | "dev": true 2439 | }, 2440 | "table": { 2441 | "version": "4.0.2", 2442 | "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", 2443 | "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", 2444 | "dev": true, 2445 | "dependencies": { 2446 | "ansi-styles": { 2447 | "version": "3.2.0", 2448 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 2449 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 2450 | "dev": true 2451 | }, 2452 | "chalk": { 2453 | "version": "2.3.0", 2454 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", 2455 | "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", 2456 | "dev": true 2457 | }, 2458 | "lodash": { 2459 | "version": "4.17.4", 2460 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 2461 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", 2462 | "dev": true 2463 | }, 2464 | "supports-color": { 2465 | "version": "4.5.0", 2466 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", 2467 | "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", 2468 | "dev": true 2469 | } 2470 | } 2471 | }, 2472 | "tap": { 2473 | "version": "7.1.2", 2474 | "resolved": "https://registry.npmjs.org/tap/-/tap-7.1.2.tgz", 2475 | "integrity": "sha1-36w+zxSshUe7rSW70Wzyw3Q/Zc8=", 2476 | "dev": true 2477 | }, 2478 | "tap-mocha-reporter": { 2479 | "version": "2.0.1", 2480 | "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-2.0.1.tgz", 2481 | "integrity": "sha1-xwMWFz1uOhbFjhupLV1s2N5YoS4=", 2482 | "dev": true 2483 | }, 2484 | "tap-parser": { 2485 | "version": "2.2.3", 2486 | "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-2.2.3.tgz", 2487 | "integrity": "sha1-rebpbje/04zg8WLaBn80A08GiwE=", 2488 | "dev": true 2489 | }, 2490 | "text-table": { 2491 | "version": "0.2.0", 2492 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2493 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 2494 | "dev": true 2495 | }, 2496 | "through": { 2497 | "version": "2.3.8", 2498 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2499 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 2500 | "dev": true 2501 | }, 2502 | "tmatch": { 2503 | "version": "2.0.1", 2504 | "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-2.0.1.tgz", 2505 | "integrity": "sha1-DFYkbzPzDaG409colauvFmYPOM8=", 2506 | "dev": true 2507 | }, 2508 | "tmp": { 2509 | "version": "0.0.33", 2510 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 2511 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 2512 | "dev": true 2513 | }, 2514 | "tough-cookie": { 2515 | "version": "2.3.3", 2516 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", 2517 | "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", 2518 | "dev": true 2519 | }, 2520 | "tryit": { 2521 | "version": "1.0.3", 2522 | "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", 2523 | "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", 2524 | "dev": true 2525 | }, 2526 | "tunnel-agent": { 2527 | "version": "0.4.3", 2528 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", 2529 | "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", 2530 | "dev": true 2531 | }, 2532 | "tweetnacl": { 2533 | "version": "0.14.5", 2534 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 2535 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 2536 | "dev": true, 2537 | "optional": true 2538 | }, 2539 | "type-check": { 2540 | "version": "0.3.2", 2541 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 2542 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 2543 | "dev": true 2544 | }, 2545 | "typedarray": { 2546 | "version": "0.0.6", 2547 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 2548 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 2549 | "dev": true 2550 | }, 2551 | "unicode-length": { 2552 | "version": "1.0.3", 2553 | "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz", 2554 | "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=", 2555 | "dev": true 2556 | }, 2557 | "util-deprecate": { 2558 | "version": "1.0.2", 2559 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2560 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 2561 | "dev": true 2562 | }, 2563 | "uuid": { 2564 | "version": "3.1.0", 2565 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", 2566 | "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", 2567 | "dev": true 2568 | }, 2569 | "validate-npm-package-license": { 2570 | "version": "3.0.1", 2571 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", 2572 | "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", 2573 | "dev": true 2574 | }, 2575 | "verror": { 2576 | "version": "1.10.0", 2577 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 2578 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 2579 | "dev": true, 2580 | "dependencies": { 2581 | "assert-plus": { 2582 | "version": "1.0.0", 2583 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 2584 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 2585 | "dev": true 2586 | } 2587 | } 2588 | }, 2589 | "which": { 2590 | "version": "1.3.0", 2591 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", 2592 | "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", 2593 | "dev": true, 2594 | "dependencies": { 2595 | "isexe": { 2596 | "version": "2.0.0", 2597 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2598 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 2599 | "dev": true 2600 | } 2601 | } 2602 | }, 2603 | "wordwrap": { 2604 | "version": "1.0.0", 2605 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 2606 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 2607 | "dev": true 2608 | }, 2609 | "wrappy": { 2610 | "version": "1.0.2", 2611 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2612 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2613 | "dev": true 2614 | }, 2615 | "write": { 2616 | "version": "0.2.1", 2617 | "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", 2618 | "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", 2619 | "dev": true 2620 | }, 2621 | "xtend": { 2622 | "version": "4.0.1", 2623 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 2624 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", 2625 | "dev": true 2626 | }, 2627 | "yallist": { 2628 | "version": "2.1.2", 2629 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 2630 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 2631 | "dev": true 2632 | } 2633 | } 2634 | } 2635 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jsonplus", 3 | "version": "1.2.1", 4 | "description": "JSON parser with comments and self reference support", 5 | "main": "parse.js", 6 | "scripts": { 7 | "test": "nodeunit tests/tests.js", 8 | "lint": "eslint" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/serkanyersen/jsonplus.git" 13 | }, 14 | "bugs": { 15 | "url": "https://github.com/serkanyersen/jsonplus/issues" 16 | }, 17 | "homepage": "https://github.com/serkanyersen/jsonplus#readme", 18 | "keywords": [ 19 | "JSON", 20 | "comments", 21 | "self", 22 | "reference", 23 | "self", 24 | "this", 25 | "smart", 26 | "fixtures", 27 | "$ref" 28 | ], 29 | "typescript": { 30 | "definition": "jsonplus.d.ts" 31 | }, 32 | "author": "Serkan Yersen (http://serkan.io/)", 33 | "license": "MIT", 34 | "devDependencies": { 35 | "eslint": "^4.10.0", 36 | "eslint-config-standard": "^10.2.1", 37 | "eslint-plugin-import": "^2.8.0", 38 | "eslint-plugin-node": "^5.2.1", 39 | "eslint-plugin-promise": "^3.6.0", 40 | "eslint-plugin-standard": "^3.0.1", 41 | "nodeunit": "^0.9.1" 42 | }, 43 | "dependencies": { 44 | "lodash": "^3.10.1", 45 | "strip-json-comments": "^1.0.4" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /parse.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const strip = require('strip-json-comments'); 4 | const tag = /^@(self|ext)[.[]/; 5 | const selfTag = /^@self[.[]/; 6 | const fs = require('fs'); 7 | const _ = require('lodash'); 8 | 9 | const jsonPlus = { 10 | /** 11 | * Resolves JS array notation in string to actual value 12 | * @param {Object} object Actual Object 13 | * @param {string} reference path defined in string 14 | * @return {any} matched value or undefined when not found 15 | */ 16 | resolvePath: function (object, reference) { 17 | return _.propertyOf(object)(reference); 18 | }, 19 | 20 | /** 21 | * Simple template tag matcher, finds tags and 22 | * evalues values 23 | * @param {object} object Object itself to resolve tags agains 24 | * @param {string} template String to look for tags 25 | * @return {string} Evaluated string 26 | */ 27 | parseTemplate: function (object, template) { 28 | const html = template || ''; 29 | return html.replace(/\{\{\s*(.*?)\s*\}\}/gim, function (all, match) { 30 | return this.resolvePath(object, match.replace(selfTag, '')) || all; 31 | }.bind(this)); 32 | }, 33 | 34 | /** 35 | * Recursively goes through JSON object and resolves 36 | * all self references 37 | * @param {Object} obj JSON Object part 38 | * @param {Object} self Full object 39 | */ 40 | resolve: function (obj, self, path) { 41 | self = self || obj; 42 | path = path || []; 43 | 44 | // If object go through each value and call self again 45 | if (_.isPlainObject(obj)) { 46 | Object.keys(obj).forEach(function (key) { 47 | this.resolve(obj[key], self, path.concat([key])); 48 | }.bind(this)); 49 | } else if (Array.isArray(obj)) { 50 | // if array go through each item and call self 51 | obj.forEach(function (value, index) { 52 | this.resolve(obj[index], self, path.concat([index])); 53 | }.bind(this)); 54 | } else if (typeof obj === 'string' && tag.test(obj)) { 55 | // if string and starts with the reference tag 56 | // evaluate and return new value 57 | _.set(self, path, this.resolvePath(self, obj.replace(selfTag, ''))); 58 | } else if (typeof obj === 'string') { 59 | // if string check for template tags 60 | _.set(self, path, this.parseTemplate(self, obj)); 61 | } 62 | }, 63 | 64 | /** 65 | * Finds all references external JSON objects parses them recursively 66 | * and references back to given object 67 | * @param {Object} obj to check against references 68 | * @return {Object} Parsed object 69 | */ 70 | findExternal: function (obj) { 71 | if ('@ext' in obj) { 72 | Object.keys(obj['@ext']).forEach(function (key) { 73 | const file = obj['@ext'][key]; 74 | const extObj = this.jsonPlusParse(fs.readFileSync(file, 'utf8')); 75 | obj['@ext'][key] = extObj; 76 | }.bind(this)); 77 | } 78 | return obj; 79 | }, 80 | 81 | /** 82 | * Remove the @external files object 83 | * @param {Object} obj JSON Object 84 | * @return {Object} JSON Object 85 | */ 86 | cleanExternal: function (obj) { 87 | if (obj) { 88 | delete obj['@ext']; 89 | } 90 | return obj; 91 | }, 92 | 93 | /** 94 | * Parses json string by removing comments and resolving self references 95 | * @param {string} data JSON string 96 | * @return {Object} parsed JSON Object 97 | */ 98 | jsonPlusParse: function (data) { 99 | let obj = JSON.parse(strip(data)); 100 | obj = this.findExternal(obj); 101 | this.resolve(obj); 102 | obj = this.cleanExternal(obj); 103 | return obj; 104 | }, 105 | 106 | /** 107 | * Resolves already parsed json object 108 | * @param {Object} obj Already parsed object 109 | * @param {Object} self [Optional] Object to use as reference 110 | * @return {Object} Resolved object 111 | */ 112 | jsonPlusResolve: function (obj, self) { 113 | obj = this.findExternal(obj); 114 | this.resolve(obj, self); 115 | obj = this.cleanExternal(obj); 116 | return obj; 117 | }, 118 | }; 119 | 120 | exports.parse = jsonPlus.jsonPlusParse.bind(jsonPlus); 121 | exports.resolve = jsonPlus.jsonPlusResolve.bind(jsonPlus); 122 | -------------------------------------------------------------------------------- /tests/fixtures/all-out.json: -------------------------------------------------------------------------------- 1 | /** 2 | * This is a full example of the JSONPlus 3 | */ 4 | [{ 5 | "this": /* is */ "simple", // very 6 | "/api/v1": "myapi", // urls can be keys 7 | "list": [{ "first": "john" }, { "last": "doe" }], // objects in arrays 8 | 9 | // Self ref here 10 | "read1": "@self[0].this", 11 | "read2": "@self[0]['/api/v1']", 12 | "read3": "@self[0].list[0]", // I placed the whole object here 13 | 14 | // Template Tags 15 | "read4": "{{ [0].this }}", 16 | "read5": "{{ [0]['/api/v1'] }}", 17 | "read6": "{{ [0].list[0] }}" // I placed the whole object here, which will become string 18 | }] 19 | -------------------------------------------------------------------------------- /tests/fixtures/comments.json: -------------------------------------------------------------------------------- 1 | /** 2 | * This is a fixture with comment 3 | */ 4 | { 5 | "foo": 5, // Actual value 6 | "bar": /* this is how you define reference */ "@self.foo", 7 | "list": [ 8 | // lists work too 9 | "@self.foo" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /tests/fixtures/complex-tags.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "john", 3 | "/api/v1/": "api", 4 | "yes 'thats' hard": "meh", 5 | "/api": { 6 | "/v1": { 7 | "/name": "john" 8 | } 9 | }, 10 | 11 | // Tags 12 | "nospaces": "{{name}}", 13 | "spaces": "{{ name }}", 14 | "spacesontheside": "{{ name}}", 15 | "nonkey": "{{ ['/api/v1/'] }}", 16 | "hard": "{{ [\"yes 'thats' hard\"] }}", 17 | "fullkeys": "{{ ['/api']['/v1']['/name'] }}" 18 | } 19 | -------------------------------------------------------------------------------- /tests/fixtures/deep-link.json: -------------------------------------------------------------------------------- 1 | { 2 | "this": { 3 | "is": [{ 4 | "going": { 5 | "really": [[[{ "deep": "yes" }]]] 6 | } 7 | }] 8 | }, 9 | 10 | "andthis": { 11 | "will": [{ 12 | "find": { 13 | "that": [[[{ "link": "@self.this.is[0].going.really[0][0][0].deep" }]]] 14 | } 15 | }] 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /tests/fixtures/external-file-complex.json: -------------------------------------------------------------------------------- 1 | { 2 | "@ext": { 3 | "ref": "tests/fixtures/template-tags.json", 4 | "ref2": "tests/fixtures/deep-link.json" 5 | }, 6 | 7 | // External Values 8 | "read1": "{{ @ext.ref.full }}", 9 | "read2": "@ext.ref.detailed", 10 | "read3": "{{ @ext.ref2.andthis.will[0].find.that[0][0][0].link }}" 11 | } 12 | -------------------------------------------------------------------------------- /tests/fixtures/external-file-wrong-path.json: -------------------------------------------------------------------------------- 1 | { 2 | "@ext": { 3 | "user": "wrong.json" 4 | }, 5 | "name": "@ext.user.first" 6 | } 7 | -------------------------------------------------------------------------------- /tests/fixtures/external-file.json: -------------------------------------------------------------------------------- 1 | { 2 | "@ext": { 3 | "user": "tests/fixtures/template-tags.json" 4 | }, 5 | "name": "@ext.user.first" 6 | } 7 | -------------------------------------------------------------------------------- /tests/fixtures/external-file2.json: -------------------------------------------------------------------------------- 1 | { 2 | "@ext": { 3 | "deep": "tests/fixtures/external-file.json" 4 | }, 5 | "name": "@ext.deep.name" 6 | } 7 | -------------------------------------------------------------------------------- /tests/fixtures/first-level-array-templates.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "first": "john", 3 | "last": "doe" 4 | }, { 5 | "fullName": "Mr. {{ [0].first }} {{ [0].last }}" 6 | }] 7 | -------------------------------------------------------------------------------- /tests/fixtures/first-level-array.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "first": "john", 3 | "last": "doe", 4 | "full": "{{ [0].first }} {{ @self[0].last }}", 5 | "self": "@self[0].first" 6 | }] 7 | -------------------------------------------------------------------------------- /tests/fixtures/not-found.json: -------------------------------------------------------------------------------- 1 | { 2 | "self": "@self.blah", 3 | "tag": "{{ blah }}" 4 | } 5 | -------------------------------------------------------------------------------- /tests/fixtures/reference-to-reference.json: -------------------------------------------------------------------------------- 1 | { 2 | "@ext": { 3 | "bigUser": "tests/fixtures/template-tags.json" 4 | }, 5 | 6 | "user1": { 7 | "name": "john", 8 | "last": "doe" 9 | }, 10 | 11 | "user2": { 12 | "name": "jane", 13 | "last": "doe" 14 | }, 15 | 16 | "users": [ 17 | "@self.user1", 18 | "@self.user2", 19 | "@ext.bigUser" 20 | ], 21 | 22 | "myUsers": "@self.users[1].name", 23 | "extUser": "@self.users[2].first" 24 | } -------------------------------------------------------------------------------- /tests/fixtures/simple-self-reference.json: -------------------------------------------------------------------------------- 1 | { 2 | "foo": 5, 3 | "bar": "@self.foo" 4 | } 5 | -------------------------------------------------------------------------------- /tests/fixtures/template-tags.json: -------------------------------------------------------------------------------- 1 | { 2 | "first": "john", 3 | "last": "doe", 4 | "list": [{ 5 | "word": "hello" 6 | }, { 7 | "word": "world" 8 | }], 9 | "full": "{{ @self.first }} {{ @self.last }}", 10 | "short": "{{ first }} {{ last }}", 11 | "detailed": "{{ list[0].word }} {{ list[1].word }}" 12 | } 13 | -------------------------------------------------------------------------------- /tests/fixtures/template-tags2.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "first": "john", 3 | "last": "doe", 4 | "full": "{{ [0].first }} {{ [0].last }}" 5 | }] 6 | -------------------------------------------------------------------------------- /tests/tests.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | const parse = require('../parse').parse; 3 | const fs = require('fs'); 4 | 5 | function fixture (name) { 6 | return fs.readFileSync('tests/fixtures/' + name + '.json', 'utf8'); 7 | } 8 | 9 | exports.Basic = { 10 | testSimpleSelfReference: function (test) { 11 | const result = parse(fixture('simple-self-reference')); 12 | 13 | test.equal(result.bar, 5, 'bar should be equal to foo'); 14 | test.done(); 15 | }, 16 | 17 | testComments: function (test) { 18 | const result = parse(fixture('comments')); 19 | 20 | test.equal(result.bar, 5, 'bar should be equal to foo'); 21 | test.equal(result.list[0], 5, 'list.0 should be equal to foo'); 22 | test.done(); 23 | }, 24 | }; 25 | 26 | exports.Templates = { 27 | testTemplates: function (test) { 28 | const result = parse(fixture('template-tags')); 29 | 30 | test.equal(result.full, 'john doe', 'should create full name'); 31 | test.done(); 32 | }, 33 | 34 | testTemplatesWithoutPrefix: function (test) { 35 | const result = parse(fixture('template-tags')); 36 | 37 | test.equal(result.short, 'john doe', 'should create full name'); 38 | test.equal(result.detailed, 'hello world', 'should create sentence'); 39 | test.done(); 40 | }, 41 | 42 | testTemplatesWithoutPrefixArray: function (test) { 43 | const result = parse(fixture('template-tags2')); 44 | 45 | test.equal(result[0].full, 'john doe', 'should create full name'); 46 | test.done(); 47 | }, 48 | }; 49 | 50 | exports.ExternalFiles = { 51 | testSimpleExternalFile: function (test) { 52 | const result = parse(fixture('external-file')); 53 | 54 | test.equal(result.name, 'john'); 55 | test.equal(result['@ext'], undefined); 56 | test.done(); 57 | }, 58 | 59 | testDeepExternalFile: function (test) { 60 | const result = parse(fixture('external-file2')); 61 | 62 | test.equal(result.name, 'john'); 63 | test.equal(result['@ext'], undefined); 64 | test.done(); 65 | }, 66 | 67 | testExtWrongPath: function (test) { 68 | test.expect(1); 69 | try { 70 | parse(fixture('external-file-wrong-path')); 71 | } catch (e) { 72 | test.ok(true); 73 | } 74 | test.done(); 75 | }, 76 | 77 | testExternalFileComplex: function (test) { 78 | const result = parse(fixture('external-file-complex')); 79 | test.equal(result.read1, 'john doe'); 80 | test.equal(result.read2, 'hello world'); 81 | test.equal(result.read3, 'yes'); 82 | test.done(); 83 | }, 84 | }; 85 | 86 | exports.Complex = { 87 | testFirstLevelArray: function (test) { 88 | const result = parse(fixture('first-level-array')); 89 | 90 | test.equal(result[0].full, 'john doe', 'should create full name'); 91 | test.equal(result[0].self, 'john', 'should get first name'); 92 | test.done(); 93 | }, 94 | 95 | testFirstLevelArrayTemplates: function (test) { 96 | const result = parse(fixture('first-level-array-templates')); 97 | 98 | test.equal(result[1].fullName, 'Mr. john doe', 'should get first name'); 99 | test.done(); 100 | }, 101 | 102 | testNotFoundTags: function (test) { 103 | const result = parse(fixture('not-found')); 104 | test.equal(result.tag, '{{ blah }}'); 105 | test.done(); 106 | }, 107 | 108 | testNotFoundReference: function (test) { 109 | const result = parse(fixture('not-found')); 110 | test.equal(result.self, undefined); 111 | test.done(); 112 | }, 113 | 114 | testComplexTags: function (test) { 115 | const result = parse(fixture('complex-tags')); 116 | test.equal(result.nospaces, 'john'); 117 | test.equal(result.spaces, 'john'); 118 | test.equal(result.spacesontheside, 'john'); 119 | test.equal(result.nonkey, 'api'); 120 | test.equal(result.hard, 'meh'); 121 | test.equal(result.fullkeys, 'john'); 122 | test.done(); 123 | }, 124 | 125 | testDeepLink: function (test) { 126 | const result = parse(fixture('deep-link')); 127 | test.equal(result.andthis.will[0].find.that[0][0][0].link, 'yes'); 128 | test.done(); 129 | }, 130 | 131 | testRefORef: function (test) { 132 | const result = parse(fixture('reference-to-reference')); 133 | test.equal(result.myUsers, 'jane'); 134 | test.equal(result.extUser, 'john'); 135 | test.done(); 136 | }, 137 | 138 | testFullExample: function (test) { 139 | const result = parse(fixture('all-out')); 140 | test.equal(result[0].read1, 'simple'); 141 | test.equal(result[0].read2, 'myapi'); 142 | test.deepEqual(result[0].read3, { 'first': 'john' }); 143 | // tags 144 | test.equal(result[0].read4, 'simple'); 145 | test.equal(result[0].read5, 'myapi'); 146 | test.equal(result[0].read6, '[object Object]'); 147 | test.done(); 148 | }, 149 | }; 150 | --------------------------------------------------------------------------------