├── .gitignore ├── LICENSE ├── README.md ├── eslintrc.json ├── index.js ├── package-lock.json ├── package.json ├── src └── textwrap.js └── test └── textwrap-test.js /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | node_modules 3 | build -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Vijith Assar 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 | # d3-textwrap 2 | 3 | wrap long lines of text in SVG images 4 | 5 | demonstration 6 | 7 | ## Overview 8 | 9 | Astonishingly, SVG does not natively provide a way to wrap long lines of text. However, it does provide two mechanisms by which text wrapping can be very tediously implemented. 10 | 11 | 1. the long text can be split into substrings which are inserted into [tspan](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/tspan) elements, each of which is then positioned individually 12 | 13 | 2. the text can be added to a [foreignObject](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/foreignObject) which uses HTML instead of SVG to wrap long lines 14 | 15 | The first approach can be buggy in Safari, and the second does not work at all in Internet Explorer 10 or below. This plugin implements both solutions, and can switch between them depending on browser support. 16 | 17 | ## Quick Start 18 | 19 | The d3.textwrap method is a factory which returns functions which can then have their wrapping behavior configured, and are then run on a set of text nodes using [selection.call](https://github.com/d3/d3-selection#selection_call). 20 | 21 | ```js 22 | // create a text wrapping function 23 | var wrap = d3.textwrap().bounds({height: 480, width: 960}); 24 | // wrap all text 25 | d3.selectAll('text').call(wrap); 26 | ``` 27 | 28 | ## Install 29 | 30 | Install with [npm](https://www.npmjs.com/) or [yarn](https://yarnpkg.com/), or download the latest [release](https://github.com/vijithassar/d3-textwrap/releases). 31 | 32 | ```bash 33 | npm install d3-textwrap 34 | ``` 35 | 36 | ## Import 37 | 38 | You can import with ESM `import` syntax and then attach it to your `d3` object: 39 | 40 | ```javascript 41 | import { textwrap } from 'd3-textwrap'; 42 | d3.textwrap = textwrap; 43 | ``` 44 | 45 | Or do the same with CJS `require()`: 46 | 47 | ```javascript 48 | var textwrap = require('d3-textwrap').textwrap; 49 | d3.textwrap = textwrap; 50 | ``` 51 | 52 | You can also load directly in the browser without a build tool or package manager. Add the plugin script to your HTML page after you've loaded d3.js and the `textwrap()` function will be automatically added to the `d3` object: 53 | 54 | ```javascript 55 | 56 | 57 | 58 | 59 | 60 | ``` 61 | 62 | ## API Reference 63 | 64 | * [Creating Text Wrapping Functions](#creating) 65 | * [Configuration](#configuring) 66 | * [Running](#running) 67 | 68 | ### Creating Text Wrapping Functions 69 | 70 | # d3.*textwrap* 71 | 72 | Creates a function that can then be configured and used to wrap text. This allows for varying configurations within the same project. 73 | 74 | ```js 75 | var wrap = d3.textwrap(); 76 | ``` 77 | 78 | ### Configuration 79 | 80 | # textwrap.**bounds**(*bounds*) 81 | 82 | Gets or sets the boundaries within which text will be wrapped. Takes one argument, which can be a DOM node, an object with "height" and "width" properties, or a function which returns an object with "height" and "width" properties. To wrap to a 480×960 pixel rectangle: 83 | 84 | ```js 85 | var wrap; 86 | // create a text wrapping function 87 | wrap = d3.textwrap() 88 | // wrap to 480 x 960 pixels 89 | .bounds({height: 480, width: 960}); 90 | ``` 91 | 92 | # textwrap.**padding**(*padding*) 93 | 94 | Gets or sets optional additional padding which will be calculated on top of the bounds before the text wrapping is performed. Takes one argument, which can be a number or a function which returns a number. Note that this does not support CSS units. To pad by 10 pixels, thus bringing the effective dimensions to 460×940: 95 | 96 | ```js 97 | var wrap; 98 | // create a text wrapping function 99 | wrap = d3.textwrap() 100 | // wrap to 480 x 960 pixels 101 | .bounds({height: 480, width: 960}) 102 | // pad by an additional 10 pixels 103 | .padding(10); 104 | ``` 105 | 106 | # textwrap.**method**(*method*) 107 | 108 | Gets or sets the name of the text wrapping method to be used, which can be either "foreignobject" or "tspans". If this is not specified, the default behavior is to use foreignobject wrapping for most browsers, but fall back to using tspan elements when that is not an available option. With that said, in some scenarios it may also make sense to always use the tspan method in pursuit of consistent behavior. 109 | 110 | ```js 111 | var wrap; 112 | // create a text wrapping function 113 | wrap = d3.textwrap() 114 | // wrap to 480 x 960 pixels 115 | .bounds({height: 480, width: 960}) 116 | // wrap with tspans in all browsers 117 | .method('tspans'); 118 | ``` 119 | 120 | ### Running 121 | 122 | After configuring a text wrapping function, run it using [selection.call()](https://github.com/d3/d3-selection#selection_call): 123 | 124 | ```js 125 | var wrap, 126 | text; 127 | // create a text wrapping function 128 | wrap = d3.textwrap() 129 | // wrap to 480 x 960 pixels 130 | .bounds({height: 480, width: 960}); 131 | // select all text nodes 132 | text = d3.selectAll('text'); 133 | // run the text wrapping function on all text nodes 134 | text.call(wrap); 135 | ``` 136 | 137 | ## Alternatives 138 | 139 | Gregor Aisch's handy [d3-jetpack](https://github.com/gka/d3-jetpack) toolkit also provides a text wrapping routine which works by counting the number of characters on each line instead of measuring the amount of horizontal space they occupy. 140 | -------------------------------------------------------------------------------- /eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "commonjs": true 5 | }, 6 | "extends": "eslint:recommended", 7 | "parserOptions": { 8 | "sourceType": "module", 9 | "ecmaVersion": 2015 10 | }, 11 | "rules": { 12 | "indent": ["warn", 4], 13 | "linebreak-style": ["error", "unix"], 14 | "quotes": ["warn", "single"], 15 | "semi": ["error", "always"], 16 | "strict": ["error", "safe"], 17 | "no-dupe-keys": "error", 18 | "one-var": ["error", { 19 | "var": "always", 20 | "let": "never", 21 | "const": "never" 22 | }], 23 | "space-before-function-paren": ["error", "never"], 24 | "space-before-blocks": ["error", "always"], 25 | "space-infix-ops": "error", 26 | "key-spacing": ["error", { 27 | "afterColon": true, 28 | "mode": "strict" 29 | }], 30 | "func-style": ["error", "expression"], 31 | "eqeqeq": "error", 32 | "dot-notation": "error", 33 | "no-redeclare": "error", 34 | "radix": "error", 35 | "vars-on-top": "error", 36 | "no-trailing-spaces": "error", 37 | "no-mixed-spaces-and-tabs": "error", 38 | "one-var-declaration-per-line": ["error", "always"], 39 | "newline-per-chained-call": ["error", {"ignoreChainWithDepth": 3}], 40 | "no-console": ["error", { "allow": ["warn", "error"] }], 41 | "no-debugger": "error", 42 | "no-use-before-define": "error", 43 | "no-unused-vars": ["error", {"args": "none"}], 44 | "no-native-reassign": ["error", {"exceptions": ["document"]}], 45 | "no-global-assign": ["error", {"exceptions": ["document"]}] 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | export {selection, select} from 'd3-selection'; 2 | export {default as textwrap} from './src/textwrap'; 3 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "d3-textwrap", 3 | "version": "3.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.8.3", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", 10 | "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.8.3" 14 | } 15 | }, 16 | "@babel/helper-validator-identifier": { 17 | "version": "7.9.5", 18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", 19 | "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", 20 | "dev": true 21 | }, 22 | "@babel/highlight": { 23 | "version": "7.9.0", 24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", 25 | "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", 26 | "dev": true, 27 | "requires": { 28 | "@babel/helper-validator-identifier": "^7.9.0", 29 | "chalk": "^2.0.0", 30 | "js-tokens": "^4.0.0" 31 | }, 32 | "dependencies": { 33 | "ansi-styles": { 34 | "version": "3.2.1", 35 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 36 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 37 | "dev": true, 38 | "requires": { 39 | "color-convert": "^1.9.0" 40 | } 41 | }, 42 | "chalk": { 43 | "version": "2.4.2", 44 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 45 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 46 | "dev": true, 47 | "requires": { 48 | "ansi-styles": "^3.2.1", 49 | "escape-string-regexp": "^1.0.5", 50 | "supports-color": "^5.3.0" 51 | } 52 | }, 53 | "supports-color": { 54 | "version": "5.5.0", 55 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 56 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 57 | "dev": true, 58 | "requires": { 59 | "has-flag": "^3.0.0" 60 | } 61 | } 62 | } 63 | }, 64 | "@types/color-name": { 65 | "version": "1.1.1", 66 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", 67 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", 68 | "dev": true 69 | }, 70 | "abab": { 71 | "version": "1.0.4", 72 | "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", 73 | "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", 74 | "dev": true 75 | }, 76 | "acorn": { 77 | "version": "7.2.0", 78 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz", 79 | "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==", 80 | "dev": true 81 | }, 82 | "acorn-globals": { 83 | "version": "3.1.0", 84 | "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", 85 | "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", 86 | "dev": true, 87 | "requires": { 88 | "acorn": "^4.0.4" 89 | }, 90 | "dependencies": { 91 | "acorn": { 92 | "version": "4.0.13", 93 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", 94 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", 95 | "dev": true 96 | } 97 | } 98 | }, 99 | "acorn-jsx": { 100 | "version": "5.2.0", 101 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", 102 | "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", 103 | "dev": true 104 | }, 105 | "ajv": { 106 | "version": "6.12.2", 107 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", 108 | "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", 109 | "dev": true, 110 | "requires": { 111 | "fast-deep-equal": "^3.1.1", 112 | "fast-json-stable-stringify": "^2.0.0", 113 | "json-schema-traverse": "^0.4.1", 114 | "uri-js": "^4.2.2" 115 | } 116 | }, 117 | "align-text": { 118 | "version": "0.1.4", 119 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", 120 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", 121 | "dev": true, 122 | "requires": { 123 | "kind-of": "^3.0.2", 124 | "longest": "^1.0.1", 125 | "repeat-string": "^1.5.2" 126 | } 127 | }, 128 | "ansi-escapes": { 129 | "version": "4.3.1", 130 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", 131 | "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", 132 | "dev": true, 133 | "requires": { 134 | "type-fest": "^0.11.0" 135 | }, 136 | "dependencies": { 137 | "type-fest": { 138 | "version": "0.11.0", 139 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", 140 | "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", 141 | "dev": true 142 | } 143 | } 144 | }, 145 | "ansi-regex": { 146 | "version": "2.1.1", 147 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 148 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 149 | "dev": true 150 | }, 151 | "ansi-styles": { 152 | "version": "2.2.1", 153 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 154 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 155 | "dev": true 156 | }, 157 | "argparse": { 158 | "version": "1.0.10", 159 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 160 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 161 | "dev": true, 162 | "requires": { 163 | "sprintf-js": "~1.0.2" 164 | } 165 | }, 166 | "array-equal": { 167 | "version": "1.0.0", 168 | "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", 169 | "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", 170 | "dev": true 171 | }, 172 | "asn1": { 173 | "version": "0.2.4", 174 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 175 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 176 | "dev": true, 177 | "requires": { 178 | "safer-buffer": "~2.1.0" 179 | } 180 | }, 181 | "assert-plus": { 182 | "version": "1.0.0", 183 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 184 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 185 | "dev": true 186 | }, 187 | "astral-regex": { 188 | "version": "1.0.0", 189 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 190 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", 191 | "dev": true 192 | }, 193 | "asynckit": { 194 | "version": "0.4.0", 195 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 196 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 197 | "dev": true 198 | }, 199 | "aws-sign2": { 200 | "version": "0.7.0", 201 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 202 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 203 | "dev": true 204 | }, 205 | "aws4": { 206 | "version": "1.9.1", 207 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", 208 | "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", 209 | "dev": true 210 | }, 211 | "balanced-match": { 212 | "version": "1.0.0", 213 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 214 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 215 | "dev": true 216 | }, 217 | "bcrypt-pbkdf": { 218 | "version": "1.0.2", 219 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 220 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 221 | "dev": true, 222 | "requires": { 223 | "tweetnacl": "^0.14.3" 224 | } 225 | }, 226 | "brace-expansion": { 227 | "version": "1.1.11", 228 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 229 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 230 | "dev": true, 231 | "requires": { 232 | "balanced-match": "^1.0.0", 233 | "concat-map": "0.0.1" 234 | } 235 | }, 236 | "callsites": { 237 | "version": "3.1.0", 238 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 239 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 240 | "dev": true 241 | }, 242 | "camelcase": { 243 | "version": "1.2.1", 244 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", 245 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", 246 | "dev": true 247 | }, 248 | "caseless": { 249 | "version": "0.12.0", 250 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 251 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 252 | "dev": true 253 | }, 254 | "center-align": { 255 | "version": "0.1.3", 256 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", 257 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", 258 | "dev": true, 259 | "requires": { 260 | "align-text": "^0.1.3", 261 | "lazy-cache": "^1.0.3" 262 | } 263 | }, 264 | "chalk": { 265 | "version": "1.1.3", 266 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 267 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 268 | "dev": true, 269 | "requires": { 270 | "ansi-styles": "^2.2.1", 271 | "escape-string-regexp": "^1.0.2", 272 | "has-ansi": "^2.0.0", 273 | "strip-ansi": "^3.0.0", 274 | "supports-color": "^2.0.0" 275 | } 276 | }, 277 | "chardet": { 278 | "version": "0.7.0", 279 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 280 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", 281 | "dev": true 282 | }, 283 | "cli-cursor": { 284 | "version": "3.1.0", 285 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 286 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 287 | "dev": true, 288 | "requires": { 289 | "restore-cursor": "^3.1.0" 290 | } 291 | }, 292 | "cli-width": { 293 | "version": "2.2.1", 294 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", 295 | "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", 296 | "dev": true 297 | }, 298 | "cliui": { 299 | "version": "2.1.0", 300 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", 301 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", 302 | "dev": true, 303 | "requires": { 304 | "center-align": "^0.1.1", 305 | "right-align": "^0.1.1", 306 | "wordwrap": "0.0.2" 307 | } 308 | }, 309 | "color-convert": { 310 | "version": "1.9.3", 311 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 312 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 313 | "dev": true, 314 | "requires": { 315 | "color-name": "1.1.3" 316 | } 317 | }, 318 | "color-name": { 319 | "version": "1.1.3", 320 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 321 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 322 | "dev": true 323 | }, 324 | "combined-stream": { 325 | "version": "1.0.8", 326 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 327 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 328 | "dev": true, 329 | "requires": { 330 | "delayed-stream": "~1.0.0" 331 | } 332 | }, 333 | "concat-map": { 334 | "version": "0.0.1", 335 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 336 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 337 | "dev": true 338 | }, 339 | "content-type-parser": { 340 | "version": "1.0.2", 341 | "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", 342 | "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==", 343 | "dev": true 344 | }, 345 | "core-util-is": { 346 | "version": "1.0.2", 347 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 348 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 349 | "dev": true 350 | }, 351 | "cross-spawn": { 352 | "version": "7.0.2", 353 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", 354 | "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", 355 | "dev": true, 356 | "requires": { 357 | "path-key": "^3.1.0", 358 | "shebang-command": "^2.0.0", 359 | "which": "^2.0.1" 360 | } 361 | }, 362 | "cssom": { 363 | "version": "0.3.8", 364 | "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", 365 | "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", 366 | "dev": true 367 | }, 368 | "cssstyle": { 369 | "version": "0.2.37", 370 | "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", 371 | "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", 372 | "dev": true, 373 | "requires": { 374 | "cssom": "0.3.x" 375 | } 376 | }, 377 | "d3-selection": { 378 | "version": "1.4.1", 379 | "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.1.tgz", 380 | "integrity": "sha512-BTIbRjv/m5rcVTfBs4AMBLKs4x8XaaLkwm28KWu9S2vKNqXkXt2AH2Qf0sdPZHjFxcWg/YL53zcqAz+3g4/7PA==" 381 | }, 382 | "dashdash": { 383 | "version": "1.14.1", 384 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 385 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 386 | "dev": true, 387 | "requires": { 388 | "assert-plus": "^1.0.0" 389 | } 390 | }, 391 | "debug": { 392 | "version": "4.1.1", 393 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 394 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 395 | "dev": true, 396 | "requires": { 397 | "ms": "^2.1.1" 398 | } 399 | }, 400 | "decamelize": { 401 | "version": "1.2.0", 402 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 403 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 404 | "dev": true 405 | }, 406 | "deep-equal": { 407 | "version": "1.1.1", 408 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", 409 | "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", 410 | "dev": true, 411 | "requires": { 412 | "is-arguments": "^1.0.4", 413 | "is-date-object": "^1.0.1", 414 | "is-regex": "^1.0.4", 415 | "object-is": "^1.0.1", 416 | "object-keys": "^1.1.1", 417 | "regexp.prototype.flags": "^1.2.0" 418 | } 419 | }, 420 | "deep-is": { 421 | "version": "0.1.3", 422 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 423 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 424 | "dev": true 425 | }, 426 | "define-properties": { 427 | "version": "1.1.3", 428 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 429 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 430 | "dev": true, 431 | "requires": { 432 | "object-keys": "^1.0.12" 433 | } 434 | }, 435 | "defined": { 436 | "version": "1.0.0", 437 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 438 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", 439 | "dev": true 440 | }, 441 | "delayed-stream": { 442 | "version": "1.0.0", 443 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 444 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 445 | "dev": true 446 | }, 447 | "doctrine": { 448 | "version": "3.0.0", 449 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 450 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 451 | "dev": true, 452 | "requires": { 453 | "esutils": "^2.0.2" 454 | } 455 | }, 456 | "dotignore": { 457 | "version": "0.1.2", 458 | "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", 459 | "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", 460 | "dev": true, 461 | "requires": { 462 | "minimatch": "^3.0.4" 463 | } 464 | }, 465 | "ecc-jsbn": { 466 | "version": "0.1.2", 467 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 468 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 469 | "dev": true, 470 | "requires": { 471 | "jsbn": "~0.1.0", 472 | "safer-buffer": "^2.1.0" 473 | } 474 | }, 475 | "emoji-regex": { 476 | "version": "8.0.0", 477 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 478 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 479 | "dev": true 480 | }, 481 | "es-abstract": { 482 | "version": "1.17.5", 483 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", 484 | "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", 485 | "dev": true, 486 | "requires": { 487 | "es-to-primitive": "^1.2.1", 488 | "function-bind": "^1.1.1", 489 | "has": "^1.0.3", 490 | "has-symbols": "^1.0.1", 491 | "is-callable": "^1.1.5", 492 | "is-regex": "^1.0.5", 493 | "object-inspect": "^1.7.0", 494 | "object-keys": "^1.1.1", 495 | "object.assign": "^4.1.0", 496 | "string.prototype.trimleft": "^2.1.1", 497 | "string.prototype.trimright": "^2.1.1" 498 | } 499 | }, 500 | "es-to-primitive": { 501 | "version": "1.2.1", 502 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 503 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 504 | "dev": true, 505 | "requires": { 506 | "is-callable": "^1.1.4", 507 | "is-date-object": "^1.0.1", 508 | "is-symbol": "^1.0.2" 509 | } 510 | }, 511 | "escape-string-regexp": { 512 | "version": "1.0.5", 513 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 514 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 515 | "dev": true 516 | }, 517 | "escodegen": { 518 | "version": "1.14.1", 519 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", 520 | "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", 521 | "dev": true, 522 | "requires": { 523 | "esprima": "^4.0.1", 524 | "estraverse": "^4.2.0", 525 | "esutils": "^2.0.2", 526 | "optionator": "^0.8.1", 527 | "source-map": "~0.6.1" 528 | } 529 | }, 530 | "eslint": { 531 | "version": "7.0.0", 532 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.0.0.tgz", 533 | "integrity": "sha512-qY1cwdOxMONHJfGqw52UOpZDeqXy8xmD0u8CT6jIstil72jkhURC704W8CFyTPDPllz4z4lu0Ql1+07PG/XdIg==", 534 | "dev": true, 535 | "requires": { 536 | "@babel/code-frame": "^7.0.0", 537 | "ajv": "^6.10.0", 538 | "chalk": "^4.0.0", 539 | "cross-spawn": "^7.0.2", 540 | "debug": "^4.0.1", 541 | "doctrine": "^3.0.0", 542 | "eslint-scope": "^5.0.0", 543 | "eslint-utils": "^2.0.0", 544 | "eslint-visitor-keys": "^1.1.0", 545 | "espree": "^7.0.0", 546 | "esquery": "^1.2.0", 547 | "esutils": "^2.0.2", 548 | "file-entry-cache": "^5.0.1", 549 | "functional-red-black-tree": "^1.0.1", 550 | "glob-parent": "^5.0.0", 551 | "globals": "^12.1.0", 552 | "ignore": "^4.0.6", 553 | "import-fresh": "^3.0.0", 554 | "imurmurhash": "^0.1.4", 555 | "inquirer": "^7.0.0", 556 | "is-glob": "^4.0.0", 557 | "js-yaml": "^3.13.1", 558 | "json-stable-stringify-without-jsonify": "^1.0.1", 559 | "levn": "^0.4.1", 560 | "lodash": "^4.17.14", 561 | "minimatch": "^3.0.4", 562 | "natural-compare": "^1.4.0", 563 | "optionator": "^0.9.1", 564 | "progress": "^2.0.0", 565 | "regexpp": "^3.1.0", 566 | "semver": "^7.2.1", 567 | "strip-ansi": "^6.0.0", 568 | "strip-json-comments": "^3.1.0", 569 | "table": "^5.2.3", 570 | "text-table": "^0.2.0", 571 | "v8-compile-cache": "^2.0.3" 572 | }, 573 | "dependencies": { 574 | "ansi-regex": { 575 | "version": "5.0.0", 576 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 577 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 578 | "dev": true 579 | }, 580 | "ansi-styles": { 581 | "version": "4.2.1", 582 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", 583 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", 584 | "dev": true, 585 | "requires": { 586 | "@types/color-name": "^1.1.1", 587 | "color-convert": "^2.0.1" 588 | } 589 | }, 590 | "chalk": { 591 | "version": "4.0.0", 592 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.0.0.tgz", 593 | "integrity": "sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==", 594 | "dev": true, 595 | "requires": { 596 | "ansi-styles": "^4.1.0", 597 | "supports-color": "^7.1.0" 598 | } 599 | }, 600 | "color-convert": { 601 | "version": "2.0.1", 602 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 603 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 604 | "dev": true, 605 | "requires": { 606 | "color-name": "~1.1.4" 607 | } 608 | }, 609 | "color-name": { 610 | "version": "1.1.4", 611 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 612 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 613 | "dev": true 614 | }, 615 | "has-flag": { 616 | "version": "4.0.0", 617 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 618 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 619 | "dev": true 620 | }, 621 | "levn": { 622 | "version": "0.4.1", 623 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 624 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 625 | "dev": true, 626 | "requires": { 627 | "prelude-ls": "^1.2.1", 628 | "type-check": "~0.4.0" 629 | } 630 | }, 631 | "optionator": { 632 | "version": "0.9.1", 633 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 634 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 635 | "dev": true, 636 | "requires": { 637 | "deep-is": "^0.1.3", 638 | "fast-levenshtein": "^2.0.6", 639 | "levn": "^0.4.1", 640 | "prelude-ls": "^1.2.1", 641 | "type-check": "^0.4.0", 642 | "word-wrap": "^1.2.3" 643 | } 644 | }, 645 | "prelude-ls": { 646 | "version": "1.2.1", 647 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 648 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 649 | "dev": true 650 | }, 651 | "strip-ansi": { 652 | "version": "6.0.0", 653 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 654 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 655 | "dev": true, 656 | "requires": { 657 | "ansi-regex": "^5.0.0" 658 | } 659 | }, 660 | "supports-color": { 661 | "version": "7.1.0", 662 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", 663 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", 664 | "dev": true, 665 | "requires": { 666 | "has-flag": "^4.0.0" 667 | } 668 | }, 669 | "type-check": { 670 | "version": "0.4.0", 671 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 672 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 673 | "dev": true, 674 | "requires": { 675 | "prelude-ls": "^1.2.1" 676 | } 677 | } 678 | } 679 | }, 680 | "eslint-scope": { 681 | "version": "5.0.0", 682 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", 683 | "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", 684 | "dev": true, 685 | "requires": { 686 | "esrecurse": "^4.1.0", 687 | "estraverse": "^4.1.1" 688 | } 689 | }, 690 | "eslint-utils": { 691 | "version": "2.0.0", 692 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz", 693 | "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==", 694 | "dev": true, 695 | "requires": { 696 | "eslint-visitor-keys": "^1.1.0" 697 | } 698 | }, 699 | "eslint-visitor-keys": { 700 | "version": "1.1.0", 701 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", 702 | "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", 703 | "dev": true 704 | }, 705 | "espree": { 706 | "version": "7.0.0", 707 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.0.0.tgz", 708 | "integrity": "sha512-/r2XEx5Mw4pgKdyb7GNLQNsu++asx/dltf/CI8RFi9oGHxmQFgvLbc5Op4U6i8Oaj+kdslhJtVlEZeAqH5qOTw==", 709 | "dev": true, 710 | "requires": { 711 | "acorn": "^7.1.1", 712 | "acorn-jsx": "^5.2.0", 713 | "eslint-visitor-keys": "^1.1.0" 714 | } 715 | }, 716 | "esprima": { 717 | "version": "4.0.1", 718 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 719 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 720 | "dev": true 721 | }, 722 | "esquery": { 723 | "version": "1.3.1", 724 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", 725 | "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", 726 | "dev": true, 727 | "requires": { 728 | "estraverse": "^5.1.0" 729 | }, 730 | "dependencies": { 731 | "estraverse": { 732 | "version": "5.1.0", 733 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", 734 | "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", 735 | "dev": true 736 | } 737 | } 738 | }, 739 | "esrecurse": { 740 | "version": "4.2.1", 741 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 742 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 743 | "dev": true, 744 | "requires": { 745 | "estraverse": "^4.1.0" 746 | } 747 | }, 748 | "estraverse": { 749 | "version": "4.3.0", 750 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 751 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 752 | "dev": true 753 | }, 754 | "esutils": { 755 | "version": "2.0.3", 756 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 757 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 758 | "dev": true 759 | }, 760 | "extend": { 761 | "version": "3.0.2", 762 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 763 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 764 | "dev": true 765 | }, 766 | "external-editor": { 767 | "version": "3.1.0", 768 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 769 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 770 | "dev": true, 771 | "requires": { 772 | "chardet": "^0.7.0", 773 | "iconv-lite": "^0.4.24", 774 | "tmp": "^0.0.33" 775 | } 776 | }, 777 | "extsprintf": { 778 | "version": "1.3.0", 779 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 780 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 781 | "dev": true 782 | }, 783 | "fast-deep-equal": { 784 | "version": "3.1.1", 785 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", 786 | "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", 787 | "dev": true 788 | }, 789 | "fast-json-stable-stringify": { 790 | "version": "2.1.0", 791 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 792 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 793 | "dev": true 794 | }, 795 | "fast-levenshtein": { 796 | "version": "2.0.6", 797 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 798 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 799 | "dev": true 800 | }, 801 | "figures": { 802 | "version": "3.2.0", 803 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", 804 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", 805 | "dev": true, 806 | "requires": { 807 | "escape-string-regexp": "^1.0.5" 808 | } 809 | }, 810 | "file-entry-cache": { 811 | "version": "5.0.1", 812 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", 813 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", 814 | "dev": true, 815 | "requires": { 816 | "flat-cache": "^2.0.1" 817 | } 818 | }, 819 | "flat-cache": { 820 | "version": "2.0.1", 821 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", 822 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", 823 | "dev": true, 824 | "requires": { 825 | "flatted": "^2.0.0", 826 | "rimraf": "2.6.3", 827 | "write": "1.0.3" 828 | } 829 | }, 830 | "flatted": { 831 | "version": "2.0.2", 832 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", 833 | "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", 834 | "dev": true 835 | }, 836 | "for-each": { 837 | "version": "0.3.3", 838 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 839 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 840 | "dev": true, 841 | "requires": { 842 | "is-callable": "^1.1.3" 843 | } 844 | }, 845 | "forever-agent": { 846 | "version": "0.6.1", 847 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 848 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 849 | "dev": true 850 | }, 851 | "form-data": { 852 | "version": "2.3.3", 853 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 854 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 855 | "dev": true, 856 | "requires": { 857 | "asynckit": "^0.4.0", 858 | "combined-stream": "^1.0.6", 859 | "mime-types": "^2.1.12" 860 | } 861 | }, 862 | "fs.realpath": { 863 | "version": "1.0.0", 864 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 865 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 866 | "dev": true 867 | }, 868 | "function-bind": { 869 | "version": "1.1.1", 870 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 871 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 872 | "dev": true 873 | }, 874 | "functional-red-black-tree": { 875 | "version": "1.0.1", 876 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 877 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 878 | "dev": true 879 | }, 880 | "getpass": { 881 | "version": "0.1.7", 882 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 883 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 884 | "dev": true, 885 | "requires": { 886 | "assert-plus": "^1.0.0" 887 | } 888 | }, 889 | "glob": { 890 | "version": "7.1.6", 891 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 892 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 893 | "dev": true, 894 | "requires": { 895 | "fs.realpath": "^1.0.0", 896 | "inflight": "^1.0.4", 897 | "inherits": "2", 898 | "minimatch": "^3.0.4", 899 | "once": "^1.3.0", 900 | "path-is-absolute": "^1.0.0" 901 | } 902 | }, 903 | "glob-parent": { 904 | "version": "5.1.1", 905 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 906 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 907 | "dev": true, 908 | "requires": { 909 | "is-glob": "^4.0.1" 910 | } 911 | }, 912 | "globals": { 913 | "version": "12.4.0", 914 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", 915 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", 916 | "dev": true, 917 | "requires": { 918 | "type-fest": "^0.8.1" 919 | } 920 | }, 921 | "har-schema": { 922 | "version": "2.0.0", 923 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 924 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 925 | "dev": true 926 | }, 927 | "har-validator": { 928 | "version": "5.1.3", 929 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 930 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 931 | "dev": true, 932 | "requires": { 933 | "ajv": "^6.5.5", 934 | "har-schema": "^2.0.0" 935 | }, 936 | "dependencies": { 937 | "ajv": { 938 | "version": "6.12.2", 939 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", 940 | "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", 941 | "dev": true, 942 | "requires": { 943 | "fast-deep-equal": "^3.1.1", 944 | "fast-json-stable-stringify": "^2.0.0", 945 | "json-schema-traverse": "^0.4.1", 946 | "uri-js": "^4.2.2" 947 | } 948 | } 949 | } 950 | }, 951 | "has": { 952 | "version": "1.0.3", 953 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 954 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 955 | "dev": true, 956 | "requires": { 957 | "function-bind": "^1.1.1" 958 | } 959 | }, 960 | "has-ansi": { 961 | "version": "2.0.0", 962 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 963 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 964 | "dev": true, 965 | "requires": { 966 | "ansi-regex": "^2.0.0" 967 | } 968 | }, 969 | "has-flag": { 970 | "version": "3.0.0", 971 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 972 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 973 | "dev": true 974 | }, 975 | "has-symbols": { 976 | "version": "1.0.1", 977 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 978 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", 979 | "dev": true 980 | }, 981 | "html-encoding-sniffer": { 982 | "version": "1.0.2", 983 | "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", 984 | "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", 985 | "dev": true, 986 | "requires": { 987 | "whatwg-encoding": "^1.0.1" 988 | } 989 | }, 990 | "http-signature": { 991 | "version": "1.2.0", 992 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 993 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 994 | "dev": true, 995 | "requires": { 996 | "assert-plus": "^1.0.0", 997 | "jsprim": "^1.2.2", 998 | "sshpk": "^1.7.0" 999 | } 1000 | }, 1001 | "iconv-lite": { 1002 | "version": "0.4.24", 1003 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1004 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1005 | "dev": true, 1006 | "requires": { 1007 | "safer-buffer": ">= 2.1.2 < 3" 1008 | } 1009 | }, 1010 | "ignore": { 1011 | "version": "4.0.6", 1012 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 1013 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 1014 | "dev": true 1015 | }, 1016 | "import-fresh": { 1017 | "version": "3.2.1", 1018 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", 1019 | "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", 1020 | "dev": true, 1021 | "requires": { 1022 | "parent-module": "^1.0.0", 1023 | "resolve-from": "^4.0.0" 1024 | } 1025 | }, 1026 | "imurmurhash": { 1027 | "version": "0.1.4", 1028 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1029 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1030 | "dev": true 1031 | }, 1032 | "inflight": { 1033 | "version": "1.0.6", 1034 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1035 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1036 | "dev": true, 1037 | "requires": { 1038 | "once": "^1.3.0", 1039 | "wrappy": "1" 1040 | } 1041 | }, 1042 | "inherits": { 1043 | "version": "2.0.4", 1044 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1045 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1046 | "dev": true 1047 | }, 1048 | "inquirer": { 1049 | "version": "7.1.0", 1050 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", 1051 | "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", 1052 | "dev": true, 1053 | "requires": { 1054 | "ansi-escapes": "^4.2.1", 1055 | "chalk": "^3.0.0", 1056 | "cli-cursor": "^3.1.0", 1057 | "cli-width": "^2.0.0", 1058 | "external-editor": "^3.0.3", 1059 | "figures": "^3.0.0", 1060 | "lodash": "^4.17.15", 1061 | "mute-stream": "0.0.8", 1062 | "run-async": "^2.4.0", 1063 | "rxjs": "^6.5.3", 1064 | "string-width": "^4.1.0", 1065 | "strip-ansi": "^6.0.0", 1066 | "through": "^2.3.6" 1067 | }, 1068 | "dependencies": { 1069 | "ansi-regex": { 1070 | "version": "5.0.0", 1071 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 1072 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 1073 | "dev": true 1074 | }, 1075 | "ansi-styles": { 1076 | "version": "4.2.1", 1077 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", 1078 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", 1079 | "dev": true, 1080 | "requires": { 1081 | "@types/color-name": "^1.1.1", 1082 | "color-convert": "^2.0.1" 1083 | } 1084 | }, 1085 | "chalk": { 1086 | "version": "3.0.0", 1087 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 1088 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 1089 | "dev": true, 1090 | "requires": { 1091 | "ansi-styles": "^4.1.0", 1092 | "supports-color": "^7.1.0" 1093 | } 1094 | }, 1095 | "color-convert": { 1096 | "version": "2.0.1", 1097 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1098 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1099 | "dev": true, 1100 | "requires": { 1101 | "color-name": "~1.1.4" 1102 | } 1103 | }, 1104 | "color-name": { 1105 | "version": "1.1.4", 1106 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1107 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1108 | "dev": true 1109 | }, 1110 | "has-flag": { 1111 | "version": "4.0.0", 1112 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1113 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1114 | "dev": true 1115 | }, 1116 | "strip-ansi": { 1117 | "version": "6.0.0", 1118 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1119 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1120 | "dev": true, 1121 | "requires": { 1122 | "ansi-regex": "^5.0.0" 1123 | } 1124 | }, 1125 | "supports-color": { 1126 | "version": "7.1.0", 1127 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", 1128 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", 1129 | "dev": true, 1130 | "requires": { 1131 | "has-flag": "^4.0.0" 1132 | } 1133 | } 1134 | } 1135 | }, 1136 | "is-arguments": { 1137 | "version": "1.0.4", 1138 | "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", 1139 | "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", 1140 | "dev": true 1141 | }, 1142 | "is-buffer": { 1143 | "version": "1.1.6", 1144 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 1145 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 1146 | "dev": true 1147 | }, 1148 | "is-callable": { 1149 | "version": "1.1.5", 1150 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", 1151 | "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", 1152 | "dev": true 1153 | }, 1154 | "is-date-object": { 1155 | "version": "1.0.2", 1156 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 1157 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", 1158 | "dev": true 1159 | }, 1160 | "is-extglob": { 1161 | "version": "2.1.1", 1162 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1163 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1164 | "dev": true 1165 | }, 1166 | "is-fullwidth-code-point": { 1167 | "version": "3.0.0", 1168 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1169 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1170 | "dev": true 1171 | }, 1172 | "is-glob": { 1173 | "version": "4.0.1", 1174 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1175 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1176 | "dev": true, 1177 | "requires": { 1178 | "is-extglob": "^2.1.1" 1179 | } 1180 | }, 1181 | "is-regex": { 1182 | "version": "1.0.5", 1183 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", 1184 | "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", 1185 | "dev": true, 1186 | "requires": { 1187 | "has": "^1.0.3" 1188 | } 1189 | }, 1190 | "is-symbol": { 1191 | "version": "1.0.3", 1192 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 1193 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 1194 | "dev": true, 1195 | "requires": { 1196 | "has-symbols": "^1.0.1" 1197 | } 1198 | }, 1199 | "is-typedarray": { 1200 | "version": "1.0.0", 1201 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1202 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 1203 | "dev": true 1204 | }, 1205 | "isexe": { 1206 | "version": "2.0.0", 1207 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1208 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1209 | "dev": true 1210 | }, 1211 | "isstream": { 1212 | "version": "0.1.2", 1213 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1214 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 1215 | "dev": true 1216 | }, 1217 | "js-tokens": { 1218 | "version": "4.0.0", 1219 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1220 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1221 | "dev": true 1222 | }, 1223 | "js-yaml": { 1224 | "version": "3.13.1", 1225 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 1226 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 1227 | "dev": true, 1228 | "requires": { 1229 | "argparse": "^1.0.7", 1230 | "esprima": "^4.0.0" 1231 | } 1232 | }, 1233 | "jsbn": { 1234 | "version": "0.1.1", 1235 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1236 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 1237 | "dev": true 1238 | }, 1239 | "jsdom": { 1240 | "version": "9.12.0", 1241 | "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", 1242 | "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", 1243 | "dev": true, 1244 | "requires": { 1245 | "abab": "^1.0.3", 1246 | "acorn": "^4.0.4", 1247 | "acorn-globals": "^3.1.0", 1248 | "array-equal": "^1.0.0", 1249 | "content-type-parser": "^1.0.1", 1250 | "cssom": ">= 0.3.2 < 0.4.0", 1251 | "cssstyle": ">= 0.2.37 < 0.3.0", 1252 | "escodegen": "^1.6.1", 1253 | "html-encoding-sniffer": "^1.0.1", 1254 | "nwmatcher": ">= 1.3.9 < 2.0.0", 1255 | "parse5": "^1.5.1", 1256 | "request": "^2.79.0", 1257 | "sax": "^1.2.1", 1258 | "symbol-tree": "^3.2.1", 1259 | "tough-cookie": "^2.3.2", 1260 | "webidl-conversions": "^4.0.0", 1261 | "whatwg-encoding": "^1.0.1", 1262 | "whatwg-url": "^4.3.0", 1263 | "xml-name-validator": "^2.0.1" 1264 | }, 1265 | "dependencies": { 1266 | "acorn": { 1267 | "version": "4.0.13", 1268 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", 1269 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", 1270 | "dev": true 1271 | } 1272 | } 1273 | }, 1274 | "json-schema": { 1275 | "version": "0.2.3", 1276 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1277 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 1278 | "dev": true 1279 | }, 1280 | "json-schema-traverse": { 1281 | "version": "0.4.1", 1282 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1283 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1284 | "dev": true 1285 | }, 1286 | "json-stable-stringify-without-jsonify": { 1287 | "version": "1.0.1", 1288 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1289 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1290 | "dev": true 1291 | }, 1292 | "json-stringify-safe": { 1293 | "version": "5.0.1", 1294 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1295 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 1296 | "dev": true 1297 | }, 1298 | "jsprim": { 1299 | "version": "1.4.1", 1300 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 1301 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 1302 | "dev": true, 1303 | "requires": { 1304 | "assert-plus": "1.0.0", 1305 | "extsprintf": "1.3.0", 1306 | "json-schema": "0.2.3", 1307 | "verror": "1.10.0" 1308 | } 1309 | }, 1310 | "kind-of": { 1311 | "version": "3.2.2", 1312 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1313 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1314 | "dev": true, 1315 | "requires": { 1316 | "is-buffer": "^1.1.5" 1317 | } 1318 | }, 1319 | "lazy-cache": { 1320 | "version": "1.0.4", 1321 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", 1322 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", 1323 | "dev": true 1324 | }, 1325 | "levn": { 1326 | "version": "0.3.0", 1327 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 1328 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 1329 | "dev": true, 1330 | "requires": { 1331 | "prelude-ls": "~1.1.2", 1332 | "type-check": "~0.3.2" 1333 | } 1334 | }, 1335 | "lodash": { 1336 | "version": "4.17.15", 1337 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", 1338 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", 1339 | "dev": true 1340 | }, 1341 | "longest": { 1342 | "version": "1.0.1", 1343 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", 1344 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", 1345 | "dev": true 1346 | }, 1347 | "mime-db": { 1348 | "version": "1.44.0", 1349 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 1350 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", 1351 | "dev": true 1352 | }, 1353 | "mime-types": { 1354 | "version": "2.1.27", 1355 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 1356 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 1357 | "dev": true, 1358 | "requires": { 1359 | "mime-db": "1.44.0" 1360 | } 1361 | }, 1362 | "mimic-fn": { 1363 | "version": "2.1.0", 1364 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1365 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1366 | "dev": true 1367 | }, 1368 | "minimatch": { 1369 | "version": "3.0.4", 1370 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1371 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1372 | "dev": true, 1373 | "requires": { 1374 | "brace-expansion": "^1.1.7" 1375 | } 1376 | }, 1377 | "minimist": { 1378 | "version": "1.2.5", 1379 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1380 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1381 | "dev": true 1382 | }, 1383 | "mkdirp": { 1384 | "version": "0.5.5", 1385 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1386 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1387 | "dev": true, 1388 | "requires": { 1389 | "minimist": "^1.2.5" 1390 | } 1391 | }, 1392 | "ms": { 1393 | "version": "2.1.2", 1394 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1395 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1396 | "dev": true 1397 | }, 1398 | "mute-stream": { 1399 | "version": "0.0.8", 1400 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 1401 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", 1402 | "dev": true 1403 | }, 1404 | "natural-compare": { 1405 | "version": "1.4.0", 1406 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1407 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1408 | "dev": true 1409 | }, 1410 | "nwmatcher": { 1411 | "version": "1.4.4", 1412 | "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", 1413 | "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", 1414 | "dev": true 1415 | }, 1416 | "oauth-sign": { 1417 | "version": "0.9.0", 1418 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 1419 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", 1420 | "dev": true 1421 | }, 1422 | "object-inspect": { 1423 | "version": "1.7.0", 1424 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", 1425 | "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", 1426 | "dev": true 1427 | }, 1428 | "object-is": { 1429 | "version": "1.1.2", 1430 | "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", 1431 | "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", 1432 | "dev": true, 1433 | "requires": { 1434 | "define-properties": "^1.1.3", 1435 | "es-abstract": "^1.17.5" 1436 | } 1437 | }, 1438 | "object-keys": { 1439 | "version": "1.1.1", 1440 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1441 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1442 | "dev": true 1443 | }, 1444 | "object.assign": { 1445 | "version": "4.1.0", 1446 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 1447 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 1448 | "dev": true, 1449 | "requires": { 1450 | "define-properties": "^1.1.2", 1451 | "function-bind": "^1.1.1", 1452 | "has-symbols": "^1.0.0", 1453 | "object-keys": "^1.0.11" 1454 | } 1455 | }, 1456 | "once": { 1457 | "version": "1.4.0", 1458 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1459 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1460 | "dev": true, 1461 | "requires": { 1462 | "wrappy": "1" 1463 | } 1464 | }, 1465 | "onetime": { 1466 | "version": "5.1.0", 1467 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", 1468 | "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", 1469 | "dev": true, 1470 | "requires": { 1471 | "mimic-fn": "^2.1.0" 1472 | } 1473 | }, 1474 | "optionator": { 1475 | "version": "0.8.3", 1476 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 1477 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 1478 | "dev": true, 1479 | "requires": { 1480 | "deep-is": "~0.1.3", 1481 | "fast-levenshtein": "~2.0.6", 1482 | "levn": "~0.3.0", 1483 | "prelude-ls": "~1.1.2", 1484 | "type-check": "~0.3.2", 1485 | "word-wrap": "~1.2.3" 1486 | } 1487 | }, 1488 | "os-tmpdir": { 1489 | "version": "1.0.2", 1490 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1491 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 1492 | "dev": true 1493 | }, 1494 | "parent-module": { 1495 | "version": "1.0.1", 1496 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1497 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1498 | "dev": true, 1499 | "requires": { 1500 | "callsites": "^3.0.0" 1501 | } 1502 | }, 1503 | "parse5": { 1504 | "version": "1.5.1", 1505 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", 1506 | "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", 1507 | "dev": true 1508 | }, 1509 | "path-is-absolute": { 1510 | "version": "1.0.1", 1511 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1512 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1513 | "dev": true 1514 | }, 1515 | "path-key": { 1516 | "version": "3.1.1", 1517 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1518 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1519 | "dev": true 1520 | }, 1521 | "path-parse": { 1522 | "version": "1.0.6", 1523 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1524 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 1525 | "dev": true 1526 | }, 1527 | "performance-now": { 1528 | "version": "2.1.0", 1529 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1530 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", 1531 | "dev": true 1532 | }, 1533 | "prelude-ls": { 1534 | "version": "1.1.2", 1535 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1536 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 1537 | "dev": true 1538 | }, 1539 | "progress": { 1540 | "version": "2.0.3", 1541 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1542 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1543 | "dev": true 1544 | }, 1545 | "psl": { 1546 | "version": "1.8.0", 1547 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", 1548 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", 1549 | "dev": true 1550 | }, 1551 | "punycode": { 1552 | "version": "2.1.1", 1553 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1554 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1555 | "dev": true 1556 | }, 1557 | "qs": { 1558 | "version": "6.5.2", 1559 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 1560 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 1561 | "dev": true 1562 | }, 1563 | "regexp.prototype.flags": { 1564 | "version": "1.3.0", 1565 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", 1566 | "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", 1567 | "dev": true, 1568 | "requires": { 1569 | "define-properties": "^1.1.3", 1570 | "es-abstract": "^1.17.0-next.1" 1571 | } 1572 | }, 1573 | "regexpp": { 1574 | "version": "3.1.0", 1575 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", 1576 | "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", 1577 | "dev": true 1578 | }, 1579 | "repeat-string": { 1580 | "version": "1.6.1", 1581 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 1582 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 1583 | "dev": true 1584 | }, 1585 | "request": { 1586 | "version": "2.88.2", 1587 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 1588 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 1589 | "dev": true, 1590 | "requires": { 1591 | "aws-sign2": "~0.7.0", 1592 | "aws4": "^1.8.0", 1593 | "caseless": "~0.12.0", 1594 | "combined-stream": "~1.0.6", 1595 | "extend": "~3.0.2", 1596 | "forever-agent": "~0.6.1", 1597 | "form-data": "~2.3.2", 1598 | "har-validator": "~5.1.3", 1599 | "http-signature": "~1.2.0", 1600 | "is-typedarray": "~1.0.0", 1601 | "isstream": "~0.1.2", 1602 | "json-stringify-safe": "~5.0.1", 1603 | "mime-types": "~2.1.19", 1604 | "oauth-sign": "~0.9.0", 1605 | "performance-now": "^2.1.0", 1606 | "qs": "~6.5.2", 1607 | "safe-buffer": "^5.1.2", 1608 | "tough-cookie": "~2.5.0", 1609 | "tunnel-agent": "^0.6.0", 1610 | "uuid": "^3.3.2" 1611 | } 1612 | }, 1613 | "resolve-from": { 1614 | "version": "4.0.0", 1615 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1616 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1617 | "dev": true 1618 | }, 1619 | "restore-cursor": { 1620 | "version": "3.1.0", 1621 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 1622 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 1623 | "dev": true, 1624 | "requires": { 1625 | "onetime": "^5.1.0", 1626 | "signal-exit": "^3.0.2" 1627 | } 1628 | }, 1629 | "resumer": { 1630 | "version": "0.0.0", 1631 | "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", 1632 | "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", 1633 | "dev": true, 1634 | "requires": { 1635 | "through": "~2.3.4" 1636 | } 1637 | }, 1638 | "right-align": { 1639 | "version": "0.1.3", 1640 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", 1641 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", 1642 | "dev": true, 1643 | "requires": { 1644 | "align-text": "^0.1.1" 1645 | } 1646 | }, 1647 | "rimraf": { 1648 | "version": "2.6.3", 1649 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 1650 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 1651 | "dev": true, 1652 | "requires": { 1653 | "glob": "^7.1.3" 1654 | } 1655 | }, 1656 | "rollup": { 1657 | "version": "0.27.1", 1658 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.27.1.tgz", 1659 | "integrity": "sha1-c5kxsHhM8AwnS5US0shS5CBVolc=", 1660 | "dev": true, 1661 | "requires": { 1662 | "chalk": "^1.1.1", 1663 | "minimist": "^1.2.0", 1664 | "source-map-support": "^0.4.0" 1665 | } 1666 | }, 1667 | "run-async": { 1668 | "version": "2.4.1", 1669 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", 1670 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", 1671 | "dev": true 1672 | }, 1673 | "rxjs": { 1674 | "version": "6.5.5", 1675 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", 1676 | "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", 1677 | "dev": true, 1678 | "requires": { 1679 | "tslib": "^1.9.0" 1680 | } 1681 | }, 1682 | "safe-buffer": { 1683 | "version": "5.1.2", 1684 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1685 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1686 | "dev": true 1687 | }, 1688 | "safer-buffer": { 1689 | "version": "2.1.2", 1690 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1691 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1692 | "dev": true 1693 | }, 1694 | "sax": { 1695 | "version": "1.2.4", 1696 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 1697 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", 1698 | "dev": true 1699 | }, 1700 | "semver": { 1701 | "version": "7.3.2", 1702 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", 1703 | "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", 1704 | "dev": true 1705 | }, 1706 | "shebang-command": { 1707 | "version": "2.0.0", 1708 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1709 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1710 | "dev": true, 1711 | "requires": { 1712 | "shebang-regex": "^3.0.0" 1713 | } 1714 | }, 1715 | "shebang-regex": { 1716 | "version": "3.0.0", 1717 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1718 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1719 | "dev": true 1720 | }, 1721 | "signal-exit": { 1722 | "version": "3.0.3", 1723 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 1724 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", 1725 | "dev": true 1726 | }, 1727 | "slice-ansi": { 1728 | "version": "2.1.0", 1729 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", 1730 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", 1731 | "dev": true, 1732 | "requires": { 1733 | "ansi-styles": "^3.2.0", 1734 | "astral-regex": "^1.0.0", 1735 | "is-fullwidth-code-point": "^2.0.0" 1736 | }, 1737 | "dependencies": { 1738 | "ansi-styles": { 1739 | "version": "3.2.1", 1740 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1741 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1742 | "dev": true, 1743 | "requires": { 1744 | "color-convert": "^1.9.0" 1745 | } 1746 | }, 1747 | "is-fullwidth-code-point": { 1748 | "version": "2.0.0", 1749 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1750 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1751 | "dev": true 1752 | } 1753 | } 1754 | }, 1755 | "source-map": { 1756 | "version": "0.6.1", 1757 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1758 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1759 | "dev": true, 1760 | "optional": true 1761 | }, 1762 | "source-map-support": { 1763 | "version": "0.4.18", 1764 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", 1765 | "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", 1766 | "dev": true, 1767 | "requires": { 1768 | "source-map": "^0.5.6" 1769 | }, 1770 | "dependencies": { 1771 | "source-map": { 1772 | "version": "0.5.7", 1773 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1774 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 1775 | "dev": true 1776 | } 1777 | } 1778 | }, 1779 | "sprintf-js": { 1780 | "version": "1.0.3", 1781 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1782 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1783 | "dev": true 1784 | }, 1785 | "sshpk": { 1786 | "version": "1.16.1", 1787 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 1788 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 1789 | "dev": true, 1790 | "requires": { 1791 | "asn1": "~0.2.3", 1792 | "assert-plus": "^1.0.0", 1793 | "bcrypt-pbkdf": "^1.0.0", 1794 | "dashdash": "^1.12.0", 1795 | "ecc-jsbn": "~0.1.1", 1796 | "getpass": "^0.1.1", 1797 | "jsbn": "~0.1.0", 1798 | "safer-buffer": "^2.0.2", 1799 | "tweetnacl": "~0.14.0" 1800 | } 1801 | }, 1802 | "string-width": { 1803 | "version": "4.2.0", 1804 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 1805 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 1806 | "dev": true, 1807 | "requires": { 1808 | "emoji-regex": "^8.0.0", 1809 | "is-fullwidth-code-point": "^3.0.0", 1810 | "strip-ansi": "^6.0.0" 1811 | }, 1812 | "dependencies": { 1813 | "ansi-regex": { 1814 | "version": "5.0.0", 1815 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 1816 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 1817 | "dev": true 1818 | }, 1819 | "strip-ansi": { 1820 | "version": "6.0.0", 1821 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1822 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1823 | "dev": true, 1824 | "requires": { 1825 | "ansi-regex": "^5.0.0" 1826 | } 1827 | } 1828 | } 1829 | }, 1830 | "string.prototype.trim": { 1831 | "version": "1.2.1", 1832 | "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz", 1833 | "integrity": "sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw==", 1834 | "dev": true, 1835 | "requires": { 1836 | "define-properties": "^1.1.3", 1837 | "es-abstract": "^1.17.0-next.1", 1838 | "function-bind": "^1.1.1" 1839 | } 1840 | }, 1841 | "string.prototype.trimend": { 1842 | "version": "1.0.1", 1843 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", 1844 | "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", 1845 | "dev": true, 1846 | "requires": { 1847 | "define-properties": "^1.1.3", 1848 | "es-abstract": "^1.17.5" 1849 | } 1850 | }, 1851 | "string.prototype.trimleft": { 1852 | "version": "2.1.2", 1853 | "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", 1854 | "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", 1855 | "dev": true, 1856 | "requires": { 1857 | "define-properties": "^1.1.3", 1858 | "es-abstract": "^1.17.5", 1859 | "string.prototype.trimstart": "^1.0.0" 1860 | } 1861 | }, 1862 | "string.prototype.trimright": { 1863 | "version": "2.1.2", 1864 | "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", 1865 | "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", 1866 | "dev": true, 1867 | "requires": { 1868 | "define-properties": "^1.1.3", 1869 | "es-abstract": "^1.17.5", 1870 | "string.prototype.trimend": "^1.0.0" 1871 | } 1872 | }, 1873 | "string.prototype.trimstart": { 1874 | "version": "1.0.1", 1875 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", 1876 | "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", 1877 | "dev": true, 1878 | "requires": { 1879 | "define-properties": "^1.1.3", 1880 | "es-abstract": "^1.17.5" 1881 | } 1882 | }, 1883 | "strip-ansi": { 1884 | "version": "3.0.1", 1885 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1886 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1887 | "dev": true, 1888 | "requires": { 1889 | "ansi-regex": "^2.0.0" 1890 | } 1891 | }, 1892 | "strip-json-comments": { 1893 | "version": "3.1.0", 1894 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", 1895 | "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", 1896 | "dev": true 1897 | }, 1898 | "supports-color": { 1899 | "version": "2.0.0", 1900 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1901 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1902 | "dev": true 1903 | }, 1904 | "symbol-tree": { 1905 | "version": "3.2.4", 1906 | "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", 1907 | "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", 1908 | "dev": true 1909 | }, 1910 | "table": { 1911 | "version": "5.4.6", 1912 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", 1913 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", 1914 | "dev": true, 1915 | "requires": { 1916 | "ajv": "^6.10.2", 1917 | "lodash": "^4.17.14", 1918 | "slice-ansi": "^2.1.0", 1919 | "string-width": "^3.0.0" 1920 | }, 1921 | "dependencies": { 1922 | "ansi-regex": { 1923 | "version": "4.1.0", 1924 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 1925 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 1926 | "dev": true 1927 | }, 1928 | "emoji-regex": { 1929 | "version": "7.0.3", 1930 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 1931 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 1932 | "dev": true 1933 | }, 1934 | "is-fullwidth-code-point": { 1935 | "version": "2.0.0", 1936 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1937 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1938 | "dev": true 1939 | }, 1940 | "string-width": { 1941 | "version": "3.1.0", 1942 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1943 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1944 | "dev": true, 1945 | "requires": { 1946 | "emoji-regex": "^7.0.1", 1947 | "is-fullwidth-code-point": "^2.0.0", 1948 | "strip-ansi": "^5.1.0" 1949 | } 1950 | }, 1951 | "strip-ansi": { 1952 | "version": "5.2.0", 1953 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1954 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1955 | "dev": true, 1956 | "requires": { 1957 | "ansi-regex": "^4.1.0" 1958 | } 1959 | } 1960 | } 1961 | }, 1962 | "tape": { 1963 | "version": "4.13.2", 1964 | "resolved": "https://registry.npmjs.org/tape/-/tape-4.13.2.tgz", 1965 | "integrity": "sha512-waWwC/OqYVE9TS6r1IynlP2sEdk4Lfo6jazlgkuNkPTHIbuG2BTABIaKdlQWwPeB6Oo4ksZ1j33Yt0NTOAlYMQ==", 1966 | "dev": true, 1967 | "requires": { 1968 | "deep-equal": "~1.1.1", 1969 | "defined": "~1.0.0", 1970 | "dotignore": "~0.1.2", 1971 | "for-each": "~0.3.3", 1972 | "function-bind": "~1.1.1", 1973 | "glob": "~7.1.6", 1974 | "has": "~1.0.3", 1975 | "inherits": "~2.0.4", 1976 | "is-regex": "~1.0.5", 1977 | "minimist": "~1.2.0", 1978 | "object-inspect": "~1.7.0", 1979 | "resolve": "~1.15.1", 1980 | "resumer": "~0.0.0", 1981 | "string.prototype.trim": "~1.2.1", 1982 | "through": "~2.3.8" 1983 | }, 1984 | "dependencies": { 1985 | "resolve": { 1986 | "version": "1.15.1", 1987 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", 1988 | "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", 1989 | "dev": true, 1990 | "requires": { 1991 | "path-parse": "^1.0.6" 1992 | } 1993 | } 1994 | } 1995 | }, 1996 | "text-table": { 1997 | "version": "0.2.0", 1998 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1999 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 2000 | "dev": true 2001 | }, 2002 | "through": { 2003 | "version": "2.3.8", 2004 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2005 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 2006 | "dev": true 2007 | }, 2008 | "tmp": { 2009 | "version": "0.0.33", 2010 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 2011 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 2012 | "dev": true, 2013 | "requires": { 2014 | "os-tmpdir": "~1.0.2" 2015 | } 2016 | }, 2017 | "tough-cookie": { 2018 | "version": "2.5.0", 2019 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 2020 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 2021 | "dev": true, 2022 | "requires": { 2023 | "psl": "^1.1.28", 2024 | "punycode": "^2.1.1" 2025 | } 2026 | }, 2027 | "tr46": { 2028 | "version": "0.0.3", 2029 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 2030 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", 2031 | "dev": true 2032 | }, 2033 | "tslib": { 2034 | "version": "1.12.0", 2035 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.12.0.tgz", 2036 | "integrity": "sha512-5rxCQkP0kytf4H1T4xz1imjxaUUPMvc5aWp0rJ/VMIN7ClRiH1FwFvBt8wOeMasp/epeUnmSW6CixSIePtiLqA==", 2037 | "dev": true 2038 | }, 2039 | "tunnel-agent": { 2040 | "version": "0.6.0", 2041 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 2042 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 2043 | "dev": true, 2044 | "requires": { 2045 | "safe-buffer": "^5.0.1" 2046 | } 2047 | }, 2048 | "tweetnacl": { 2049 | "version": "0.14.5", 2050 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 2051 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 2052 | "dev": true 2053 | }, 2054 | "type-check": { 2055 | "version": "0.3.2", 2056 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 2057 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 2058 | "dev": true, 2059 | "requires": { 2060 | "prelude-ls": "~1.1.2" 2061 | } 2062 | }, 2063 | "type-fest": { 2064 | "version": "0.8.1", 2065 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 2066 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 2067 | "dev": true 2068 | }, 2069 | "uglify-js": { 2070 | "version": "2.8.29", 2071 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", 2072 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", 2073 | "dev": true, 2074 | "requires": { 2075 | "source-map": "~0.5.1", 2076 | "uglify-to-browserify": "~1.0.0", 2077 | "yargs": "~3.10.0" 2078 | }, 2079 | "dependencies": { 2080 | "source-map": { 2081 | "version": "0.5.7", 2082 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2083 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 2084 | "dev": true 2085 | } 2086 | } 2087 | }, 2088 | "uglify-to-browserify": { 2089 | "version": "1.0.2", 2090 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", 2091 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", 2092 | "dev": true, 2093 | "optional": true 2094 | }, 2095 | "uri-js": { 2096 | "version": "4.2.2", 2097 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 2098 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 2099 | "dev": true, 2100 | "requires": { 2101 | "punycode": "^2.1.0" 2102 | } 2103 | }, 2104 | "uuid": { 2105 | "version": "3.4.0", 2106 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 2107 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", 2108 | "dev": true 2109 | }, 2110 | "v8-compile-cache": { 2111 | "version": "2.1.0", 2112 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", 2113 | "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", 2114 | "dev": true 2115 | }, 2116 | "verror": { 2117 | "version": "1.10.0", 2118 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 2119 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 2120 | "dev": true, 2121 | "requires": { 2122 | "assert-plus": "^1.0.0", 2123 | "core-util-is": "1.0.2", 2124 | "extsprintf": "^1.2.0" 2125 | } 2126 | }, 2127 | "webidl-conversions": { 2128 | "version": "4.0.2", 2129 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", 2130 | "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", 2131 | "dev": true 2132 | }, 2133 | "whatwg-encoding": { 2134 | "version": "1.0.5", 2135 | "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", 2136 | "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", 2137 | "dev": true, 2138 | "requires": { 2139 | "iconv-lite": "0.4.24" 2140 | } 2141 | }, 2142 | "whatwg-url": { 2143 | "version": "4.8.0", 2144 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.8.0.tgz", 2145 | "integrity": "sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA=", 2146 | "dev": true, 2147 | "requires": { 2148 | "tr46": "~0.0.3", 2149 | "webidl-conversions": "^3.0.0" 2150 | }, 2151 | "dependencies": { 2152 | "webidl-conversions": { 2153 | "version": "3.0.1", 2154 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 2155 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", 2156 | "dev": true 2157 | } 2158 | } 2159 | }, 2160 | "which": { 2161 | "version": "2.0.2", 2162 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2163 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2164 | "dev": true, 2165 | "requires": { 2166 | "isexe": "^2.0.0" 2167 | } 2168 | }, 2169 | "window-size": { 2170 | "version": "0.1.0", 2171 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", 2172 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", 2173 | "dev": true 2174 | }, 2175 | "word-wrap": { 2176 | "version": "1.2.3", 2177 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 2178 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 2179 | "dev": true 2180 | }, 2181 | "wordwrap": { 2182 | "version": "0.0.2", 2183 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", 2184 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", 2185 | "dev": true 2186 | }, 2187 | "wrappy": { 2188 | "version": "1.0.2", 2189 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2190 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2191 | "dev": true 2192 | }, 2193 | "write": { 2194 | "version": "1.0.3", 2195 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", 2196 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", 2197 | "dev": true, 2198 | "requires": { 2199 | "mkdirp": "^0.5.1" 2200 | } 2201 | }, 2202 | "xml-name-validator": { 2203 | "version": "2.0.1", 2204 | "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", 2205 | "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", 2206 | "dev": true 2207 | }, 2208 | "yargs": { 2209 | "version": "3.10.0", 2210 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", 2211 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", 2212 | "dev": true, 2213 | "requires": { 2214 | "camelcase": "^1.0.2", 2215 | "cliui": "^2.1.0", 2216 | "decamelize": "^1.0.0", 2217 | "window-size": "0.1.0" 2218 | } 2219 | } 2220 | } 2221 | } 2222 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "d3-textwrap", 3 | "version": "3.0.0", 4 | "author": "Vijith Assar", 5 | "description": "wrap long lines of text using foreignObject tags or tspans as appropriate, depending on browser support", 6 | "keywords": [ 7 | "d3", 8 | "d3-module", 9 | "text" 10 | ], 11 | "license": "MIT", 12 | "main": "build/d3-textwrap.js", 13 | "jsnext:main": "index", 14 | "homepage": "https://github.com/vijithassar/d3-textwrap", 15 | "repository": { 16 | "type": "git", 17 | "url": "https://github.com/vijithassar/d3-textwrap.git" 18 | }, 19 | "scripts": { 20 | "lint": "eslint --config eslintrc.json src/*.js && eslint --config eslintrc.json test/*.js", 21 | "cleanup": "rm -rf build", 22 | "build": "npm run cleanup && mkdir build && rollup -g d3-selection:d3,d3-textwrap:d3 -f umd -n d3 -o build/d3-textwrap.js -- index.js", 23 | "pretest": "npm run build", 24 | "test": "tape 'test/**/*-test.js'", 25 | "minify": "uglifyjs build/d3-textwrap.js -c -m -o build/d3-textwrap.min.js", 26 | "archive": "zip -j build/d3-textwrap.zip -- LICENSE README.md build/d3-textwrap.js build/d3-textwrap.min.js", 27 | "prepare": "npm run test && npm run build && npm run minify", 28 | "postpublish": "npm run archive" 29 | }, 30 | "dependencies": { 31 | "d3-selection": "^1.0.2" 32 | }, 33 | "devDependencies": { 34 | "eslint": "^7.0.0", 35 | "jsdom": "^9.5.0", 36 | "rollup": "0.27", 37 | "tape": "4", 38 | "uglify-js": "^2.6" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/textwrap.js: -------------------------------------------------------------------------------- 1 | import { selection, select } from 'd3-selection'; 2 | 3 | var method, 4 | verify_bounds, 5 | resolve_bounds, 6 | resolve_padding, 7 | pad, 8 | dimensions, 9 | wrap, 10 | textwrap; 11 | 12 | // test for foreignObject support and determine wrapping strategy 13 | method = typeof SVGForeignObjectElement === 'undefined' ? 'tspans' : 'foreignobject'; 14 | 15 | // accept multiple input types as boundaries 16 | verify_bounds = function(bounds) { 17 | var bounds_object, 18 | bounds_function; 19 | bounds_function = typeof bounds === 'function'; 20 | if (typeof bounds === 'object' && ! bounds.nodeType) { 21 | if (! bounds.height || ! bounds.width) { 22 | console.error('text wrapping bounds must specify height and width'); 23 | return false; 24 | } else { 25 | return true; 26 | } 27 | } 28 | // convert a selection to bounds 29 | if ( 30 | bounds instanceof selection || 31 | bounds.nodeType || 32 | bounds_function || 33 | bounds_object 34 | ) { 35 | return true; 36 | // use input as bounds directly 37 | } else { 38 | console.error('invalid bounds specified for text wrapping'); 39 | return false; 40 | } 41 | }; 42 | 43 | resolve_bounds = function(bounds) { 44 | var properties, 45 | dimensions, 46 | result, 47 | i; 48 | properties = ['height', 'width']; 49 | if (typeof bounds === 'function') { 50 | dimensions = bounds(); 51 | } else if (bounds.nodeType) { 52 | dimensions = bounds.getBoundingClientRect(); 53 | } else if (typeof bounds === 'object') { 54 | dimensions = bounds; 55 | } 56 | result = Object.create(null); 57 | for (i = 0; i < properties.length; i++) { 58 | result[properties[i]] = dimensions[properties[i]]; 59 | } 60 | return result; 61 | }; 62 | 63 | resolve_padding = function(padding) { 64 | var result; 65 | if (typeof padding === 'function') { 66 | result = padding(); 67 | } else if (typeof padding === 'number') { 68 | result = padding; 69 | } else if (typeof padding === 'undefined') { 70 | result = 0; 71 | } 72 | if (typeof result !== 'number') { 73 | console.error('padding could not be converted into a number'); 74 | } else { 75 | return result; 76 | } 77 | }; 78 | 79 | pad = function(dimensions, padding) { 80 | var padded; 81 | padded = { 82 | height: dimensions.height - padding * 2, 83 | width: dimensions.width - padding * 2 84 | }; 85 | return padded; 86 | }; 87 | 88 | dimensions = function(bounds, padding) { 89 | var padded; 90 | padded = pad(resolve_bounds(bounds), resolve_padding(padding)); 91 | return padded; 92 | }; 93 | 94 | 95 | wrap = {}; 96 | 97 | // wrap text using foreignobject html 98 | wrap.foreignobject = function(text, dimensions, padding) { 99 | var content, 100 | parent, 101 | foreignobject, 102 | div; 103 | // extract our desired content from the single text element 104 | content = text.text(); 105 | // remove the text node and replace with a foreign object 106 | parent = select(text.node().parentNode); 107 | text.remove(); 108 | foreignobject = parent.append('foreignObject'); 109 | // add foreign object and set dimensions, position, etc 110 | foreignobject 111 | .attr('requiredFeatures', 'http://www.w3.org/TR/SVG11/feature#Extensibility') 112 | .attr('width', dimensions.width) 113 | .attr('height', dimensions.height); 114 | if (typeof padding === 'number') { 115 | foreignobject 116 | .attr('x', +text.attr('x') + padding) 117 | .attr('y', +text.attr('y') + padding); 118 | } 119 | // insert an HTML div 120 | div = foreignobject 121 | .append('xhtml:div'); 122 | // set div to same dimensions as foreign object 123 | div 124 | .style('height', dimensions.height) 125 | .style('width', dimensions.width) 126 | // insert text content 127 | .html(content); 128 | return div; 129 | }; 130 | 131 | // wrap text using tspans 132 | wrap.tspans = function(text, dimensions, padding) { 133 | var pieces, 134 | piece, 135 | line_width, 136 | x_offset, 137 | tspan, 138 | previous_content; 139 | pieces = text.text().split(' ').reverse(); 140 | text.text(''); 141 | tspan = text.append('tspan'); 142 | tspan 143 | .attr('dx', 0) 144 | .attr('dy', 0); 145 | x_offset = 0; 146 | while (pieces.length > 0) { 147 | piece = pieces.pop(); 148 | tspan.text(tspan.text() + ' ' + piece); 149 | line_width = tspan.node().getComputedTextLength() || 0; 150 | if (line_width > dimensions.width) { 151 | previous_content = tspan.text() 152 | .split(' ') 153 | .slice(0, -1) 154 | .join(' '); 155 | tspan.text(previous_content); 156 | x_offset = tspan.node().getComputedTextLength() * -1; 157 | tspan = text.append('tspan'); 158 | tspan 159 | .attr('dx', x_offset) 160 | .attr('dy', '1em') 161 | .text(piece); 162 | } 163 | } 164 | if (typeof padding === 'number') { 165 | text 166 | .attr('y', +text.attr('y') + padding) 167 | .attr('x', +text.attr('x') + padding); 168 | } 169 | }; 170 | 171 | // factory to generate text wrap functions 172 | textwrap = function() { 173 | // text wrap function instance 174 | var wrapper, 175 | bounds, 176 | padding; 177 | wrapper = function(targets) { 178 | targets.each(function() { 179 | select(this).call(wrap[method], dimensions(bounds, padding), resolve_padding(padding)); 180 | }); 181 | }; 182 | // get or set wrapping boundaries 183 | wrapper.bounds = function(new_bounds) { 184 | if (new_bounds) { 185 | if (verify_bounds(new_bounds)) { 186 | bounds = new_bounds; 187 | return wrapper; 188 | } else { 189 | console.error('invalid text wrapping bounds'); 190 | return false; 191 | } 192 | } else { 193 | return bounds; 194 | } 195 | }; 196 | // get or set padding applied on top of boundaries 197 | wrapper.padding = function(new_padding) { 198 | if (new_padding) { 199 | if (typeof new_padding === 'number' || typeof new_padding === 'function') { 200 | padding = new_padding; 201 | return wrapper; 202 | } else { 203 | console.error('text wrap padding value must be either a number or a function'); 204 | return false; 205 | } 206 | } else { 207 | return padding; 208 | } 209 | }; 210 | // get or set wrapping method 211 | wrapper.method = function(new_method) { 212 | if (new_method) { 213 | method = new_method; 214 | return wrapper; 215 | } else { 216 | return method; 217 | } 218 | }; 219 | return wrapper; 220 | }; 221 | 222 | export default textwrap; 223 | -------------------------------------------------------------------------------- /test/textwrap-test.js: -------------------------------------------------------------------------------- 1 | var tape = require('tape'), 2 | textwrap = require('../').textwrap, 3 | d3 = require('../'), 4 | jsdom = require('jsdom').jsdom; 5 | 6 | tape('textwrap factory exists', function(test) { 7 | test.ok(typeof textwrap === 'function'); 8 | test.end(); 9 | }); 10 | 11 | tape('textwrap factory returns a function', function(test) { 12 | test.ok(typeof textwrap() === 'function'); 13 | test.end(); 14 | }); 15 | 16 | tape('bounds method returns a function', function(test) { 17 | var wrapper; 18 | wrapper = textwrap(); 19 | wrapper.bounds({x: 1, y: 1, height: 1, width: 1}); 20 | test.ok(typeof wrapper === 'function'); 21 | test.end(); 22 | }); 23 | 24 | tape('bounds method works as a getter', function(test) { 25 | var wrapper, 26 | bounds; 27 | wrapper = textwrap(); 28 | bounds = {height: 1, width: 1}; 29 | wrapper.bounds(bounds); 30 | test.ok(wrapper.bounds() === bounds); 31 | test.end(); 32 | }); 33 | 34 | tape('bounds method rejects invalid input', function(test) { 35 | var wrapper; 36 | wrapper = textwrap().bounds({}); 37 | test.ok(wrapper === false); 38 | test.end(); 39 | }); 40 | 41 | tape('bounds method accepts functions', function(test) { 42 | var wrapper, 43 | bounds; 44 | wrapper = textwrap(); 45 | bounds = function() { 46 | var result; 47 | result = { 48 | x: 1, 49 | y: 1, 50 | height: 1, 51 | width: 2 52 | }; 53 | return result; 54 | }; 55 | wrapper.bounds(bounds); 56 | test.ok(wrapper.bounds()().width === 2); 57 | test.end(); 58 | }); 59 | 60 | tape('bounds method accepts nodes', function(test) { 61 | var html, 62 | wrapper; 63 | html = '
'; 64 | jsdom.env(html, function(error, window) { 65 | var selection; 66 | document = global.document = window.document = jsdom(html); 67 | selection = d3.select('div'); 68 | wrapper = textwrap().bounds(selection.node()); 69 | test.ok(!! wrapper.bounds().nodeType); 70 | test.end(); 71 | }); 72 | }); 73 | 74 | tape('padding method returns a function', function(test) { 75 | var wrapper; 76 | wrapper = textwrap(); 77 | wrapper.padding(1); 78 | test.ok(typeof wrapper === 'function'); 79 | test.end(); 80 | }); 81 | 82 | tape('padding method works as a getter', function(test) { 83 | var wrapper, 84 | padding; 85 | wrapper = textwrap(); 86 | padding = 10; 87 | wrapper.padding(padding); 88 | test.ok(wrapper.padding() === padding); 89 | test.end(); 90 | }); --------------------------------------------------------------------------------