├── .eslintrc.json ├── .gitignore ├── LICENSE ├── README.md ├── dist └── esc-pos-encoder.js ├── index.d.ts ├── package-lock.json ├── package.json ├── src └── esc-pos-encoder.js └── test └── esc-pos-encoder.js /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "parserOptions": { 3 | "ecmaVersion": 6 4 | }, 5 | "env": { 6 | "node": true, 7 | "es6": true 8 | }, 9 | "extends": [ 10 | "eslint:recommended", 11 | "google" 12 | ], 13 | "rules": { 14 | "max-len": [ 15 | 1, 16 | 120 17 | ] 18 | } 19 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Anson Tio 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 | # esc-pos-encoder-ionic 2 | 3 | Create a set of commands that can be send to any receipt printer that supports ESC/POS 4 | This is ionic friendly, which mean you can use this for your ionic project too! 5 | 6 | ## Usage 7 | 8 | First, install the package using npm: 9 | 10 | npm install esc-pos-encoder-ionic --save 11 | 12 | Then, require the package and use it like so: 13 | 14 | let EscPosEncoder = require('esc-pos-encoder'); 15 | 16 | let encoder = new EscPosEncoder(); 17 | 18 | let result = encoder 19 | .initialize() 20 | .text('The quick brown fox jumps over the lazy dog) 21 | .newline() 22 | .qrcode('https://nielsleenheer.com') 23 | .encode(); 24 | 25 | All commands can be chained, except for `encode()` which will return the result as an Uint8Array which contains all the bytes that need to be send to the printer. 26 | 27 | You can reuse the instantiated `EscPosEncoder` class to generate multiple commands or sets of commands for the same printer. It will remember settings like code page, so you don't have to specify that on subsequent use. That does rely on that previous commands were actually send to the printer. 28 | 29 | ## Usage (Ionic) 30 | 31 | On the page that you want to have the encoder, type this 32 | 33 | import EscPosEncoder from 'esc-pos-encoder-ionic'; 34 | 35 | Then inside the class method, you can access it by using: 36 | 37 | const encoder = new EscPosEncoder(); 38 | 39 | 40 | The following commands are available: 41 | 42 | ### Initialize 43 | 44 | Properly initialize the printer, which means text mode is enabled and settings like code page are set to default. 45 | 46 | let result = encoder 47 | .initialize() 48 | .encode() 49 | 50 | ### Codepage 51 | 52 | Set the code page of the printer. Receipt printers don't support UTF-8 or any other unicode encoding, instead the rely on legacy code pages. 53 | 54 | If you specify the code page, it will send a command to the printer to enable that particular code page and from then on it will automatically encode all text string to that code page. 55 | 56 | If you don't specify a code page, it will assume you want to print only ASCII characters and strip out any others. 57 | 58 | let result = encoder 59 | .codepage('windows1251') 60 | .text('Iñtërnâtiônàlizætiøn') 61 | .codepage('cp936') 62 | .text('简体中文') 63 | .encode() 64 | 65 | The following code pages are supported: cp437, cp737, cp850, cp775, cp852, cp855, cp857, cp858, cp860, cp861, cp862, cp863, cp864, cp865, cp866, cp869, cp936, cp949, cp950, cp1252, iso88596, shiftjis, windows1250, windows1251, windows1252, windows1253, windows1254, windows1255, windows1256, windows1257, windows1258. 66 | 67 | ### Text 68 | 69 | Print a string of text. If the text is longer than the line width of the printer, it will automatially wrap to the next line when it reaches the maximum width. That means it could wrap right in the middle of a word. 70 | 71 | let result = encoder 72 | .text('The quick brown fox jumps over the lazy dog') 73 | .encode() 74 | 75 | An optional parameter turns on word wrapping. To enable this, specify the maximum length of the line. 76 | 77 | let result = encoder 78 | .text('The quick brown fox jumps over the lazy dog', 20) 79 | .encode() 80 | 81 | ### Newline 82 | 83 | Move to the beginning of the next line. 84 | 85 | let result = encoder 86 | .newline() 87 | .encode() 88 | 89 | ### Line 90 | 91 | Print a line of text. This is similar to the `text()` command, except it will automatically add a `newline()` command. 92 | 93 | let result = encoder 94 | .line('The is the first line') 95 | .line('And this is the second') 96 | .encode() 97 | 98 | This would be equal to: 99 | 100 | let result = encoder 101 | .text('The is the first line') 102 | .newline() 103 | .text('And this is the second') 104 | .newline() 105 | .encode() 106 | 107 | An optional parameter turns on word wrapping. To enable this, specify the maximum length of the line. 108 | 109 | let result = encoder 110 | .line('The quick brown fox jumps over the lazy dog', 20) 111 | .encode() 112 | 113 | ### Underline 114 | 115 | Change the text style to underline. 116 | 117 | let result = encoder 118 | .text('This is ') 119 | .underline() 120 | .text('underlined') 121 | .underline() 122 | .encode() 123 | 124 | It will try to remember the current state of the text style. But you can also provide and additional parameter to force the text style to turn on and off. 125 | 126 | let result = encoder 127 | .text('This is ') 128 | .underline(true) 129 | .text('bold') 130 | .underline(false) 131 | .encode() 132 | 133 | ### Bold 134 | 135 | Change the text style to bold. 136 | 137 | let result = encoder 138 | .text('This is ') 139 | .bold() 140 | .text('bold') 141 | .bold() 142 | .encode() 143 | 144 | It will try to remember the current state of the text style. But you can also provide and additional parameter to force the text style to turn on and off. 145 | 146 | let result = encoder 147 | .text('This is ') 148 | .bold(true) 149 | .text('bold') 150 | .bold(false) 151 | .encode() 152 | 153 | ### Italic 154 | 155 | Change the text style to italic. 156 | 157 | let result = encoder 158 | .text('This is ') 159 | .italic() 160 | .text('italic') 161 | .italic() 162 | .encode() 163 | 164 | It will try to remember the current state of the text style. But you can also provide and additional parameter to force the text style to turn on and off. 165 | 166 | let result = encoder 167 | .text('This is ') 168 | .italic(true) 169 | .text('italic') 170 | .italic(false) 171 | .encode() 172 | 173 | Note: this text style is not supported by most receipt printers. 174 | 175 | ### Align 176 | 177 | Change the alignment of the text. You can specify the alignment using a parameter which can be either "left", "center" or "right". 178 | 179 | let result = encoder 180 | .align('right') 181 | .line('This line is aligned to the right') 182 | .align('center') 183 | .line('This line is centered') 184 | .align('left') 185 | .line('This line is aligned to the left') 186 | .encode() 187 | 188 | ### Size 189 | 190 | Change the text size. You can specify the size using a parameter which can be either "small" or "normal". 191 | 192 | let result = encoder 193 | .size('small') 194 | .line('A line of small text) 195 | .size('normal') 196 | .line('A line of normal text) 197 | .encode() 198 | 199 | ### Barcode 200 | 201 | Print a barcode of a certain symbology. The first parameter is the value of the barcode, the second is the symbology and finally the height of the barcode. 202 | 203 | The following symbologies can be used: 'upca', 'ean13', 'ean8', 'code39', 'itf', 'codabar'. 204 | 205 | let result = encoder 206 | .barcode('3130630574613', 'ean13', 60) 207 | .encode() 208 | 209 | 210 | ### Qrcode 211 | 212 | Print a QR code. The first parameter is the data of the QR code. 213 | 214 | let result = encoder 215 | .qrcode('https://nielsleenheer.com') 216 | .encode() 217 | 218 | The qrcode function accepts the following additional parameters: 219 | 220 | - *model* - a number that can be 1 for Model 1 and 2 for Model 2 221 | - *size* - a number that can be between 1 and 8 for determining the size of the QR code 222 | - *errorlevel* - a string that can be either 'l', 'm', 'q' or 'h'. 223 | 224 | For example: 225 | 226 | let result = encoder 227 | .qrcode('https://nielsleenheer.com', 1, 8, 'h') 228 | .encode() 229 | 230 | 231 | ### Image 232 | 233 | Print an image. The image is automatically converted to black and white and can optionally be dithered using different algorithms. 234 | 235 | The first parameter is the image itself. When running in the browser it can be any element that can be drawn onto a canvas, like an img, svg, canvas and video elements. When on Node it can be a Canvas provided by the `canvas` package. 236 | 237 | The second parameter is the width of the image on the paper receipt in pixels. It must be a multiple of 8. 238 | 239 | The third parameter is the height of the image on the paper receipt in pixels. It must be a multiple of 8. 240 | 241 | The fourth parameter is the dithering algorithm that is used to turn colour and grayscale images into black and white. The follow algorithms are supported: threshold, bayer, floydsteinberg, atkinson. If not supplied, it will default to a simple threshold. 242 | 243 | The fifth paramter is the threshold that will be used by the threshold and bayer dithering algorithm. It is ignored by the other algorithms. It is set to a default of 128. 244 | 245 | let img = new Image(); 246 | img.src = 'https://...'; 247 | 248 | img.onload = function() { 249 | let result = encoder 250 | .image(img, 300, 300, 'atkinson') 251 | .encode() 252 | } 253 | 254 | ### Cut 255 | 256 | Cut the paper. Optionally a parameter can be specified which can be either be "partial" or "full". If not specified, a full cut will be used. 257 | 258 | let result = encoder 259 | .cut('partial') 260 | .encode() 261 | 262 | Note: Not all printer models support cutting paper. And even if they do, they might not support both types of cuts. 263 | 264 | ### Raw 265 | 266 | Add raw printer commands, in case you want to send a command that this library does not support natively. For example the following command is to turn of Hanzi character mode. 267 | 268 | let result = encoder 269 | .raw([ 0x1c, 0x2e ]) 270 | .encode() 271 | 272 | 273 | ## License 274 | 275 | MIT 276 | -------------------------------------------------------------------------------- /index.d.ts: -------------------------------------------------------------------------------- 1 | export default class EscPosEncoder { 2 | /** 3 | * Initialize the printer 4 | * 5 | * @return {object} Return the object, for easy chaining commands 6 | * 7 | */ 8 | initialize(): any; 9 | 10 | /** 11 | * Change the code page 12 | * 13 | * @param {string} value The codepage that we set the printer to 14 | * @return {object} Return the object, for easy chaining commands 15 | * 16 | */ 17 | codepage(value: string): any; 18 | 19 | /** 20 | * Print text 21 | * 22 | * @param {string} value Text that needs to be printed 23 | * @param {number} wrap Wrap text after this many positions 24 | * @return {object} Return the object, for easy chaining commands 25 | * 26 | */ 27 | text(value: string, wrap: number): any; 28 | 29 | /** 30 | * Print a newline 31 | * 32 | * @return {object} Return the object, for easy chaining commands 33 | * 34 | */ 35 | newline(): any; 36 | 37 | /** 38 | * Print text, followed by a newline 39 | * 40 | * @param {string} value Text that needs to be printed 41 | * @param {number} wrap Wrap text after this many positions 42 | * @return {object} Return the object, for easy chaining commands 43 | * 44 | */ 45 | line(value: string, wrap: number): any; 46 | 47 | /** 48 | * Underline text 49 | * 50 | * @param {boolean|number} value true to turn on underline, false to turn off, or 2 for double underline 51 | * @return {object} Return the object, for easy chaining commands 52 | * 53 | */ 54 | underline(value: boolean): any; 55 | 56 | /** 57 | * Italic text 58 | * 59 | * @param {boolean} value true to turn on italic, false to turn off 60 | * @return {object} Return the object, for easy chaining commands 61 | * 62 | */ 63 | italic(value: boolean): any; 64 | 65 | /** 66 | * Bold text 67 | * 68 | * @param {boolean} value true to turn on bold, false to turn off, or 2 for double underline 69 | * @return {object} Return the object, for easy chaining commands 70 | * 71 | */ 72 | bold(value: boolean): any; 73 | 74 | /** 75 | * Change text size 76 | * 77 | * @param {string} value small or normal 78 | * @return {object} Return the object, for easy chaining commands 79 | * 80 | */ 81 | size(value: string): any; 82 | 83 | /** 84 | * Change text alignment 85 | * 86 | * @param {string} value left, center or right 87 | * @return {object} Return the object, for easy chaining commands 88 | * 89 | */ 90 | align(value: string): any; 91 | 92 | /** 93 | * Barcode 94 | * 95 | * @param {string} value the value of the barcode 96 | * @param {string} symbology the type of the barcode 97 | * @param {number} height height of the barcode 98 | * @return {object} Return the object, for easy chaining commands 99 | * 100 | */ 101 | barcode(value: string, symbology: string, height: number): any; 102 | 103 | /** 104 | * QR code 105 | * 106 | * @param {string} value the value of the qr code 107 | * @param {number} model model of the qrcode, either 1 or 2 108 | * @param {number} size size of the qrcode, a value between 1 and 8 109 | * @param {string} errorlevel the amount of error correction used, either 'l', 'm', 'q', 'h' 110 | * @return {object} Return the object, for easy chaining commands 111 | * 112 | */ 113 | qrcode(value: string, model: number, size: number, errorlevel: string): any; 114 | 115 | /** 116 | * Image 117 | * 118 | * @param {object} element an element, like a canvas or image that needs to be printed 119 | * @param {number} width width of the image on the printer 120 | * @param {number} height height of the image on the printer 121 | * @param {string} algorithm the dithering algorithm for making the image black and white 122 | * @param {number} threshold threshold for the dithering algorithm 123 | * @return {object} Return the object, for easy chaining commands 124 | * 125 | */ 126 | image( 127 | element: any, 128 | width: number, 129 | height: number, 130 | algorithm: string, 131 | threshold: number 132 | ): any; 133 | 134 | /** 135 | * Cut paper 136 | * 137 | * @param {string} value full or partial. When not specified a full cut will be assumed 138 | * @return {object} Return the object, for easy chaining commands 139 | * 140 | */ 141 | cut(value: string): any; 142 | 143 | /** 144 | * Beeper sound functionality 145 | * 146 | * @return {object} Return the object, for easy chaining commands 147 | */ 148 | beeper(): any; 149 | 150 | /** 151 | * Open cash drawer 152 | * 153 | * @return {object} Return the object, for easy chaining commands 154 | */ 155 | openCashDrawer(): any; 156 | 157 | /** 158 | * Add raw printer commands 159 | * 160 | * @param {array} data raw bytes to be included 161 | * @return {object} Return the object, for easy chaining commands 162 | * 163 | */ 164 | raw(data: any[]): any; 165 | 166 | /** 167 | * Encode all previous commands 168 | * 169 | * @return {Uint8Array} Return the encoded bytes 170 | * 171 | */ 172 | encode(): any; 173 | } 174 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "esc-pos-encoder-ionic", 3 | "version": "1.1.2", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "JSONStream": { 8 | "version": "1.3.5", 9 | "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", 10 | "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", 11 | "dev": true, 12 | "requires": { 13 | "jsonparse": "^1.2.0", 14 | "through": ">=2.2.7 <3" 15 | } 16 | }, 17 | "abbrev": { 18 | "version": "1.1.1", 19 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 20 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 21 | }, 22 | "acorn": { 23 | "version": "7.1.0", 24 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", 25 | "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", 26 | "dev": true 27 | }, 28 | "acorn-jsx": { 29 | "version": "3.0.1", 30 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", 31 | "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", 32 | "dev": true, 33 | "requires": { 34 | "acorn": "^3.0.4" 35 | }, 36 | "dependencies": { 37 | "acorn": { 38 | "version": "3.3.0", 39 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", 40 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", 41 | "dev": true 42 | } 43 | } 44 | }, 45 | "acorn-node": { 46 | "version": "1.8.2", 47 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 48 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 49 | "dev": true, 50 | "requires": { 51 | "acorn": "^7.0.0", 52 | "acorn-walk": "^7.0.0", 53 | "xtend": "^4.0.2" 54 | } 55 | }, 56 | "acorn-walk": { 57 | "version": "7.1.1", 58 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz", 59 | "integrity": "sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==", 60 | "dev": true 61 | }, 62 | "ajv": { 63 | "version": "5.5.2", 64 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 65 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", 66 | "dev": true, 67 | "requires": { 68 | "co": "^4.6.0", 69 | "fast-deep-equal": "^1.0.0", 70 | "fast-json-stable-stringify": "^2.0.0", 71 | "json-schema-traverse": "^0.3.0" 72 | } 73 | }, 74 | "ajv-keywords": { 75 | "version": "2.1.1", 76 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", 77 | "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", 78 | "dev": true 79 | }, 80 | "ansi-escapes": { 81 | "version": "3.2.0", 82 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", 83 | "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", 84 | "dev": true 85 | }, 86 | "ansi-regex": { 87 | "version": "2.1.1", 88 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 89 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 90 | }, 91 | "ansi-styles": { 92 | "version": "2.2.1", 93 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 94 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 95 | "dev": true 96 | }, 97 | "aproba": { 98 | "version": "1.2.0", 99 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", 100 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" 101 | }, 102 | "are-we-there-yet": { 103 | "version": "1.1.5", 104 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", 105 | "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", 106 | "requires": { 107 | "delegates": "^1.0.0", 108 | "readable-stream": "^2.0.6" 109 | } 110 | }, 111 | "argparse": { 112 | "version": "1.0.10", 113 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 114 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 115 | "dev": true, 116 | "requires": { 117 | "sprintf-js": "~1.0.2" 118 | } 119 | }, 120 | "asn1.js": { 121 | "version": "4.10.1", 122 | "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", 123 | "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", 124 | "dev": true, 125 | "requires": { 126 | "bn.js": "^4.0.0", 127 | "inherits": "^2.0.1", 128 | "minimalistic-assert": "^1.0.0" 129 | } 130 | }, 131 | "assert": { 132 | "version": "1.5.0", 133 | "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", 134 | "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", 135 | "dev": true, 136 | "requires": { 137 | "object-assign": "^4.1.1", 138 | "util": "0.10.3" 139 | }, 140 | "dependencies": { 141 | "inherits": { 142 | "version": "2.0.1", 143 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 144 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", 145 | "dev": true 146 | }, 147 | "util": { 148 | "version": "0.10.3", 149 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", 150 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", 151 | "dev": true, 152 | "requires": { 153 | "inherits": "2.0.1" 154 | } 155 | } 156 | } 157 | }, 158 | "assertion-error": { 159 | "version": "1.1.0", 160 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 161 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 162 | "dev": true 163 | }, 164 | "babel-code-frame": { 165 | "version": "6.26.0", 166 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", 167 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", 168 | "dev": true, 169 | "requires": { 170 | "chalk": "^1.1.3", 171 | "esutils": "^2.0.2", 172 | "js-tokens": "^3.0.2" 173 | }, 174 | "dependencies": { 175 | "chalk": { 176 | "version": "1.1.3", 177 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 178 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 179 | "dev": true, 180 | "requires": { 181 | "ansi-styles": "^2.2.1", 182 | "escape-string-regexp": "^1.0.2", 183 | "has-ansi": "^2.0.0", 184 | "strip-ansi": "^3.0.0", 185 | "supports-color": "^2.0.0" 186 | } 187 | }, 188 | "strip-ansi": { 189 | "version": "3.0.1", 190 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 191 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 192 | "dev": true, 193 | "requires": { 194 | "ansi-regex": "^2.0.0" 195 | } 196 | } 197 | } 198 | }, 199 | "balanced-match": { 200 | "version": "1.0.0", 201 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 202 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 203 | }, 204 | "base64-js": { 205 | "version": "1.3.1", 206 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", 207 | "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", 208 | "dev": true 209 | }, 210 | "bn.js": { 211 | "version": "4.11.8", 212 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", 213 | "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", 214 | "dev": true 215 | }, 216 | "brace-expansion": { 217 | "version": "1.1.8", 218 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 219 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 220 | "requires": { 221 | "balanced-match": "^1.0.0", 222 | "concat-map": "0.0.1" 223 | } 224 | }, 225 | "brorand": { 226 | "version": "1.1.0", 227 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 228 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", 229 | "dev": true 230 | }, 231 | "browser-pack": { 232 | "version": "6.1.0", 233 | "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", 234 | "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", 235 | "dev": true, 236 | "requires": { 237 | "JSONStream": "^1.0.3", 238 | "combine-source-map": "~0.8.0", 239 | "defined": "^1.0.0", 240 | "safe-buffer": "^5.1.1", 241 | "through2": "^2.0.0", 242 | "umd": "^3.0.0" 243 | } 244 | }, 245 | "browser-resolve": { 246 | "version": "1.11.3", 247 | "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", 248 | "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", 249 | "dev": true, 250 | "requires": { 251 | "resolve": "1.1.7" 252 | }, 253 | "dependencies": { 254 | "resolve": { 255 | "version": "1.1.7", 256 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", 257 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", 258 | "dev": true 259 | } 260 | } 261 | }, 262 | "browser-stdout": { 263 | "version": "1.3.0", 264 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", 265 | "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", 266 | "dev": true 267 | }, 268 | "browserify": { 269 | "version": "16.5.0", 270 | "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.0.tgz", 271 | "integrity": "sha512-6bfI3cl76YLAnCZ75AGu/XPOsqUhRyc0F/olGIJeCxtfxF2HvPKEcmjU9M8oAPxl4uBY1U7Nry33Q6koV3f2iw==", 272 | "dev": true, 273 | "requires": { 274 | "JSONStream": "^1.0.3", 275 | "assert": "^1.4.0", 276 | "browser-pack": "^6.0.1", 277 | "browser-resolve": "^1.11.0", 278 | "browserify-zlib": "~0.2.0", 279 | "buffer": "^5.0.2", 280 | "cached-path-relative": "^1.0.0", 281 | "concat-stream": "^1.6.0", 282 | "console-browserify": "^1.1.0", 283 | "constants-browserify": "~1.0.0", 284 | "crypto-browserify": "^3.0.0", 285 | "defined": "^1.0.0", 286 | "deps-sort": "^2.0.0", 287 | "domain-browser": "^1.2.0", 288 | "duplexer2": "~0.1.2", 289 | "events": "^2.0.0", 290 | "glob": "^7.1.0", 291 | "has": "^1.0.0", 292 | "htmlescape": "^1.1.0", 293 | "https-browserify": "^1.0.0", 294 | "inherits": "~2.0.1", 295 | "insert-module-globals": "^7.0.0", 296 | "labeled-stream-splicer": "^2.0.0", 297 | "mkdirp": "^0.5.0", 298 | "module-deps": "^6.0.0", 299 | "os-browserify": "~0.3.0", 300 | "parents": "^1.0.1", 301 | "path-browserify": "~0.0.0", 302 | "process": "~0.11.0", 303 | "punycode": "^1.3.2", 304 | "querystring-es3": "~0.2.0", 305 | "read-only-stream": "^2.0.0", 306 | "readable-stream": "^2.0.2", 307 | "resolve": "^1.1.4", 308 | "shasum": "^1.0.0", 309 | "shell-quote": "^1.6.1", 310 | "stream-browserify": "^2.0.0", 311 | "stream-http": "^3.0.0", 312 | "string_decoder": "^1.1.1", 313 | "subarg": "^1.0.0", 314 | "syntax-error": "^1.1.1", 315 | "through2": "^2.0.0", 316 | "timers-browserify": "^1.0.1", 317 | "tty-browserify": "0.0.1", 318 | "url": "~0.11.0", 319 | "util": "~0.10.1", 320 | "vm-browserify": "^1.0.0", 321 | "xtend": "^4.0.0" 322 | }, 323 | "dependencies": { 324 | "safe-buffer": { 325 | "version": "5.2.0", 326 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 327 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", 328 | "dev": true 329 | }, 330 | "string_decoder": { 331 | "version": "1.3.0", 332 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 333 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 334 | "dev": true, 335 | "requires": { 336 | "safe-buffer": "~5.2.0" 337 | } 338 | } 339 | } 340 | }, 341 | "browserify-aes": { 342 | "version": "1.2.0", 343 | "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", 344 | "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", 345 | "dev": true, 346 | "requires": { 347 | "buffer-xor": "^1.0.3", 348 | "cipher-base": "^1.0.0", 349 | "create-hash": "^1.1.0", 350 | "evp_bytestokey": "^1.0.3", 351 | "inherits": "^2.0.1", 352 | "safe-buffer": "^5.0.1" 353 | } 354 | }, 355 | "browserify-cipher": { 356 | "version": "1.0.1", 357 | "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", 358 | "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", 359 | "dev": true, 360 | "requires": { 361 | "browserify-aes": "^1.0.4", 362 | "browserify-des": "^1.0.0", 363 | "evp_bytestokey": "^1.0.0" 364 | } 365 | }, 366 | "browserify-des": { 367 | "version": "1.0.2", 368 | "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", 369 | "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", 370 | "dev": true, 371 | "requires": { 372 | "cipher-base": "^1.0.1", 373 | "des.js": "^1.0.0", 374 | "inherits": "^2.0.1", 375 | "safe-buffer": "^5.1.2" 376 | }, 377 | "dependencies": { 378 | "safe-buffer": { 379 | "version": "5.2.0", 380 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 381 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", 382 | "dev": true 383 | } 384 | } 385 | }, 386 | "browserify-rsa": { 387 | "version": "4.0.1", 388 | "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", 389 | "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", 390 | "dev": true, 391 | "requires": { 392 | "bn.js": "^4.1.0", 393 | "randombytes": "^2.0.1" 394 | } 395 | }, 396 | "browserify-sign": { 397 | "version": "4.0.4", 398 | "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", 399 | "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", 400 | "dev": true, 401 | "requires": { 402 | "bn.js": "^4.1.1", 403 | "browserify-rsa": "^4.0.0", 404 | "create-hash": "^1.1.0", 405 | "create-hmac": "^1.1.2", 406 | "elliptic": "^6.0.0", 407 | "inherits": "^2.0.1", 408 | "parse-asn1": "^5.0.0" 409 | } 410 | }, 411 | "browserify-zlib": { 412 | "version": "0.2.0", 413 | "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", 414 | "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", 415 | "dev": true, 416 | "requires": { 417 | "pako": "~1.0.5" 418 | } 419 | }, 420 | "buffer": { 421 | "version": "5.4.3", 422 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", 423 | "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", 424 | "dev": true, 425 | "requires": { 426 | "base64-js": "^1.0.2", 427 | "ieee754": "^1.1.4" 428 | } 429 | }, 430 | "buffer-from": { 431 | "version": "1.1.1", 432 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 433 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 434 | "dev": true 435 | }, 436 | "buffer-to-uint8array": { 437 | "version": "1.1.0", 438 | "resolved": "https://registry.npmjs.org/buffer-to-uint8array/-/buffer-to-uint8array-1.1.0.tgz", 439 | "integrity": "sha1-z29BKHwCL0WNp1LDkcGo1TXsX3I=" 440 | }, 441 | "buffer-xor": { 442 | "version": "1.0.3", 443 | "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", 444 | "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", 445 | "dev": true 446 | }, 447 | "builtin-status-codes": { 448 | "version": "3.0.0", 449 | "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", 450 | "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", 451 | "dev": true 452 | }, 453 | "cached-path-relative": { 454 | "version": "1.0.2", 455 | "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", 456 | "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", 457 | "dev": true 458 | }, 459 | "caller-path": { 460 | "version": "0.1.0", 461 | "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", 462 | "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", 463 | "dev": true, 464 | "requires": { 465 | "callsites": "^0.2.0" 466 | } 467 | }, 468 | "callsites": { 469 | "version": "0.2.0", 470 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", 471 | "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", 472 | "dev": true 473 | }, 474 | "canvas": { 475 | "version": "2.6.1", 476 | "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.6.1.tgz", 477 | "integrity": "sha512-S98rKsPcuhfTcYbtF53UIJhcbgIAK533d1kJKMwsMwAIFgfd58MOyxRud3kktlzWiEkFliaJtvyZCBtud/XVEA==", 478 | "requires": { 479 | "nan": "^2.14.0", 480 | "node-pre-gyp": "^0.11.0", 481 | "simple-get": "^3.0.3" 482 | } 483 | }, 484 | "canvas-dither": { 485 | "version": "1.0.0", 486 | "resolved": "https://registry.npmjs.org/canvas-dither/-/canvas-dither-1.0.0.tgz", 487 | "integrity": "sha512-JBxBfROOrRbYtM0Hjlo1aU+bSW2AdAjA8nV0HnJJh7kf4194x0GsVCwquiMfxdoiM2ZZEqEDYI5CUVjbi3ct2w==" 488 | }, 489 | "canvas-flatten": { 490 | "version": "1.0.0", 491 | "resolved": "https://registry.npmjs.org/canvas-flatten/-/canvas-flatten-1.0.0.tgz", 492 | "integrity": "sha512-QbltSgZ3PrycONYfPx+zUTjrpq9+2ldt5rLmeU19SOGtx2eGBqJ/OHAfKzmYxNhoNn4KcJOL3ET1zxDbKxrGQQ==" 493 | }, 494 | "chai": { 495 | "version": "4.2.0", 496 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", 497 | "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", 498 | "dev": true, 499 | "requires": { 500 | "assertion-error": "^1.1.0", 501 | "check-error": "^1.0.2", 502 | "deep-eql": "^3.0.1", 503 | "get-func-name": "^2.0.0", 504 | "pathval": "^1.1.0", 505 | "type-detect": "^4.0.5" 506 | } 507 | }, 508 | "chalk": { 509 | "version": "2.4.2", 510 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 511 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 512 | "dev": true, 513 | "requires": { 514 | "ansi-styles": "^3.2.1", 515 | "escape-string-regexp": "^1.0.5", 516 | "supports-color": "^5.3.0" 517 | }, 518 | "dependencies": { 519 | "ansi-styles": { 520 | "version": "3.2.1", 521 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 522 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 523 | "dev": true, 524 | "requires": { 525 | "color-convert": "^1.9.0" 526 | } 527 | }, 528 | "supports-color": { 529 | "version": "5.5.0", 530 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 531 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 532 | "dev": true, 533 | "requires": { 534 | "has-flag": "^3.0.0" 535 | } 536 | } 537 | } 538 | }, 539 | "chardet": { 540 | "version": "0.4.2", 541 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", 542 | "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", 543 | "dev": true 544 | }, 545 | "check-error": { 546 | "version": "1.0.2", 547 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", 548 | "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", 549 | "dev": true 550 | }, 551 | "chownr": { 552 | "version": "1.1.4", 553 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 554 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" 555 | }, 556 | "cipher-base": { 557 | "version": "1.0.4", 558 | "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", 559 | "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", 560 | "dev": true, 561 | "requires": { 562 | "inherits": "^2.0.1", 563 | "safe-buffer": "^5.0.1" 564 | } 565 | }, 566 | "circular-json": { 567 | "version": "0.3.3", 568 | "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", 569 | "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", 570 | "dev": true 571 | }, 572 | "cli-cursor": { 573 | "version": "2.1.0", 574 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", 575 | "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", 576 | "dev": true, 577 | "requires": { 578 | "restore-cursor": "^2.0.0" 579 | } 580 | }, 581 | "cli-width": { 582 | "version": "2.2.0", 583 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 584 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", 585 | "dev": true 586 | }, 587 | "co": { 588 | "version": "4.6.0", 589 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 590 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 591 | "dev": true 592 | }, 593 | "code-point-at": { 594 | "version": "1.1.0", 595 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 596 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 597 | }, 598 | "color-convert": { 599 | "version": "1.9.3", 600 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 601 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 602 | "dev": true, 603 | "requires": { 604 | "color-name": "1.1.3" 605 | } 606 | }, 607 | "color-name": { 608 | "version": "1.1.3", 609 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 610 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 611 | "dev": true 612 | }, 613 | "combine-source-map": { 614 | "version": "0.8.0", 615 | "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", 616 | "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", 617 | "dev": true, 618 | "requires": { 619 | "convert-source-map": "~1.1.0", 620 | "inline-source-map": "~0.6.0", 621 | "lodash.memoize": "~3.0.3", 622 | "source-map": "~0.5.3" 623 | } 624 | }, 625 | "commander": { 626 | "version": "2.11.0", 627 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", 628 | "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", 629 | "dev": true 630 | }, 631 | "concat-map": { 632 | "version": "0.0.1", 633 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 634 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 635 | }, 636 | "concat-stream": { 637 | "version": "1.6.2", 638 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 639 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 640 | "dev": true, 641 | "requires": { 642 | "buffer-from": "^1.0.0", 643 | "inherits": "^2.0.3", 644 | "readable-stream": "^2.2.2", 645 | "typedarray": "^0.0.6" 646 | } 647 | }, 648 | "console-browserify": { 649 | "version": "1.2.0", 650 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", 651 | "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", 652 | "dev": true 653 | }, 654 | "console-control-strings": { 655 | "version": "1.1.0", 656 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 657 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" 658 | }, 659 | "constants-browserify": { 660 | "version": "1.0.0", 661 | "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", 662 | "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", 663 | "dev": true 664 | }, 665 | "convert-source-map": { 666 | "version": "1.1.3", 667 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", 668 | "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", 669 | "dev": true 670 | }, 671 | "core-util-is": { 672 | "version": "1.0.2", 673 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 674 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 675 | }, 676 | "create-ecdh": { 677 | "version": "4.0.3", 678 | "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", 679 | "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", 680 | "dev": true, 681 | "requires": { 682 | "bn.js": "^4.1.0", 683 | "elliptic": "^6.0.0" 684 | } 685 | }, 686 | "create-hash": { 687 | "version": "1.2.0", 688 | "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", 689 | "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", 690 | "dev": true, 691 | "requires": { 692 | "cipher-base": "^1.0.1", 693 | "inherits": "^2.0.1", 694 | "md5.js": "^1.3.4", 695 | "ripemd160": "^2.0.1", 696 | "sha.js": "^2.4.0" 697 | } 698 | }, 699 | "create-hmac": { 700 | "version": "1.1.7", 701 | "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", 702 | "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", 703 | "dev": true, 704 | "requires": { 705 | "cipher-base": "^1.0.3", 706 | "create-hash": "^1.1.0", 707 | "inherits": "^2.0.1", 708 | "ripemd160": "^2.0.0", 709 | "safe-buffer": "^5.0.1", 710 | "sha.js": "^2.4.8" 711 | } 712 | }, 713 | "cross-spawn": { 714 | "version": "5.1.0", 715 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 716 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 717 | "dev": true, 718 | "requires": { 719 | "lru-cache": "^4.0.1", 720 | "shebang-command": "^1.2.0", 721 | "which": "^1.2.9" 722 | } 723 | }, 724 | "crypto-browserify": { 725 | "version": "3.12.0", 726 | "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", 727 | "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", 728 | "dev": true, 729 | "requires": { 730 | "browserify-cipher": "^1.0.0", 731 | "browserify-sign": "^4.0.0", 732 | "create-ecdh": "^4.0.0", 733 | "create-hash": "^1.1.0", 734 | "create-hmac": "^1.1.0", 735 | "diffie-hellman": "^5.0.0", 736 | "inherits": "^2.0.1", 737 | "pbkdf2": "^3.0.3", 738 | "public-encrypt": "^4.0.0", 739 | "randombytes": "^2.0.0", 740 | "randomfill": "^1.0.3" 741 | } 742 | }, 743 | "dash-ast": { 744 | "version": "1.0.0", 745 | "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", 746 | "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", 747 | "dev": true 748 | }, 749 | "debug": { 750 | "version": "3.2.6", 751 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 752 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 753 | "requires": { 754 | "ms": "^2.1.1" 755 | } 756 | }, 757 | "decompress-response": { 758 | "version": "4.2.1", 759 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", 760 | "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", 761 | "requires": { 762 | "mimic-response": "^2.0.0" 763 | } 764 | }, 765 | "deep-eql": { 766 | "version": "3.0.1", 767 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", 768 | "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", 769 | "dev": true, 770 | "requires": { 771 | "type-detect": "^4.0.0" 772 | } 773 | }, 774 | "deep-extend": { 775 | "version": "0.6.0", 776 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 777 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" 778 | }, 779 | "deep-is": { 780 | "version": "0.1.3", 781 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 782 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 783 | "dev": true 784 | }, 785 | "defined": { 786 | "version": "1.0.0", 787 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 788 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", 789 | "dev": true 790 | }, 791 | "delegates": { 792 | "version": "1.0.0", 793 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 794 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" 795 | }, 796 | "deps-sort": { 797 | "version": "2.0.1", 798 | "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", 799 | "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", 800 | "dev": true, 801 | "requires": { 802 | "JSONStream": "^1.0.3", 803 | "shasum-object": "^1.0.0", 804 | "subarg": "^1.0.0", 805 | "through2": "^2.0.0" 806 | } 807 | }, 808 | "des.js": { 809 | "version": "1.0.1", 810 | "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", 811 | "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", 812 | "dev": true, 813 | "requires": { 814 | "inherits": "^2.0.1", 815 | "minimalistic-assert": "^1.0.0" 816 | } 817 | }, 818 | "detect-libc": { 819 | "version": "1.0.3", 820 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 821 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" 822 | }, 823 | "detective": { 824 | "version": "5.2.0", 825 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", 826 | "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", 827 | "dev": true, 828 | "requires": { 829 | "acorn-node": "^1.6.1", 830 | "defined": "^1.0.0", 831 | "minimist": "^1.1.1" 832 | } 833 | }, 834 | "diff": { 835 | "version": "3.3.1", 836 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", 837 | "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", 838 | "dev": true 839 | }, 840 | "diffie-hellman": { 841 | "version": "5.0.3", 842 | "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", 843 | "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", 844 | "dev": true, 845 | "requires": { 846 | "bn.js": "^4.1.0", 847 | "miller-rabin": "^4.0.0", 848 | "randombytes": "^2.0.0" 849 | } 850 | }, 851 | "doctrine": { 852 | "version": "2.1.0", 853 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", 854 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", 855 | "dev": true, 856 | "requires": { 857 | "esutils": "^2.0.2" 858 | } 859 | }, 860 | "domain-browser": { 861 | "version": "1.2.0", 862 | "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", 863 | "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", 864 | "dev": true 865 | }, 866 | "duplexer2": { 867 | "version": "0.1.4", 868 | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", 869 | "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", 870 | "dev": true, 871 | "requires": { 872 | "readable-stream": "^2.0.2" 873 | } 874 | }, 875 | "elliptic": { 876 | "version": "6.5.2", 877 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", 878 | "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", 879 | "dev": true, 880 | "requires": { 881 | "bn.js": "^4.4.0", 882 | "brorand": "^1.0.1", 883 | "hash.js": "^1.0.0", 884 | "hmac-drbg": "^1.0.0", 885 | "inherits": "^2.0.1", 886 | "minimalistic-assert": "^1.0.0", 887 | "minimalistic-crypto-utils": "^1.0.0" 888 | } 889 | }, 890 | "escape-string-regexp": { 891 | "version": "1.0.5", 892 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 893 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 894 | "dev": true 895 | }, 896 | "eslint": { 897 | "version": "4.19.1", 898 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", 899 | "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", 900 | "dev": true, 901 | "requires": { 902 | "ajv": "^5.3.0", 903 | "babel-code-frame": "^6.22.0", 904 | "chalk": "^2.1.0", 905 | "concat-stream": "^1.6.0", 906 | "cross-spawn": "^5.1.0", 907 | "debug": "^3.1.0", 908 | "doctrine": "^2.1.0", 909 | "eslint-scope": "^3.7.1", 910 | "eslint-visitor-keys": "^1.0.0", 911 | "espree": "^3.5.4", 912 | "esquery": "^1.0.0", 913 | "esutils": "^2.0.2", 914 | "file-entry-cache": "^2.0.0", 915 | "functional-red-black-tree": "^1.0.1", 916 | "glob": "^7.1.2", 917 | "globals": "^11.0.1", 918 | "ignore": "^3.3.3", 919 | "imurmurhash": "^0.1.4", 920 | "inquirer": "^3.0.6", 921 | "is-resolvable": "^1.0.0", 922 | "js-yaml": "^3.9.1", 923 | "json-stable-stringify-without-jsonify": "^1.0.1", 924 | "levn": "^0.3.0", 925 | "lodash": "^4.17.4", 926 | "minimatch": "^3.0.2", 927 | "mkdirp": "^0.5.1", 928 | "natural-compare": "^1.4.0", 929 | "optionator": "^0.8.2", 930 | "path-is-inside": "^1.0.2", 931 | "pluralize": "^7.0.0", 932 | "progress": "^2.0.0", 933 | "regexpp": "^1.0.1", 934 | "require-uncached": "^1.0.3", 935 | "semver": "^5.3.0", 936 | "strip-ansi": "^4.0.0", 937 | "strip-json-comments": "~2.0.1", 938 | "table": "4.0.2", 939 | "text-table": "~0.2.0" 940 | }, 941 | "dependencies": { 942 | "concat-stream": { 943 | "version": "1.6.2", 944 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", 945 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", 946 | "dev": true, 947 | "requires": { 948 | "buffer-from": "^1.0.0", 949 | "inherits": "^2.0.3", 950 | "readable-stream": "^2.2.2", 951 | "typedarray": "^0.0.6" 952 | } 953 | } 954 | } 955 | }, 956 | "eslint-config-google": { 957 | "version": "0.9.1", 958 | "resolved": "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.9.1.tgz", 959 | "integrity": "sha512-5A83D+lH0PA81QMESKbLJd/a3ic8tPZtwUmqNrxMRo54nfFaUvtt89q/+icQ+fd66c2xQHn0KyFkzJDoAUfpZA==", 960 | "dev": true 961 | }, 962 | "eslint-scope": { 963 | "version": "3.7.3", 964 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", 965 | "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", 966 | "dev": true, 967 | "requires": { 968 | "esrecurse": "^4.1.0", 969 | "estraverse": "^4.1.1" 970 | } 971 | }, 972 | "eslint-visitor-keys": { 973 | "version": "1.1.0", 974 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", 975 | "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", 976 | "dev": true 977 | }, 978 | "espree": { 979 | "version": "3.5.4", 980 | "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", 981 | "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", 982 | "dev": true, 983 | "requires": { 984 | "acorn": "^5.5.0", 985 | "acorn-jsx": "^3.0.0" 986 | }, 987 | "dependencies": { 988 | "acorn": { 989 | "version": "5.7.3", 990 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", 991 | "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", 992 | "dev": true 993 | } 994 | } 995 | }, 996 | "esprima": { 997 | "version": "4.0.1", 998 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 999 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 1000 | "dev": true 1001 | }, 1002 | "esquery": { 1003 | "version": "1.1.0", 1004 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz", 1005 | "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==", 1006 | "dev": true, 1007 | "requires": { 1008 | "estraverse": "^4.0.0" 1009 | } 1010 | }, 1011 | "esrecurse": { 1012 | "version": "4.2.1", 1013 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 1014 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 1015 | "dev": true, 1016 | "requires": { 1017 | "estraverse": "^4.1.0" 1018 | } 1019 | }, 1020 | "estraverse": { 1021 | "version": "4.3.0", 1022 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 1023 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 1024 | "dev": true 1025 | }, 1026 | "esutils": { 1027 | "version": "2.0.3", 1028 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1029 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1030 | "dev": true 1031 | }, 1032 | "events": { 1033 | "version": "2.1.0", 1034 | "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", 1035 | "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", 1036 | "dev": true 1037 | }, 1038 | "evp_bytestokey": { 1039 | "version": "1.0.3", 1040 | "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", 1041 | "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", 1042 | "dev": true, 1043 | "requires": { 1044 | "md5.js": "^1.3.4", 1045 | "safe-buffer": "^5.1.1" 1046 | } 1047 | }, 1048 | "external-editor": { 1049 | "version": "2.2.0", 1050 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", 1051 | "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", 1052 | "dev": true, 1053 | "requires": { 1054 | "chardet": "^0.4.0", 1055 | "iconv-lite": "^0.4.17", 1056 | "tmp": "^0.0.33" 1057 | } 1058 | }, 1059 | "fast-deep-equal": { 1060 | "version": "1.1.0", 1061 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", 1062 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", 1063 | "dev": true 1064 | }, 1065 | "fast-json-stable-stringify": { 1066 | "version": "2.1.0", 1067 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1068 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1069 | "dev": true 1070 | }, 1071 | "fast-levenshtein": { 1072 | "version": "2.0.6", 1073 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1074 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 1075 | "dev": true 1076 | }, 1077 | "fast-safe-stringify": { 1078 | "version": "2.0.7", 1079 | "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", 1080 | "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", 1081 | "dev": true 1082 | }, 1083 | "figures": { 1084 | "version": "2.0.0", 1085 | "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", 1086 | "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", 1087 | "dev": true, 1088 | "requires": { 1089 | "escape-string-regexp": "^1.0.5" 1090 | } 1091 | }, 1092 | "file-entry-cache": { 1093 | "version": "2.0.0", 1094 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", 1095 | "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", 1096 | "dev": true, 1097 | "requires": { 1098 | "flat-cache": "^1.2.1", 1099 | "object-assign": "^4.0.1" 1100 | } 1101 | }, 1102 | "flat-cache": { 1103 | "version": "1.3.4", 1104 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", 1105 | "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", 1106 | "dev": true, 1107 | "requires": { 1108 | "circular-json": "^0.3.1", 1109 | "graceful-fs": "^4.1.2", 1110 | "rimraf": "~2.6.2", 1111 | "write": "^0.2.1" 1112 | } 1113 | }, 1114 | "fs-minipass": { 1115 | "version": "1.2.7", 1116 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", 1117 | "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", 1118 | "requires": { 1119 | "minipass": "^2.6.0" 1120 | } 1121 | }, 1122 | "fs.realpath": { 1123 | "version": "1.0.0", 1124 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1125 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 1126 | }, 1127 | "function-bind": { 1128 | "version": "1.1.1", 1129 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1130 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1131 | "dev": true 1132 | }, 1133 | "functional-red-black-tree": { 1134 | "version": "1.0.1", 1135 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 1136 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 1137 | "dev": true 1138 | }, 1139 | "gauge": { 1140 | "version": "2.7.4", 1141 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", 1142 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", 1143 | "requires": { 1144 | "aproba": "^1.0.3", 1145 | "console-control-strings": "^1.0.0", 1146 | "has-unicode": "^2.0.0", 1147 | "object-assign": "^4.1.0", 1148 | "signal-exit": "^3.0.0", 1149 | "string-width": "^1.0.1", 1150 | "strip-ansi": "^3.0.1", 1151 | "wide-align": "^1.1.0" 1152 | }, 1153 | "dependencies": { 1154 | "is-fullwidth-code-point": { 1155 | "version": "1.0.0", 1156 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 1157 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 1158 | "requires": { 1159 | "number-is-nan": "^1.0.0" 1160 | } 1161 | }, 1162 | "string-width": { 1163 | "version": "1.0.2", 1164 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1165 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1166 | "requires": { 1167 | "code-point-at": "^1.0.0", 1168 | "is-fullwidth-code-point": "^1.0.0", 1169 | "strip-ansi": "^3.0.0" 1170 | } 1171 | }, 1172 | "strip-ansi": { 1173 | "version": "3.0.1", 1174 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1175 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1176 | "requires": { 1177 | "ansi-regex": "^2.0.0" 1178 | } 1179 | } 1180 | } 1181 | }, 1182 | "get-assigned-identifiers": { 1183 | "version": "1.2.0", 1184 | "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", 1185 | "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", 1186 | "dev": true 1187 | }, 1188 | "get-func-name": { 1189 | "version": "2.0.0", 1190 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", 1191 | "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", 1192 | "dev": true 1193 | }, 1194 | "glob": { 1195 | "version": "7.1.2", 1196 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 1197 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 1198 | "requires": { 1199 | "fs.realpath": "^1.0.0", 1200 | "inflight": "^1.0.4", 1201 | "inherits": "2", 1202 | "minimatch": "^3.0.4", 1203 | "once": "^1.3.0", 1204 | "path-is-absolute": "^1.0.0" 1205 | } 1206 | }, 1207 | "globals": { 1208 | "version": "11.12.0", 1209 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1210 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1211 | "dev": true 1212 | }, 1213 | "graceful-fs": { 1214 | "version": "4.2.3", 1215 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", 1216 | "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", 1217 | "dev": true 1218 | }, 1219 | "growl": { 1220 | "version": "1.10.3", 1221 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", 1222 | "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", 1223 | "dev": true 1224 | }, 1225 | "has": { 1226 | "version": "1.0.3", 1227 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1228 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1229 | "dev": true, 1230 | "requires": { 1231 | "function-bind": "^1.1.1" 1232 | } 1233 | }, 1234 | "has-ansi": { 1235 | "version": "2.0.0", 1236 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 1237 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 1238 | "dev": true, 1239 | "requires": { 1240 | "ansi-regex": "^2.0.0" 1241 | } 1242 | }, 1243 | "has-flag": { 1244 | "version": "3.0.0", 1245 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1246 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1247 | "dev": true 1248 | }, 1249 | "has-unicode": { 1250 | "version": "2.0.1", 1251 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 1252 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" 1253 | }, 1254 | "hash-base": { 1255 | "version": "3.0.4", 1256 | "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", 1257 | "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", 1258 | "dev": true, 1259 | "requires": { 1260 | "inherits": "^2.0.1", 1261 | "safe-buffer": "^5.0.1" 1262 | } 1263 | }, 1264 | "hash.js": { 1265 | "version": "1.1.7", 1266 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 1267 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 1268 | "dev": true, 1269 | "requires": { 1270 | "inherits": "^2.0.3", 1271 | "minimalistic-assert": "^1.0.1" 1272 | } 1273 | }, 1274 | "he": { 1275 | "version": "1.1.1", 1276 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", 1277 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", 1278 | "dev": true 1279 | }, 1280 | "hmac-drbg": { 1281 | "version": "1.0.1", 1282 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 1283 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 1284 | "dev": true, 1285 | "requires": { 1286 | "hash.js": "^1.0.3", 1287 | "minimalistic-assert": "^1.0.0", 1288 | "minimalistic-crypto-utils": "^1.0.1" 1289 | } 1290 | }, 1291 | "htmlescape": { 1292 | "version": "1.1.1", 1293 | "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", 1294 | "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", 1295 | "dev": true 1296 | }, 1297 | "https-browserify": { 1298 | "version": "1.0.0", 1299 | "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", 1300 | "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", 1301 | "dev": true 1302 | }, 1303 | "iconv-lite": { 1304 | "version": "0.4.24", 1305 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1306 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1307 | "requires": { 1308 | "safer-buffer": ">= 2.1.2 < 3" 1309 | } 1310 | }, 1311 | "ieee754": { 1312 | "version": "1.1.13", 1313 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", 1314 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", 1315 | "dev": true 1316 | }, 1317 | "ignore": { 1318 | "version": "3.3.10", 1319 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", 1320 | "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", 1321 | "dev": true 1322 | }, 1323 | "ignore-walk": { 1324 | "version": "3.0.3", 1325 | "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", 1326 | "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", 1327 | "requires": { 1328 | "minimatch": "^3.0.4" 1329 | } 1330 | }, 1331 | "imurmurhash": { 1332 | "version": "0.1.4", 1333 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1334 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1335 | "dev": true 1336 | }, 1337 | "inflight": { 1338 | "version": "1.0.6", 1339 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1340 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1341 | "requires": { 1342 | "once": "^1.3.0", 1343 | "wrappy": "1" 1344 | } 1345 | }, 1346 | "inherits": { 1347 | "version": "2.0.3", 1348 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1349 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1350 | }, 1351 | "ini": { 1352 | "version": "1.3.5", 1353 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 1354 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" 1355 | }, 1356 | "inline-source-map": { 1357 | "version": "0.6.2", 1358 | "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", 1359 | "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", 1360 | "dev": true, 1361 | "requires": { 1362 | "source-map": "~0.5.3" 1363 | } 1364 | }, 1365 | "inquirer": { 1366 | "version": "3.3.0", 1367 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", 1368 | "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", 1369 | "dev": true, 1370 | "requires": { 1371 | "ansi-escapes": "^3.0.0", 1372 | "chalk": "^2.0.0", 1373 | "cli-cursor": "^2.1.0", 1374 | "cli-width": "^2.0.0", 1375 | "external-editor": "^2.0.4", 1376 | "figures": "^2.0.0", 1377 | "lodash": "^4.3.0", 1378 | "mute-stream": "0.0.7", 1379 | "run-async": "^2.2.0", 1380 | "rx-lite": "^4.0.8", 1381 | "rx-lite-aggregates": "^4.0.8", 1382 | "string-width": "^2.1.0", 1383 | "strip-ansi": "^4.0.0", 1384 | "through": "^2.3.6" 1385 | } 1386 | }, 1387 | "insert-module-globals": { 1388 | "version": "7.2.0", 1389 | "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", 1390 | "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", 1391 | "dev": true, 1392 | "requires": { 1393 | "JSONStream": "^1.0.3", 1394 | "acorn-node": "^1.5.2", 1395 | "combine-source-map": "^0.8.0", 1396 | "concat-stream": "^1.6.1", 1397 | "is-buffer": "^1.1.0", 1398 | "path-is-absolute": "^1.0.1", 1399 | "process": "~0.11.0", 1400 | "through2": "^2.0.0", 1401 | "undeclared-identifiers": "^1.1.2", 1402 | "xtend": "^4.0.0" 1403 | } 1404 | }, 1405 | "is-buffer": { 1406 | "version": "1.1.6", 1407 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 1408 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 1409 | "dev": true 1410 | }, 1411 | "is-fullwidth-code-point": { 1412 | "version": "2.0.0", 1413 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1414 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 1415 | }, 1416 | "is-promise": { 1417 | "version": "2.1.0", 1418 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 1419 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 1420 | "dev": true 1421 | }, 1422 | "is-resolvable": { 1423 | "version": "1.1.0", 1424 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", 1425 | "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", 1426 | "dev": true 1427 | }, 1428 | "isarray": { 1429 | "version": "1.0.0", 1430 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1431 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1432 | }, 1433 | "isexe": { 1434 | "version": "2.0.0", 1435 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1436 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1437 | "dev": true 1438 | }, 1439 | "js-tokens": { 1440 | "version": "3.0.2", 1441 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", 1442 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", 1443 | "dev": true 1444 | }, 1445 | "js-yaml": { 1446 | "version": "3.13.1", 1447 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 1448 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 1449 | "dev": true, 1450 | "requires": { 1451 | "argparse": "^1.0.7", 1452 | "esprima": "^4.0.0" 1453 | } 1454 | }, 1455 | "json-schema-traverse": { 1456 | "version": "0.3.1", 1457 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 1458 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", 1459 | "dev": true 1460 | }, 1461 | "json-stable-stringify": { 1462 | "version": "0.0.1", 1463 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", 1464 | "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", 1465 | "dev": true, 1466 | "requires": { 1467 | "jsonify": "~0.0.0" 1468 | } 1469 | }, 1470 | "json-stable-stringify-without-jsonify": { 1471 | "version": "1.0.1", 1472 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1473 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1474 | "dev": true 1475 | }, 1476 | "jsonify": { 1477 | "version": "0.0.0", 1478 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 1479 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", 1480 | "dev": true 1481 | }, 1482 | "jsonparse": { 1483 | "version": "1.3.1", 1484 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", 1485 | "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", 1486 | "dev": true 1487 | }, 1488 | "labeled-stream-splicer": { 1489 | "version": "2.0.2", 1490 | "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", 1491 | "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", 1492 | "dev": true, 1493 | "requires": { 1494 | "inherits": "^2.0.1", 1495 | "stream-splicer": "^2.0.0" 1496 | } 1497 | }, 1498 | "levn": { 1499 | "version": "0.3.0", 1500 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 1501 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 1502 | "dev": true, 1503 | "requires": { 1504 | "prelude-ls": "~1.1.2", 1505 | "type-check": "~0.3.2" 1506 | } 1507 | }, 1508 | "linewrap": { 1509 | "version": "0.2.1", 1510 | "resolved": "https://registry.npmjs.org/linewrap/-/linewrap-0.2.1.tgz", 1511 | "integrity": "sha1-XK7xV5ODubX8toKy1JjcnXTFRc8=" 1512 | }, 1513 | "lodash": { 1514 | "version": "4.17.15", 1515 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 1516 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", 1517 | "dev": true 1518 | }, 1519 | "lodash.memoize": { 1520 | "version": "3.0.4", 1521 | "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", 1522 | "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", 1523 | "dev": true 1524 | }, 1525 | "lru-cache": { 1526 | "version": "4.1.5", 1527 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", 1528 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", 1529 | "dev": true, 1530 | "requires": { 1531 | "pseudomap": "^1.0.2", 1532 | "yallist": "^2.1.2" 1533 | } 1534 | }, 1535 | "md5.js": { 1536 | "version": "1.3.5", 1537 | "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", 1538 | "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", 1539 | "dev": true, 1540 | "requires": { 1541 | "hash-base": "^3.0.0", 1542 | "inherits": "^2.0.1", 1543 | "safe-buffer": "^5.1.2" 1544 | }, 1545 | "dependencies": { 1546 | "safe-buffer": { 1547 | "version": "5.2.0", 1548 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 1549 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", 1550 | "dev": true 1551 | } 1552 | } 1553 | }, 1554 | "miller-rabin": { 1555 | "version": "4.0.1", 1556 | "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", 1557 | "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", 1558 | "dev": true, 1559 | "requires": { 1560 | "bn.js": "^4.0.0", 1561 | "brorand": "^1.0.1" 1562 | } 1563 | }, 1564 | "mimic-fn": { 1565 | "version": "1.2.0", 1566 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", 1567 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", 1568 | "dev": true 1569 | }, 1570 | "mimic-response": { 1571 | "version": "2.1.0", 1572 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", 1573 | "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" 1574 | }, 1575 | "minimalistic-assert": { 1576 | "version": "1.0.1", 1577 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 1578 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", 1579 | "dev": true 1580 | }, 1581 | "minimalistic-crypto-utils": { 1582 | "version": "1.0.1", 1583 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 1584 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", 1585 | "dev": true 1586 | }, 1587 | "minimatch": { 1588 | "version": "3.0.4", 1589 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1590 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1591 | "requires": { 1592 | "brace-expansion": "^1.1.7" 1593 | } 1594 | }, 1595 | "minimist": { 1596 | "version": "1.2.5", 1597 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1598 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 1599 | }, 1600 | "minipass": { 1601 | "version": "2.9.0", 1602 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", 1603 | "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", 1604 | "requires": { 1605 | "safe-buffer": "^5.1.2", 1606 | "yallist": "^3.0.0" 1607 | }, 1608 | "dependencies": { 1609 | "safe-buffer": { 1610 | "version": "5.2.0", 1611 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 1612 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 1613 | }, 1614 | "yallist": { 1615 | "version": "3.1.1", 1616 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 1617 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" 1618 | } 1619 | } 1620 | }, 1621 | "minizlib": { 1622 | "version": "1.3.3", 1623 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", 1624 | "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", 1625 | "requires": { 1626 | "minipass": "^2.9.0" 1627 | } 1628 | }, 1629 | "mkdirp": { 1630 | "version": "0.5.5", 1631 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1632 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1633 | "requires": { 1634 | "minimist": "^1.2.5" 1635 | } 1636 | }, 1637 | "mocha": { 1638 | "version": "4.1.0", 1639 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", 1640 | "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", 1641 | "dev": true, 1642 | "requires": { 1643 | "browser-stdout": "1.3.0", 1644 | "commander": "2.11.0", 1645 | "debug": "3.1.0", 1646 | "diff": "3.3.1", 1647 | "escape-string-regexp": "1.0.5", 1648 | "glob": "7.1.2", 1649 | "growl": "1.10.3", 1650 | "he": "1.1.1", 1651 | "mkdirp": "0.5.1", 1652 | "supports-color": "4.4.0" 1653 | }, 1654 | "dependencies": { 1655 | "debug": { 1656 | "version": "3.1.0", 1657 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 1658 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 1659 | "dev": true, 1660 | "requires": { 1661 | "ms": "2.0.0" 1662 | } 1663 | }, 1664 | "has-flag": { 1665 | "version": "2.0.0", 1666 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 1667 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", 1668 | "dev": true 1669 | }, 1670 | "minimist": { 1671 | "version": "0.0.8", 1672 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1673 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 1674 | "dev": true 1675 | }, 1676 | "mkdirp": { 1677 | "version": "0.5.1", 1678 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1679 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1680 | "dev": true, 1681 | "requires": { 1682 | "minimist": "0.0.8" 1683 | } 1684 | }, 1685 | "ms": { 1686 | "version": "2.0.0", 1687 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1688 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1689 | "dev": true 1690 | }, 1691 | "supports-color": { 1692 | "version": "4.4.0", 1693 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", 1694 | "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", 1695 | "dev": true, 1696 | "requires": { 1697 | "has-flag": "^2.0.0" 1698 | } 1699 | } 1700 | } 1701 | }, 1702 | "module-deps": { 1703 | "version": "6.2.2", 1704 | "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.2.tgz", 1705 | "integrity": "sha512-a9y6yDv5u5I4A+IPHTnqFxcaKr4p50/zxTjcQJaX2ws9tN/W6J6YXnEKhqRyPhl494dkcxx951onSKVezmI+3w==", 1706 | "dev": true, 1707 | "requires": { 1708 | "JSONStream": "^1.0.3", 1709 | "browser-resolve": "^1.7.0", 1710 | "cached-path-relative": "^1.0.2", 1711 | "concat-stream": "~1.6.0", 1712 | "defined": "^1.0.0", 1713 | "detective": "^5.2.0", 1714 | "duplexer2": "^0.1.2", 1715 | "inherits": "^2.0.1", 1716 | "parents": "^1.0.0", 1717 | "readable-stream": "^2.0.2", 1718 | "resolve": "^1.4.0", 1719 | "stream-combiner2": "^1.1.1", 1720 | "subarg": "^1.0.0", 1721 | "through2": "^2.0.0", 1722 | "xtend": "^4.0.0" 1723 | } 1724 | }, 1725 | "ms": { 1726 | "version": "2.1.2", 1727 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1728 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1729 | }, 1730 | "mute-stream": { 1731 | "version": "0.0.7", 1732 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", 1733 | "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", 1734 | "dev": true 1735 | }, 1736 | "nan": { 1737 | "version": "2.14.0", 1738 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", 1739 | "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" 1740 | }, 1741 | "natural-compare": { 1742 | "version": "1.4.0", 1743 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1744 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1745 | "dev": true 1746 | }, 1747 | "needle": { 1748 | "version": "2.3.2", 1749 | "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.2.tgz", 1750 | "integrity": "sha512-DUzITvPVDUy6vczKKYTnWc/pBZ0EnjMJnQ3y+Jo5zfKFimJs7S3HFCxCRZYB9FUZcrzUQr3WsmvZgddMEIZv6w==", 1751 | "requires": { 1752 | "debug": "^3.2.6", 1753 | "iconv-lite": "^0.4.4", 1754 | "sax": "^1.2.4" 1755 | } 1756 | }, 1757 | "node-pre-gyp": { 1758 | "version": "0.11.0", 1759 | "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", 1760 | "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", 1761 | "requires": { 1762 | "detect-libc": "^1.0.2", 1763 | "mkdirp": "^0.5.1", 1764 | "needle": "^2.2.1", 1765 | "nopt": "^4.0.1", 1766 | "npm-packlist": "^1.1.6", 1767 | "npmlog": "^4.0.2", 1768 | "rc": "^1.2.7", 1769 | "rimraf": "^2.6.1", 1770 | "semver": "^5.3.0", 1771 | "tar": "^4" 1772 | } 1773 | }, 1774 | "nopt": { 1775 | "version": "4.0.1", 1776 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", 1777 | "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", 1778 | "requires": { 1779 | "abbrev": "1", 1780 | "osenv": "^0.1.4" 1781 | } 1782 | }, 1783 | "npm-bundled": { 1784 | "version": "1.1.1", 1785 | "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", 1786 | "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", 1787 | "requires": { 1788 | "npm-normalize-package-bin": "^1.0.1" 1789 | } 1790 | }, 1791 | "npm-normalize-package-bin": { 1792 | "version": "1.0.1", 1793 | "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", 1794 | "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" 1795 | }, 1796 | "npm-packlist": { 1797 | "version": "1.4.8", 1798 | "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", 1799 | "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", 1800 | "requires": { 1801 | "ignore-walk": "^3.0.1", 1802 | "npm-bundled": "^1.0.1", 1803 | "npm-normalize-package-bin": "^1.0.1" 1804 | } 1805 | }, 1806 | "npmlog": { 1807 | "version": "4.1.2", 1808 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", 1809 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 1810 | "requires": { 1811 | "are-we-there-yet": "~1.1.2", 1812 | "console-control-strings": "~1.1.0", 1813 | "gauge": "~2.7.3", 1814 | "set-blocking": "~2.0.0" 1815 | } 1816 | }, 1817 | "number-is-nan": { 1818 | "version": "1.0.1", 1819 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 1820 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 1821 | }, 1822 | "object-assign": { 1823 | "version": "4.1.1", 1824 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1825 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1826 | }, 1827 | "once": { 1828 | "version": "1.4.0", 1829 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1830 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1831 | "requires": { 1832 | "wrappy": "1" 1833 | } 1834 | }, 1835 | "onetime": { 1836 | "version": "2.0.1", 1837 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", 1838 | "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", 1839 | "dev": true, 1840 | "requires": { 1841 | "mimic-fn": "^1.0.0" 1842 | } 1843 | }, 1844 | "optionator": { 1845 | "version": "0.8.3", 1846 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 1847 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 1848 | "dev": true, 1849 | "requires": { 1850 | "deep-is": "~0.1.3", 1851 | "fast-levenshtein": "~2.0.6", 1852 | "levn": "~0.3.0", 1853 | "prelude-ls": "~1.1.2", 1854 | "type-check": "~0.3.2", 1855 | "word-wrap": "~1.2.3" 1856 | } 1857 | }, 1858 | "os-browserify": { 1859 | "version": "0.3.0", 1860 | "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", 1861 | "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", 1862 | "dev": true 1863 | }, 1864 | "os-homedir": { 1865 | "version": "1.0.2", 1866 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 1867 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" 1868 | }, 1869 | "os-tmpdir": { 1870 | "version": "1.0.2", 1871 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1872 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 1873 | }, 1874 | "osenv": { 1875 | "version": "0.1.5", 1876 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", 1877 | "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", 1878 | "requires": { 1879 | "os-homedir": "^1.0.0", 1880 | "os-tmpdir": "^1.0.0" 1881 | } 1882 | }, 1883 | "pako": { 1884 | "version": "1.0.11", 1885 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", 1886 | "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", 1887 | "dev": true 1888 | }, 1889 | "parents": { 1890 | "version": "1.0.1", 1891 | "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", 1892 | "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", 1893 | "dev": true, 1894 | "requires": { 1895 | "path-platform": "~0.11.15" 1896 | } 1897 | }, 1898 | "parse-asn1": { 1899 | "version": "5.1.5", 1900 | "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", 1901 | "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", 1902 | "dev": true, 1903 | "requires": { 1904 | "asn1.js": "^4.0.0", 1905 | "browserify-aes": "^1.0.0", 1906 | "create-hash": "^1.1.0", 1907 | "evp_bytestokey": "^1.0.0", 1908 | "pbkdf2": "^3.0.3", 1909 | "safe-buffer": "^5.1.1" 1910 | } 1911 | }, 1912 | "path-browserify": { 1913 | "version": "0.0.1", 1914 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", 1915 | "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", 1916 | "dev": true 1917 | }, 1918 | "path-is-absolute": { 1919 | "version": "1.0.1", 1920 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1921 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1922 | }, 1923 | "path-is-inside": { 1924 | "version": "1.0.2", 1925 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 1926 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 1927 | "dev": true 1928 | }, 1929 | "path-parse": { 1930 | "version": "1.0.6", 1931 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1932 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 1933 | "dev": true 1934 | }, 1935 | "path-platform": { 1936 | "version": "0.11.15", 1937 | "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", 1938 | "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", 1939 | "dev": true 1940 | }, 1941 | "pathval": { 1942 | "version": "1.1.0", 1943 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", 1944 | "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", 1945 | "dev": true 1946 | }, 1947 | "pbkdf2": { 1948 | "version": "3.0.17", 1949 | "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", 1950 | "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", 1951 | "dev": true, 1952 | "requires": { 1953 | "create-hash": "^1.1.2", 1954 | "create-hmac": "^1.1.4", 1955 | "ripemd160": "^2.0.1", 1956 | "safe-buffer": "^5.0.1", 1957 | "sha.js": "^2.4.8" 1958 | } 1959 | }, 1960 | "pluralize": { 1961 | "version": "7.0.0", 1962 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", 1963 | "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", 1964 | "dev": true 1965 | }, 1966 | "prelude-ls": { 1967 | "version": "1.1.2", 1968 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1969 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 1970 | "dev": true 1971 | }, 1972 | "process": { 1973 | "version": "0.11.10", 1974 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 1975 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", 1976 | "dev": true 1977 | }, 1978 | "process-nextick-args": { 1979 | "version": "1.0.7", 1980 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 1981 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" 1982 | }, 1983 | "progress": { 1984 | "version": "2.0.3", 1985 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1986 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1987 | "dev": true 1988 | }, 1989 | "pseudomap": { 1990 | "version": "1.0.2", 1991 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1992 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 1993 | "dev": true 1994 | }, 1995 | "public-encrypt": { 1996 | "version": "4.0.3", 1997 | "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", 1998 | "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", 1999 | "dev": true, 2000 | "requires": { 2001 | "bn.js": "^4.1.0", 2002 | "browserify-rsa": "^4.0.0", 2003 | "create-hash": "^1.1.0", 2004 | "parse-asn1": "^5.0.0", 2005 | "randombytes": "^2.0.1", 2006 | "safe-buffer": "^5.1.2" 2007 | }, 2008 | "dependencies": { 2009 | "safe-buffer": { 2010 | "version": "5.2.0", 2011 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 2012 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", 2013 | "dev": true 2014 | } 2015 | } 2016 | }, 2017 | "punycode": { 2018 | "version": "1.4.1", 2019 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2020 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 2021 | "dev": true 2022 | }, 2023 | "querystring": { 2024 | "version": "0.2.0", 2025 | "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", 2026 | "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", 2027 | "dev": true 2028 | }, 2029 | "querystring-es3": { 2030 | "version": "0.2.1", 2031 | "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", 2032 | "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", 2033 | "dev": true 2034 | }, 2035 | "randombytes": { 2036 | "version": "2.1.0", 2037 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 2038 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 2039 | "dev": true, 2040 | "requires": { 2041 | "safe-buffer": "^5.1.0" 2042 | } 2043 | }, 2044 | "randomfill": { 2045 | "version": "1.0.4", 2046 | "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", 2047 | "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", 2048 | "dev": true, 2049 | "requires": { 2050 | "randombytes": "^2.0.5", 2051 | "safe-buffer": "^5.1.0" 2052 | } 2053 | }, 2054 | "rc": { 2055 | "version": "1.2.8", 2056 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 2057 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 2058 | "requires": { 2059 | "deep-extend": "^0.6.0", 2060 | "ini": "~1.3.0", 2061 | "minimist": "^1.2.0", 2062 | "strip-json-comments": "~2.0.1" 2063 | } 2064 | }, 2065 | "read-only-stream": { 2066 | "version": "2.0.0", 2067 | "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", 2068 | "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", 2069 | "dev": true, 2070 | "requires": { 2071 | "readable-stream": "^2.0.2" 2072 | } 2073 | }, 2074 | "readable-stream": { 2075 | "version": "2.3.3", 2076 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 2077 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 2078 | "requires": { 2079 | "core-util-is": "~1.0.0", 2080 | "inherits": "~2.0.3", 2081 | "isarray": "~1.0.0", 2082 | "process-nextick-args": "~1.0.6", 2083 | "safe-buffer": "~5.1.1", 2084 | "string_decoder": "~1.0.3", 2085 | "util-deprecate": "~1.0.1" 2086 | } 2087 | }, 2088 | "regexpp": { 2089 | "version": "1.1.0", 2090 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", 2091 | "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", 2092 | "dev": true 2093 | }, 2094 | "require-uncached": { 2095 | "version": "1.0.3", 2096 | "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", 2097 | "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", 2098 | "dev": true, 2099 | "requires": { 2100 | "caller-path": "^0.1.0", 2101 | "resolve-from": "^1.0.0" 2102 | } 2103 | }, 2104 | "resolve": { 2105 | "version": "1.15.1", 2106 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", 2107 | "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", 2108 | "dev": true, 2109 | "requires": { 2110 | "path-parse": "^1.0.6" 2111 | } 2112 | }, 2113 | "resolve-from": { 2114 | "version": "1.0.1", 2115 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", 2116 | "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", 2117 | "dev": true 2118 | }, 2119 | "restore-cursor": { 2120 | "version": "2.0.0", 2121 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", 2122 | "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", 2123 | "dev": true, 2124 | "requires": { 2125 | "onetime": "^2.0.0", 2126 | "signal-exit": "^3.0.2" 2127 | } 2128 | }, 2129 | "rimraf": { 2130 | "version": "2.6.2", 2131 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 2132 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 2133 | "requires": { 2134 | "glob": "^7.0.5" 2135 | } 2136 | }, 2137 | "ripemd160": { 2138 | "version": "2.0.2", 2139 | "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", 2140 | "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", 2141 | "dev": true, 2142 | "requires": { 2143 | "hash-base": "^3.0.0", 2144 | "inherits": "^2.0.1" 2145 | } 2146 | }, 2147 | "run-async": { 2148 | "version": "2.3.0", 2149 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", 2150 | "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", 2151 | "dev": true, 2152 | "requires": { 2153 | "is-promise": "^2.1.0" 2154 | } 2155 | }, 2156 | "rx-lite": { 2157 | "version": "4.0.8", 2158 | "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", 2159 | "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", 2160 | "dev": true 2161 | }, 2162 | "rx-lite-aggregates": { 2163 | "version": "4.0.8", 2164 | "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", 2165 | "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", 2166 | "dev": true, 2167 | "requires": { 2168 | "rx-lite": "*" 2169 | } 2170 | }, 2171 | "safe-buffer": { 2172 | "version": "5.1.1", 2173 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 2174 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 2175 | }, 2176 | "safer-buffer": { 2177 | "version": "2.1.2", 2178 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2179 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 2180 | }, 2181 | "sax": { 2182 | "version": "1.2.4", 2183 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 2184 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 2185 | }, 2186 | "semver": { 2187 | "version": "5.4.1", 2188 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", 2189 | "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" 2190 | }, 2191 | "set-blocking": { 2192 | "version": "2.0.0", 2193 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2194 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 2195 | }, 2196 | "sha.js": { 2197 | "version": "2.4.11", 2198 | "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", 2199 | "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", 2200 | "dev": true, 2201 | "requires": { 2202 | "inherits": "^2.0.1", 2203 | "safe-buffer": "^5.0.1" 2204 | } 2205 | }, 2206 | "shasum": { 2207 | "version": "1.0.2", 2208 | "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", 2209 | "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", 2210 | "dev": true, 2211 | "requires": { 2212 | "json-stable-stringify": "~0.0.0", 2213 | "sha.js": "~2.4.4" 2214 | } 2215 | }, 2216 | "shasum-object": { 2217 | "version": "1.0.0", 2218 | "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", 2219 | "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", 2220 | "dev": true, 2221 | "requires": { 2222 | "fast-safe-stringify": "^2.0.7" 2223 | } 2224 | }, 2225 | "shebang-command": { 2226 | "version": "1.2.0", 2227 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 2228 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 2229 | "dev": true, 2230 | "requires": { 2231 | "shebang-regex": "^1.0.0" 2232 | } 2233 | }, 2234 | "shebang-regex": { 2235 | "version": "1.0.0", 2236 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 2237 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 2238 | "dev": true 2239 | }, 2240 | "shell-quote": { 2241 | "version": "1.7.2", 2242 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", 2243 | "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", 2244 | "dev": true 2245 | }, 2246 | "signal-exit": { 2247 | "version": "3.0.2", 2248 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 2249 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 2250 | }, 2251 | "simple-concat": { 2252 | "version": "1.0.0", 2253 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", 2254 | "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" 2255 | }, 2256 | "simple-get": { 2257 | "version": "3.1.0", 2258 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", 2259 | "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", 2260 | "requires": { 2261 | "decompress-response": "^4.2.0", 2262 | "once": "^1.3.1", 2263 | "simple-concat": "^1.0.0" 2264 | } 2265 | }, 2266 | "slice-ansi": { 2267 | "version": "1.0.0", 2268 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", 2269 | "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", 2270 | "dev": true, 2271 | "requires": { 2272 | "is-fullwidth-code-point": "^2.0.0" 2273 | } 2274 | }, 2275 | "source-map": { 2276 | "version": "0.5.7", 2277 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2278 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 2279 | "dev": true 2280 | }, 2281 | "sprintf-js": { 2282 | "version": "1.0.3", 2283 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2284 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 2285 | "dev": true 2286 | }, 2287 | "stream-browserify": { 2288 | "version": "2.0.2", 2289 | "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", 2290 | "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", 2291 | "dev": true, 2292 | "requires": { 2293 | "inherits": "~2.0.1", 2294 | "readable-stream": "^2.0.2" 2295 | } 2296 | }, 2297 | "stream-combiner2": { 2298 | "version": "1.1.1", 2299 | "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", 2300 | "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", 2301 | "dev": true, 2302 | "requires": { 2303 | "duplexer2": "~0.1.0", 2304 | "readable-stream": "^2.0.2" 2305 | } 2306 | }, 2307 | "stream-http": { 2308 | "version": "3.1.0", 2309 | "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.0.tgz", 2310 | "integrity": "sha512-cuB6RgO7BqC4FBYzmnvhob5Do3wIdIsXAgGycHJnW+981gHqoYcYz9lqjJrk8WXRddbwPuqPYRl+bag6mYv4lw==", 2311 | "dev": true, 2312 | "requires": { 2313 | "builtin-status-codes": "^3.0.0", 2314 | "inherits": "^2.0.1", 2315 | "readable-stream": "^3.0.6", 2316 | "xtend": "^4.0.0" 2317 | }, 2318 | "dependencies": { 2319 | "readable-stream": { 2320 | "version": "3.6.0", 2321 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 2322 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 2323 | "dev": true, 2324 | "requires": { 2325 | "inherits": "^2.0.3", 2326 | "string_decoder": "^1.1.1", 2327 | "util-deprecate": "^1.0.1" 2328 | } 2329 | }, 2330 | "safe-buffer": { 2331 | "version": "5.2.0", 2332 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 2333 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", 2334 | "dev": true 2335 | }, 2336 | "string_decoder": { 2337 | "version": "1.3.0", 2338 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 2339 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 2340 | "dev": true, 2341 | "requires": { 2342 | "safe-buffer": "~5.2.0" 2343 | } 2344 | } 2345 | } 2346 | }, 2347 | "stream-splicer": { 2348 | "version": "2.0.1", 2349 | "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", 2350 | "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", 2351 | "dev": true, 2352 | "requires": { 2353 | "inherits": "^2.0.1", 2354 | "readable-stream": "^2.0.2" 2355 | } 2356 | }, 2357 | "string-width": { 2358 | "version": "2.1.1", 2359 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 2360 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 2361 | "requires": { 2362 | "is-fullwidth-code-point": "^2.0.0", 2363 | "strip-ansi": "^4.0.0" 2364 | } 2365 | }, 2366 | "string_decoder": { 2367 | "version": "1.0.3", 2368 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 2369 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 2370 | "requires": { 2371 | "safe-buffer": "~5.1.0" 2372 | } 2373 | }, 2374 | "strip-ansi": { 2375 | "version": "4.0.0", 2376 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 2377 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 2378 | "requires": { 2379 | "ansi-regex": "^3.0.0" 2380 | }, 2381 | "dependencies": { 2382 | "ansi-regex": { 2383 | "version": "3.0.0", 2384 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 2385 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" 2386 | } 2387 | } 2388 | }, 2389 | "strip-json-comments": { 2390 | "version": "2.0.1", 2391 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2392 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 2393 | }, 2394 | "subarg": { 2395 | "version": "1.0.0", 2396 | "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", 2397 | "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", 2398 | "dev": true, 2399 | "requires": { 2400 | "minimist": "^1.1.0" 2401 | } 2402 | }, 2403 | "supports-color": { 2404 | "version": "2.0.0", 2405 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 2406 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 2407 | "dev": true 2408 | }, 2409 | "syntax-error": { 2410 | "version": "1.4.0", 2411 | "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", 2412 | "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", 2413 | "dev": true, 2414 | "requires": { 2415 | "acorn-node": "^1.2.0" 2416 | } 2417 | }, 2418 | "table": { 2419 | "version": "4.0.2", 2420 | "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", 2421 | "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", 2422 | "dev": true, 2423 | "requires": { 2424 | "ajv": "^5.2.3", 2425 | "ajv-keywords": "^2.1.0", 2426 | "chalk": "^2.1.0", 2427 | "lodash": "^4.17.4", 2428 | "slice-ansi": "1.0.0", 2429 | "string-width": "^2.1.1" 2430 | } 2431 | }, 2432 | "tar": { 2433 | "version": "4.4.13", 2434 | "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", 2435 | "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", 2436 | "requires": { 2437 | "chownr": "^1.1.1", 2438 | "fs-minipass": "^1.2.5", 2439 | "minipass": "^2.8.6", 2440 | "minizlib": "^1.2.1", 2441 | "mkdirp": "^0.5.0", 2442 | "safe-buffer": "^5.1.2", 2443 | "yallist": "^3.0.3" 2444 | }, 2445 | "dependencies": { 2446 | "safe-buffer": { 2447 | "version": "5.2.0", 2448 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", 2449 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" 2450 | }, 2451 | "yallist": { 2452 | "version": "3.1.1", 2453 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 2454 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" 2455 | } 2456 | } 2457 | }, 2458 | "text-table": { 2459 | "version": "0.2.0", 2460 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2461 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 2462 | "dev": true 2463 | }, 2464 | "through": { 2465 | "version": "2.3.8", 2466 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2467 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 2468 | "dev": true 2469 | }, 2470 | "through2": { 2471 | "version": "2.0.5", 2472 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", 2473 | "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", 2474 | "dev": true, 2475 | "requires": { 2476 | "readable-stream": "~2.3.6", 2477 | "xtend": "~4.0.1" 2478 | }, 2479 | "dependencies": { 2480 | "process-nextick-args": { 2481 | "version": "2.0.1", 2482 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 2483 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 2484 | "dev": true 2485 | }, 2486 | "readable-stream": { 2487 | "version": "2.3.7", 2488 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 2489 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 2490 | "dev": true, 2491 | "requires": { 2492 | "core-util-is": "~1.0.0", 2493 | "inherits": "~2.0.3", 2494 | "isarray": "~1.0.0", 2495 | "process-nextick-args": "~2.0.0", 2496 | "safe-buffer": "~5.1.1", 2497 | "string_decoder": "~1.1.1", 2498 | "util-deprecate": "~1.0.1" 2499 | } 2500 | }, 2501 | "string_decoder": { 2502 | "version": "1.1.1", 2503 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2504 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2505 | "dev": true, 2506 | "requires": { 2507 | "safe-buffer": "~5.1.0" 2508 | } 2509 | } 2510 | } 2511 | }, 2512 | "timers-browserify": { 2513 | "version": "1.4.2", 2514 | "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", 2515 | "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", 2516 | "dev": true, 2517 | "requires": { 2518 | "process": "~0.11.0" 2519 | } 2520 | }, 2521 | "tmp": { 2522 | "version": "0.0.33", 2523 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 2524 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 2525 | "dev": true, 2526 | "requires": { 2527 | "os-tmpdir": "~1.0.2" 2528 | } 2529 | }, 2530 | "tty-browserify": { 2531 | "version": "0.0.1", 2532 | "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", 2533 | "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", 2534 | "dev": true 2535 | }, 2536 | "type-check": { 2537 | "version": "0.3.2", 2538 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 2539 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 2540 | "dev": true, 2541 | "requires": { 2542 | "prelude-ls": "~1.1.2" 2543 | } 2544 | }, 2545 | "type-detect": { 2546 | "version": "4.0.8", 2547 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 2548 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 2549 | "dev": true 2550 | }, 2551 | "typedarray": { 2552 | "version": "0.0.6", 2553 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 2554 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 2555 | "dev": true 2556 | }, 2557 | "uglify-es": { 2558 | "version": "3.3.9", 2559 | "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", 2560 | "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", 2561 | "dev": true, 2562 | "requires": { 2563 | "commander": "~2.13.0", 2564 | "source-map": "~0.6.1" 2565 | }, 2566 | "dependencies": { 2567 | "commander": { 2568 | "version": "2.13.0", 2569 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", 2570 | "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", 2571 | "dev": true 2572 | }, 2573 | "source-map": { 2574 | "version": "0.6.1", 2575 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2576 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2577 | "dev": true 2578 | } 2579 | } 2580 | }, 2581 | "umd": { 2582 | "version": "3.0.3", 2583 | "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", 2584 | "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", 2585 | "dev": true 2586 | }, 2587 | "undeclared-identifiers": { 2588 | "version": "1.1.3", 2589 | "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", 2590 | "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", 2591 | "dev": true, 2592 | "requires": { 2593 | "acorn-node": "^1.3.0", 2594 | "dash-ast": "^1.0.0", 2595 | "get-assigned-identifiers": "^1.2.0", 2596 | "simple-concat": "^1.0.0", 2597 | "xtend": "^4.0.1" 2598 | } 2599 | }, 2600 | "url": { 2601 | "version": "0.11.0", 2602 | "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", 2603 | "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", 2604 | "dev": true, 2605 | "requires": { 2606 | "punycode": "1.3.2", 2607 | "querystring": "0.2.0" 2608 | }, 2609 | "dependencies": { 2610 | "punycode": { 2611 | "version": "1.3.2", 2612 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", 2613 | "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", 2614 | "dev": true 2615 | } 2616 | } 2617 | }, 2618 | "util": { 2619 | "version": "0.10.4", 2620 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", 2621 | "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", 2622 | "dev": true, 2623 | "requires": { 2624 | "inherits": "2.0.3" 2625 | } 2626 | }, 2627 | "util-deprecate": { 2628 | "version": "1.0.2", 2629 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2630 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 2631 | }, 2632 | "vm-browserify": { 2633 | "version": "1.1.2", 2634 | "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", 2635 | "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", 2636 | "dev": true 2637 | }, 2638 | "which": { 2639 | "version": "1.3.1", 2640 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2641 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2642 | "dev": true, 2643 | "requires": { 2644 | "isexe": "^2.0.0" 2645 | } 2646 | }, 2647 | "wide-align": { 2648 | "version": "1.1.3", 2649 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 2650 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 2651 | "requires": { 2652 | "string-width": "^1.0.2 || 2" 2653 | } 2654 | }, 2655 | "word-wrap": { 2656 | "version": "1.2.3", 2657 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 2658 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 2659 | "dev": true 2660 | }, 2661 | "wrappy": { 2662 | "version": "1.0.2", 2663 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2664 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 2665 | }, 2666 | "write": { 2667 | "version": "0.2.1", 2668 | "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", 2669 | "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", 2670 | "dev": true, 2671 | "requires": { 2672 | "mkdirp": "^0.5.1" 2673 | } 2674 | }, 2675 | "xtend": { 2676 | "version": "4.0.2", 2677 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 2678 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 2679 | "dev": true 2680 | }, 2681 | "yallist": { 2682 | "version": "2.1.2", 2683 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 2684 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 2685 | "dev": true 2686 | } 2687 | } 2688 | } 2689 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "esc-pos-encoder-ionic", 3 | "version": "1.1.3", 4 | "description": "Create a set of commands that can be send to any receipt printer that supports ESC/POS. Support Ionic (Typescript)", 5 | "main": "src/esc-pos-encoder.js", 6 | "scripts": { 7 | "bundle": "browserify src/esc-pos-encoder.js --standalone EscPosEncoder -o dist/esc-pos-encoder.js", 8 | "uglify": "uglifyjs dist/esc-pos-encoder.js -cm --overwrite -o dist/esc-pos-encoder.js", 9 | "build": "npm run bundle && npm run uglify", 10 | "lint": "eslint --fix src/esc-pos-encoder.js", 11 | "mocha": "mocha test/", 12 | "test": "npm run lint && npm run mocha" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/Ans0n-Ti0/EscPosEncoder.git" 17 | }, 18 | "keywords": [ 19 | "pos", 20 | "escpos", 21 | "receipt", 22 | "printer", 23 | "ionic", 24 | "ionic4", 25 | "ionic5" 26 | ], 27 | "author": "Anson Tio", 28 | "license": "MIT", 29 | "bugs": { 30 | "url": "https://github.com/Ans0n-Ti0/EscPosEncoder/issues" 31 | }, 32 | "homepage": "https://github.com/Ans0n-Ti0/EscPosEncoder#readme", 33 | "devDependencies": { 34 | "browserify": "^16.5.0", 35 | "chai": "^4.2.0", 36 | "eslint": "^4.19.1", 37 | "eslint-config-google": "^0.9.1", 38 | "mocha": "^4.1.0", 39 | "uglify-es": "^3.3.9" 40 | }, 41 | "dependencies": { 42 | "buffer-to-uint8array": "^1.1.0", 43 | "canvas": "^2.6.1", 44 | "canvas-dither": "^1.0.0", 45 | "canvas-flatten": "^1.0.0", 46 | "iconv-lite": "^0.4.19", 47 | "linewrap": "^0.2.1" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/esc-pos-encoder.js: -------------------------------------------------------------------------------- 1 | const iconv = require('iconv-lite'); 2 | const linewrap = require('linewrap'); 3 | const {createCanvas} = require('canvas'); 4 | const Dither = require('canvas-dither'); 5 | const Flatten = require('canvas-flatten'); 6 | 7 | 8 | /** 9 | * Create a byte stream based on commands for ESC/POS printers 10 | */ 11 | class EscPosEncoder { 12 | /** 13 | * Create a new object 14 | * 15 | */ 16 | constructor() { 17 | this._reset(); 18 | } 19 | 20 | /** 21 | * Reset the state of the object 22 | * 23 | */ 24 | _reset() { 25 | this._buffer = []; 26 | this._codepage = 'ascii'; 27 | 28 | this._state = { 29 | 'bold': false, 30 | 'italic': false, 31 | 'underline': false, 32 | 'hanzi': false, 33 | }; 34 | } 35 | 36 | /** 37 | * Encode a string with the current code page 38 | * 39 | * @param {string} value String to encode 40 | * @return {object} Encoded string as a ArrayBuffer 41 | * 42 | */ 43 | _encode(value) { 44 | return iconv.encode(value, this._codepage); 45 | } 46 | 47 | /** 48 | * Add commands to the buffer 49 | * 50 | * @param {array} value And array of numbers, arrays, buffers or Uint8Arrays to add to the buffer 51 | * 52 | */ 53 | _queue(value) { 54 | value.forEach((item) => this._buffer.push(item)); 55 | } 56 | 57 | /** 58 | * Initialize the printer 59 | * 60 | * @return {object} Return the object, for easy chaining commands 61 | * 62 | */ 63 | initialize() { 64 | this._queue([ 65 | 0x1b, 0x40, 66 | ]); 67 | 68 | return this; 69 | } 70 | 71 | /** 72 | * Change the code page 73 | * 74 | * @param {string} value The codepage that we set the printer to 75 | * @return {object} Return the object, for easy chaining commands 76 | * 77 | */ 78 | codepage(value) { 79 | const codepages = { 80 | 'cp437': [0x00, false], 81 | 'cp737': [0x40, false], 82 | 'cp850': [0x02, false], 83 | 'cp775': [0x5f, false], 84 | 'cp852': [0x12, false], 85 | 'cp855': [0x3c, false], 86 | 'cp857': [0x3d, false], 87 | 'cp858': [0x13, false], 88 | 'cp860': [0x03, false], 89 | 'cp861': [0x38, false], 90 | 'cp862': [0x3e, false], 91 | 'cp863': [0x04, false], 92 | 'cp864': [0x1c, false], 93 | 'cp865': [0x05, false], 94 | 'cp866': [0x11, false], 95 | 'cp869': [0x42, false], 96 | 'cp936': [0xff, true], 97 | 'cp949': [0xfd, true], 98 | 'cp950': [0xfe, true], 99 | 'cp1252': [0x10, false], 100 | 'iso88596': [0x16, false], 101 | 'shiftjis': [0xfc, true], 102 | 'windows1250': [0x48, false], 103 | 'windows1251': [0x49, false], 104 | 'windows1252': [0x47, false], 105 | 'windows1253': [0x5a, false], 106 | 'windows1254': [0x5b, false], 107 | 'windows1255': [0x20, false], 108 | 'windows1256': [0x5c, false], 109 | 'windows1257': [0x19, false], 110 | 'windows1258': [0x5e, false], 111 | }; 112 | 113 | let codepage; 114 | 115 | if (!iconv.encodingExists(value)) { 116 | throw new Error('Unknown codepage'); 117 | } 118 | 119 | if (value in iconv.encodings) { 120 | if (typeof iconv.encodings[value] === 'string') { 121 | codepage = iconv.encodings[value]; 122 | } else { 123 | codepage = value; 124 | } 125 | } else { 126 | throw new Error('Unknown codepage'); 127 | } 128 | 129 | if (typeof codepages[codepage] !== 'undefined') { 130 | this._codepage = codepage; 131 | this._state.hanzi = codepages[codepage][1]; 132 | 133 | this._queue([ 134 | 0x1b, 0x74, codepages[codepage][0], 135 | ]); 136 | } else { 137 | throw new Error('Codepage not supported by printer'); 138 | } 139 | 140 | return this; 141 | } 142 | 143 | /** 144 | * Print text 145 | * 146 | * @param {string} value Text that needs to be printed 147 | * @param {number} wrap Wrap text after this many positions 148 | * @return {object} Return the object, for easy chaining commands 149 | * 150 | */ 151 | text(value, wrap) { 152 | if (wrap) { 153 | let w = linewrap(wrap, {lineBreak: '\r\n'}); 154 | value = w(value); 155 | } 156 | 157 | let bytes = this._encode(value); 158 | 159 | if (this._state.hanzi) { 160 | this._queue([ 161 | 0x1c, 0x26, bytes, 0x1c, 0x2e, 162 | ]); 163 | } else { 164 | this._queue([ 165 | bytes, 166 | ]); 167 | } 168 | 169 | return this; 170 | } 171 | 172 | /** 173 | * Print a newline 174 | * 175 | * @return {object} Return the object, for easy chaining commands 176 | * 177 | */ 178 | newline() { 179 | this._queue([ 180 | 0x0a, 0x0d, 181 | ]); 182 | 183 | return this; 184 | } 185 | 186 | /** 187 | * Print text, followed by a newline 188 | * 189 | * @param {string} value Text that needs to be printed 190 | * @param {number} wrap Wrap text after this many positions 191 | * @return {object} Return the object, for easy chaining commands 192 | * 193 | */ 194 | line(value, wrap) { 195 | this.text(value, wrap); 196 | this.newline(); 197 | 198 | return this; 199 | } 200 | 201 | /** 202 | * Underline text 203 | * 204 | * @param {boolean|number} value true to turn on underline, false to turn off, or 2 for double underline 205 | * @return {object} Return the object, for easy chaining commands 206 | * 207 | */ 208 | underline(value) { 209 | if (typeof value === 'undefined') { 210 | value = ! this._state.underline; 211 | } 212 | 213 | this._state.underline = value; 214 | 215 | this._queue([ 216 | 0x1b, 0x2d, Number(value), 217 | ]); 218 | 219 | return this; 220 | } 221 | 222 | /** 223 | * Italic text 224 | * 225 | * @param {boolean} value true to turn on italic, false to turn off 226 | * @return {object} Return the object, for easy chaining commands 227 | * 228 | */ 229 | italic(value) { 230 | if (typeof value === 'undefined') { 231 | value = ! this._state.italic; 232 | } 233 | 234 | this._state.italic = value; 235 | 236 | this._queue([ 237 | 0x1b, 0x34, Number(value), 238 | ]); 239 | 240 | return this; 241 | } 242 | 243 | /** 244 | * Bold text 245 | * 246 | * @param {boolean} value true to turn on bold, false to turn off, or 2 for double underline 247 | * @return {object} Return the object, for easy chaining commands 248 | * 249 | */ 250 | bold(value) { 251 | if (typeof value === 'undefined') { 252 | value = ! this._state.bold; 253 | } 254 | 255 | this._state.bold = value; 256 | 257 | this._queue([ 258 | 0x1b, 0x45, Number(value), 259 | ]); 260 | 261 | return this; 262 | } 263 | 264 | /** 265 | * Change text size 266 | * 267 | * @param {string} value small or normal 268 | * @return {object} Return the object, for easy chaining commands 269 | * 270 | */ 271 | size(value) { 272 | if (value === 'small') { 273 | value = 0x01; 274 | } else { 275 | value = 0x00; 276 | } 277 | 278 | this._queue([ 279 | 0x1b, 0x4d, value, 280 | ]); 281 | 282 | return this; 283 | } 284 | 285 | /** 286 | * Change text alignment 287 | * 288 | * @param {string} value left, center or right 289 | * @return {object} Return the object, for easy chaining commands 290 | * 291 | */ 292 | align(value) { 293 | const alignments = { 294 | 'left': 0x00, 295 | 'center': 0x01, 296 | 'right': 0x02, 297 | }; 298 | 299 | if (value in alignments) { 300 | this._queue([ 301 | 0x1b, 0x61, alignments[value], 302 | ]); 303 | } else { 304 | throw new Error('Unknown alignment'); 305 | } 306 | 307 | return this; 308 | } 309 | 310 | /** 311 | * Barcode 312 | * 313 | * @param {string} value the value of the barcode 314 | * @param {string} symbology the type of the barcode 315 | * @param {number} height height of the barcode 316 | * @return {object} Return the object, for easy chaining commands 317 | * 318 | */ 319 | barcode(value, symbology, height) { 320 | const symbologies = { 321 | 'upca': 0x00, 322 | 'upce': 0x01, 323 | 'ean13': 0x02, 324 | 'ean8': 0x03, 325 | 'coda39': 0x04, 326 | 'itf': 0x05, 327 | 'codabar': 0x06, 328 | }; 329 | 330 | if (symbology in symbologies) { 331 | let bytes = iconv.encode(value, 'ascii'); 332 | 333 | this._queue([ 334 | 0x1d, 0x68, height, 335 | 0x1d, 0x77, symbology === 'code39' ? 0x02 : 0x03, 336 | 0x1d, 0x6b, symbologies[symbology], 337 | bytes, 338 | 0x00, 339 | ]); 340 | } else { 341 | throw new Error('Symbology not supported by printer'); 342 | } 343 | 344 | return this; 345 | } 346 | 347 | /** 348 | * QR code 349 | * 350 | * @param {string} value the value of the qr code 351 | * @param {number} model model of the qrcode, either 1 or 2 352 | * @param {number} size size of the qrcode, a value between 1 and 8 353 | * @param {string} errorlevel the amount of error correction used, either 'l', 'm', 'q', 'h' 354 | * @return {object} Return the object, for easy chaining commands 355 | * 356 | */ 357 | qrcode(value, model, size, errorlevel) { 358 | /* Force printing the print buffer and moving to a new line */ 359 | 360 | this._queue([ 361 | 0x0a, 362 | ]); 363 | 364 | /* Model */ 365 | 366 | const models = { 367 | 1: 0x31, 368 | 2: 0x32, 369 | }; 370 | 371 | if (typeof model === 'undefined') { 372 | model = 2; 373 | } 374 | 375 | if (model in models) { 376 | this._queue([ 377 | 0x1d, 0x28, 0x6b, 0x04, 0x00, 0x31, 0x41, models[model], 0x00, 378 | ]); 379 | } else { 380 | throw new Error('Model must be 1 or 2'); 381 | } 382 | 383 | /* Size */ 384 | 385 | if (typeof size === 'undefined') { 386 | size = 6; 387 | } 388 | 389 | if (typeof size !== 'number') { 390 | throw new Error('Size must be a number'); 391 | } 392 | 393 | if (size < 1 || size > 8) { 394 | throw new Error('Size must be between 1 and 8'); 395 | } 396 | 397 | this._queue([ 398 | 0x1d, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x43, size, 399 | ]); 400 | 401 | /* Error level */ 402 | 403 | const errorlevels = { 404 | 'l': 0x30, 405 | 'm': 0x31, 406 | 'q': 0x32, 407 | 'h': 0x33, 408 | }; 409 | 410 | if (typeof errorlevel === 'undefined') { 411 | errorlevel = 'm'; 412 | } 413 | 414 | if (errorlevel in errorlevels) { 415 | this._queue([ 416 | 0x1d, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x45, errorlevels[errorlevel], 417 | ]); 418 | } else { 419 | throw new Error('Error level must be l, m, q or h'); 420 | } 421 | 422 | /* Data */ 423 | 424 | let bytes = iconv.encode(value, 'iso88591'); 425 | let length = bytes.length + 3; 426 | 427 | this._queue([ 428 | 0x1d, 0x28, 0x6b, length % 0xff, length / 0xff, 0x31, 0x50, 0x30, bytes, 429 | ]); 430 | 431 | /* Print QR code */ 432 | 433 | this._queue([ 434 | 0x1d, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x51, 0x30, 435 | ]); 436 | 437 | return this; 438 | } 439 | 440 | /** 441 | * Image 442 | * 443 | * @param {object} element an element, like a canvas or image that needs to be printed 444 | * @param {number} width width of the image on the printer 445 | * @param {number} height height of the image on the printer 446 | * @param {string} algorithm the dithering algorithm for making the image black and white 447 | * @param {number} threshold threshold for the dithering algorithm 448 | * @return {object} Return the object, for easy chaining commands 449 | * 450 | */ 451 | image(element, width, height, algorithm, threshold) { 452 | if (width % 8 !== 0) { 453 | throw new Error('Width must be a multiple of 8'); 454 | } 455 | 456 | if (height % 8 !== 0) { 457 | throw new Error('Height must be a multiple of 8'); 458 | } 459 | 460 | if (typeof algorithm === 'undefined') { 461 | algorithm = 'threshold'; 462 | } 463 | 464 | if (typeof threshold === 'undefined') { 465 | threshold = 128; 466 | } 467 | 468 | let canvas = createCanvas(width, height); 469 | let context = canvas.getContext('2d'); 470 | context.drawImage(element, 0, 0, width, height); 471 | let image = context.getImageData(0, 0, width, height); 472 | 473 | image = Flatten.flatten(image, [0xff, 0xff, 0xff]); 474 | 475 | switch (algorithm) { 476 | case 'threshold': image = Dither.threshold(image, threshold); break; 477 | case 'bayer': image = Dither.bayer(image, threshold); break; 478 | case 'floydsteinberg': image = Dither.floydsteinberg(image); break; 479 | case 'atkinson': image = Dither.atkinson(image); break; 480 | } 481 | 482 | let getPixel = (x, y) => image.data[((width * y) + x) * 4] > 0 ? 0 : 1; 483 | 484 | let bytes = new Uint8Array((width * height) >> 3); 485 | 486 | for (let y = 0; y < height; y++) { 487 | for (let x = 0; x < width; x = x + 8) { 488 | let i = (y * (width >> 3)) + (x >> 3); 489 | bytes[i] = 490 | getPixel(x + 0, y) << 7 | 491 | getPixel(x + 1, y) << 6 | 492 | getPixel(x + 2, y) << 5 | 493 | getPixel(x + 3, y) << 4 | 494 | getPixel(x + 4, y) << 3 | 495 | getPixel(x + 5, y) << 2 | 496 | getPixel(x + 6, y) << 1 | 497 | getPixel(x + 7, y); 498 | } 499 | } 500 | 501 | this._queue([ 502 | 0x1d, 0x76, 0x30, 0x00, 503 | (width >> 3) & 0xff, (((width >> 3) >> 8) & 0xff), 504 | height & 0xff, ((height >> 8) & 0xff), 505 | bytes, 506 | ]); 507 | 508 | return this; 509 | } 510 | 511 | /** 512 | * Cut paper 513 | * 514 | * @param {string} value full or partial. When not specified a full cut will be assumed 515 | * @return {object} Return the object, for easy chaining commands 516 | * 517 | */ 518 | cut(value) { 519 | let data = 0x00; 520 | 521 | if (value == 'partial') { 522 | data = 0x01; 523 | } 524 | 525 | this._queue([ 526 | 0x1d, 0x56, data, 527 | ]); 528 | 529 | return this; 530 | } 531 | 532 | /** 533 | * Beeper sound functionality 534 | * 535 | * @return {object} Return the object, for easy chaining commands 536 | */ 537 | beeper() { 538 | this._queue([ 539 | 0x1b, 0x42, 0x05, 0x01, 540 | ]); 541 | 542 | return this; 543 | } 544 | 545 | /** 546 | * Open cash drawer 547 | * 548 | * @return {object} Return the object, for easy chaining commands 549 | */ 550 | openCashDrawer() { 551 | this._queue([ 552 | 0x1b, 0x70, 0x00, 553 | ]); 554 | 555 | return this; 556 | } 557 | 558 | 559 | /** 560 | * Add raw printer commands 561 | * 562 | * @param {array} data raw bytes to be included 563 | * @return {object} Return the object, for easy chaining commands 564 | * 565 | */ 566 | raw(data) { 567 | this._queue(data); 568 | 569 | return this; 570 | } 571 | 572 | /** 573 | * Encode all previous commands 574 | * 575 | * @return {Uint8Array} Return the encoded bytes 576 | * 577 | */ 578 | encode() { 579 | let length = 0; 580 | 581 | this._buffer.forEach((item) => { 582 | if (typeof item === 'number') { 583 | length++; 584 | } else { 585 | length += item.length; 586 | } 587 | }); 588 | 589 | let result = new Uint8Array(length); 590 | 591 | let index = 0; 592 | 593 | this._buffer.forEach((item) => { 594 | if (typeof item === 'number') { 595 | result[index] = item; 596 | index++; 597 | } else { 598 | result.set(item, index); 599 | index += item.length; 600 | } 601 | }); 602 | 603 | this._reset(); 604 | 605 | return result; 606 | } 607 | } 608 | 609 | module.exports = EscPosEncoder; 610 | -------------------------------------------------------------------------------- /test/esc-pos-encoder.js: -------------------------------------------------------------------------------- 1 | const EscPosEncoder = require ('../src/esc-pos-encoder'); 2 | const { createCanvas } = require('canvas'); 3 | 4 | const chai = require('chai'); 5 | const assert = chai.assert; 6 | const expect = chai.expect; 7 | const should = chai.should(); 8 | 9 | 10 | describe('EscPosEncoder', function() { 11 | let encoder = new EscPosEncoder(); 12 | 13 | describe('text(hello)', function () { 14 | let result = encoder.text('hello').encode(); 15 | 16 | it('should be [ 104, 101, 108, 108, 111 ]', function () { 17 | assert.deepEqual(new Uint8Array([ 104, 101, 108, 108, 111 ]), result); 18 | }); 19 | }); 20 | 21 | describe('text(hello).newline()', function () { 22 | let result = encoder.text('hello').newline().encode(); 23 | 24 | it('should be [ 104, 101, 108, 108, 111, 10, 13 ]', function () { 25 | assert.deepEqual(new Uint8Array([ 104, 101, 108, 108, 111, 10, 13 ]), result); 26 | }); 27 | }); 28 | 29 | describe('line(hello)', function () { 30 | let result = encoder.line('hello').encode(); 31 | 32 | it('should be [ 104, 101, 108, 108, 111, 10, 13 ]', function () { 33 | assert.deepEqual(new Uint8Array([ 104, 101, 108, 108, 111, 10, 13 ]), result); 34 | }); 35 | }); 36 | 37 | describe('text(héllo) - é -> ?', function () { 38 | let result = encoder.text('héllo').encode(); 39 | 40 | it('should be [ 104, 63, 108, 108, 111 ]', function () { 41 | assert.deepEqual(new Uint8Array([ 104, 63, 108, 108, 111 ]), result); 42 | }); 43 | }); 44 | 45 | describe('codepage(cp437).text(héllo) - é -> 130', function () { 46 | let result = encoder.codepage('cp437').text('héllo').encode(); 47 | 48 | it('should be [ 27, 116, 0, 104, 130, 108, 108, 111 ]', function () { 49 | assert.deepEqual(new Uint8Array([ 27, 116, 0, 104, 130, 108, 108, 111 ]), result); 50 | }); 51 | }); 52 | 53 | describe('codepage(cp936).text(简体中文) - simplified chinese', function () { 54 | let result = encoder.codepage('cp936').text('简体中文').encode(); 55 | 56 | it('should be [ 27, 116, 255, 28, 38, 188, 242, 204, 229, 214, 208, 206, 196, 28, 46 ]', function () { 57 | assert.deepEqual(new Uint8Array([ 27, 116, 255, 28, 38, 188, 242, 204, 229, 214, 208, 206, 196, 28, 46 ]), result); 58 | }); 59 | }); 60 | 61 | describe('codepage(win1252).text(héllo) - é -> 233', function () { 62 | let result = encoder.codepage('win1252').text('héllo').encode(); 63 | 64 | it('should be [ 27, 116, 71, 104, 233, 108, 108, 111 ]', function () { 65 | assert.deepEqual(new Uint8Array([ 27, 116, 71, 104, 233, 108, 108, 111 ]), result); 66 | }); 67 | }); 68 | 69 | describe('codepage(utf8).text(héllo)', function () { 70 | it('should throw an "Codepage not supported by printer" error', function () { 71 | expect(function(){ 72 | let result = encoder.codepage('utf8').text('héllo').encode(); 73 | }).to.throw('Codepage not supported by printer'); 74 | }); 75 | }); 76 | 77 | describe('codepage(unknown).text(héllo)', function () { 78 | it('should throw an "Unknown codepage" error', function () { 79 | expect(function(){ 80 | let result = encoder.codepage('unknown').text('héllo').encode(); 81 | }).to.throw('Unknown codepage'); 82 | }); 83 | }); 84 | 85 | describe('bold(true).text(hello).bold(false)', function () { 86 | let result = encoder.bold(true).text('hello').bold(false).encode(); 87 | 88 | it('should be [ 27, 69, 1, ..., 27, 69, 0 ]', function () { 89 | assert.deepEqual(new Uint8Array([ 27, 69, 1, 104, 101, 108, 108, 111, 27, 69, 0 ]), result); 90 | }); 91 | }); 92 | 93 | describe('bold().text(hello).bold()', function () { 94 | let result = encoder.bold().text('hello').bold().encode(); 95 | 96 | it('should be [ 27, 69, 1, ..., 27, 69, 0 ]', function () { 97 | assert.deepEqual(new Uint8Array([ 27, 69, 1, 104, 101, 108, 108, 111, 27, 69, 0 ]), result); 98 | }); 99 | }); 100 | 101 | describe('italic().text(hello).italic()', function () { 102 | let result = encoder.italic().text('hello').italic().encode(); 103 | 104 | it('should be [ 27, 69, 1, ..., 27, 69, 0 ]', function () { 105 | assert.deepEqual(new Uint8Array([ 27, 52, 1, 104, 101, 108, 108, 111, 27, 52, 0 ]), result); 106 | }); 107 | }); 108 | 109 | describe('underline(true).text(hello).underline(false)', function () { 110 | let result = encoder.underline(true).text('hello').underline(false).encode(); 111 | 112 | it('should be [ 27, 45, 1, ..., 27, 45, 0 ]', function () { 113 | assert.deepEqual(new Uint8Array([ 27, 45, 1, 104, 101, 108, 108, 111, 27, 45, 0 ]), result); 114 | }); 115 | }); 116 | 117 | describe('underline().text(hello).underline()', function () { 118 | let result = encoder.underline().text('hello').underline().encode(); 119 | 120 | it('should be [ 27, 45, 1, ..., 27, 45, 0 ]', function () { 121 | assert.deepEqual(new Uint8Array([ 27, 45, 1, 104, 101, 108, 108, 111, 27, 45, 0 ]), result); 122 | }); 123 | }); 124 | 125 | describe('align(left).line(hello)', function () { 126 | let result = encoder.align('left').line('hello').encode(); 127 | 128 | it('should be [ 27, 97, 0, ..., 10, 13 ]', function () { 129 | assert.deepEqual(new Uint8Array([ 27, 97, 0, 104, 101, 108, 108, 111, 10, 13 ]), result); 130 | }); 131 | }); 132 | 133 | describe('align(center).line(hello)', function () { 134 | let result = encoder.align('center').line('hello').encode(); 135 | 136 | it('should be [ 27, 97, 1, ..., 10, 13 ]', function () { 137 | assert.deepEqual(new Uint8Array([ 27, 97, 1, 104, 101, 108, 108, 111, 10, 13 ]), result); 138 | }); 139 | }); 140 | 141 | describe('align(right).line(hello)', function () { 142 | let result = encoder.align('right').line('hello').encode(); 143 | 144 | it('should be [ 27, 97, 2, ..., 10, 13 ]', function () { 145 | assert.deepEqual(new Uint8Array([ 27, 97, 2, 104, 101, 108, 108, 111, 10, 13 ]), result); 146 | }); 147 | }); 148 | 149 | describe('qrcode(https://nielsleenheer.com)', function () { 150 | let result = encoder.qrcode('https://nielsleenheer.com').encode(); 151 | 152 | it('should be [ 10, 29, 40, 107, 4, 0, 49, 65, 50, 0, 29, 40, 107, 3, 0, ... ]', function () { 153 | assert.deepEqual(new Uint8Array([ 10, 29, 40, 107, 4, 0, 49, 65, 50, 0, 29, 40, 107, 3, 0, 49, 67, 6, 29, 40, 107, 3, 0, 49, 69, 49, 29, 40, 107, 28, 0, 49, 80, 48, 104, 116, 116, 112, 115, 58, 47, 47, 110, 105, 101, 108, 115, 108, 101, 101, 110, 104, 101, 101, 114, 46, 99, 111, 109, 29, 40, 107, 3, 0, 49, 81, 48 ]), result); 154 | }); 155 | }); 156 | 157 | describe('qrcode(https://nielsleenheer.com, 1, 8, h)', function () { 158 | let result = encoder.qrcode('https://nielsleenheer.com', 1, 8, 'h').encode(); 159 | 160 | it('should be [ 10, 29, 40, 107, 4, 0, 49, 65, 49, 0, 29, 40, 107, 3, 0, ... ]', function () { 161 | assert.deepEqual(new Uint8Array([ 10, 29, 40, 107, 4, 0, 49, 65, 49, 0, 29, 40, 107, 3, 0, 49, 67, 8, 29, 40, 107, 3, 0, 49, 69, 51, 29, 40, 107, 28, 0, 49, 80, 48, 104, 116, 116, 112, 115, 58, 47, 47, 110, 105, 101, 108, 115, 108, 101, 101, 110, 104, 101, 101, 114, 46, 99, 111, 109, 29, 40, 107, 3, 0, 49, 81, 48 ]), result); 162 | }); 163 | }); 164 | 165 | describe('barcode(3130630574613, ean13, 60)', function () { 166 | let result = encoder.barcode('3130630574613', 'ean13', 60).encode(); 167 | 168 | it('should be [ 29, 104, 60, 29, 119, 3, 29, 107, 2, ... ]', function () { 169 | assert.deepEqual(new Uint8Array([ 29, 104, 60, 29, 119, 3, 29, 107, 2, 51, 49, 51, 48, 54, 51, 48, 53, 55, 52, 54, 49, 51, 0 ]), result); 170 | }); 171 | }); 172 | 173 | describe('image(canvas, 8, 8) - with a black pixel at 0,0', function () { 174 | let canvas = createCanvas(8, 8); 175 | let context = canvas.getContext('2d'); 176 | context.fillStyle = 'rgba(0, 0, 0, 1)'; 177 | context.fillRect( 0, 0, 1, 1 ); 178 | 179 | let result = encoder.image(canvas, 8, 8).encode(); 180 | 181 | it('should be [ 29, 118, 48, 0, 1, 0, 8, 0, 128, 0, 0, 0, 0, 0, 0, 0 ]', function () { 182 | assert.deepEqual(new Uint8Array([ 29, 118, 48, 0, 1, 0, 8, 0, 128, 0, 0, 0, 0, 0, 0, 0 ]), result); 183 | }); 184 | }); 185 | 186 | describe('cut()', function () { 187 | let result = encoder.cut().encode(); 188 | 189 | it('should be [ 29, 86, 00 ]', function () { 190 | assert.deepEqual(new Uint8Array([ 29, 86, 00 ]), result); 191 | }); 192 | }); 193 | 194 | describe('cut(full)', function () { 195 | let result = encoder.cut('full').encode(); 196 | 197 | it('should be [ 29, 86, 00 ]', function () { 198 | assert.deepEqual(new Uint8Array([ 29, 86, 00 ]), result); 199 | }); 200 | }); 201 | 202 | describe('cut(partial)', function () { 203 | let result = encoder.cut('partial').encode(); 204 | 205 | it('should be [ 29, 86, 01 ]', function () { 206 | assert.deepEqual(new Uint8Array([ 29, 86, 01 ]), result); 207 | }); 208 | }); 209 | 210 | describe('raw([ 0x1c, 0x2e ])', function () { 211 | let result = encoder.raw([ 0x1c, 0x2e ]).encode(); 212 | 213 | it('should be [ 28, 46 ]', function () { 214 | assert.deepEqual(new Uint8Array([ 28, 46 ]), result); 215 | }); 216 | }); 217 | 218 | describe('beeper()', function () { 219 | let result = encoder.beeper().encode(); 220 | 221 | it('should be [ 27, 66, 5, 1 ]', function () { 222 | assert.deepEqual(new Uint8Array([ 27, 66, 5, 1 ]), result); 223 | }); 224 | }); 225 | 226 | describe('openCashDrawer()', function () { 227 | let result = encoder.openCashDrawer().encode(); 228 | 229 | it('should be [ 27, 112, 0 ]', function () { 230 | assert.deepEqual(new Uint8Array([ 27, 112, 0 ]), result); 231 | }); 232 | }); 233 | }); 234 | --------------------------------------------------------------------------------