├── .gitignore ├── .jshintrc ├── .travis.yml ├── Gruntfile.js ├── LICENSE-MIT ├── README.md ├── package-lock.json ├── package.json ├── tasks └── htmlangular.js └── test ├── html ├── invalid │ ├── improperly_closed_tag.tmpl.html │ ├── improperly_nested_tags.tmpl.html │ ├── missing_closing_tag.tmpl.html │ └── template_missing_extension.html └── valid │ ├── full │ ├── valid_angular.html │ ├── valid_angular_directives.html │ └── valid_regular.html │ └── template │ ├── valid_angular.tmpl.html │ ├── valid_angular_table_row.tmpl.html │ └── valid_regular.tmpl.html └── htmlangular_test.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | npm-debug.log 3 | tmp 4 | html-angular-validate-report.json 5 | html-angular-validate-report-checkstyle.xml 6 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "curly": true, 3 | "eqeqeq": true, 4 | "immed": true, 5 | "indent": 4, 6 | "latedef": true, 7 | "newcap": true, 8 | "noarg": true, 9 | "plusplus": true, 10 | "sub": true, 11 | "undef": true, 12 | "boss": true, 13 | "eqnull": true, 14 | "node": true 15 | } 16 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: node_js 3 | node_js: 4 | - "9" 5 | - "8" 6 | - "7" 7 | - "6" 8 | - "5" 9 | 10 | branches: 11 | only: 12 | - master 13 | 14 | before_script: 15 | - npm install -g grunt-cli 16 | - grunt jshint 17 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | /* 2 | * grunt-html-angular-validate 3 | * https://github.com/nikestep/grunt-html-angular-validate 4 | * 5 | * Copyright (c) 2014 Nik Estep 6 | * Licensed under the MIT license. 7 | */ 8 | 9 | 'use strict'; 10 | 11 | module.exports = function(grunt) { 12 | 13 | // Project configuration. 14 | grunt.initConfig({ 15 | jshint: { 16 | all: [ 17 | 'Gruntfile.js', 18 | 'tasks/*.js', 19 | '<%= nodeunit.all %>', 20 | ], 21 | options: { 22 | jshintrc: '.jshintrc', 23 | }, 24 | }, 25 | 26 | // Before generating any new files, remove any previously-created files. 27 | clean: { 28 | tests: ['tmp'], 29 | }, 30 | 31 | // Configurations to be run (and then tested). 32 | htmlangular: { 33 | default_options: { 34 | options: { 35 | customtags: ['custom-tag', 'custom-*'], 36 | customattrs: ['fixed-div-label', 'custom-*'], 37 | wrapping: { 38 | 'tr': '{0}
' 39 | } 40 | }, 41 | files: { 42 | src: ['test/html/valid/**/*.html'] 43 | } 44 | }, 45 | default_options_concurrent: { 46 | options: { 47 | customtags: ['custom-tag', 'custom-*'], 48 | customattrs: ['fixed-div-label', 'custom-*'], 49 | wrapping: { 50 | 'tr': '{0}
' 51 | }, 52 | concurrentJobs: 4 53 | }, 54 | files: { 55 | src: ['test/html/valid/**/*.html'] 56 | } 57 | }, 58 | missing_wrapping: { 59 | options: { 60 | }, 61 | files: { 62 | src: ['test/html/valid/template/valid_angular_table_row.tmpl.html'] 63 | } 64 | }, 65 | missing_custom_tags: { 66 | options: { 67 | }, 68 | files: { 69 | src: ['test/html/valid/full/valid_angular.html'] 70 | } 71 | }, 72 | missing_custom_attrs: { 73 | options: { 74 | }, 75 | files: { 76 | src: ['test/html/valid/template/valid_angular.tmpl.html'] 77 | } 78 | }, 79 | template_missing_extension: { 80 | options: { 81 | }, 82 | files: { 83 | src: ['test/html/invalid/template_missing_extension.html'] 84 | } 85 | }, 86 | missing_closing_tag: { 87 | options: { 88 | }, 89 | files: { 90 | src: ['test/html/invalid/missing_closing_tag.tmpl.html'] 91 | } 92 | }, 93 | improperly_closed_tag: { 94 | options: { 95 | }, 96 | files: { 97 | src: ['test/html/invalid/improperly_closed_tag.tmpl.html'] 98 | } 99 | }, 100 | improperly_nested_tags: { 101 | options: { 102 | }, 103 | files: { 104 | src: ['test/html/invalid/improperly_nested_tags.tmpl.html'] 105 | } 106 | }, 107 | improper_angular_operator_relaxed: { 108 | options: { 109 | relaxerror: [ 110 | '“&” did not start a character reference. (“&” probably should have been escaped as “&”.)' 111 | ], 112 | }, 113 | files: { 114 | src: ['test/html/invalid/improper_angular_operator.tmpl.html'] 115 | } 116 | } 117 | }, 118 | 119 | // Unit tests. 120 | nodeunit: { 121 | all: ['test/*_test.js'], 122 | }, 123 | 124 | }); 125 | 126 | // Actually load this plugin's task(s). 127 | grunt.loadTasks('tasks'); 128 | 129 | // These plugins provide necessary tasks. 130 | grunt.loadNpmTasks('grunt-contrib-jshint'); 131 | grunt.loadNpmTasks('grunt-contrib-clean'); 132 | grunt.loadNpmTasks('grunt-contrib-nodeunit'); 133 | 134 | // Whenever the "test" task is run, first clean the "tmp" dir, then run this 135 | // plugin's task(s), then test the result. 136 | grunt.registerTask('test', ['clean', 'nodeunit:all']); 137 | 138 | // By default, lint and run all tests. 139 | grunt.registerTask('default', ['clean', 'jshint', 'test']); 140 | 141 | }; 142 | -------------------------------------------------------------------------------- /LICENSE-MIT: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 Nik Estep 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation 5 | files (the "Software"), to deal in the Software without 6 | restriction, including without limitation the rights to use, 7 | copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the 9 | Software is furnished to do so, subject to the following 10 | conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # grunt-html-angular-validate 2 | [![Build Status](https://travis-ci.org/nikestep/grunt-html-angular-validate.svg?branch=master)](https://travis-ci.org/nikestep/grunt-html-angular-validate) [![Dependency Status](https://david-dm.org/nikestep/grunt-html-angular-validate.svg)](https://david-dm.org/nikestep/grunt-html-angular-validate) [![devDependency Status](https://david-dm.org/nikestep/grunt-html-angular-validate/dev-status.svg)](https://david-dm.org/nikestep/grunt-html-angular-validate#info=devDependencies) 3 | [![npm Downloads Count](https://img.shields.io/npm/dm/grunt-html-angular-validate.svg)](https://github.com/nikestep/grunt-html-angular-validate) 4 | 5 | > An HTML validator aimed at AngularJS projects. 6 | 7 | While there are other Grunt plugins that will validate HTML files, there are lacking a couple important features: 8 | 9 | * Support for AngularJS attributes and tags (both from AngularJS and custom created) 10 | * Support for templated/fragmented HTML files 11 | * Ability to concurrently validate files for greatly increased speed 12 | 13 | This plugin looks to solve these problems and provide the value that comes with having HTML validation in the build chain. 14 | 15 | Please note that this plugin works with the [w3cjs](https://github.com/thomasdavis/w3cjs) node plugin and will send files to be validated 16 | against the W3C online validator tool. W3C asks that you be considerate of their free validator service and they will block your IP if 17 | your traffic is deemed "excessive" by their servers. Such a block will automatically clear once the traffic subsides, but if your 18 | project is large enough, you may need to run your own local W3C validator server. A guide for how to do this can be found 19 | [here](https://github.com/tlvince/w3c-validator-guide). See the options below for pointing this plugin to a local validator service. 20 | 21 | ## v0.5.0 Upgrade Notes 22 | Version 0.4.2 has been published as a stop-gap between versions 0.4.1 and 0.5.0. You may use this version to maintain v0.4.1-style 23 | comptability; however, there is no guarantee that W3C will continue to support the validation path used here. 24 | 25 | If you are upgrading to use v0.5.0, there are a couple of things you should keep in mind. The warning messages have changed slightly 26 | as a result of changes in other packages used by this plugin. You may find that existing excluded messages no longer work and you'll 27 | need to update your gruntfile. 28 | 29 | If you are using a local version of the w3c validator, upgrading may cause an incompatibility. You should investigate this and also 30 | upgrading your local validator before commiting the upgrade to your project. 31 | 32 | ## Getting Started 33 | This plugin requires Grunt `~1.0.1` 34 | 35 | If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) 36 | guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once 37 | you're familiar with that process, you may install this plugin with this command: 38 | 39 | ```shell 40 | npm install grunt-html-angular-validate --save-dev 41 | ``` 42 | 43 | Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript: 44 | 45 | ```js 46 | grunt.loadNpmTasks('grunt-html-angular-validate'); 47 | ``` 48 | 49 | ## The "htmlangular" task 50 | 51 | ### Overview 52 | In your project's Gruntfile, add a section named `htmlangular` to the data object passed into `grunt.initConfig()`. 53 | 54 | ```js 55 | grunt.initConfig({ 56 | htmlangular: { 57 | options: { 58 | // Task-specific options go here. 59 | }, 60 | your_target: { 61 | // Target-specific file lists and/or options go here. 62 | }, 63 | }, 64 | }); 65 | ``` 66 | 67 | ### Options 68 | 69 | #### options.angular 70 | Type: `Boolean` 71 | Default value: `true` 72 | 73 | Turns on ignoring of validation errors that are caused by AngularJS. 74 | 75 | #### options.customtags 76 | Type: `Array` 77 | Default value: `[]` 78 | 79 | List all of the custom tags you have created through directives and other means here. The validator will ignore warnings about these tags. 80 | 81 | You can use the `'*'` wildcard, e.g.: `'custom-tags-*'` 82 | 83 | #### options.customattrs 84 | Type: `Array` 85 | Default value: `[]` 86 | 87 | List all of the custom attributes you have created through directives and other means here. The validator will ignore warnings about 88 | these attributes. 89 | 90 | You can use the `*` wildcard, e.g.: `'custom-attrs-*'` 91 | 92 | #### options.wrapping 93 | Type: `Object` 94 | Default value: `{}` 95 | 96 | Not all Angular templates start with tags that can be wrapped directly within the `` tag. For templates like this, they first need 97 | to be wrapped before the regular full-document wrapping that the plugin performs. As an example, a template for a row in a table might 98 | look like this: 99 | 100 | 101 | {name} 102 | {birthdate} 103 | {address} 104 | 105 | 106 | The entry into the `options.wrapping` plugin option would look like this: 107 | 108 | wrapping: { 109 | 'tr': '{0}
' 110 | } 111 | 112 | The content of the template will be placed within the `{0}` and then the whole block will be wrapped like other templates. Note that the 113 | name of the tag should not be wrapped with `<` and `>`. 114 | 115 | #### options.relaxerror 116 | Type: `Array` 117 | Default value: `[]` 118 | 119 | List the error strings you want explicitly ignored by the validator. 120 | 121 | #### options.tmplext 122 | Type: `String` 123 | Default value: `tmpl.html` 124 | 125 | The extension of HTML files that are templated or otherwise not complete and valid HTML files (i.e. do not start and end with ``). The validator will wrap these files as complete HTML pages for validation. 126 | 127 | #### options.doctype 128 | Type: `String` 129 | Default value: `HTML5` 130 | 131 | The doctype to use when validating HTML files. Set to `false` to have the validator auto-detect the doctype. 132 | 133 | #### options.charset 134 | Type: `String` 135 | Default value: `utf-8` 136 | 137 | The charset to use when validating HTML files. Set to `false` to have the validator auto-detect the charset. 138 | 139 | #### options.reportpath 140 | Type: `String` 141 | Default value: `html-angular-validate-report.json` 142 | 143 | The path to write a JSON report of validation and linting output to after completion. Set to `null` to not create this file. 144 | 145 | ### reportCheckstylePath 146 | Type: `String` 147 | Default value: `html-angular-validate-report-checkstyle.xml` 148 | 149 | The path to write a checkstyle compatible xml report of validation and linting output to after completion. Set to `null` to not create this file. 150 | 151 | #### options.w3clocal 152 | Type: `String` 153 | Default value: `null` 154 | 155 | Use this when running a local instance of the W3C validator service (e.g. `http://localhost:8080`). Do not use in conjunction with 156 | `options.w3cproxy`. 157 | 158 | #### options.w3cproxy 159 | Type: `String` 160 | Default value: `null` 161 | 162 | The proxy to the W3C validator service. Use this as an alternative when running a local instance of the W3C validator service 163 | (e.g. `http://localhost:8080`). Do not use in conjunction with `options.w3clocal`. 164 | 165 | #### options.concurrentJobs 166 | Type: `Integer` 167 | Default value: `1` 168 | 169 | The maximum number of validation jobs to run concurrently. Using a number greater than `1` can greatly increase validation speed 170 | with many files, especially when running a local validation server. 171 | 172 | This should only be used when you have your own validation server. W3C will shut you down much faster if you run concurrent 173 | requests against them. 174 | 175 | #### maxvalidateattempts 176 | Type: `Integer` 177 | Default value: `3` 178 | 179 | The maxinum number of attempts to validate a single file. Retries will be triggered if an error occurs during file validation and no 180 | result is retrieved. This is not the same as validation completing and the result having errors. Instead the aim is to guard against 181 | a flaky validator server. 182 | 183 | ### Usage Examples 184 | 185 | #### Default Options 186 | In this example, the default options are used to do something with whatever. So if the `testing` file has the content `Testing` and the `123` file had the content `1 2 3`, the generated result would be `Testing, 1 2 3.` 187 | 188 | ```js 189 | grunt.initConfig({ 190 | htmlangular: { 191 | options: { 192 | tmplext: 'html.tmpl', 193 | customtags: [ 194 | 'top-nav', 195 | 'left-bar', 196 | 'right-bar', 197 | 'client-footer' 198 | ], 199 | customattrs: [ 200 | 'fixed-width-box', 201 | 'video-box' 202 | ], 203 | relaxerror: [ 204 | 'The frameborder attribute on the iframe element is obsolete. Use CSS instead.' 205 | ], 206 | reportpath: 'target/html-angular-validate-report.json' 207 | }, 208 | files: { 209 | src: ['src/www/**/*.html', 'src/www/**/*.html.tmpl'] 210 | } 211 | } 212 | }); 213 | ``` 214 | 215 | ## Contributing 216 | In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/). 217 | 218 | Before submitting a pull request, please run the tests to make sure you did not break any existing functionality: 219 | 220 | ```shell 221 | grunt test 222 | ``` 223 | 224 | ## Release History 225 | * 2018-02-03 v0.6.1 Updating version of [html-angular-validate](https://www.npmjs.com/package/html-angular-validate) 226 | * 2018-01-09 v0.6.0 Updating version of [html-angular-validate](https://www.npmjs.com/package/html-angular-validate) and updating Node versions 227 | * 2017-08-06 v0.5.9 Updating version of [html-angular-validate](https://www.npmjs.com/package/html-angular-validate) 228 | * 2016-05-14 v0.5.8 Fixed #35 229 | * 2015-11-09 v0.5.7 Updating version of [html-angular-validate](https://www.npmjs.com/package/html-angular-validate) 230 | * 2015-11-09 v0.5.6 Accidental unchanged version 231 | * 2015-11-09 v0.5.5 Updating version of [html-angular-validate](https://www.npmjs.com/package/html-angular-validate) 232 | * 2015-10-31 v0.5.4 Updating version of [html-angular-validate](https://www.npmjs.com/package/html-angular-validate) 233 | * 2015-09-24 v0.5.3 Updating version of [html-angular-validate](https://www.npmjs.com/package/html-angular-validate) 234 | * 2015-08-28 v0.5.2 Updating version of [html-angular-validate](https://www.npmjs.com/package/html-angular-validate) 235 | * 2015-08-09 v0.5.1 Switched to using [html-angular-validate](https://www.npmjs.com/package/html-angular-validate) npm package 236 | * 2015-06-16 v0.4.2 Patched v0.4.1 to continue working in liu of upgrading v0.5.0 (code not in repository - see #23) 237 | * 2015-06-15 v0.5.0 Fixed #22 (using new w3c validator) 238 | * 2015-03-26 v0.4.1 Fixed #17 239 | * 2014-08-08 v0.4.0 Pulled in #9 (concurrency introduced) 240 | * 2014-08-04 v0.3.5 Pulled in #7 and #8, dropped support for NodeJS 0.8 241 | * 2014-04-26 v0.3.0 Fixed #4, Fixed #5, created unit tests 242 | * 2014-02-04 v0.2.3 Fixed #2, fixed silly push mistake, add ui-* to default angular tags/attrs 243 | * 2014-02-04 v0.2.2 Fixed #1 and added W3C proxy option 244 | * 2014-01-27 v0.2.1 Renamed project 245 | * 2014-01-12 v0.2.0 Increased recognition of AngularJS caused validation erros 246 | * 2014-01-11 v0.1.0 Initial release 247 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "grunt-html-angular-validate", 3 | "version": "0.6.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "abbrev": { 8 | "version": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz", 9 | "integrity": "sha1-W2A1su6dT7XPhZ8Iqb6BsghJGEM=", 10 | "dev": true 11 | }, 12 | "agent-base": { 13 | "version": "4.2.0", 14 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", 15 | "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", 16 | "requires": { 17 | "es6-promisify": "5.0.0" 18 | } 19 | }, 20 | "ansi-regex": { 21 | "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", 22 | "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=", 23 | "dev": true 24 | }, 25 | "ansi-styles": { 26 | "version": "3.2.0", 27 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 28 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 29 | "dev": true, 30 | "requires": { 31 | "color-convert": "1.9.0" 32 | } 33 | }, 34 | "argparse": { 35 | "version": "1.0.9", 36 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", 37 | "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", 38 | "dev": true, 39 | "requires": { 40 | "sprintf-js": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" 41 | } 42 | }, 43 | "array-find-index": { 44 | "version": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.1.tgz", 45 | "integrity": "sha1-C8Jd2slB7IpJauJY/UrBiAA+868=", 46 | "dev": true 47 | }, 48 | "ast-types": { 49 | "version": "0.10.1", 50 | "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", 51 | "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==" 52 | }, 53 | "async": { 54 | "version": "1.5.2", 55 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", 56 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", 57 | "dev": true 58 | }, 59 | "asynckit": { 60 | "version": "0.4.0", 61 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 62 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 63 | }, 64 | "balanced-match": { 65 | "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz", 66 | "integrity": "sha1-qRzdHr7xqGZZ5w/03vAWJfwtZ1Y=", 67 | "dev": true 68 | }, 69 | "brace-expansion": { 70 | "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.3.tgz", 71 | "integrity": "sha1-Rr/1ARXUf8mriYVKu4fZgHihCZE=", 72 | "dev": true, 73 | "requires": { 74 | "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.3.0.tgz", 75 | "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 76 | } 77 | }, 78 | "buffer-equal": { 79 | "version": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.2.tgz", 80 | "integrity": "sha1-7Lt5D1aNQAmKYkK1SAXHWAXrk48=", 81 | "dev": true 82 | }, 83 | "builtin-modules": { 84 | "version": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 85 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 86 | "dev": true 87 | }, 88 | "bunker": { 89 | "version": "https://registry.npmjs.org/bunker/-/bunker-0.1.2.tgz", 90 | "integrity": "sha1-yImSRkqOKm7ehpMDdfkrWAd++Xw=", 91 | "dev": true, 92 | "requires": { 93 | "burrito": "https://registry.npmjs.org/burrito/-/burrito-0.2.12.tgz" 94 | } 95 | }, 96 | "burrito": { 97 | "version": "https://registry.npmjs.org/burrito/-/burrito-0.2.12.tgz", 98 | "integrity": "sha1-0NbmrIHV6ZeJxvpKzLCwAx6lT2s=", 99 | "dev": true, 100 | "requires": { 101 | "traverse": "https://registry.npmjs.org/traverse/-/traverse-0.5.2.tgz", 102 | "uglify-js": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.1.1.tgz" 103 | }, 104 | "dependencies": { 105 | "traverse": { 106 | "version": "https://registry.npmjs.org/traverse/-/traverse-0.5.2.tgz", 107 | "integrity": "sha1-4gPFjV9/DjfbbnTArLkpuwm2HYU=", 108 | "dev": true 109 | } 110 | } 111 | }, 112 | "bytes": { 113 | "version": "3.0.0", 114 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 115 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 116 | }, 117 | "camelcase-keys": { 118 | "version": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", 119 | "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", 120 | "dev": true, 121 | "requires": { 122 | "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", 123 | "map-obj": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" 124 | }, 125 | "dependencies": { 126 | "camelcase": { 127 | "version": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", 128 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", 129 | "dev": true 130 | } 131 | } 132 | }, 133 | "chalk": { 134 | "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz", 135 | "integrity": "sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk=", 136 | "dev": true, 137 | "requires": { 138 | "ansi-styles": "2.2.1", 139 | "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 140 | "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 141 | "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 142 | "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" 143 | }, 144 | "dependencies": { 145 | "ansi-styles": { 146 | "version": "2.2.1", 147 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 148 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 149 | "dev": true 150 | } 151 | } 152 | }, 153 | "charm": { 154 | "version": "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz", 155 | "integrity": "sha1-BsIe7RobBq62dVPNxT4jJ0usIpY=", 156 | "dev": true 157 | }, 158 | "cli": { 159 | "version": "1.0.1", 160 | "resolved": "https://registry.npmjs.org/cli/-/cli-1.0.1.tgz", 161 | "integrity": "sha1-IoF1NPJL+klQw01TLUjsvGIbjBQ=", 162 | "dev": true, 163 | "requires": { 164 | "exit": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", 165 | "glob": "7.1.2" 166 | } 167 | }, 168 | "co": { 169 | "version": "4.6.0", 170 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 171 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 172 | }, 173 | "coffee-script": { 174 | "version": "1.10.0", 175 | "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.10.0.tgz", 176 | "integrity": "sha1-EpOLz5vhlI+gBvkuDEyegXBRCMA=", 177 | "dev": true 178 | }, 179 | "color-convert": { 180 | "version": "1.9.0", 181 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", 182 | "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", 183 | "dev": true, 184 | "requires": { 185 | "color-name": "1.1.3" 186 | } 187 | }, 188 | "color-name": { 189 | "version": "1.1.3", 190 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 191 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 192 | "dev": true 193 | }, 194 | "colors": { 195 | "version": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", 196 | "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" 197 | }, 198 | "combined-stream": { 199 | "version": "1.0.5", 200 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", 201 | "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", 202 | "requires": { 203 | "delayed-stream": "1.0.0" 204 | } 205 | }, 206 | "commander": { 207 | "version": "2.13.0", 208 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", 209 | "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==" 210 | }, 211 | "component-emitter": { 212 | "version": "1.2.1", 213 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 214 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" 215 | }, 216 | "concat-map": { 217 | "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 218 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 219 | }, 220 | "console-browserify": { 221 | "version": "1.1.0", 222 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", 223 | "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", 224 | "dev": true, 225 | "requires": { 226 | "date-now": "0.1.4" 227 | } 228 | }, 229 | "cookiejar": { 230 | "version": "2.1.1", 231 | "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.1.tgz", 232 | "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=" 233 | }, 234 | "core-util-is": { 235 | "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 236 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 237 | }, 238 | "data-uri-to-buffer": { 239 | "version": "1.2.0", 240 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz", 241 | "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==" 242 | }, 243 | "date-now": { 244 | "version": "0.1.4", 245 | "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", 246 | "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", 247 | "dev": true 248 | }, 249 | "dateformat": { 250 | "version": "1.0.12", 251 | "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", 252 | "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", 253 | "dev": true, 254 | "requires": { 255 | "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", 256 | "meow": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" 257 | } 258 | }, 259 | "debug": { 260 | "version": "3.1.0", 261 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 262 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 263 | "requires": { 264 | "ms": "2.0.0" 265 | } 266 | }, 267 | "decamelize": { 268 | "version": "https://registry.npmjs.org/decamelize/-/decamelize-1.1.2.tgz", 269 | "integrity": "sha1-3Mk3J74gljLpiwJxjvTLeWAjIvI=", 270 | "dev": true, 271 | "requires": { 272 | "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" 273 | } 274 | }, 275 | "deep-equal": { 276 | "version": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", 277 | "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", 278 | "dev": true 279 | }, 280 | "deep-is": { 281 | "version": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 282 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" 283 | }, 284 | "degenerator": { 285 | "version": "1.0.4", 286 | "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", 287 | "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", 288 | "requires": { 289 | "ast-types": "0.10.1", 290 | "escodegen": "1.9.0", 291 | "esprima": "3.1.3" 292 | } 293 | }, 294 | "delayed-stream": { 295 | "version": "1.0.0", 296 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 297 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 298 | }, 299 | "depd": { 300 | "version": "1.1.1", 301 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", 302 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" 303 | }, 304 | "difflet": { 305 | "version": "https://registry.npmjs.org/difflet/-/difflet-0.2.6.tgz", 306 | "integrity": "sha1-qyOzH1ZJtvqo49KsvTNEZzZcpvo=", 307 | "dev": true, 308 | "requires": { 309 | "charm": "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz", 310 | "deep-is": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 311 | "traverse": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz" 312 | } 313 | }, 314 | "dom-serializer": { 315 | "version": "0.1.0", 316 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", 317 | "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", 318 | "dev": true, 319 | "requires": { 320 | "domelementtype": "1.1.3", 321 | "entities": "1.1.1" 322 | }, 323 | "dependencies": { 324 | "domelementtype": { 325 | "version": "1.1.3", 326 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", 327 | "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", 328 | "dev": true 329 | }, 330 | "entities": { 331 | "version": "1.1.1", 332 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", 333 | "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", 334 | "dev": true 335 | } 336 | } 337 | }, 338 | "domelementtype": { 339 | "version": "1.3.0", 340 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", 341 | "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", 342 | "dev": true 343 | }, 344 | "domhandler": { 345 | "version": "2.3.0", 346 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", 347 | "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", 348 | "dev": true, 349 | "requires": { 350 | "domelementtype": "1.3.0" 351 | } 352 | }, 353 | "domutils": { 354 | "version": "1.5.1", 355 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", 356 | "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", 357 | "dev": true, 358 | "requires": { 359 | "dom-serializer": "0.1.0", 360 | "domelementtype": "1.3.0" 361 | } 362 | }, 363 | "entities": { 364 | "version": "1.0.0", 365 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", 366 | "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", 367 | "dev": true 368 | }, 369 | "error-ex": { 370 | "version": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", 371 | "integrity": "sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=", 372 | "dev": true, 373 | "requires": { 374 | "is-arrayish": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" 375 | } 376 | }, 377 | "es6-promise": { 378 | "version": "4.2.4", 379 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", 380 | "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" 381 | }, 382 | "es6-promisify": { 383 | "version": "5.0.0", 384 | "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", 385 | "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", 386 | "requires": { 387 | "es6-promise": "4.2.4" 388 | } 389 | }, 390 | "escape-string-regexp": { 391 | "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 392 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 393 | "dev": true 394 | }, 395 | "escodegen": { 396 | "version": "1.9.0", 397 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz", 398 | "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==", 399 | "requires": { 400 | "esprima": "3.1.3", 401 | "estraverse": "4.2.0", 402 | "esutils": "2.0.2", 403 | "optionator": "0.8.2", 404 | "source-map": "0.5.7" 405 | } 406 | }, 407 | "esprima": { 408 | "version": "3.1.3", 409 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", 410 | "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" 411 | }, 412 | "estraverse": { 413 | "version": "4.2.0", 414 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", 415 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" 416 | }, 417 | "esutils": { 418 | "version": "2.0.2", 419 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 420 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" 421 | }, 422 | "eventemitter2": { 423 | "version": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", 424 | "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", 425 | "dev": true 426 | }, 427 | "exit": { 428 | "version": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", 429 | "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", 430 | "dev": true 431 | }, 432 | "extend": { 433 | "version": "3.0.1", 434 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 435 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" 436 | }, 437 | "fast-levenshtein": { 438 | "version": "2.0.6", 439 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 440 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" 441 | }, 442 | "file-uri-to-path": { 443 | "version": "1.0.0", 444 | "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", 445 | "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" 446 | }, 447 | "filendir": { 448 | "version": "1.0.0", 449 | "resolved": "https://registry.npmjs.org/filendir/-/filendir-1.0.0.tgz", 450 | "integrity": "sha1-dFtEWvzElwpM2wD9lTnHftlCrfY=", 451 | "requires": { 452 | "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" 453 | } 454 | }, 455 | "find-up": { 456 | "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", 457 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", 458 | "dev": true, 459 | "requires": { 460 | "path-exists": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", 461 | "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz" 462 | } 463 | }, 464 | "findup-sync": { 465 | "version": "0.3.0", 466 | "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", 467 | "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", 468 | "dev": true, 469 | "requires": { 470 | "glob": "5.0.15" 471 | }, 472 | "dependencies": { 473 | "balanced-match": { 474 | "version": "1.0.0", 475 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 476 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 477 | "dev": true 478 | }, 479 | "brace-expansion": { 480 | "version": "1.1.8", 481 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 482 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 483 | "dev": true, 484 | "requires": { 485 | "balanced-match": "1.0.0", 486 | "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 487 | } 488 | }, 489 | "glob": { 490 | "version": "5.0.15", 491 | "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", 492 | "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", 493 | "dev": true, 494 | "requires": { 495 | "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz", 496 | "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 497 | "minimatch": "3.0.4", 498 | "once": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 499 | "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz" 500 | } 501 | }, 502 | "minimatch": { 503 | "version": "3.0.4", 504 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 505 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 506 | "dev": true, 507 | "requires": { 508 | "brace-expansion": "1.1.8" 509 | } 510 | } 511 | } 512 | }, 513 | "form-data": { 514 | "version": "2.3.1", 515 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", 516 | "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", 517 | "requires": { 518 | "asynckit": "0.4.0", 519 | "combined-stream": "1.0.5", 520 | "mime-types": "2.1.17" 521 | } 522 | }, 523 | "formidable": { 524 | "version": "1.1.1", 525 | "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.1.1.tgz", 526 | "integrity": "sha1-lriIb3w8NQi5Mta9cMTTqI818ak=" 527 | }, 528 | "fs.realpath": { 529 | "version": "1.0.0", 530 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 531 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 532 | }, 533 | "ftp": { 534 | "version": "0.3.10", 535 | "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", 536 | "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", 537 | "requires": { 538 | "readable-stream": "1.1.14", 539 | "xregexp": "2.0.0" 540 | } 541 | }, 542 | "get-stdin": { 543 | "version": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", 544 | "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", 545 | "dev": true 546 | }, 547 | "get-uri": { 548 | "version": "2.0.1", 549 | "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.1.tgz", 550 | "integrity": "sha512-7aelVrYqCLuVjq2kEKRTH8fXPTC0xKTkM+G7UlFkEwCXY3sFbSxvY375JoFowOAYbkaU47SrBvOefUlLZZ+6QA==", 551 | "requires": { 552 | "data-uri-to-buffer": "1.2.0", 553 | "debug": "2.6.9", 554 | "extend": "3.0.1", 555 | "file-uri-to-path": "1.0.0", 556 | "ftp": "0.3.10", 557 | "readable-stream": "2.3.3" 558 | }, 559 | "dependencies": { 560 | "debug": { 561 | "version": "2.6.9", 562 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 563 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 564 | "requires": { 565 | "ms": "2.0.0" 566 | } 567 | }, 568 | "inherits": { 569 | "version": "2.0.3", 570 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 571 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 572 | }, 573 | "isarray": { 574 | "version": "1.0.0", 575 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 576 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 577 | }, 578 | "readable-stream": { 579 | "version": "2.3.3", 580 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 581 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 582 | "requires": { 583 | "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 584 | "inherits": "2.0.3", 585 | "isarray": "1.0.0", 586 | "process-nextick-args": "1.0.7", 587 | "safe-buffer": "5.1.1", 588 | "string_decoder": "1.0.3", 589 | "util-deprecate": "1.0.2" 590 | } 591 | }, 592 | "string_decoder": { 593 | "version": "1.0.3", 594 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 595 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 596 | "requires": { 597 | "safe-buffer": "5.1.1" 598 | } 599 | } 600 | } 601 | }, 602 | "getobject": { 603 | "version": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", 604 | "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", 605 | "dev": true 606 | }, 607 | "glob": { 608 | "version": "7.1.2", 609 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 610 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 611 | "requires": { 612 | "fs.realpath": "1.0.0", 613 | "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz", 614 | "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 615 | "minimatch": "3.0.4", 616 | "once": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 617 | "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz" 618 | } 619 | }, 620 | "globule": { 621 | "version": "1.2.0", 622 | "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", 623 | "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", 624 | "requires": { 625 | "glob": "7.1.2", 626 | "lodash": "4.17.4", 627 | "minimatch": "3.0.4" 628 | }, 629 | "dependencies": { 630 | "lodash": { 631 | "version": "4.17.4", 632 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 633 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" 634 | } 635 | } 636 | }, 637 | "graceful-fs": { 638 | "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.3.tgz", 639 | "integrity": "sha1-kgM84RETxB4mKNYf36QLwQ3AFVw=", 640 | "dev": true 641 | }, 642 | "grunt": { 643 | "version": "https://registry.npmjs.org/grunt/-/grunt-1.0.1.tgz", 644 | "integrity": "sha1-6HeHZOlEsY8yuw8QuQeEdcnftWs=", 645 | "dev": true, 646 | "requires": { 647 | "coffee-script": "1.10.0", 648 | "dateformat": "1.0.12", 649 | "eventemitter2": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", 650 | "exit": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", 651 | "findup-sync": "0.3.0", 652 | "glob": "7.0.6", 653 | "grunt-cli": "1.2.0", 654 | "grunt-known-options": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", 655 | "grunt-legacy-log": "1.0.0", 656 | "grunt-legacy-util": "1.0.0", 657 | "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", 658 | "js-yaml": "3.5.5", 659 | "minimatch": "3.0.4", 660 | "nopt": "3.0.6", 661 | "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz", 662 | "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz" 663 | }, 664 | "dependencies": { 665 | "balanced-match": { 666 | "version": "1.0.0", 667 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 668 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 669 | "dev": true 670 | }, 671 | "glob": { 672 | "version": "7.0.6", 673 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", 674 | "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", 675 | "dev": true, 676 | "requires": { 677 | "fs.realpath": "1.0.0", 678 | "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz", 679 | "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 680 | "minimatch": "3.0.4", 681 | "once": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 682 | "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz" 683 | } 684 | }, 685 | "grunt-cli": { 686 | "version": "1.2.0", 687 | "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", 688 | "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", 689 | "dev": true, 690 | "requires": { 691 | "findup-sync": "0.3.0", 692 | "grunt-known-options": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", 693 | "nopt": "3.0.6", 694 | "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz" 695 | } 696 | }, 697 | "minimatch": { 698 | "version": "3.0.4", 699 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 700 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 701 | "dev": true, 702 | "requires": { 703 | "brace-expansion": "1.1.8" 704 | }, 705 | "dependencies": { 706 | "brace-expansion": { 707 | "version": "1.1.8", 708 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 709 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 710 | "dev": true, 711 | "requires": { 712 | "balanced-match": "1.0.0", 713 | "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 714 | } 715 | } 716 | } 717 | } 718 | } 719 | }, 720 | "grunt-contrib-clean": { 721 | "version": "1.1.0", 722 | "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.1.0.tgz", 723 | "integrity": "sha1-Vkq/LQN4qYOhW54/MO51tzjEBjg=", 724 | "dev": true, 725 | "requires": { 726 | "async": "1.5.2", 727 | "rimraf": "2.6.1" 728 | }, 729 | "dependencies": { 730 | "balanced-match": { 731 | "version": "1.0.0", 732 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 733 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 734 | "dev": true 735 | }, 736 | "brace-expansion": { 737 | "version": "1.1.8", 738 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 739 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 740 | "dev": true, 741 | "requires": { 742 | "balanced-match": "1.0.0", 743 | "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 744 | } 745 | }, 746 | "glob": { 747 | "version": "7.1.2", 748 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 749 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 750 | "dev": true, 751 | "requires": { 752 | "fs.realpath": "1.0.0", 753 | "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz", 754 | "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 755 | "minimatch": "3.0.4", 756 | "once": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 757 | "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz" 758 | } 759 | }, 760 | "minimatch": { 761 | "version": "3.0.4", 762 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 763 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 764 | "dev": true, 765 | "requires": { 766 | "brace-expansion": "1.1.8" 767 | } 768 | }, 769 | "rimraf": { 770 | "version": "2.6.1", 771 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", 772 | "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", 773 | "dev": true, 774 | "requires": { 775 | "glob": "7.1.2" 776 | } 777 | } 778 | } 779 | }, 780 | "grunt-contrib-jshint": { 781 | "version": "1.1.0", 782 | "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-1.1.0.tgz", 783 | "integrity": "sha1-Np2QmyWTxA6L55lAshNAhQx5Oaw=", 784 | "dev": true, 785 | "requires": { 786 | "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz", 787 | "hooker": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", 788 | "jshint": "2.9.5" 789 | } 790 | }, 791 | "grunt-contrib-nodeunit": { 792 | "version": "https://registry.npmjs.org/grunt-contrib-nodeunit/-/grunt-contrib-nodeunit-1.0.0.tgz", 793 | "integrity": "sha1-b0iFVe2cDIR4hUEDxx7bH8RoXwU=", 794 | "dev": true, 795 | "requires": { 796 | "nodeunit": "https://registry.npmjs.org/nodeunit/-/nodeunit-0.9.1.tgz" 797 | } 798 | }, 799 | "grunt-known-options": { 800 | "version": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.0.tgz", 801 | "integrity": "sha1-pCdO6zL6dl2lp6OxcSYXzjsUQUk=", 802 | "dev": true 803 | }, 804 | "grunt-legacy-log": { 805 | "version": "1.0.0", 806 | "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-1.0.0.tgz", 807 | "integrity": "sha1-+4bxgJhHvAfcR4Q/ns1srLYt8tU=", 808 | "dev": true, 809 | "requires": { 810 | "colors": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", 811 | "grunt-legacy-log-utils": "1.0.0", 812 | "hooker": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", 813 | "lodash": "3.10.1", 814 | "underscore.string": "3.2.3" 815 | }, 816 | "dependencies": { 817 | "lodash": { 818 | "version": "3.10.1", 819 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", 820 | "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", 821 | "dev": true 822 | } 823 | } 824 | }, 825 | "grunt-legacy-log-utils": { 826 | "version": "1.0.0", 827 | "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-1.0.0.tgz", 828 | "integrity": "sha1-p7ji0Ps1taUPSvmG/BEnSevJbz0=", 829 | "dev": true, 830 | "requires": { 831 | "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz", 832 | "lodash": "4.3.0" 833 | }, 834 | "dependencies": { 835 | "lodash": { 836 | "version": "4.3.0", 837 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", 838 | "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", 839 | "dev": true 840 | } 841 | } 842 | }, 843 | "grunt-legacy-util": { 844 | "version": "1.0.0", 845 | "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.0.0.tgz", 846 | "integrity": "sha1-OGqnjcbtUJhsKxiVcmWxtIq7m4Y=", 847 | "dev": true, 848 | "requires": { 849 | "async": "1.5.2", 850 | "exit": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", 851 | "getobject": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", 852 | "hooker": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", 853 | "lodash": "4.3.0", 854 | "underscore.string": "3.2.3", 855 | "which": "1.2.14" 856 | }, 857 | "dependencies": { 858 | "lodash": { 859 | "version": "4.3.0", 860 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.3.0.tgz", 861 | "integrity": "sha1-79nEpuxT87BUEkKZFcPkgk5NJaQ=", 862 | "dev": true 863 | } 864 | } 865 | }, 866 | "has-ansi": { 867 | "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 868 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 869 | "dev": true, 870 | "requires": { 871 | "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" 872 | } 873 | }, 874 | "hooker": { 875 | "version": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", 876 | "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", 877 | "dev": true 878 | }, 879 | "hosted-git-info": { 880 | "version": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.4.tgz", 881 | "integrity": "sha1-2elTsmmIvogJbEbpJklNlgTDAPg=", 882 | "dev": true 883 | }, 884 | "html-angular-validate": { 885 | "version": "0.2.3", 886 | "resolved": "https://registry.npmjs.org/html-angular-validate/-/html-angular-validate-0.2.3.tgz", 887 | "integrity": "sha512-4UQ/6xKPd/hOEZJ+WQ77XeW+wZgu1iWr2YudgfDvxJcCVeZz5G2KtP8ITJnz53jwOkyRRt70K9jSCN9O8MYRVA==", 888 | "requires": { 889 | "async": "2.6.0", 890 | "filendir": "1.0.0", 891 | "globule": "1.2.0", 892 | "node.extend": "2.0.0", 893 | "string.prototype.endswith": "0.2.0", 894 | "w3cjs": "0.4.0", 895 | "xmlbuilder": "9.0.4" 896 | }, 897 | "dependencies": { 898 | "async": { 899 | "version": "2.6.0", 900 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", 901 | "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", 902 | "requires": { 903 | "lodash": "4.17.4" 904 | } 905 | }, 906 | "lodash": { 907 | "version": "4.17.4", 908 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 909 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" 910 | } 911 | } 912 | }, 913 | "htmlparser2": { 914 | "version": "3.8.3", 915 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", 916 | "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", 917 | "dev": true, 918 | "requires": { 919 | "domelementtype": "1.3.0", 920 | "domhandler": "2.3.0", 921 | "domutils": "1.5.1", 922 | "entities": "1.0.0", 923 | "readable-stream": "1.1.14" 924 | } 925 | }, 926 | "http-errors": { 927 | "version": "1.6.2", 928 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", 929 | "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", 930 | "requires": { 931 | "depd": "1.1.1", 932 | "inherits": "2.0.3", 933 | "setprototypeof": "1.0.3", 934 | "statuses": "1.4.0" 935 | }, 936 | "dependencies": { 937 | "inherits": { 938 | "version": "2.0.3", 939 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 940 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 941 | } 942 | } 943 | }, 944 | "http-proxy-agent": { 945 | "version": "1.0.0", 946 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz", 947 | "integrity": "sha1-zBzjjkU7+YSg93AtLdWcc9CBKEo=", 948 | "requires": { 949 | "agent-base": "2.1.1", 950 | "debug": "2.6.9", 951 | "extend": "3.0.1" 952 | }, 953 | "dependencies": { 954 | "agent-base": { 955 | "version": "2.1.1", 956 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", 957 | "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", 958 | "requires": { 959 | "extend": "3.0.1", 960 | "semver": "5.0.3" 961 | } 962 | }, 963 | "debug": { 964 | "version": "2.6.9", 965 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 966 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 967 | "requires": { 968 | "ms": "2.0.0" 969 | } 970 | }, 971 | "semver": { 972 | "version": "5.0.3", 973 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", 974 | "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=" 975 | } 976 | } 977 | }, 978 | "https-proxy-agent": { 979 | "version": "1.0.0", 980 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", 981 | "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", 982 | "requires": { 983 | "agent-base": "2.1.1", 984 | "debug": "2.6.9", 985 | "extend": "3.0.1" 986 | }, 987 | "dependencies": { 988 | "agent-base": { 989 | "version": "2.1.1", 990 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", 991 | "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", 992 | "requires": { 993 | "extend": "3.0.1", 994 | "semver": "5.0.3" 995 | } 996 | }, 997 | "debug": { 998 | "version": "2.6.9", 999 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1000 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1001 | "requires": { 1002 | "ms": "2.0.0" 1003 | } 1004 | }, 1005 | "semver": { 1006 | "version": "5.0.3", 1007 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", 1008 | "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=" 1009 | } 1010 | } 1011 | }, 1012 | "iconv-lite": { 1013 | "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz", 1014 | "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=", 1015 | "dev": true 1016 | }, 1017 | "indent-string": { 1018 | "version": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", 1019 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", 1020 | "dev": true, 1021 | "requires": { 1022 | "repeating": "https://registry.npmjs.org/repeating/-/repeating-2.0.0.tgz" 1023 | } 1024 | }, 1025 | "inflight": { 1026 | "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz", 1027 | "integrity": "sha1-bLtFIevVHODsCpNr/XZX736bFyo=", 1028 | "requires": { 1029 | "once": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 1030 | "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" 1031 | } 1032 | }, 1033 | "inherits": { 1034 | "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 1035 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" 1036 | }, 1037 | "ip": { 1038 | "version": "1.1.5", 1039 | "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", 1040 | "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" 1041 | }, 1042 | "is": { 1043 | "version": "3.2.1", 1044 | "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz", 1045 | "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=" 1046 | }, 1047 | "is-arrayish": { 1048 | "version": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1049 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 1050 | "dev": true 1051 | }, 1052 | "is-builtin-module": { 1053 | "version": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", 1054 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", 1055 | "dev": true, 1056 | "requires": { 1057 | "builtin-modules": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" 1058 | } 1059 | }, 1060 | "is-finite": { 1061 | "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz", 1062 | "integrity": "sha1-ZDhgPq6+J5OUj/SkJi7I2z1iWXs=", 1063 | "dev": true, 1064 | "requires": { 1065 | "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz" 1066 | } 1067 | }, 1068 | "is-utf8": { 1069 | "version": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 1070 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", 1071 | "dev": true 1072 | }, 1073 | "isarray": { 1074 | "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1075 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 1076 | }, 1077 | "js-yaml": { 1078 | "version": "3.5.5", 1079 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", 1080 | "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", 1081 | "dev": true, 1082 | "requires": { 1083 | "argparse": "1.0.9", 1084 | "esprima": "2.7.3" 1085 | }, 1086 | "dependencies": { 1087 | "esprima": { 1088 | "version": "2.7.3", 1089 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", 1090 | "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", 1091 | "dev": true 1092 | } 1093 | } 1094 | }, 1095 | "jshint": { 1096 | "version": "2.9.5", 1097 | "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.9.5.tgz", 1098 | "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", 1099 | "dev": true, 1100 | "requires": { 1101 | "cli": "1.0.1", 1102 | "console-browserify": "1.1.0", 1103 | "exit": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", 1104 | "htmlparser2": "3.8.3", 1105 | "lodash": "3.7.0", 1106 | "minimatch": "3.0.4", 1107 | "shelljs": "0.3.0", 1108 | "strip-json-comments": "1.0.4" 1109 | } 1110 | }, 1111 | "levn": { 1112 | "version": "0.3.0", 1113 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 1114 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 1115 | "requires": { 1116 | "prelude-ls": "1.1.2", 1117 | "type-check": "0.3.2" 1118 | } 1119 | }, 1120 | "load-json-file": { 1121 | "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", 1122 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", 1123 | "dev": true, 1124 | "requires": { 1125 | "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.3.tgz", 1126 | "parse-json": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 1127 | "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1128 | "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz", 1129 | "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" 1130 | } 1131 | }, 1132 | "lodash": { 1133 | "version": "3.7.0", 1134 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.7.0.tgz", 1135 | "integrity": "sha1-Nni9irmVBXwHreg27S7wh9qBHUU=", 1136 | "dev": true 1137 | }, 1138 | "loud-rejection": { 1139 | "version": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.3.0.tgz", 1140 | "integrity": "sha1-8omjkvF9K6rPGU0KZzAEOUQzsRU=", 1141 | "dev": true, 1142 | "requires": { 1143 | "array-find-index": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.1.tgz", 1144 | "signal-exit": "https://registry.npmjs.org/signal-exit/-/signal-exit-2.1.2.tgz" 1145 | } 1146 | }, 1147 | "lru-cache": { 1148 | "version": "2.7.3", 1149 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", 1150 | "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=" 1151 | }, 1152 | "map-obj": { 1153 | "version": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", 1154 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", 1155 | "dev": true 1156 | }, 1157 | "meow": { 1158 | "version": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", 1159 | "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", 1160 | "dev": true, 1161 | "requires": { 1162 | "camelcase-keys": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", 1163 | "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.1.2.tgz", 1164 | "loud-rejection": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.3.0.tgz", 1165 | "map-obj": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", 1166 | "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1167 | "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", 1168 | "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.0.1.tgz", 1169 | "read-pkg-up": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", 1170 | "redent": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", 1171 | "trim-newlines": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" 1172 | }, 1173 | "dependencies": { 1174 | "minimist": { 1175 | "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1176 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 1177 | "dev": true 1178 | } 1179 | } 1180 | }, 1181 | "methods": { 1182 | "version": "1.1.2", 1183 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1184 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 1185 | }, 1186 | "mime": { 1187 | "version": "1.6.0", 1188 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1189 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 1190 | }, 1191 | "mime-db": { 1192 | "version": "1.30.0", 1193 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", 1194 | "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" 1195 | }, 1196 | "mime-types": { 1197 | "version": "2.1.17", 1198 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", 1199 | "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", 1200 | "requires": { 1201 | "mime-db": "1.30.0" 1202 | } 1203 | }, 1204 | "minimatch": { 1205 | "version": "3.0.4", 1206 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1207 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1208 | "requires": { 1209 | "brace-expansion": "1.1.8" 1210 | }, 1211 | "dependencies": { 1212 | "balanced-match": { 1213 | "version": "1.0.0", 1214 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 1215 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 1216 | }, 1217 | "brace-expansion": { 1218 | "version": "1.1.8", 1219 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 1220 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 1221 | "requires": { 1222 | "balanced-match": "1.0.0", 1223 | "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 1224 | } 1225 | } 1226 | } 1227 | }, 1228 | "minimist": { 1229 | "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1230 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 1231 | }, 1232 | "mkdirp": { 1233 | "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1234 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1235 | "requires": { 1236 | "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" 1237 | } 1238 | }, 1239 | "ms": { 1240 | "version": "2.0.0", 1241 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1242 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1243 | }, 1244 | "netmask": { 1245 | "version": "1.0.6", 1246 | "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", 1247 | "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=" 1248 | }, 1249 | "node.extend": { 1250 | "version": "2.0.0", 1251 | "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-2.0.0.tgz", 1252 | "integrity": "sha1-dSWih1Z36lNHhKXhCseJVhOWFN8=", 1253 | "requires": { 1254 | "is": "3.2.1" 1255 | } 1256 | }, 1257 | "nodeunit": { 1258 | "version": "https://registry.npmjs.org/nodeunit/-/nodeunit-0.9.1.tgz", 1259 | "integrity": "sha1-5VPdQdh2lALDuasy0OculmhAUTk=", 1260 | "dev": true, 1261 | "requires": { 1262 | "tap": "https://registry.npmjs.org/tap/-/tap-0.7.1.tgz" 1263 | } 1264 | }, 1265 | "nopt": { 1266 | "version": "3.0.6", 1267 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", 1268 | "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", 1269 | "dev": true, 1270 | "requires": { 1271 | "abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz" 1272 | } 1273 | }, 1274 | "normalize-package-data": { 1275 | "version": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", 1276 | "integrity": "sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=", 1277 | "dev": true, 1278 | "requires": { 1279 | "hosted-git-info": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.4.tgz", 1280 | "is-builtin-module": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", 1281 | "semver": "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz", 1282 | "validate-npm-package-license": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz" 1283 | } 1284 | }, 1285 | "number-is-nan": { 1286 | "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz", 1287 | "integrity": "sha1-wCD1KcUoKt/dIz2R1LGBw9aG3Es=", 1288 | "dev": true 1289 | }, 1290 | "object-assign": { 1291 | "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.0.1.tgz", 1292 | "integrity": "sha1-mVBEVsNZi1ytT8WcJuipuxB/4L0=", 1293 | "dev": true 1294 | }, 1295 | "once": { 1296 | "version": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", 1297 | "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", 1298 | "requires": { 1299 | "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz" 1300 | } 1301 | }, 1302 | "optionator": { 1303 | "version": "0.8.2", 1304 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 1305 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 1306 | "requires": { 1307 | "deep-is": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 1308 | "fast-levenshtein": "2.0.6", 1309 | "levn": "0.3.0", 1310 | "prelude-ls": "1.1.2", 1311 | "type-check": "0.3.2", 1312 | "wordwrap": "1.0.0" 1313 | } 1314 | }, 1315 | "pac-proxy-agent": { 1316 | "version": "2.0.0", 1317 | "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-2.0.0.tgz", 1318 | "integrity": "sha512-t57UiJpi5mFLTvjheC1SNSwIhml3+ElNOj69iRrydtQXZJr8VIFYSDtyPi/3ZysA62kD2dmww6pDlzk0VaONZg==", 1319 | "requires": { 1320 | "agent-base": "2.1.1", 1321 | "debug": "2.6.9", 1322 | "get-uri": "2.0.1", 1323 | "http-proxy-agent": "1.0.0", 1324 | "https-proxy-agent": "1.0.0", 1325 | "pac-resolver": "3.0.0", 1326 | "raw-body": "2.3.2", 1327 | "socks-proxy-agent": "3.0.1" 1328 | }, 1329 | "dependencies": { 1330 | "agent-base": { 1331 | "version": "2.1.1", 1332 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", 1333 | "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", 1334 | "requires": { 1335 | "extend": "3.0.1", 1336 | "semver": "5.0.3" 1337 | } 1338 | }, 1339 | "debug": { 1340 | "version": "2.6.9", 1341 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1342 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1343 | "requires": { 1344 | "ms": "2.0.0" 1345 | } 1346 | }, 1347 | "semver": { 1348 | "version": "5.0.3", 1349 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", 1350 | "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=" 1351 | } 1352 | } 1353 | }, 1354 | "pac-resolver": { 1355 | "version": "3.0.0", 1356 | "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz", 1357 | "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", 1358 | "requires": { 1359 | "co": "4.6.0", 1360 | "degenerator": "1.0.4", 1361 | "ip": "1.1.5", 1362 | "netmask": "1.0.6", 1363 | "thunkify": "2.1.2" 1364 | } 1365 | }, 1366 | "parse-json": { 1367 | "version": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 1368 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 1369 | "dev": true, 1370 | "requires": { 1371 | "error-ex": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz" 1372 | } 1373 | }, 1374 | "path-exists": { 1375 | "version": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", 1376 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", 1377 | "dev": true, 1378 | "requires": { 1379 | "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz" 1380 | } 1381 | }, 1382 | "path-is-absolute": { 1383 | "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz", 1384 | "integrity": "sha1-Jj2tpmqz8vsQv3+dJN2PPlcO+RI=" 1385 | }, 1386 | "path-type": { 1387 | "version": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", 1388 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", 1389 | "dev": true, 1390 | "requires": { 1391 | "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.3.tgz", 1392 | "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1393 | "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz" 1394 | } 1395 | }, 1396 | "pify": { 1397 | "version": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1398 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 1399 | "dev": true 1400 | }, 1401 | "pinkie": { 1402 | "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 1403 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 1404 | "dev": true 1405 | }, 1406 | "pinkie-promise": { 1407 | "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz", 1408 | "integrity": "sha1-TINTjeH25mDCngoTRGhE96foglk=", 1409 | "dev": true, 1410 | "requires": { 1411 | "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" 1412 | } 1413 | }, 1414 | "prelude-ls": { 1415 | "version": "1.1.2", 1416 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1417 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" 1418 | }, 1419 | "process-nextick-args": { 1420 | "version": "1.0.7", 1421 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 1422 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" 1423 | }, 1424 | "proxy-agent": { 1425 | "version": "2.2.0", 1426 | "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-2.2.0.tgz", 1427 | "integrity": "sha512-cmWjNB7/5pVrYAFAt+6ppLyUAWd4LhWw47hkUISXHAieM5jT2PWjhh1dbpHUEX3lJhWjAqdNGrW8RnUFfLCU9w==", 1428 | "requires": { 1429 | "agent-base": "4.2.0", 1430 | "debug": "2.6.9", 1431 | "http-proxy-agent": "1.0.0", 1432 | "https-proxy-agent": "1.0.0", 1433 | "lru-cache": "2.7.3", 1434 | "pac-proxy-agent": "2.0.0", 1435 | "socks-proxy-agent": "3.0.1" 1436 | }, 1437 | "dependencies": { 1438 | "debug": { 1439 | "version": "2.6.9", 1440 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1441 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1442 | "requires": { 1443 | "ms": "2.0.0" 1444 | } 1445 | } 1446 | } 1447 | }, 1448 | "qs": { 1449 | "version": "6.5.1", 1450 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 1451 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" 1452 | }, 1453 | "raw-body": { 1454 | "version": "2.3.2", 1455 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", 1456 | "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", 1457 | "requires": { 1458 | "bytes": "3.0.0", 1459 | "http-errors": "1.6.2", 1460 | "iconv-lite": "0.4.19", 1461 | "unpipe": "1.0.0" 1462 | }, 1463 | "dependencies": { 1464 | "iconv-lite": { 1465 | "version": "0.4.19", 1466 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 1467 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" 1468 | } 1469 | } 1470 | }, 1471 | "read-pkg": { 1472 | "version": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", 1473 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", 1474 | "dev": true, 1475 | "requires": { 1476 | "load-json-file": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", 1477 | "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", 1478 | "path-type": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" 1479 | } 1480 | }, 1481 | "read-pkg-up": { 1482 | "version": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", 1483 | "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", 1484 | "dev": true, 1485 | "requires": { 1486 | "find-up": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", 1487 | "read-pkg": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" 1488 | } 1489 | }, 1490 | "readable-stream": { 1491 | "version": "1.1.14", 1492 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 1493 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 1494 | "requires": { 1495 | "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1496 | "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 1497 | "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1498 | "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" 1499 | } 1500 | }, 1501 | "redent": { 1502 | "version": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", 1503 | "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", 1504 | "dev": true, 1505 | "requires": { 1506 | "indent-string": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", 1507 | "strip-indent": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz" 1508 | } 1509 | }, 1510 | "repeating": { 1511 | "version": "https://registry.npmjs.org/repeating/-/repeating-2.0.0.tgz", 1512 | "integrity": "sha1-/SfW0mTRj76/qlZVPde4JTWlA04=", 1513 | "dev": true, 1514 | "requires": { 1515 | "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz" 1516 | } 1517 | }, 1518 | "resolve": { 1519 | "version": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", 1520 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", 1521 | "dev": true 1522 | }, 1523 | "rimraf": { 1524 | "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", 1525 | "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", 1526 | "dev": true 1527 | }, 1528 | "runforcover": { 1529 | "version": "https://registry.npmjs.org/runforcover/-/runforcover-0.0.2.tgz", 1530 | "integrity": "sha1-NE8FfY1F0zrrxsyCIEZ49pxIV8w=", 1531 | "dev": true, 1532 | "requires": { 1533 | "bunker": "https://registry.npmjs.org/bunker/-/bunker-0.1.2.tgz" 1534 | } 1535 | }, 1536 | "safe-buffer": { 1537 | "version": "5.1.1", 1538 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 1539 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 1540 | }, 1541 | "semver": { 1542 | "version": "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz", 1543 | "integrity": "sha1-hfLPhVBGXE3wAM99hvawVBBqueU=", 1544 | "dev": true 1545 | }, 1546 | "setprototypeof": { 1547 | "version": "1.0.3", 1548 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 1549 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" 1550 | }, 1551 | "shelljs": { 1552 | "version": "0.3.0", 1553 | "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", 1554 | "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", 1555 | "dev": true 1556 | }, 1557 | "signal-exit": { 1558 | "version": "https://registry.npmjs.org/signal-exit/-/signal-exit-2.1.2.tgz", 1559 | "integrity": "sha1-N1h5sfkuvDszRIDQONxUam1VhWQ=", 1560 | "dev": true 1561 | }, 1562 | "slide": { 1563 | "version": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", 1564 | "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", 1565 | "dev": true 1566 | }, 1567 | "smart-buffer": { 1568 | "version": "1.1.15", 1569 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", 1570 | "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=" 1571 | }, 1572 | "socks": { 1573 | "version": "1.1.10", 1574 | "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz", 1575 | "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", 1576 | "requires": { 1577 | "ip": "1.1.5", 1578 | "smart-buffer": "1.1.15" 1579 | } 1580 | }, 1581 | "socks-proxy-agent": { 1582 | "version": "3.0.1", 1583 | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-3.0.1.tgz", 1584 | "integrity": "sha512-ZwEDymm204mTzvdqyUqOdovVr2YRd2NYskrYrF2LXyZ9qDiMAoFESGK8CRphiO7rtbo2Y757k2Nia3x2hGtalA==", 1585 | "requires": { 1586 | "agent-base": "4.2.0", 1587 | "socks": "1.1.10" 1588 | } 1589 | }, 1590 | "source-map": { 1591 | "version": "0.5.7", 1592 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1593 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 1594 | "optional": true 1595 | }, 1596 | "spdx-correct": { 1597 | "version": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", 1598 | "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", 1599 | "dev": true, 1600 | "requires": { 1601 | "spdx-license-ids": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.1.tgz" 1602 | } 1603 | }, 1604 | "spdx-exceptions": { 1605 | "version": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-1.0.4.tgz", 1606 | "integrity": "sha1-IguEI5EZrpBFqJLbgag/TOFvgP0=", 1607 | "dev": true 1608 | }, 1609 | "spdx-expression-parse": { 1610 | "version": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.2.tgz", 1611 | "integrity": "sha1-1SsUtelnB3FECvIlvLVjEirEUvY=", 1612 | "dev": true, 1613 | "requires": { 1614 | "spdx-exceptions": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-1.0.4.tgz", 1615 | "spdx-license-ids": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.1.tgz" 1616 | } 1617 | }, 1618 | "spdx-license-ids": { 1619 | "version": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.1.tgz", 1620 | "integrity": "sha1-0H6hek0v2TUfnZTi/5zsdBgP6PM=", 1621 | "dev": true 1622 | }, 1623 | "sprintf-js": { 1624 | "version": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1625 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1626 | "dev": true 1627 | }, 1628 | "statuses": { 1629 | "version": "1.4.0", 1630 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 1631 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 1632 | }, 1633 | "string.prototype.endswith": { 1634 | "version": "0.2.0", 1635 | "resolved": "https://registry.npmjs.org/string.prototype.endswith/-/string.prototype.endswith-0.2.0.tgz", 1636 | "integrity": "sha1-oZwg3uUamHd+mkfhDwm+OTubunU=" 1637 | }, 1638 | "string_decoder": { 1639 | "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1640 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 1641 | }, 1642 | "strip-ansi": { 1643 | "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1644 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1645 | "dev": true, 1646 | "requires": { 1647 | "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz" 1648 | } 1649 | }, 1650 | "strip-bom": { 1651 | "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", 1652 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", 1653 | "dev": true, 1654 | "requires": { 1655 | "is-utf8": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" 1656 | } 1657 | }, 1658 | "strip-indent": { 1659 | "version": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", 1660 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", 1661 | "dev": true, 1662 | "requires": { 1663 | "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" 1664 | } 1665 | }, 1666 | "strip-json-comments": { 1667 | "version": "1.0.4", 1668 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", 1669 | "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", 1670 | "dev": true 1671 | }, 1672 | "superagent": { 1673 | "version": "3.8.2", 1674 | "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.2.tgz", 1675 | "integrity": "sha512-gVH4QfYHcY3P0f/BZzavLreHW3T1v7hG9B+hpMQotGQqurOvhv87GcMCd6LWySmBuf+BDR44TQd0aISjVHLeNQ==", 1676 | "requires": { 1677 | "component-emitter": "1.2.1", 1678 | "cookiejar": "2.1.1", 1679 | "debug": "3.1.0", 1680 | "extend": "3.0.1", 1681 | "form-data": "2.3.1", 1682 | "formidable": "1.1.1", 1683 | "methods": "1.1.2", 1684 | "mime": "1.6.0", 1685 | "qs": "6.5.1", 1686 | "readable-stream": "2.3.3" 1687 | }, 1688 | "dependencies": { 1689 | "inherits": { 1690 | "version": "2.0.3", 1691 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1692 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1693 | }, 1694 | "isarray": { 1695 | "version": "1.0.0", 1696 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1697 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1698 | }, 1699 | "readable-stream": { 1700 | "version": "2.3.3", 1701 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 1702 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 1703 | "requires": { 1704 | "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1705 | "inherits": "2.0.3", 1706 | "isarray": "1.0.0", 1707 | "process-nextick-args": "1.0.7", 1708 | "safe-buffer": "5.1.1", 1709 | "string_decoder": "1.0.3", 1710 | "util-deprecate": "1.0.2" 1711 | } 1712 | }, 1713 | "string_decoder": { 1714 | "version": "1.0.3", 1715 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 1716 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 1717 | "requires": { 1718 | "safe-buffer": "5.1.1" 1719 | } 1720 | } 1721 | } 1722 | }, 1723 | "superagent-proxy": { 1724 | "version": "1.0.2", 1725 | "resolved": "https://registry.npmjs.org/superagent-proxy/-/superagent-proxy-1.0.2.tgz", 1726 | "integrity": "sha1-ktNmBXj2GO1DqCz4yseZ/ik4ui0=", 1727 | "requires": { 1728 | "debug": "2.6.9", 1729 | "proxy-agent": "2.2.0" 1730 | }, 1731 | "dependencies": { 1732 | "debug": { 1733 | "version": "2.6.9", 1734 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1735 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1736 | "requires": { 1737 | "ms": "2.0.0" 1738 | } 1739 | } 1740 | } 1741 | }, 1742 | "supports-color": { 1743 | "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1744 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1745 | "dev": true 1746 | }, 1747 | "tap": { 1748 | "version": "https://registry.npmjs.org/tap/-/tap-0.7.1.tgz", 1749 | "integrity": "sha1-vq1RNs6rgkHhsozsZjgRxjsfPn0=", 1750 | "dev": true, 1751 | "requires": { 1752 | "buffer-equal": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.2.tgz", 1753 | "deep-equal": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", 1754 | "difflet": "https://registry.npmjs.org/difflet/-/difflet-0.2.6.tgz", 1755 | "glob": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", 1756 | "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 1757 | "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1758 | "nopt": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", 1759 | "runforcover": "https://registry.npmjs.org/runforcover/-/runforcover-0.0.2.tgz", 1760 | "slide": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", 1761 | "yamlish": "https://registry.npmjs.org/yamlish/-/yamlish-0.0.7.tgz" 1762 | }, 1763 | "dependencies": { 1764 | "glob": { 1765 | "version": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", 1766 | "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", 1767 | "dev": true, 1768 | "requires": { 1769 | "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz", 1770 | "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 1771 | "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", 1772 | "once": "https://registry.npmjs.org/once/-/once-1.3.3.tgz" 1773 | } 1774 | }, 1775 | "minimatch": { 1776 | "version": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", 1777 | "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", 1778 | "dev": true, 1779 | "requires": { 1780 | "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.3.tgz" 1781 | } 1782 | }, 1783 | "nopt": { 1784 | "version": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", 1785 | "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", 1786 | "dev": true, 1787 | "requires": { 1788 | "abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz" 1789 | } 1790 | } 1791 | } 1792 | }, 1793 | "thunkify": { 1794 | "version": "2.1.2", 1795 | "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", 1796 | "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=" 1797 | }, 1798 | "traverse": { 1799 | "version": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", 1800 | "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", 1801 | "dev": true 1802 | }, 1803 | "trim-newlines": { 1804 | "version": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", 1805 | "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", 1806 | "dev": true 1807 | }, 1808 | "type-check": { 1809 | "version": "0.3.2", 1810 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 1811 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 1812 | "requires": { 1813 | "prelude-ls": "1.1.2" 1814 | } 1815 | }, 1816 | "uglify-js": { 1817 | "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.1.1.tgz", 1818 | "integrity": "sha1-7nGpfEzv0GoamyBDfzQRiYKqA1s=", 1819 | "dev": true 1820 | }, 1821 | "underscore.string": { 1822 | "version": "3.2.3", 1823 | "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.2.3.tgz", 1824 | "integrity": "sha1-gGmSYzZl1eX8tNsfs6hi62jp5to=", 1825 | "dev": true 1826 | }, 1827 | "unpipe": { 1828 | "version": "1.0.0", 1829 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1830 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 1831 | }, 1832 | "util-deprecate": { 1833 | "version": "1.0.2", 1834 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1835 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1836 | }, 1837 | "validate-npm-package-license": { 1838 | "version": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", 1839 | "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", 1840 | "dev": true, 1841 | "requires": { 1842 | "spdx-correct": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", 1843 | "spdx-expression-parse": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.2.tgz" 1844 | } 1845 | }, 1846 | "w3cjs": { 1847 | "version": "0.4.0", 1848 | "resolved": "https://registry.npmjs.org/w3cjs/-/w3cjs-0.4.0.tgz", 1849 | "integrity": "sha1-EzYk4LhlYmfPanCF2NfGlLcPBI8=", 1850 | "requires": { 1851 | "commander": "2.13.0", 1852 | "superagent": "3.8.2", 1853 | "superagent-proxy": "1.0.2" 1854 | } 1855 | }, 1856 | "which": { 1857 | "version": "1.2.14", 1858 | "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", 1859 | "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", 1860 | "dev": true, 1861 | "requires": { 1862 | "isexe": "2.0.0" 1863 | }, 1864 | "dependencies": { 1865 | "isexe": { 1866 | "version": "2.0.0", 1867 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1868 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1869 | "dev": true 1870 | } 1871 | } 1872 | }, 1873 | "wordwrap": { 1874 | "version": "1.0.0", 1875 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 1876 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" 1877 | }, 1878 | "wrappy": { 1879 | "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz", 1880 | "integrity": "sha1-HmWWmWXMvC20VIxrhKbyxa7dRzk=" 1881 | }, 1882 | "xmlbuilder": { 1883 | "version": "9.0.4", 1884 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz", 1885 | "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=" 1886 | }, 1887 | "xregexp": { 1888 | "version": "2.0.0", 1889 | "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", 1890 | "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" 1891 | }, 1892 | "yamlish": { 1893 | "version": "https://registry.npmjs.org/yamlish/-/yamlish-0.0.7.tgz", 1894 | "integrity": "sha1-tK+aHcxjYYhzw9bkUewyE8OaV/s=", 1895 | "dev": true 1896 | } 1897 | } 1898 | } 1899 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "grunt-html-angular-validate", 3 | "description": "An HTML validator aimed at AngularJS projects.", 4 | "version": "0.6.1", 5 | "homepage": "https://github.com/nikestep/grunt-html-angular-validate", 6 | "author": { 7 | "name": "Nik Estep", 8 | "email": "nik.estep@gmail.com", 9 | "url": "http://nikestep.me" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git://github.com/nikestep/grunt-html-angular-validate.git" 14 | }, 15 | "bugs": { 16 | "url": "https://github.com/nikestep/grunt-html-angular-validate/issues" 17 | }, 18 | "license": "MIT", 19 | "engines": { 20 | "node": ">= 5.0.0" 21 | }, 22 | "scripts": { 23 | "test": "grunt test" 24 | }, 25 | "devDependencies": { 26 | "ansi-styles": "^3.2.0", 27 | "grunt": "~1.0.1", 28 | "grunt-contrib-clean": "~1.1.0", 29 | "grunt-contrib-jshint": "~1.1.0", 30 | "grunt-contrib-nodeunit": "~1.0.0" 31 | }, 32 | "dependencies": { 33 | "colors": "~1.1.2", 34 | "html-angular-validate": "~0.2.3" 35 | }, 36 | "keywords": [ 37 | "gruntplugin" 38 | ] 39 | } 40 | -------------------------------------------------------------------------------- /tasks/htmlangular.js: -------------------------------------------------------------------------------- 1 | /* 2 | * grunt-html-angular-validate 3 | * https://github.com/nikestep/grunt-html-angular-validate 4 | * 5 | * Copyright (c) 2014 Nik Estep 6 | * Licensed under the MIT license. 7 | */ 8 | 9 | 'use strict'; 10 | 11 | var colors = require('colors'); 12 | var validate = require('html-angular-validate'); 13 | 14 | var writeFileErrors = function(grunt, file) { 15 | // Start writing this file 16 | grunt.log.writeln('Validating ' + 17 | file.filepath + 18 | ' ...' + 19 | 'ERROR'.red); 20 | 21 | if (file.errors[0].msg === 'Unable to validate file') { 22 | grunt.log.writeln('Validating ' + 23 | file.filepath + 24 | ' ...' + 25 | 'ERROR'.red); 26 | grunt.log.writeln('Unable to validate file'.yellow); 27 | return; 28 | } 29 | 30 | // Write each error 31 | for (var i = 0; i < file.errors.length; i += 1) { 32 | var err = file.errors[i]; 33 | if (err.line !== undefined) { 34 | grunt.log.writeln('['.red + 35 | 'L'.yellow + 36 | ('' + err.line).yellow + 37 | ':'.red + 38 | 'C'.yellow + 39 | ('' + err.col).yellow + 40 | ']'.red + 41 | ' ' + 42 | err.msg.yellow); 43 | } else { 44 | grunt.log.writeln('['.red + 45 | 'file'.yellow + 46 | ']'.red + 47 | ' ' + 48 | err.msg.yellow); 49 | } 50 | } 51 | }; 52 | 53 | module.exports = function(grunt) { 54 | grunt.registerMultiTask('htmlangular', 'An HTML5 validator aimed at AngularJS projects.', function() { 55 | // Merge task-specific and/or target-specific options with these defaults. 56 | var options = this.options({ 57 | angular: true, 58 | customtags: [], 59 | customattrs: [], 60 | wrapping: {}, 61 | relaxerror: [], 62 | tmplext: 'tmpl.html', 63 | doctype: 'HTML5', 64 | charset: 'utf-8', 65 | reportpath: 'html-angular-validate-report.json', 66 | reportCheckstylePath: 'html-angular-validate-report-checkstyle.xml', 67 | w3clocal: null, 68 | w3cproxy: null, 69 | concurrentJobs: 1, 70 | maxvalidateattempts: 3 71 | }); 72 | options.concurrentjobs = options.concurrentJobs; 73 | 74 | // Delete existing reports if present 75 | if (options.reportpath !== null && grunt.file.exists(options.reportpath)) { 76 | grunt.file.delete(options.reportpath); 77 | } 78 | if (options.reportCheckstylePath !== null && grunt.file.exists(options.reportCheckstylePath)) { 79 | grunt.file.delete(options.reportCheckstylePath); 80 | } 81 | 82 | // Force task into async mode and grab a handle to the "done" function. 83 | var done = this.async(); 84 | 85 | // Run the validation plug in 86 | validate.validate(this.filesSrc, options).then(function(result) { 87 | // Finished, let user and grunt know how it went 88 | if (result.allpassed) { 89 | // No errors to output - task success 90 | grunt.log.oklns(result.filessucceeded + ' files passed validation'); 91 | done(); 92 | } else { 93 | // Output failures - task failure 94 | for (var i = 0; i < result.failed.length; i += 1) { 95 | writeFileErrors(grunt, result.failed[i]); 96 | } 97 | 98 | // Finalize output and send control back to grunt 99 | grunt.fail.warn('HTML validation failed'); 100 | done(false); 101 | } 102 | }, function(err) { 103 | // Validator failure - task failure 104 | grunt.log.errorlns('Unable to perform validation'); 105 | grunt.log.errorlns('html-angular-validate error: ' + err); 106 | done(false); 107 | }); 108 | }); 109 | }; 110 | -------------------------------------------------------------------------------- /test/html/invalid/improperly_closed_tag.tmpl.html: -------------------------------------------------------------------------------- 1 |

Some content

2 | -------------------------------------------------------------------------------- /test/html/invalid/improperly_nested_tags.tmpl.html: -------------------------------------------------------------------------------- 1 |
2 |

3 | Very noticeable 4 |

5 |
-------------------------------------------------------------------------------- /test/html/invalid/missing_closing_tag.tmpl.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | Some content. 4 |
-------------------------------------------------------------------------------- /test/html/invalid/template_missing_extension.html: -------------------------------------------------------------------------------- 1 |
2 | Nothing Special Div Fragment 3 |
4 |
    5 |
  • Item One
  • 6 |
  • Item Two
  • 7 |
  • Item Three
  • 8 |
9 |
10 |
-------------------------------------------------------------------------------- /test/html/valid/full/valid_angular.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Test HTML - Valid 5 | 6 | 7 |

{{paraBody}}

8 | 9 | Some sort of directive content would go here, I presume. 10 | 11 | 12 | -------------------------------------------------------------------------------- /test/html/valid/full/valid_angular_directives.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Test HTML - Valid 5 | 6 | 7 |
8 |
9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /test/html/valid/full/valid_regular.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Test HTML - Valid 5 | 6 | 7 |

Hi Nik!

8 | 9 | -------------------------------------------------------------------------------- /test/html/valid/template/valid_angular.tmpl.html: -------------------------------------------------------------------------------- 1 |
2 | {{fragLabel}} 3 |
4 |
    5 |
  • {{item}}
  • 6 |
7 |
8 |
-------------------------------------------------------------------------------- /test/html/valid/template/valid_angular_table_row.tmpl.html: -------------------------------------------------------------------------------- 1 | 2 | {name} 3 | {birthdate} 4 | {address} 5 | -------------------------------------------------------------------------------- /test/html/valid/template/valid_regular.tmpl.html: -------------------------------------------------------------------------------- 1 |
2 | Nothing Special Div Fragment 3 |
4 |
    5 |
  • Item One
  • 6 |
  • Item Two
  • 7 |
  • Item Three
  • 8 |
9 |
10 |
-------------------------------------------------------------------------------- /test/htmlangular_test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | /* 4 | ======== A Handy Little Nodeunit Reference ======== 5 | https://github.com/caolan/nodeunit 6 | 7 | Test methods: 8 | test.expect(numAssertions) 9 | test.done() 10 | Test assertions: 11 | test.ok(value, [message]) 12 | test.equal(actual, expected, [message]) 13 | test.notEqual(actual, expected, [message]) 14 | test.deepEqual(actual, expected, [message]) 15 | test.notDeepEqual(actual, expected, [message]) 16 | test.strictEqual(actual, expected, [message]) 17 | test.notStrictEqual(actual, expected, [message]) 18 | test.throws(block, [error], [message]) 19 | test.doesNotThrow(block, [error], [message]) 20 | test.ifError(value) 21 | */ 22 | 23 | var 24 | path = require('path'), 25 | exec = require('child_process').exec, 26 | execOptions = { 27 | cwd: path.join(__dirname, '..') 28 | } 29 | ; 30 | 31 | exports.tests = { 32 | default_options: function(test) { 33 | test.expect(1); 34 | exec('grunt htmlangular:default_options', execOptions, function(error, stdout) { 35 | test.equal( 36 | stdout.indexOf('6 files passed validation') > -1, 37 | true, 38 | 'valid files pass' 39 | ); 40 | test.done(); 41 | }); 42 | }, 43 | default_options_concurrent: function(test) { 44 | test.expect(1); 45 | exec('grunt htmlangular:default_options_concurrent', execOptions, function(error, stdout) { 46 | test.equal( 47 | stdout.indexOf('6 files passed validation') > -1, 48 | true, 49 | 'valid files pass' 50 | ); 51 | test.done(); 52 | }); 53 | }, 54 | missing_wrapping: function(test) { 55 | test.expect(4); 56 | exec('grunt htmlangular:missing_wrapping', execOptions, function(error, stdout) { 57 | test.equal( 58 | stdout.indexOf('Stray start tag “tr”') > -1, 59 | true, 60 | 'found unwrapped starting ' 61 | ); 62 | test.equal( 63 | stdout.indexOf('Stray start tag “td”') > -1, 64 | true, 65 | 'found unwrapped starting ' 66 | ); 67 | test.equal( 68 | stdout.indexOf('Stray end tag “td”') > -1, 69 | true, 70 | 'found unwrapped starting ' 71 | ); 72 | test.equal( 73 | stdout.indexOf('Stray end tag “tr”') > -1, 74 | true, 75 | 'found unwrapped starting ' 76 | ); 77 | test.done(); 78 | }); 79 | }, 80 | /*missing_custom_tags: function(test) { 81 | test.expect(1); 82 | exec('grunt htmlangular:missing_custom_tags', execOptions, function(error, stdout) { 83 | test.equal( 84 | stdout.indexOf('Element “custom-tag” not allowed as child') > -1, 85 | true, 86 | 'found custom tag' 87 | ); 88 | test.done(); 89 | }); 90 | },*/ 91 | missing_custom_attrs: function(test) { 92 | test.expect(1); 93 | exec('grunt htmlangular:missing_custom_attrs', execOptions, function(error, stdout) { 94 | test.equal( 95 | stdout.indexOf('Attribute “fixed-div-label” not allowed on element') > -1, 96 | true, 97 | 'found custom attribute' 98 | ); 99 | test.done(); 100 | }); 101 | }, 102 | template_missing_extension: function(test) { 103 | test.expect(1); 104 | exec('grunt htmlangular:template_missing_extension', execOptions, function(error, stdout) { 105 | test.equal( 106 | stdout.indexOf('Element “head” is missing a required instance of child element “title”') > -1, 107 | true, 108 | 'figured out it is just template' 109 | ); 110 | test.done(); 111 | }); 112 | }, 113 | missing_closing_tag: function(test) { 114 | test.expect(1); 115 | exec('grunt htmlangular:missing_closing_tag', execOptions, function(error, stdout) { 116 | test.equal( 117 | stdout.indexOf('Unclosed element “div”') > -1, 118 | true, 119 | 'found unclosed div' 120 | ); 121 | test.done(); 122 | }); 123 | }, 124 | improperly_closed_tag: function(test) { 125 | test.expect(2); 126 | exec('grunt htmlangular:improperly_closed_tag', execOptions, function(error, stdout) { 127 | test.equal( 128 | stdout.indexOf('Self-closing syntax (“/>”) used on a non-void HTML element') > -1, 129 | true, 130 | 'found self-closed span' 131 | ); 132 | test.equal( 133 | stdout.indexOf('Unclosed element “span”') > -1, 134 | true, 135 | 'found unclosed span' 136 | ); 137 | test.done(); 138 | }); 139 | }, 140 | improperly_nested_tags: function(test) { 141 | test.expect(2); 142 | exec('grunt htmlangular:improperly_nested_tags', execOptions, function(error, stdout) { 143 | test.equal( 144 | stdout.indexOf('End tag “b” violates nesting rules') > -1, 145 | true, 146 | 'found closed too early' 147 | ); 148 | test.equal( 149 | stdout.indexOf('No “i” element in scope but a “i” end tag seen') > -1, 150 | true, 151 | 'found closed too late' 152 | ); 153 | test.done(); 154 | }); 155 | }, 156 | improper_angular_operator_relaxed: function(test) { 157 | test.expect(1); 158 | exec('grunt htmlangular:improper_angular_operator_relaxed', execOptions, function(error, stdout) { 159 | test.equal( 160 | stdout.indexOf('“&” did not start a character reference. (“&” probably should have been escaped as “&”.)') === -1, 161 | true, 162 | 'relaxed ignored error' 163 | ); 164 | test.done(); 165 | }); 166 | } 167 | }; 168 | --------------------------------------------------------------------------------