├── .gitignore ├── .travis.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── angular-clipboard.js ├── bower.json ├── demo └── index.html ├── karma.conf.js ├── package-lock.json ├── package.json └── test └── angular-clipboard.spec.js /.gitignore: -------------------------------------------------------------------------------- 1 | coverage 2 | node_modules 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - node 4 | addons: 5 | firefox: latest 6 | services: 7 | - xvfb 8 | after_script: "npm install coveralls@2.10.0 && cat ./coverage/**/lcov.info | coveralls" 9 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## [1.6.0] - 2017-07-07 2 | - Add support for Safari 10+ and Mobile Safari 10+. 3 | 4 | ## [1.5.0] - 2016-08-23 5 | - Prevent scroll to the top on copy in IE. 6 | - Use injected document for supported check. 7 | 8 | ## [1.4.2] - 2016-05-16 9 | - Prevent scroll to bottom in IE by inserting node at same top position. 10 | 11 | ## [1.4.1] - 2016-04-21 12 | - Make 'supported' property optional. 13 | 14 | ## [1.4.0] - 2016-04-15 15 | - Support for feature detection exposed through both factory and dynamic property. 16 | 17 | ## [1.3.0] - 2016-01-12 18 | - Add UMD support. 19 | 20 | ## [1.2.1] - 2016-01-04 21 | - Reset inline styles on error. 22 | 23 | ## [1.2.0] - 2015-12-11 24 | - Add clipboard service exposing copyText(). 25 | 26 | ## [1.1.2] - 2015-11-20 27 | - Fix angular scope call. 28 | 29 | ## [1.1.1] - 2015-10-02 30 | - Correctly fail on Safari. 31 | 32 | ## [1.0.1] - 2015-09-15 33 | - Add support for multiline. 34 | 35 | ## [1.0.1] - 2015-07-14 36 | - Remove dependency on $window. 37 | 38 | ## [1.0.0] - 2015-07-14 39 | - First release. 40 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # angular-clipboard 2 | 3 | [![Build Status](https://img.shields.io/travis/omichelsen/angular-clipboard/master.svg)](https://travis-ci.org/omichelsen/angular-clipboard) 4 | [![Test Coverage](https://img.shields.io/coveralls/omichelsen/angular-clipboard/master.svg)](https://coveralls.io/r/omichelsen/angular-clipboard?branch=master) 5 | [![npm bundle size (minified + gzip)](https://img.shields.io/bundlephobia/minzip/angular-clipboard.svg)](https://bundlephobia.com/result?p=angular-clipboard) 6 | 7 | Copy text to clipboard by clicking a button without using Flash. This is using the [Selection API](https://developer.mozilla.org/en-US/docs/Web/API/Selection) and [Clipboard API](https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent) available in newer browsers. 8 | 9 | Browser support: Chrome 43+, Firefox 41+, Opera 29+, IE10+, Safari 10+ and Mobile Safari 10+. 10 | 11 | See the [demo](https://rawgit.com/omichelsen/angular-clipboard/master/demo/index.html). 12 | 13 | ## Install 14 | 15 | ```bash 16 | $ npm install angular-clipboard --save 17 | ``` 18 | 19 | angular-clipboard has no other dependencies than [Angular](https://angularjs.org/) 20 | itself. 21 | 22 | ## Usage 23 | 24 | Require angular-clipboard as a dependency for your app: 25 | 26 | ```javascript 27 | angular.module('MyApp', ['angular-clipboard']) 28 | .controller('MyController', ['$scope', function ($scope) { 29 | $scope.supported = false; 30 | 31 | $scope.textToCopy = 'I can copy by clicking!'; 32 | 33 | $scope.success = function () { 34 | console.log('Copied!'); 35 | }; 36 | 37 | $scope.fail = function (err) { 38 | console.error('Error!', err); 39 | }; 40 | }]); 41 | ``` 42 | 43 | Copy text from an input field by clicking a button: 44 | 45 | ```html 46 | 47 | 48 | ``` 49 | 50 | You can supply a method to be called for the `on-copied` and `on-error` event. The `on-error` function will be called with the error object as argument `err`. 51 | 52 | The optional `supported` property can be used to detect browser support for the clipboard feature. 53 | 54 | ### Use as service 55 | 56 | You can also invoke the copy to clipboard action directly by injecting the `clipboard` service. Just remember it has to be in a click event, as clipboard access requires user action. 57 | 58 | ```javascript 59 | angular.module('MyApp', ['angular-clipboard']) 60 | .controller('MyController', ['$scope', 'clipboard', function ($scope, clipboard) { 61 | if (!clipboard.supported) { 62 | console.log('Sorry, copy to clipboard is not supported'); 63 | } 64 | 65 | $scope.clickHandler = function () { 66 | clipboard.copyText('Copy this text'); 67 | }; 68 | }]); 69 | ``` 70 | 71 | ### Use with a module loader 72 | 73 | If you are using a module loader, you can import the module name when requiring it in angular. Works with any AMD/UMD/CommonJS module loader. 74 | 75 | ```javascript 76 | import clipboardModule from 'angular-clipboard'; 77 | 78 | angular.module('mymodule', [clipboardModule.name]); 79 | ``` 80 | -------------------------------------------------------------------------------- /angular-clipboard.js: -------------------------------------------------------------------------------- 1 | (function (root, factory) { 2 | /* istanbul ignore next */ 3 | if (typeof define === 'function' && define.amd) { 4 | define(['angular'], factory); 5 | } else if (typeof module === 'object' && module.exports) { 6 | module.exports = factory(require('angular')); 7 | } else { 8 | root.angularClipboard = factory(root.angular); 9 | } 10 | }(this, function (angular) { 11 | 12 | return angular.module('angular-clipboard', []) 13 | .factory('clipboard', ['$document', '$window', function ($document, $window) { 14 | function createNode(text, context) { 15 | var node = $document[0].createElement('textarea'); 16 | node.style.position = 'absolute'; 17 | node.style.fontSize = '12pt'; 18 | node.style.border = '0'; 19 | node.style.padding = '0'; 20 | node.style.margin = '0'; 21 | node.style.left = '-10000px'; 22 | node.style.top = ($window.pageYOffset || $document[0].documentElement.scrollTop) + 'px'; 23 | node.textContent = text; 24 | return node; 25 | } 26 | 27 | function copyNode(node) { 28 | try { 29 | // Set inline style to override css styles 30 | $document[0].body.style.webkitUserSelect = 'initial'; 31 | 32 | var selection = $document[0].getSelection(); 33 | selection.removeAllRanges(); 34 | 35 | var range = document.createRange(); 36 | range.selectNodeContents(node); 37 | selection.addRange(range); 38 | // This makes it work in all desktop browsers (Chrome) 39 | node.select(); 40 | // This makes it work on Mobile Safari 41 | node.setSelectionRange(0, 999999); 42 | 43 | try { 44 | if(!$document[0].execCommand('copy')) { 45 | throw('failure copy'); 46 | } 47 | } finally { 48 | selection.removeAllRanges(); 49 | } 50 | } finally { 51 | // Reset inline style 52 | $document[0].body.style.webkitUserSelect = ''; 53 | } 54 | } 55 | 56 | function copyText(text, context) { 57 | var left = $window.pageXOffset || $document[0].documentElement.scrollLeft; 58 | var top = $window.pageYOffset || $document[0].documentElement.scrollTop; 59 | 60 | var container = (context && context.container) || $document[0].body; 61 | var node = createNode(text, context); 62 | container.appendChild(node); 63 | copyNode(node); 64 | 65 | $window.scrollTo(left, top); 66 | container.removeChild(node); 67 | } 68 | 69 | return { 70 | copyText: copyText, 71 | supported: 'queryCommandSupported' in $document[0] && $document[0].queryCommandSupported('copy') 72 | }; 73 | }]) 74 | .directive('clipboard', ['clipboard', function (clipboard) { 75 | return { 76 | restrict: 'A', 77 | scope: { 78 | onCopied: '&', 79 | onError: '&', 80 | text: '=', 81 | supported: '=?' 82 | }, 83 | link: function (scope, element) { 84 | scope.supported = clipboard.supported; 85 | 86 | element.on('click', function (event) { 87 | try { 88 | clipboard.copyText(scope.text, element[0]); 89 | if (angular.isFunction(scope.onCopied)) { 90 | scope.$evalAsync(scope.onCopied()); 91 | } 92 | } catch (err) { 93 | if (angular.isFunction(scope.onError)) { 94 | scope.$evalAsync(scope.onError({err: err})); 95 | } 96 | } 97 | }); 98 | } 99 | }; 100 | }]); 101 | 102 | })); 103 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-clipboard", 3 | "version": "1.7.0", 4 | "main": "angular-clipboard.js", 5 | "description": "Copy to clipboard with AngularJS directive, without using Flash.", 6 | "dependencies": { 7 | "angular": "*" 8 | }, 9 | "license": "MIT", 10 | "ignore": [ 11 | "demo", 12 | "test", 13 | ".gitignore", 14 | "bower.json", 15 | "karma.conf.js", 16 | "LICENSE", 17 | "package.json", 18 | "README.md" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /demo/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | angular-clipboard demo 6 | 7 | 8 | 9 | 10 |

Click button to copy text to clipboard

11 | 12 |

13 |
14 | 15 |

16 | 17 |

18 | Supported: 19 |

20 | 21 | 22 | 23 | 33 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | module.exports = function(config) { 2 | config.set({ 3 | 4 | // base path, that will be used to resolve files and exclude 5 | basePath: '', 6 | 7 | frameworks: ['jasmine'], 8 | 9 | // list of files / patterns to load in the browser 10 | files: [ 11 | 'http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular.js', 12 | 'http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.2/angular-mocks.js', 13 | 'angular-clipboard.js', 14 | 'test/*.js' 15 | ], 16 | 17 | // list of files to exclude 18 | exclude: [ 19 | 20 | ], 21 | 22 | // test results reporter to use 23 | // possible values: 'dots', 'progress', 'junit' 24 | reporters: ['progress', 'coverage'], 25 | 26 | preprocessors: { 27 | 'angular-clipboard.js': ['coverage'] 28 | }, 29 | 30 | coverageReporter: { 31 | type: 'lcov', 32 | dir : 'coverage/' 33 | }, 34 | 35 | // web server port 36 | port: 9876, 37 | 38 | // cli runner port 39 | runnerPort: 9100, 40 | 41 | // enable / disable colors in the output (reporters and logs) 42 | colors: true, 43 | 44 | // level of logging 45 | // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG 46 | logLevel: config.LOG_INFO, 47 | 48 | // enable / disable watching file and executing tests whenever any file changes 49 | autoWatch: false, 50 | 51 | // Start these browsers, currently available: 52 | // - Chrome 53 | // - ChromeCanary 54 | // - Firefox 55 | // - Opera 56 | // - Safari (only Mac) 57 | // - PhantomJS 58 | // - IE (only Windows) 59 | browsers: ['Firefox'], 60 | 61 | // If browser does not capture in given timeout [ms], kill it 62 | captureTimeout: 60000, 63 | 64 | // Continuous Integration mode 65 | // if true, it capture browsers, run tests and exit 66 | singleRun: true 67 | 68 | }); 69 | }; 70 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-clipboard", 3 | "version": "1.7.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "abbrev": { 8 | "version": "1.0.9", 9 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", 10 | "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", 11 | "dev": true 12 | }, 13 | "accepts": { 14 | "version": "1.3.7", 15 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 16 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 17 | "dev": true, 18 | "requires": { 19 | "mime-types": "~2.1.24", 20 | "negotiator": "0.6.2" 21 | } 22 | }, 23 | "after": { 24 | "version": "0.8.2", 25 | "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", 26 | "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", 27 | "dev": true 28 | }, 29 | "amdefine": { 30 | "version": "1.0.1", 31 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 32 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", 33 | "dev": true, 34 | "optional": true 35 | }, 36 | "anymatch": { 37 | "version": "3.0.3", 38 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.0.3.tgz", 39 | "integrity": "sha512-c6IvoeBECQlMVuYUjSwimnhmztImpErfxJzWZhIQinIvQWoGOnB0dLIgifbPHQt5heS6mNlaZG16f06H3C8t1g==", 40 | "dev": true, 41 | "requires": { 42 | "normalize-path": "^3.0.0", 43 | "picomatch": "^2.0.4" 44 | } 45 | }, 46 | "argparse": { 47 | "version": "1.0.10", 48 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 49 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 50 | "dev": true, 51 | "requires": { 52 | "sprintf-js": "~1.0.2" 53 | } 54 | }, 55 | "array-find-index": { 56 | "version": "1.0.2", 57 | "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", 58 | "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", 59 | "dev": true 60 | }, 61 | "arraybuffer.slice": { 62 | "version": "0.0.7", 63 | "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", 64 | "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", 65 | "dev": true 66 | }, 67 | "async": { 68 | "version": "2.6.3", 69 | "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", 70 | "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", 71 | "dev": true, 72 | "requires": { 73 | "lodash": "^4.17.14" 74 | } 75 | }, 76 | "async-limiter": { 77 | "version": "1.0.0", 78 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", 79 | "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", 80 | "dev": true 81 | }, 82 | "backo2": { 83 | "version": "1.0.2", 84 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 85 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", 86 | "dev": true 87 | }, 88 | "balanced-match": { 89 | "version": "1.0.0", 90 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 91 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 92 | "dev": true 93 | }, 94 | "base64-arraybuffer": { 95 | "version": "0.1.5", 96 | "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", 97 | "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", 98 | "dev": true 99 | }, 100 | "base64id": { 101 | "version": "1.0.0", 102 | "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", 103 | "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", 104 | "dev": true 105 | }, 106 | "better-assert": { 107 | "version": "1.0.2", 108 | "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", 109 | "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", 110 | "dev": true, 111 | "requires": { 112 | "callsite": "1.0.0" 113 | } 114 | }, 115 | "binary-extensions": { 116 | "version": "2.0.0", 117 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", 118 | "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", 119 | "dev": true 120 | }, 121 | "blob": { 122 | "version": "0.0.5", 123 | "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", 124 | "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", 125 | "dev": true 126 | }, 127 | "bluebird": { 128 | "version": "3.5.5", 129 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", 130 | "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", 131 | "dev": true 132 | }, 133 | "body-parser": { 134 | "version": "1.19.0", 135 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 136 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 137 | "dev": true, 138 | "requires": { 139 | "bytes": "3.1.0", 140 | "content-type": "~1.0.4", 141 | "debug": "2.6.9", 142 | "depd": "~1.1.2", 143 | "http-errors": "1.7.2", 144 | "iconv-lite": "0.4.24", 145 | "on-finished": "~2.3.0", 146 | "qs": "6.7.0", 147 | "raw-body": "2.4.0", 148 | "type-is": "~1.6.17" 149 | } 150 | }, 151 | "brace-expansion": { 152 | "version": "1.1.11", 153 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 154 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 155 | "dev": true, 156 | "requires": { 157 | "balanced-match": "^1.0.0", 158 | "concat-map": "0.0.1" 159 | } 160 | }, 161 | "braces": { 162 | "version": "3.0.2", 163 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 164 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 165 | "dev": true, 166 | "requires": { 167 | "fill-range": "^7.0.1" 168 | } 169 | }, 170 | "buffer-alloc": { 171 | "version": "1.2.0", 172 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", 173 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", 174 | "dev": true, 175 | "requires": { 176 | "buffer-alloc-unsafe": "^1.1.0", 177 | "buffer-fill": "^1.0.0" 178 | } 179 | }, 180 | "buffer-alloc-unsafe": { 181 | "version": "1.1.0", 182 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", 183 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", 184 | "dev": true 185 | }, 186 | "buffer-fill": { 187 | "version": "1.0.0", 188 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", 189 | "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", 190 | "dev": true 191 | }, 192 | "bytes": { 193 | "version": "3.1.0", 194 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 195 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", 196 | "dev": true 197 | }, 198 | "callsite": { 199 | "version": "1.0.0", 200 | "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", 201 | "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", 202 | "dev": true 203 | }, 204 | "camelcase": { 205 | "version": "2.1.1", 206 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", 207 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", 208 | "dev": true 209 | }, 210 | "camelcase-keys": { 211 | "version": "2.1.0", 212 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", 213 | "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", 214 | "dev": true, 215 | "requires": { 216 | "camelcase": "^2.0.0", 217 | "map-obj": "^1.0.0" 218 | } 219 | }, 220 | "chokidar": { 221 | "version": "3.0.2", 222 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.0.2.tgz", 223 | "integrity": "sha512-c4PR2egjNjI1um6bamCQ6bUNPDiyofNQruHvKgHQ4gDUP/ITSVSzNsiI5OWtHOsX323i5ha/kk4YmOZ1Ktg7KA==", 224 | "dev": true, 225 | "requires": { 226 | "anymatch": "^3.0.1", 227 | "braces": "^3.0.2", 228 | "fsevents": "^2.0.6", 229 | "glob-parent": "^5.0.0", 230 | "is-binary-path": "^2.1.0", 231 | "is-glob": "^4.0.1", 232 | "normalize-path": "^3.0.0", 233 | "readdirp": "^3.1.1" 234 | } 235 | }, 236 | "colors": { 237 | "version": "1.3.3", 238 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", 239 | "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", 240 | "dev": true 241 | }, 242 | "commander": { 243 | "version": "2.20.0", 244 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", 245 | "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", 246 | "dev": true, 247 | "optional": true 248 | }, 249 | "component-bind": { 250 | "version": "1.0.0", 251 | "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", 252 | "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", 253 | "dev": true 254 | }, 255 | "component-emitter": { 256 | "version": "1.2.1", 257 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 258 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", 259 | "dev": true 260 | }, 261 | "component-inherit": { 262 | "version": "0.0.3", 263 | "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", 264 | "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", 265 | "dev": true 266 | }, 267 | "concat-map": { 268 | "version": "0.0.1", 269 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 270 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 271 | "dev": true 272 | }, 273 | "connect": { 274 | "version": "3.7.0", 275 | "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", 276 | "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", 277 | "dev": true, 278 | "requires": { 279 | "debug": "2.6.9", 280 | "finalhandler": "1.1.2", 281 | "parseurl": "~1.3.3", 282 | "utils-merge": "1.0.1" 283 | } 284 | }, 285 | "content-type": { 286 | "version": "1.0.4", 287 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 288 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 289 | "dev": true 290 | }, 291 | "cookie": { 292 | "version": "0.3.1", 293 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 294 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", 295 | "dev": true 296 | }, 297 | "core-js": { 298 | "version": "3.1.4", 299 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz", 300 | "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ==", 301 | "dev": true 302 | }, 303 | "currently-unhandled": { 304 | "version": "0.4.1", 305 | "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", 306 | "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", 307 | "dev": true, 308 | "requires": { 309 | "array-find-index": "^1.0.1" 310 | } 311 | }, 312 | "custom-event": { 313 | "version": "1.0.1", 314 | "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", 315 | "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", 316 | "dev": true 317 | }, 318 | "date-format": { 319 | "version": "2.1.0", 320 | "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", 321 | "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", 322 | "dev": true 323 | }, 324 | "dateformat": { 325 | "version": "1.0.12", 326 | "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", 327 | "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", 328 | "dev": true, 329 | "requires": { 330 | "get-stdin": "^4.0.1", 331 | "meow": "^3.3.0" 332 | } 333 | }, 334 | "debug": { 335 | "version": "2.6.9", 336 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 337 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 338 | "dev": true, 339 | "requires": { 340 | "ms": "2.0.0" 341 | } 342 | }, 343 | "decamelize": { 344 | "version": "1.2.0", 345 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 346 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 347 | "dev": true 348 | }, 349 | "deep-is": { 350 | "version": "0.1.3", 351 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 352 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 353 | "dev": true 354 | }, 355 | "depd": { 356 | "version": "1.1.2", 357 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 358 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", 359 | "dev": true 360 | }, 361 | "di": { 362 | "version": "0.0.1", 363 | "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", 364 | "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", 365 | "dev": true 366 | }, 367 | "dom-serialize": { 368 | "version": "2.2.1", 369 | "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", 370 | "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", 371 | "dev": true, 372 | "requires": { 373 | "custom-event": "~1.0.0", 374 | "ent": "~2.2.0", 375 | "extend": "^3.0.0", 376 | "void-elements": "^2.0.0" 377 | } 378 | }, 379 | "ee-first": { 380 | "version": "1.1.1", 381 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 382 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", 383 | "dev": true 384 | }, 385 | "encodeurl": { 386 | "version": "1.0.2", 387 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 388 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", 389 | "dev": true 390 | }, 391 | "engine.io": { 392 | "version": "3.2.1", 393 | "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", 394 | "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", 395 | "dev": true, 396 | "requires": { 397 | "accepts": "~1.3.4", 398 | "base64id": "1.0.0", 399 | "cookie": "0.3.1", 400 | "debug": "~3.1.0", 401 | "engine.io-parser": "~2.1.0", 402 | "ws": "~3.3.1" 403 | }, 404 | "dependencies": { 405 | "debug": { 406 | "version": "3.1.0", 407 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 408 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 409 | "dev": true, 410 | "requires": { 411 | "ms": "2.0.0" 412 | } 413 | } 414 | } 415 | }, 416 | "engine.io-client": { 417 | "version": "3.2.1", 418 | "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", 419 | "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", 420 | "dev": true, 421 | "requires": { 422 | "component-emitter": "1.2.1", 423 | "component-inherit": "0.0.3", 424 | "debug": "~3.1.0", 425 | "engine.io-parser": "~2.1.1", 426 | "has-cors": "1.1.0", 427 | "indexof": "0.0.1", 428 | "parseqs": "0.0.5", 429 | "parseuri": "0.0.5", 430 | "ws": "~3.3.1", 431 | "xmlhttprequest-ssl": "~1.5.4", 432 | "yeast": "0.1.2" 433 | }, 434 | "dependencies": { 435 | "debug": { 436 | "version": "3.1.0", 437 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 438 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 439 | "dev": true, 440 | "requires": { 441 | "ms": "2.0.0" 442 | } 443 | } 444 | } 445 | }, 446 | "engine.io-parser": { 447 | "version": "2.1.3", 448 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", 449 | "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", 450 | "dev": true, 451 | "requires": { 452 | "after": "0.8.2", 453 | "arraybuffer.slice": "~0.0.7", 454 | "base64-arraybuffer": "0.1.5", 455 | "blob": "0.0.5", 456 | "has-binary2": "~1.0.2" 457 | } 458 | }, 459 | "ent": { 460 | "version": "2.2.0", 461 | "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", 462 | "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", 463 | "dev": true 464 | }, 465 | "error-ex": { 466 | "version": "1.3.2", 467 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 468 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 469 | "dev": true, 470 | "requires": { 471 | "is-arrayish": "^0.2.1" 472 | } 473 | }, 474 | "escape-html": { 475 | "version": "1.0.3", 476 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 477 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", 478 | "dev": true 479 | }, 480 | "escodegen": { 481 | "version": "1.8.1", 482 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", 483 | "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", 484 | "dev": true, 485 | "requires": { 486 | "esprima": "^2.7.1", 487 | "estraverse": "^1.9.1", 488 | "esutils": "^2.0.2", 489 | "optionator": "^0.8.1", 490 | "source-map": "~0.2.0" 491 | }, 492 | "dependencies": { 493 | "source-map": { 494 | "version": "0.2.0", 495 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", 496 | "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", 497 | "dev": true, 498 | "optional": true, 499 | "requires": { 500 | "amdefine": ">=0.0.4" 501 | } 502 | } 503 | } 504 | }, 505 | "esprima": { 506 | "version": "2.7.3", 507 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", 508 | "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", 509 | "dev": true 510 | }, 511 | "estraverse": { 512 | "version": "1.9.3", 513 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", 514 | "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", 515 | "dev": true 516 | }, 517 | "esutils": { 518 | "version": "2.0.2", 519 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 520 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 521 | "dev": true 522 | }, 523 | "eventemitter3": { 524 | "version": "3.1.2", 525 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", 526 | "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", 527 | "dev": true 528 | }, 529 | "extend": { 530 | "version": "3.0.2", 531 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 532 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 533 | "dev": true 534 | }, 535 | "fast-levenshtein": { 536 | "version": "2.0.6", 537 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 538 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 539 | "dev": true 540 | }, 541 | "fill-range": { 542 | "version": "7.0.1", 543 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 544 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 545 | "dev": true, 546 | "requires": { 547 | "to-regex-range": "^5.0.1" 548 | } 549 | }, 550 | "finalhandler": { 551 | "version": "1.1.2", 552 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 553 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 554 | "dev": true, 555 | "requires": { 556 | "debug": "2.6.9", 557 | "encodeurl": "~1.0.2", 558 | "escape-html": "~1.0.3", 559 | "on-finished": "~2.3.0", 560 | "parseurl": "~1.3.3", 561 | "statuses": "~1.5.0", 562 | "unpipe": "~1.0.0" 563 | } 564 | }, 565 | "find-up": { 566 | "version": "1.1.2", 567 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", 568 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", 569 | "dev": true, 570 | "requires": { 571 | "path-exists": "^2.0.0", 572 | "pinkie-promise": "^2.0.0" 573 | } 574 | }, 575 | "flatted": { 576 | "version": "2.0.1", 577 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", 578 | "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", 579 | "dev": true 580 | }, 581 | "follow-redirects": { 582 | "version": "1.7.0", 583 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", 584 | "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", 585 | "dev": true, 586 | "requires": { 587 | "debug": "^3.2.6" 588 | }, 589 | "dependencies": { 590 | "debug": { 591 | "version": "3.2.6", 592 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 593 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 594 | "dev": true, 595 | "requires": { 596 | "ms": "^2.1.1" 597 | } 598 | }, 599 | "ms": { 600 | "version": "2.1.2", 601 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 602 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 603 | "dev": true 604 | } 605 | } 606 | }, 607 | "fs-extra": { 608 | "version": "7.0.1", 609 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", 610 | "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", 611 | "dev": true, 612 | "requires": { 613 | "graceful-fs": "^4.1.2", 614 | "jsonfile": "^4.0.0", 615 | "universalify": "^0.1.0" 616 | } 617 | }, 618 | "fs.realpath": { 619 | "version": "1.0.0", 620 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 621 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 622 | "dev": true 623 | }, 624 | "fsevents": { 625 | "version": "2.0.7", 626 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz", 627 | "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==", 628 | "dev": true, 629 | "optional": true 630 | }, 631 | "get-stdin": { 632 | "version": "4.0.1", 633 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", 634 | "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", 635 | "dev": true 636 | }, 637 | "glob": { 638 | "version": "7.1.4", 639 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", 640 | "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", 641 | "dev": true, 642 | "requires": { 643 | "fs.realpath": "^1.0.0", 644 | "inflight": "^1.0.4", 645 | "inherits": "2", 646 | "minimatch": "^3.0.4", 647 | "once": "^1.3.0", 648 | "path-is-absolute": "^1.0.0" 649 | } 650 | }, 651 | "glob-parent": { 652 | "version": "5.0.0", 653 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", 654 | "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", 655 | "dev": true, 656 | "requires": { 657 | "is-glob": "^4.0.1" 658 | } 659 | }, 660 | "graceful-fs": { 661 | "version": "4.2.0", 662 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", 663 | "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", 664 | "dev": true 665 | }, 666 | "handlebars": { 667 | "version": "4.1.2", 668 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", 669 | "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", 670 | "dev": true, 671 | "requires": { 672 | "neo-async": "^2.6.0", 673 | "optimist": "^0.6.1", 674 | "source-map": "^0.6.1", 675 | "uglify-js": "^3.1.4" 676 | } 677 | }, 678 | "has-binary2": { 679 | "version": "1.0.3", 680 | "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", 681 | "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", 682 | "dev": true, 683 | "requires": { 684 | "isarray": "2.0.1" 685 | } 686 | }, 687 | "has-cors": { 688 | "version": "1.1.0", 689 | "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", 690 | "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", 691 | "dev": true 692 | }, 693 | "has-flag": { 694 | "version": "1.0.0", 695 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", 696 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", 697 | "dev": true 698 | }, 699 | "hosted-git-info": { 700 | "version": "2.7.1", 701 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", 702 | "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", 703 | "dev": true 704 | }, 705 | "http-errors": { 706 | "version": "1.7.2", 707 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 708 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 709 | "dev": true, 710 | "requires": { 711 | "depd": "~1.1.2", 712 | "inherits": "2.0.3", 713 | "setprototypeof": "1.1.1", 714 | "statuses": ">= 1.5.0 < 2", 715 | "toidentifier": "1.0.0" 716 | } 717 | }, 718 | "http-proxy": { 719 | "version": "1.17.0", 720 | "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", 721 | "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", 722 | "dev": true, 723 | "requires": { 724 | "eventemitter3": "^3.0.0", 725 | "follow-redirects": "^1.0.0", 726 | "requires-port": "^1.0.0" 727 | } 728 | }, 729 | "iconv-lite": { 730 | "version": "0.4.24", 731 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 732 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 733 | "dev": true, 734 | "requires": { 735 | "safer-buffer": ">= 2.1.2 < 3" 736 | } 737 | }, 738 | "indent-string": { 739 | "version": "2.1.0", 740 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", 741 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", 742 | "dev": true, 743 | "requires": { 744 | "repeating": "^2.0.0" 745 | } 746 | }, 747 | "indexof": { 748 | "version": "0.0.1", 749 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", 750 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", 751 | "dev": true 752 | }, 753 | "inflight": { 754 | "version": "1.0.6", 755 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 756 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 757 | "dev": true, 758 | "requires": { 759 | "once": "^1.3.0", 760 | "wrappy": "1" 761 | } 762 | }, 763 | "inherits": { 764 | "version": "2.0.3", 765 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 766 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 767 | "dev": true 768 | }, 769 | "is-arrayish": { 770 | "version": "0.2.1", 771 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 772 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 773 | "dev": true 774 | }, 775 | "is-binary-path": { 776 | "version": "2.1.0", 777 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 778 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 779 | "dev": true, 780 | "requires": { 781 | "binary-extensions": "^2.0.0" 782 | } 783 | }, 784 | "is-extglob": { 785 | "version": "2.1.1", 786 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 787 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 788 | "dev": true 789 | }, 790 | "is-finite": { 791 | "version": "1.0.2", 792 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 793 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 794 | "dev": true, 795 | "requires": { 796 | "number-is-nan": "^1.0.0" 797 | } 798 | }, 799 | "is-glob": { 800 | "version": "4.0.1", 801 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 802 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 803 | "dev": true, 804 | "requires": { 805 | "is-extglob": "^2.1.1" 806 | } 807 | }, 808 | "is-number": { 809 | "version": "7.0.0", 810 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 811 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 812 | "dev": true 813 | }, 814 | "is-utf8": { 815 | "version": "0.2.1", 816 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 817 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", 818 | "dev": true 819 | }, 820 | "isarray": { 821 | "version": "2.0.1", 822 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", 823 | "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", 824 | "dev": true 825 | }, 826 | "isbinaryfile": { 827 | "version": "3.0.3", 828 | "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", 829 | "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", 830 | "dev": true, 831 | "requires": { 832 | "buffer-alloc": "^1.2.0" 833 | } 834 | }, 835 | "isexe": { 836 | "version": "2.0.0", 837 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 838 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 839 | "dev": true 840 | }, 841 | "istanbul": { 842 | "version": "0.4.5", 843 | "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", 844 | "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", 845 | "dev": true, 846 | "requires": { 847 | "abbrev": "1.0.x", 848 | "async": "1.x", 849 | "escodegen": "1.8.x", 850 | "esprima": "2.7.x", 851 | "glob": "^5.0.15", 852 | "handlebars": "^4.0.1", 853 | "js-yaml": "3.x", 854 | "mkdirp": "0.5.x", 855 | "nopt": "3.x", 856 | "once": "1.x", 857 | "resolve": "1.1.x", 858 | "supports-color": "^3.1.0", 859 | "which": "^1.1.1", 860 | "wordwrap": "^1.0.0" 861 | }, 862 | "dependencies": { 863 | "async": { 864 | "version": "1.5.2", 865 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", 866 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", 867 | "dev": true 868 | }, 869 | "glob": { 870 | "version": "5.0.15", 871 | "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", 872 | "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", 873 | "dev": true, 874 | "requires": { 875 | "inflight": "^1.0.4", 876 | "inherits": "2", 877 | "minimatch": "2 || 3", 878 | "once": "^1.3.0", 879 | "path-is-absolute": "^1.0.0" 880 | } 881 | }, 882 | "resolve": { 883 | "version": "1.1.7", 884 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", 885 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", 886 | "dev": true 887 | }, 888 | "wordwrap": { 889 | "version": "1.0.0", 890 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 891 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 892 | "dev": true 893 | } 894 | } 895 | }, 896 | "jasmine-core": { 897 | "version": "3.4.0", 898 | "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.4.0.tgz", 899 | "integrity": "sha512-HU/YxV4i6GcmiH4duATwAbJQMlE0MsDIR5XmSVxURxKHn3aGAdbY1/ZJFmVRbKtnLwIxxMJD7gYaPsypcbYimg==", 900 | "dev": true 901 | }, 902 | "js-yaml": { 903 | "version": "3.13.1", 904 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 905 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 906 | "dev": true, 907 | "requires": { 908 | "argparse": "^1.0.7", 909 | "esprima": "^4.0.0" 910 | }, 911 | "dependencies": { 912 | "esprima": { 913 | "version": "4.0.1", 914 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 915 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 916 | "dev": true 917 | } 918 | } 919 | }, 920 | "jsonfile": { 921 | "version": "4.0.0", 922 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 923 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 924 | "dev": true, 925 | "requires": { 926 | "graceful-fs": "^4.1.6" 927 | } 928 | }, 929 | "karma": { 930 | "version": "4.2.0", 931 | "resolved": "https://registry.npmjs.org/karma/-/karma-4.2.0.tgz", 932 | "integrity": "sha512-fmCuxN1rwJxTdZfOXK5LjlmS4Ana/OvzNMpkyLL/TLE8hmgSkpVpMYQ7RTVa8TNKRVQDZNl5W1oF5cfKfgIMlA==", 933 | "dev": true, 934 | "requires": { 935 | "bluebird": "^3.3.0", 936 | "body-parser": "^1.16.1", 937 | "braces": "^3.0.2", 938 | "chokidar": "^3.0.0", 939 | "colors": "^1.1.0", 940 | "connect": "^3.6.0", 941 | "core-js": "^3.1.3", 942 | "di": "^0.0.1", 943 | "dom-serialize": "^2.2.0", 944 | "flatted": "^2.0.0", 945 | "glob": "^7.1.1", 946 | "graceful-fs": "^4.1.2", 947 | "http-proxy": "^1.13.0", 948 | "isbinaryfile": "^3.0.0", 949 | "lodash": "^4.17.11", 950 | "log4js": "^4.0.0", 951 | "mime": "^2.3.1", 952 | "minimatch": "^3.0.2", 953 | "optimist": "^0.6.1", 954 | "qjobs": "^1.1.4", 955 | "range-parser": "^1.2.0", 956 | "rimraf": "^2.6.0", 957 | "safe-buffer": "^5.0.1", 958 | "socket.io": "2.1.1", 959 | "source-map": "^0.6.1", 960 | "tmp": "0.0.33", 961 | "useragent": "2.3.0" 962 | } 963 | }, 964 | "karma-coverage": { 965 | "version": "1.1.2", 966 | "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.2.tgz", 967 | "integrity": "sha512-eQawj4Cl3z/CjxslYy9ariU4uDh7cCNFZHNWXWRpl0pNeblY/4wHR7M7boTYXWrn9bY0z2pZmr11eKje/S/hIw==", 968 | "dev": true, 969 | "requires": { 970 | "dateformat": "^1.0.6", 971 | "istanbul": "^0.4.0", 972 | "lodash": "^4.17.0", 973 | "minimatch": "^3.0.0", 974 | "source-map": "^0.5.1" 975 | }, 976 | "dependencies": { 977 | "source-map": { 978 | "version": "0.5.7", 979 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 980 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 981 | "dev": true 982 | } 983 | } 984 | }, 985 | "karma-firefox-launcher": { 986 | "version": "1.1.0", 987 | "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.1.0.tgz", 988 | "integrity": "sha512-LbZ5/XlIXLeQ3cqnCbYLn+rOVhuMIK9aZwlP6eOLGzWdo1UVp7t6CN3DP4SafiRLjexKwHeKHDm0c38Mtd3VxA==", 989 | "dev": true 990 | }, 991 | "karma-jasmine": { 992 | "version": "2.0.1", 993 | "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-2.0.1.tgz", 994 | "integrity": "sha512-iuC0hmr9b+SNn1DaUD2QEYtUxkS1J+bSJSn7ejdEexs7P8EYvA1CWkEdrDQ+8jVH3AgWlCNwjYsT1chjcNW9lA==", 995 | "dev": true, 996 | "requires": { 997 | "jasmine-core": "^3.3" 998 | } 999 | }, 1000 | "levn": { 1001 | "version": "0.3.0", 1002 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 1003 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 1004 | "dev": true, 1005 | "requires": { 1006 | "prelude-ls": "~1.1.2", 1007 | "type-check": "~0.3.2" 1008 | } 1009 | }, 1010 | "load-json-file": { 1011 | "version": "1.1.0", 1012 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", 1013 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", 1014 | "dev": true, 1015 | "requires": { 1016 | "graceful-fs": "^4.1.2", 1017 | "parse-json": "^2.2.0", 1018 | "pify": "^2.0.0", 1019 | "pinkie-promise": "^2.0.0", 1020 | "strip-bom": "^2.0.0" 1021 | } 1022 | }, 1023 | "lodash": { 1024 | "version": "4.17.15", 1025 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 1026 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", 1027 | "dev": true 1028 | }, 1029 | "log4js": { 1030 | "version": "4.5.1", 1031 | "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz", 1032 | "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==", 1033 | "dev": true, 1034 | "requires": { 1035 | "date-format": "^2.0.0", 1036 | "debug": "^4.1.1", 1037 | "flatted": "^2.0.0", 1038 | "rfdc": "^1.1.4", 1039 | "streamroller": "^1.0.6" 1040 | }, 1041 | "dependencies": { 1042 | "debug": { 1043 | "version": "4.1.1", 1044 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 1045 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 1046 | "dev": true, 1047 | "requires": { 1048 | "ms": "^2.1.1" 1049 | } 1050 | }, 1051 | "ms": { 1052 | "version": "2.1.2", 1053 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1054 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1055 | "dev": true 1056 | } 1057 | } 1058 | }, 1059 | "loud-rejection": { 1060 | "version": "1.6.0", 1061 | "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", 1062 | "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", 1063 | "dev": true, 1064 | "requires": { 1065 | "currently-unhandled": "^0.4.1", 1066 | "signal-exit": "^3.0.0" 1067 | } 1068 | }, 1069 | "lru-cache": { 1070 | "version": "4.1.5", 1071 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", 1072 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", 1073 | "dev": true, 1074 | "requires": { 1075 | "pseudomap": "^1.0.2", 1076 | "yallist": "^2.1.2" 1077 | } 1078 | }, 1079 | "map-obj": { 1080 | "version": "1.0.1", 1081 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", 1082 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", 1083 | "dev": true 1084 | }, 1085 | "media-typer": { 1086 | "version": "0.3.0", 1087 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1088 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", 1089 | "dev": true 1090 | }, 1091 | "meow": { 1092 | "version": "3.7.0", 1093 | "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", 1094 | "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", 1095 | "dev": true, 1096 | "requires": { 1097 | "camelcase-keys": "^2.0.0", 1098 | "decamelize": "^1.1.2", 1099 | "loud-rejection": "^1.0.0", 1100 | "map-obj": "^1.0.1", 1101 | "minimist": "^1.1.3", 1102 | "normalize-package-data": "^2.3.4", 1103 | "object-assign": "^4.0.1", 1104 | "read-pkg-up": "^1.0.1", 1105 | "redent": "^1.0.0", 1106 | "trim-newlines": "^1.0.0" 1107 | }, 1108 | "dependencies": { 1109 | "minimist": { 1110 | "version": "1.2.0", 1111 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1112 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 1113 | "dev": true 1114 | } 1115 | } 1116 | }, 1117 | "mime": { 1118 | "version": "2.4.4", 1119 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", 1120 | "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", 1121 | "dev": true 1122 | }, 1123 | "mime-db": { 1124 | "version": "1.40.0", 1125 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", 1126 | "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", 1127 | "dev": true 1128 | }, 1129 | "mime-types": { 1130 | "version": "2.1.24", 1131 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", 1132 | "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", 1133 | "dev": true, 1134 | "requires": { 1135 | "mime-db": "1.40.0" 1136 | } 1137 | }, 1138 | "minimatch": { 1139 | "version": "3.0.4", 1140 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1141 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1142 | "dev": true, 1143 | "requires": { 1144 | "brace-expansion": "^1.1.7" 1145 | } 1146 | }, 1147 | "minimist": { 1148 | "version": "0.0.10", 1149 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", 1150 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", 1151 | "dev": true 1152 | }, 1153 | "mkdirp": { 1154 | "version": "0.5.1", 1155 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1156 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1157 | "dev": true, 1158 | "requires": { 1159 | "minimist": "0.0.8" 1160 | }, 1161 | "dependencies": { 1162 | "minimist": { 1163 | "version": "0.0.8", 1164 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1165 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 1166 | "dev": true 1167 | } 1168 | } 1169 | }, 1170 | "ms": { 1171 | "version": "2.0.0", 1172 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1173 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1174 | "dev": true 1175 | }, 1176 | "negotiator": { 1177 | "version": "0.6.2", 1178 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 1179 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", 1180 | "dev": true 1181 | }, 1182 | "neo-async": { 1183 | "version": "2.6.1", 1184 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", 1185 | "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", 1186 | "dev": true 1187 | }, 1188 | "nopt": { 1189 | "version": "3.0.6", 1190 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", 1191 | "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", 1192 | "dev": true, 1193 | "requires": { 1194 | "abbrev": "1" 1195 | } 1196 | }, 1197 | "normalize-package-data": { 1198 | "version": "2.5.0", 1199 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 1200 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 1201 | "dev": true, 1202 | "requires": { 1203 | "hosted-git-info": "^2.1.4", 1204 | "resolve": "^1.10.0", 1205 | "semver": "2 || 3 || 4 || 5", 1206 | "validate-npm-package-license": "^3.0.1" 1207 | } 1208 | }, 1209 | "normalize-path": { 1210 | "version": "3.0.0", 1211 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1212 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1213 | "dev": true 1214 | }, 1215 | "number-is-nan": { 1216 | "version": "1.0.1", 1217 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 1218 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 1219 | "dev": true 1220 | }, 1221 | "object-assign": { 1222 | "version": "4.1.1", 1223 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1224 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 1225 | "dev": true 1226 | }, 1227 | "object-component": { 1228 | "version": "0.0.3", 1229 | "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", 1230 | "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", 1231 | "dev": true 1232 | }, 1233 | "on-finished": { 1234 | "version": "2.3.0", 1235 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1236 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 1237 | "dev": true, 1238 | "requires": { 1239 | "ee-first": "1.1.1" 1240 | } 1241 | }, 1242 | "once": { 1243 | "version": "1.4.0", 1244 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1245 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1246 | "dev": true, 1247 | "requires": { 1248 | "wrappy": "1" 1249 | } 1250 | }, 1251 | "optimist": { 1252 | "version": "0.6.1", 1253 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", 1254 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", 1255 | "dev": true, 1256 | "requires": { 1257 | "minimist": "~0.0.1", 1258 | "wordwrap": "~0.0.2" 1259 | } 1260 | }, 1261 | "optionator": { 1262 | "version": "0.8.2", 1263 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 1264 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 1265 | "dev": true, 1266 | "requires": { 1267 | "deep-is": "~0.1.3", 1268 | "fast-levenshtein": "~2.0.4", 1269 | "levn": "~0.3.0", 1270 | "prelude-ls": "~1.1.2", 1271 | "type-check": "~0.3.2", 1272 | "wordwrap": "~1.0.0" 1273 | }, 1274 | "dependencies": { 1275 | "wordwrap": { 1276 | "version": "1.0.0", 1277 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 1278 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 1279 | "dev": true 1280 | } 1281 | } 1282 | }, 1283 | "os-tmpdir": { 1284 | "version": "1.0.2", 1285 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1286 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 1287 | "dev": true 1288 | }, 1289 | "parse-json": { 1290 | "version": "2.2.0", 1291 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 1292 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 1293 | "dev": true, 1294 | "requires": { 1295 | "error-ex": "^1.2.0" 1296 | } 1297 | }, 1298 | "parseqs": { 1299 | "version": "0.0.5", 1300 | "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", 1301 | "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", 1302 | "dev": true, 1303 | "requires": { 1304 | "better-assert": "~1.0.0" 1305 | } 1306 | }, 1307 | "parseuri": { 1308 | "version": "0.0.5", 1309 | "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", 1310 | "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", 1311 | "dev": true, 1312 | "requires": { 1313 | "better-assert": "~1.0.0" 1314 | } 1315 | }, 1316 | "parseurl": { 1317 | "version": "1.3.3", 1318 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1319 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 1320 | "dev": true 1321 | }, 1322 | "path-exists": { 1323 | "version": "2.1.0", 1324 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", 1325 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", 1326 | "dev": true, 1327 | "requires": { 1328 | "pinkie-promise": "^2.0.0" 1329 | } 1330 | }, 1331 | "path-is-absolute": { 1332 | "version": "1.0.1", 1333 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1334 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1335 | "dev": true 1336 | }, 1337 | "path-parse": { 1338 | "version": "1.0.6", 1339 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1340 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 1341 | "dev": true 1342 | }, 1343 | "path-type": { 1344 | "version": "1.1.0", 1345 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", 1346 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", 1347 | "dev": true, 1348 | "requires": { 1349 | "graceful-fs": "^4.1.2", 1350 | "pify": "^2.0.0", 1351 | "pinkie-promise": "^2.0.0" 1352 | } 1353 | }, 1354 | "picomatch": { 1355 | "version": "2.0.7", 1356 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", 1357 | "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", 1358 | "dev": true 1359 | }, 1360 | "pify": { 1361 | "version": "2.3.0", 1362 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1363 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 1364 | "dev": true 1365 | }, 1366 | "pinkie": { 1367 | "version": "2.0.4", 1368 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 1369 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 1370 | "dev": true 1371 | }, 1372 | "pinkie-promise": { 1373 | "version": "2.0.1", 1374 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 1375 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 1376 | "dev": true, 1377 | "requires": { 1378 | "pinkie": "^2.0.0" 1379 | } 1380 | }, 1381 | "prelude-ls": { 1382 | "version": "1.1.2", 1383 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1384 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 1385 | "dev": true 1386 | }, 1387 | "pseudomap": { 1388 | "version": "1.0.2", 1389 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1390 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 1391 | "dev": true 1392 | }, 1393 | "qjobs": { 1394 | "version": "1.2.0", 1395 | "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", 1396 | "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", 1397 | "dev": true 1398 | }, 1399 | "qs": { 1400 | "version": "6.7.0", 1401 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 1402 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", 1403 | "dev": true 1404 | }, 1405 | "range-parser": { 1406 | "version": "1.2.1", 1407 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1408 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 1409 | "dev": true 1410 | }, 1411 | "raw-body": { 1412 | "version": "2.4.0", 1413 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 1414 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 1415 | "dev": true, 1416 | "requires": { 1417 | "bytes": "3.1.0", 1418 | "http-errors": "1.7.2", 1419 | "iconv-lite": "0.4.24", 1420 | "unpipe": "1.0.0" 1421 | } 1422 | }, 1423 | "read-pkg": { 1424 | "version": "1.1.0", 1425 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", 1426 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", 1427 | "dev": true, 1428 | "requires": { 1429 | "load-json-file": "^1.0.0", 1430 | "normalize-package-data": "^2.3.2", 1431 | "path-type": "^1.0.0" 1432 | } 1433 | }, 1434 | "read-pkg-up": { 1435 | "version": "1.0.1", 1436 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", 1437 | "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", 1438 | "dev": true, 1439 | "requires": { 1440 | "find-up": "^1.0.0", 1441 | "read-pkg": "^1.0.0" 1442 | } 1443 | }, 1444 | "readdirp": { 1445 | "version": "3.1.1", 1446 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.1.tgz", 1447 | "integrity": "sha512-XXdSXZrQuvqoETj50+JAitxz1UPdt5dupjT6T5nVB+WvjMv2XKYj+s7hPeAVCXvmJrL36O4YYyWlIC3an2ePiQ==", 1448 | "dev": true, 1449 | "requires": { 1450 | "picomatch": "^2.0.4" 1451 | } 1452 | }, 1453 | "redent": { 1454 | "version": "1.0.0", 1455 | "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", 1456 | "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", 1457 | "dev": true, 1458 | "requires": { 1459 | "indent-string": "^2.1.0", 1460 | "strip-indent": "^1.0.1" 1461 | } 1462 | }, 1463 | "repeating": { 1464 | "version": "2.0.1", 1465 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", 1466 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", 1467 | "dev": true, 1468 | "requires": { 1469 | "is-finite": "^1.0.0" 1470 | } 1471 | }, 1472 | "requires-port": { 1473 | "version": "1.0.0", 1474 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 1475 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", 1476 | "dev": true 1477 | }, 1478 | "resolve": { 1479 | "version": "1.11.1", 1480 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", 1481 | "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", 1482 | "dev": true, 1483 | "requires": { 1484 | "path-parse": "^1.0.6" 1485 | } 1486 | }, 1487 | "rfdc": { 1488 | "version": "1.1.4", 1489 | "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", 1490 | "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", 1491 | "dev": true 1492 | }, 1493 | "rimraf": { 1494 | "version": "2.6.3", 1495 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 1496 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 1497 | "dev": true, 1498 | "requires": { 1499 | "glob": "^7.1.3" 1500 | } 1501 | }, 1502 | "safe-buffer": { 1503 | "version": "5.2.0", 1504 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 1505 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", 1506 | "dev": true 1507 | }, 1508 | "safer-buffer": { 1509 | "version": "2.1.2", 1510 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1511 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1512 | "dev": true 1513 | }, 1514 | "semver": { 1515 | "version": "5.7.0", 1516 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", 1517 | "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", 1518 | "dev": true 1519 | }, 1520 | "setprototypeof": { 1521 | "version": "1.1.1", 1522 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 1523 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", 1524 | "dev": true 1525 | }, 1526 | "signal-exit": { 1527 | "version": "3.0.2", 1528 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1529 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 1530 | "dev": true 1531 | }, 1532 | "socket.io": { 1533 | "version": "2.1.1", 1534 | "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", 1535 | "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", 1536 | "dev": true, 1537 | "requires": { 1538 | "debug": "~3.1.0", 1539 | "engine.io": "~3.2.0", 1540 | "has-binary2": "~1.0.2", 1541 | "socket.io-adapter": "~1.1.0", 1542 | "socket.io-client": "2.1.1", 1543 | "socket.io-parser": "~3.2.0" 1544 | }, 1545 | "dependencies": { 1546 | "debug": { 1547 | "version": "3.1.0", 1548 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 1549 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 1550 | "dev": true, 1551 | "requires": { 1552 | "ms": "2.0.0" 1553 | } 1554 | } 1555 | } 1556 | }, 1557 | "socket.io-adapter": { 1558 | "version": "1.1.1", 1559 | "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", 1560 | "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", 1561 | "dev": true 1562 | }, 1563 | "socket.io-client": { 1564 | "version": "2.1.1", 1565 | "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", 1566 | "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", 1567 | "dev": true, 1568 | "requires": { 1569 | "backo2": "1.0.2", 1570 | "base64-arraybuffer": "0.1.5", 1571 | "component-bind": "1.0.0", 1572 | "component-emitter": "1.2.1", 1573 | "debug": "~3.1.0", 1574 | "engine.io-client": "~3.2.0", 1575 | "has-binary2": "~1.0.2", 1576 | "has-cors": "1.1.0", 1577 | "indexof": "0.0.1", 1578 | "object-component": "0.0.3", 1579 | "parseqs": "0.0.5", 1580 | "parseuri": "0.0.5", 1581 | "socket.io-parser": "~3.2.0", 1582 | "to-array": "0.1.4" 1583 | }, 1584 | "dependencies": { 1585 | "debug": { 1586 | "version": "3.1.0", 1587 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 1588 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 1589 | "dev": true, 1590 | "requires": { 1591 | "ms": "2.0.0" 1592 | } 1593 | } 1594 | } 1595 | }, 1596 | "socket.io-parser": { 1597 | "version": "3.2.0", 1598 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", 1599 | "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", 1600 | "dev": true, 1601 | "requires": { 1602 | "component-emitter": "1.2.1", 1603 | "debug": "~3.1.0", 1604 | "isarray": "2.0.1" 1605 | }, 1606 | "dependencies": { 1607 | "debug": { 1608 | "version": "3.1.0", 1609 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 1610 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 1611 | "dev": true, 1612 | "requires": { 1613 | "ms": "2.0.0" 1614 | } 1615 | } 1616 | } 1617 | }, 1618 | "source-map": { 1619 | "version": "0.6.1", 1620 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1621 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1622 | "dev": true 1623 | }, 1624 | "spdx-correct": { 1625 | "version": "3.1.0", 1626 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", 1627 | "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", 1628 | "dev": true, 1629 | "requires": { 1630 | "spdx-expression-parse": "^3.0.0", 1631 | "spdx-license-ids": "^3.0.0" 1632 | } 1633 | }, 1634 | "spdx-exceptions": { 1635 | "version": "2.2.0", 1636 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", 1637 | "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", 1638 | "dev": true 1639 | }, 1640 | "spdx-expression-parse": { 1641 | "version": "3.0.0", 1642 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", 1643 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", 1644 | "dev": true, 1645 | "requires": { 1646 | "spdx-exceptions": "^2.1.0", 1647 | "spdx-license-ids": "^3.0.0" 1648 | } 1649 | }, 1650 | "spdx-license-ids": { 1651 | "version": "3.0.5", 1652 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", 1653 | "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", 1654 | "dev": true 1655 | }, 1656 | "sprintf-js": { 1657 | "version": "1.0.3", 1658 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1659 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1660 | "dev": true 1661 | }, 1662 | "statuses": { 1663 | "version": "1.5.0", 1664 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 1665 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", 1666 | "dev": true 1667 | }, 1668 | "streamroller": { 1669 | "version": "1.0.6", 1670 | "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz", 1671 | "integrity": "sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==", 1672 | "dev": true, 1673 | "requires": { 1674 | "async": "^2.6.2", 1675 | "date-format": "^2.0.0", 1676 | "debug": "^3.2.6", 1677 | "fs-extra": "^7.0.1", 1678 | "lodash": "^4.17.14" 1679 | }, 1680 | "dependencies": { 1681 | "debug": { 1682 | "version": "3.2.6", 1683 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 1684 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 1685 | "dev": true, 1686 | "requires": { 1687 | "ms": "^2.1.1" 1688 | } 1689 | }, 1690 | "ms": { 1691 | "version": "2.1.2", 1692 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1693 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1694 | "dev": true 1695 | } 1696 | } 1697 | }, 1698 | "strip-bom": { 1699 | "version": "2.0.0", 1700 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", 1701 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", 1702 | "dev": true, 1703 | "requires": { 1704 | "is-utf8": "^0.2.0" 1705 | } 1706 | }, 1707 | "strip-indent": { 1708 | "version": "1.0.1", 1709 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", 1710 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", 1711 | "dev": true, 1712 | "requires": { 1713 | "get-stdin": "^4.0.1" 1714 | } 1715 | }, 1716 | "supports-color": { 1717 | "version": "3.2.3", 1718 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", 1719 | "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", 1720 | "dev": true, 1721 | "requires": { 1722 | "has-flag": "^1.0.0" 1723 | } 1724 | }, 1725 | "tmp": { 1726 | "version": "0.0.33", 1727 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 1728 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 1729 | "dev": true, 1730 | "requires": { 1731 | "os-tmpdir": "~1.0.2" 1732 | } 1733 | }, 1734 | "to-array": { 1735 | "version": "0.1.4", 1736 | "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", 1737 | "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", 1738 | "dev": true 1739 | }, 1740 | "to-regex-range": { 1741 | "version": "5.0.1", 1742 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1743 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1744 | "dev": true, 1745 | "requires": { 1746 | "is-number": "^7.0.0" 1747 | } 1748 | }, 1749 | "toidentifier": { 1750 | "version": "1.0.0", 1751 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 1752 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", 1753 | "dev": true 1754 | }, 1755 | "trim-newlines": { 1756 | "version": "1.0.0", 1757 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", 1758 | "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", 1759 | "dev": true 1760 | }, 1761 | "type-check": { 1762 | "version": "0.3.2", 1763 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 1764 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 1765 | "dev": true, 1766 | "requires": { 1767 | "prelude-ls": "~1.1.2" 1768 | } 1769 | }, 1770 | "type-is": { 1771 | "version": "1.6.18", 1772 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1773 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1774 | "dev": true, 1775 | "requires": { 1776 | "media-typer": "0.3.0", 1777 | "mime-types": "~2.1.24" 1778 | } 1779 | }, 1780 | "uglify-js": { 1781 | "version": "3.6.0", 1782 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", 1783 | "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", 1784 | "dev": true, 1785 | "optional": true, 1786 | "requires": { 1787 | "commander": "~2.20.0", 1788 | "source-map": "~0.6.1" 1789 | } 1790 | }, 1791 | "ultron": { 1792 | "version": "1.1.1", 1793 | "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", 1794 | "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", 1795 | "dev": true 1796 | }, 1797 | "universalify": { 1798 | "version": "0.1.2", 1799 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1800 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 1801 | "dev": true 1802 | }, 1803 | "unpipe": { 1804 | "version": "1.0.0", 1805 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1806 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", 1807 | "dev": true 1808 | }, 1809 | "useragent": { 1810 | "version": "2.3.0", 1811 | "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", 1812 | "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", 1813 | "dev": true, 1814 | "requires": { 1815 | "lru-cache": "4.1.x", 1816 | "tmp": "0.0.x" 1817 | } 1818 | }, 1819 | "utils-merge": { 1820 | "version": "1.0.1", 1821 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1822 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", 1823 | "dev": true 1824 | }, 1825 | "validate-npm-package-license": { 1826 | "version": "3.0.4", 1827 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 1828 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 1829 | "dev": true, 1830 | "requires": { 1831 | "spdx-correct": "^3.0.0", 1832 | "spdx-expression-parse": "^3.0.0" 1833 | } 1834 | }, 1835 | "void-elements": { 1836 | "version": "2.0.1", 1837 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", 1838 | "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", 1839 | "dev": true 1840 | }, 1841 | "which": { 1842 | "version": "1.3.1", 1843 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1844 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1845 | "dev": true, 1846 | "requires": { 1847 | "isexe": "^2.0.0" 1848 | } 1849 | }, 1850 | "wordwrap": { 1851 | "version": "0.0.3", 1852 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 1853 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", 1854 | "dev": true 1855 | }, 1856 | "wrappy": { 1857 | "version": "1.0.2", 1858 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1859 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1860 | "dev": true 1861 | }, 1862 | "ws": { 1863 | "version": "3.3.3", 1864 | "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", 1865 | "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", 1866 | "dev": true, 1867 | "requires": { 1868 | "async-limiter": "~1.0.0", 1869 | "safe-buffer": "~5.1.0", 1870 | "ultron": "~1.1.0" 1871 | }, 1872 | "dependencies": { 1873 | "safe-buffer": { 1874 | "version": "5.1.2", 1875 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1876 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1877 | "dev": true 1878 | } 1879 | } 1880 | }, 1881 | "xmlhttprequest-ssl": { 1882 | "version": "1.5.5", 1883 | "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", 1884 | "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", 1885 | "dev": true 1886 | }, 1887 | "yallist": { 1888 | "version": "2.1.2", 1889 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 1890 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 1891 | "dev": true 1892 | }, 1893 | "yeast": { 1894 | "version": "0.1.2", 1895 | "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", 1896 | "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", 1897 | "dev": true 1898 | } 1899 | } 1900 | } 1901 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-clipboard", 3 | "version": "1.7.0", 4 | "description": "Copy to clipboard with AngularJS directive, without using Flash.", 5 | "main": "angular-clipboard.js", 6 | "scripts": { 7 | "test": "./node_modules/karma/bin/karma start" 8 | }, 9 | "author": "Ole Michelsen", 10 | "license": "MIT", 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/omichelsen/angular-clipboard.git" 14 | }, 15 | "keywords": [ 16 | "angular", 17 | "clipboard", 18 | "copy", 19 | "paste", 20 | "selection" 21 | ], 22 | "peerDependencies": { 23 | "angular": "^1.3.0" 24 | }, 25 | "devDependencies": { 26 | "jasmine-core": "^3.4.0", 27 | "karma": "^4.2.0", 28 | "karma-coverage": "^1.1.2", 29 | "karma-firefox-launcher": "^1.1.0", 30 | "karma-jasmine": "^2.0.1" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /test/angular-clipboard.spec.js: -------------------------------------------------------------------------------- 1 | describe('angular-clipboard', function () { 2 | var elm, scope; 3 | 4 | beforeEach(angular.mock.module('angular-clipboard')); 5 | 6 | beforeEach(angular.mock.inject(function ($rootScope, $compile) { 7 | scope = $rootScope; 8 | elm = $compile('')(scope); 9 | 10 | scope.supported = undefined; 11 | scope.textToCopy = 'Copy me!'; 12 | scope.copied = false; 13 | scope.success = function () {scope.copied = true;}; 14 | scope.fail = function (err) {}; 15 | scope.$digest(); 16 | 17 | spyOn(scope, 'success').and.callThrough(); 18 | spyOn(scope, 'fail'); 19 | })); 20 | 21 | it('should invoke success callback after successful execCommand', function () { 22 | spyOn(document, 'execCommand').and.returnValue(true); 23 | elm.triggerHandler('click'); 24 | expect(scope.success).toHaveBeenCalled(); 25 | }); 26 | 27 | it('should invoke fail callback on error in execCommand', function () { 28 | spyOn(document, 'execCommand').and.returnValue(false); 29 | elm.triggerHandler('click'); 30 | expect(scope.fail).toHaveBeenCalledWith('failure copy'); 31 | }); 32 | 33 | it('should invoke fail callback on invalid child element', function () { 34 | spyOn(document.body, 'appendChild').and.throwError('fake'); 35 | elm.triggerHandler('click'); 36 | expect(scope.fail).toHaveBeenCalled(); 37 | }); 38 | 39 | it('should be caught by angular\'s digest cycle', function () { 40 | spyOn(document, 'execCommand').and.returnValue(true); 41 | elm.triggerHandler('click'); 42 | expect(scope.copied).toEqual(true); 43 | }); 44 | 45 | it('should export/return angular module', function () { 46 | expect(window.angularClipboard).toBeDefined(); 47 | expect(window.angularClipboard.name).toEqual('angular-clipboard'); 48 | }); 49 | 50 | it('should feature detect and set supported', function () { 51 | expect(scope.supported).toEqual(true); 52 | }); 53 | }); 54 | --------------------------------------------------------------------------------