├── .eslintrc.json ├── .github └── workflows │ └── test-and-publish.yml ├── .gitignore ├── .npmignore ├── .vscode └── settings.json ├── LICENSE ├── README.md ├── package.json ├── pnpm-lock.yaml ├── src ├── index.ts └── types.ts ├── tests └── index.ts ├── tsconfig.json └── types └── decs.d.ts /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "commonjs": true, 4 | "es2020": true, 5 | "node": true 6 | }, 7 | "parser": "@typescript-eslint/parser", 8 | "extends": [ 9 | "airbnb-base", 10 | "plugin:@typescript-eslint/recommended", 11 | "plugin:import/errors", 12 | "plugin:import/warnings", 13 | "plugin:import/typescript" 14 | ], 15 | "plugins": [ 16 | "@typescript-eslint" 17 | ], 18 | "globals": { 19 | "Atomics": "readonly", 20 | "SharedArrayBuffer": "readonly" 21 | }, 22 | "parserOptions": { 23 | "ecmaVersion": 11, 24 | "sourceType": "module", 25 | "project": "./tsconfig.json" 26 | }, 27 | "rules": { 28 | "@typescript-eslint/no-unused-vars": [ 29 | "warn", 30 | { 31 | "argsIgnorePattern": "^_" 32 | } 33 | ], 34 | "arrow-parens": "warn", 35 | "class-methods-use-this": "off", 36 | "implicit-arrow-linebreak": "warn", 37 | "import/extensions": [ 38 | "error", 39 | "ignorePackages", 40 | { 41 | "js": "never", 42 | "ts": "never" 43 | } 44 | ], 45 | "import/prefer-default-export": "off", 46 | "import/no-extraneous-dependencies": "off", 47 | "indent": [ 48 | "warn", 49 | "tab" 50 | ], 51 | "max-len": [ 52 | "off" 53 | ], 54 | "no-console": "off", 55 | "no-else-return": "warn", 56 | "no-empty": "warn", 57 | "no-param-reassign": [ 58 | "error", 59 | { 60 | "props": false 61 | } 62 | ], 63 | "no-tabs": [ 64 | "warn", 65 | { 66 | "allowIndentationTabs": true 67 | } 68 | ], 69 | "no-trailing-spaces": "warn", 70 | "object-curly-newline": "warn", 71 | "quote-props": "warn", 72 | "quotes": [ 73 | "warn", 74 | "double" 75 | ] 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /.github/workflows/test-and-publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish to NPM every tag (i.e. new version) 2 | 3 | on: 4 | push: 5 | tags: 6 | - '*' 7 | 8 | jobs: 9 | test: 10 | strategy: 11 | matrix: 12 | node-version: [12, 14] 13 | os: [ubuntu-latest, windows-latest, macOS-latest] 14 | tailwindcss-version: ["^1.9.5", "2.0.0-alpha.5"] 15 | runs-on: ${{ matrix.os }} 16 | timeout-minutes: 15 17 | steps: 18 | - uses: actions/checkout@v1 19 | - uses: actions/setup-node@v2-beta 20 | with: 21 | node-version: ${{ matrix.node-version }} 22 | registry-url: https://registry.npmjs.org/ 23 | - uses: pnpm/action-setup@v1.2.0 24 | with: 25 | version: 5.10.x 26 | - run: pnpm install 27 | - run: pnpm uninstall tailwindcss 28 | - run: pnpm install --save tailwindcss@${{ matrix.tailwindcss-version }} 29 | - run: pnpm run test 30 | 31 | publish: 32 | needs: test 33 | strategy: 34 | matrix: 35 | node-version: [14] 36 | os: [ubuntu-latest] 37 | runs-on: ${{ matrix.os }} 38 | timeout-minutes: 15 39 | steps: 40 | - uses: actions/checkout@v1 41 | - uses: actions/setup-node@v2-beta 42 | with: 43 | node-version: ${{ matrix.node-version }} 44 | registry-url: https://registry.npmjs.org/ 45 | - uses: pnpm/action-setup@v1.2.0 46 | with: 47 | version: 5.10.x 48 | - run: pnpm install 49 | - run: npm publish 50 | env: 51 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 52 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .history/ 2 | /dist/ 3 | node_modules/ 4 | 5 | pnpm-debug.log 6 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.codeActionsOnSave": { 3 | "source.fixAll": true 4 | }, 5 | "[javascript]": { 6 | "editor.defaultFormatter": "dbaeumer.vscode-eslint" 7 | }, 8 | "[typescript]": { 9 | "editor.defaultFormatter": "dbaeumer.vscode-eslint" 10 | }, 11 | "eslint.format.enable": true, 12 | "eslint.lintTask.enable": true, 13 | } 14 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2020 Jacob Babich 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🧩 Tailwind CSS Custom Native Utilities 2 | This Tailwind CSS plugin allows you to write configuration for your own custom utility in the `theme` and `variants` section of your config as though it were actually part of the framework. Just define it with a single line in the `plugins` section! 3 | 4 | This should allow you to finally kill off leftover CSS and inline styles that have no accompanying plugin-made or native utility. Although you can replace other [plugins](https://github.com/aniftyco/awesome-tailwindcss#plugins) with this one, it's probably a good idea to use those instead because they're purpose-built and likely to create a better output. 5 | 6 | # 💻 Installation 7 | 8 | ```bash 9 | npm install --save-dev tailwindcss-custom-native 10 | ``` 11 | 12 | # 🛠 Basic usage 13 | 14 | With this Tailwind configuration, 15 | 16 | ```js 17 | module.exports = { 18 | theme: { 19 | // This utility is not native to Tailwind, 20 | mixBlendMode: { 21 | 'screen': 'screen', 22 | 'overlay': 'overlay', 23 | }, 24 | // So we define it here! 25 | customUtilities: { 26 | mixBlendMode: {}, 27 | // There are extra parameters for further customization -- see the advanced usage section 28 | }, 29 | }, 30 | 31 | plugins: [ 32 | require('tailwindcss-custom-native'), 33 | ], 34 | }; 35 | ``` 36 | 37 | this CSS is generated: 38 | 39 | ```css 40 | .mix-blend-mode-screen { 41 | mix-blend-mode: screen; 42 | } 43 | 44 | .mix-blend-mode-overlay { 45 | mix-blend-mode: overlay; 46 | } 47 | ``` 48 | 49 | ### Variants 50 | 51 | When no variants are specified in the `variants` key of your config, no variants will be generated, as you saw above. (If you would prefer for `['responsive']` to be the default, I am open to changing it). 52 | 53 | If you want variants (in the same config as above): 54 | 55 | ```js 56 | module.exports = { 57 | theme: { 58 | mixBlendMode: { 59 | 'screen': 'screen', 60 | 'overlay': 'overlay', 61 | }, 62 | customUtilities: { 63 | mixBlendMode: {}, 64 | }, 65 | }, 66 | 67 | variants: { 68 | // All variants, whether added by plugin or not, are at your disposal 69 | mixBlendMode: ['hover', 'focus'], 70 | }, 71 | 72 | plugins: [ 73 | require('tailwindcss-custom-native'), 74 | ], 75 | }; 76 | ``` 77 | 78 | you get this additional CSS: 79 | 80 | ```css 81 | .hover\:mix-blend-mode-screen:hover { 82 | mix-blend-mode: screen; 83 | } 84 | .hover\:mix-blend-mode-overlay:hover { 85 | mix-blend-mode: overlay; 86 | } 87 | 88 | .focus\:mix-blend-mode-screen:focus { 89 | mix-blend-mode: screen; 90 | } 91 | .focus\:mix-blend-mode-overlay:focus { 92 | mix-blend-mode: overlay; 93 | } 94 | ``` 95 | 96 | # ⚙️ Full configuration 97 | 98 | This plugin expects configuration of the form 99 | 100 | ```js 101 | theme: { 102 | customUtilities: { 103 | key: { property, rename, addUtilitiesOptions }, 104 | // Keep repeating this pattern for more utilities 105 | }, 106 | } 107 | ``` 108 | 109 | Where each parameter means: 110 | 111 | - `key` (required, string) - The name of the key for your custom utility, as you wrote in the `theme` and `variants` section 112 | 113 | - `property` (optional, string) - The CSS property that your utility is for 114 | 115 | When not specified, it defaults to kebab-casing (AKA hyphenating) the `key`. For example, `key: 'animationTimingFunction'` has corresponding `property: 'animation-timing-function'`). 116 | 117 | This parameter allows you to use a `key` that may be shorter than the property name, or completely different from it. 118 | 119 | - `rename` (optional, string) - The prefix before each value name (from `theme[key]`) in the generated classes 120 | 121 | When not specified, it defaults to kebab-casing (AKA hyphenating) the `key`. For example, `key: 'mixBlendMode'` has corresponding `rename: 'mix-blend-mode'`). 122 | 123 | If set to the empty string (`''`), then there is no prefix and each generated class is just the value name. 124 | 125 | - `addUtilitiesOptions` (optional, object) - Extra options to pass to the [`addUtilities`](https://tailwindcss.com/docs/plugins/#adding-utilities) function call. 126 | 127 | As of Tailwind 1.2.0, this just means the [`respectPrefix` and `respectImportant`](https://tailwindcss.com/docs/plugins/#prefix-and-important-preferences) options 128 | 129 | # 📚 Examples 130 | 131 | Specify `rename: ''` so you can write `blur-4` and `grayscale` instead of `filter-blur-4` and `filter-grayscale`: 132 | 133 | ```js 134 | module.exports = { 135 | theme: { 136 | extend: { 137 | customUtilities: { 138 | filter: { rename: "" }, 139 | }, 140 | 141 | filter: { 142 | "grayscale": "grayscale(100%)", 143 | "blur-4": "blur(1rem)", 144 | }, 145 | }, 146 | }, 147 | variants: { 148 | filter: ["responsive"], 149 | }, 150 | plugins: [ 151 | require("tailwindcss-custom-native"), 152 | ], 153 | }; 154 | ``` 155 | 156 | ```css 157 | .grayscale { 158 | filter: grayscale(100%); 159 | } 160 | 161 | .blur-4 { 162 | filter: blur(1rem); 163 | } 164 | 165 | /* Or whatever screen `sm` is in your config */ 166 | @media (min-width: 640px) { 167 | .sm\:grayscale { 168 | filter: grayscale(100%); 169 | } 170 | 171 | .sm\:blur-4 { 172 | filter: blur(1rem); 173 | } 174 | } 175 | 176 | /* ... and so on for the other screens */ 177 | ``` 178 | 179 | Any property named with a `-` in front will have that moved to the front of the generated class name, just like the native [`margin`](https://tailwindcss.com/docs/margin/#negative-values) or [`z-index`](https://tailwindcss.com/docs/z-index/#negative-values) utilities do. 180 | 181 | Let's say you want a section specifically for blur utilities, because they *really* have nothing to do with other kinds of CSS filters. Use `'blur'` as the `key` and `'filter'` as the `property`: 182 | 183 | ```js 184 | module.exports = { 185 | theme: { 186 | extend: { 187 | blur: { 188 | '0': 'blur(0)', 189 | '1': 'blur(0.25rem)', 190 | '2': 'blur(0.5rem)', 191 | // ... as many numbers as you want 192 | }, 193 | 194 | customUtilities: { 195 | blur: { property: 'filter' }, 196 | }, 197 | }, 198 | }, 199 | variants: { 200 | blur: ['active'], 201 | }, 202 | plugins: [ 203 | require('tailwindcss-custom-native'), 204 | ], 205 | }; 206 | ``` 207 | 208 | ```css 209 | .blur-0 { 210 | filter: blur(0); 211 | } 212 | 213 | .blur-1 { 214 | filter: blur(0.25rem); 215 | } 216 | 217 | .blur-2 { 218 | filter: blur(0.5rem); 219 | } 220 | 221 | .active\:blur-0:active { 222 | filter: blur(0); 223 | } 224 | 225 | .active\:blur-1:active { 226 | filter: blur(0.25rem); 227 | } 228 | 229 | .active\:blur-2:active { 230 | filter: blur(0.5rem); 231 | } 232 | 233 | /* and so on for the other numbers you specified */ 234 | ``` 235 | 236 | In practice, you will probably need more than one custom utility, so just add another to the list: 237 | 238 | ```js 239 | module.exports = { 240 | theme: { 241 | customUtilities: { 242 | listStyleImage: { rename: "list" }, 243 | scrollBehavior: { rename: "scroll" }, 244 | }, 245 | 246 | listStyleImage: { 247 | checkmark: "url('/img/checkmark.png')", 248 | }, 249 | 250 | scrollBehavior: { 251 | immediately: "auto", 252 | smoothly: "smooth", 253 | }, 254 | }, 255 | variants: {}, 256 | plugins: [ 257 | require("tailwindcss-custom-native"), 258 | ], 259 | }; 260 | ``` 261 | 262 | ```css 263 | .list-checkmark { 264 | list-style-image: url('/img/checkmark.png'); 265 | } 266 | 267 | .scroll-immediately { 268 | scroll-behavior: auto; 269 | } 270 | 271 | .scroll-smoothly { 272 | scroll-behavior: smooth; 273 | } 274 | ``` 275 | 276 | This plugin can piggyback off of other plugins, especially those that register new variants or are missing relevant utilities. 277 | 278 | In this case, it is used to add some `content` utilities that have `before` and `after` pseudoselector variants, as provided by `tailwindcss-pseudo`: 279 | 280 | ```js 281 | module.exports = { 282 | theme: { 283 | extend: { 284 | content: { 285 | empty: "''", 286 | smile: "'\\1F60A'", 287 | checkmark: "url(/img/checkmark.png)", 288 | }, 289 | 290 | customUtilities: { 291 | content: {}, 292 | }, 293 | 294 | // This is tailwindcss-pseudo config 295 | pseudo: { 296 | before: "before", 297 | after: "after", 298 | }, 299 | }, 300 | }, 301 | variants: { 302 | content: ["before", "after"], 303 | }, 304 | plugins: [ 305 | require("tailwindcss-pseudo")(), 306 | require("tailwindcss-custom-native"), 307 | ], 308 | }; 309 | ``` 310 | 311 | ```css 312 | .content-empty { 313 | content: ""; 314 | } 315 | .content-smile { 316 | content: "\1F60A"; 317 | } 318 | .content-checkmark { 319 | content: url(/img/checkmark.png); 320 | } 321 | 322 | .before\:content-empty::before { 323 | content: ""; 324 | } 325 | .before\:content-smile::before { 326 | content: "\1F60A"; 327 | } 328 | .before\:content-checkmark::before { 329 | content: url(/img/checkmark.png); 330 | } 331 | 332 | .after\:content-empty::after { 333 | content: ""; 334 | } 335 | .after\:content-smile::after { 336 | content: "\1F60A"; 337 | } 338 | .after\:content-checkmark::after { 339 | content: url(/img/checkmark.png); 340 | } 341 | ``` 342 | 343 | ## 😵 Help! I have a question 344 | 345 | [Create an issue](https://github.com/babichjacob/tailwindcss-custom-native/issues/new) and I'll try to help. 346 | 347 | ## 😡 Fix! There is something that needs improvement 348 | 349 | [Create an issue](https://github.com/babichjacob/tailwindcss-custom-native/issues/new) or [pull request](https://github.com/babichjacob/tailwindcss-custom-native/pulls) and I'll try to fix. 350 | 351 | ## 📄 License 352 | 353 | MIT 354 | 355 | --- 356 | 357 | *Repository preview image generated with [GitHub Social Preview](https://social-preview.pqt.dev/)* 358 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tailwindcss-custom-native", 3 | "version": "2.5.0", 4 | "description": "Write your Tailwind CSS configuration file with your own custom utilities as though they were native to the framework", 5 | "author": "Jacob Babich ", 6 | "keywords": [ 7 | "plugin", 8 | "tailwind", 9 | "tailwindcss", 10 | "tailwindcss-plugin", 11 | "custom-utilities", 12 | "custom-native" 13 | ], 14 | "license": "MIT", 15 | "repository": { 16 | "type": "git", 17 | "url": "https://github.com/babichjacob/tailwindcss-custom-native.git" 18 | }, 19 | "bugs": "https://github.com/babichjacob/tailwindcss-custom-native/issues", 20 | "homepage": "https://github.com/babichjacob/tailwindcss-custom-native", 21 | "files": [ 22 | "dist/src/*" 23 | ], 24 | "main": "dist/src/index.js", 25 | "types": "dist/src/index.d.ts", 26 | "scripts": { 27 | "lint": "eslint --fix ./src/**/*.ts ./tests/**/*.ts", 28 | "test": "cross-env TS_NODE_FILES=true mocha --require ts-node/register 'tests/**/*.ts'", 29 | "prepare": "tsc" 30 | }, 31 | "dependencies": { 32 | "lodash": "^4.17.20", 33 | "tailwindcss": "^1.9.6" 34 | }, 35 | "devDependencies": { 36 | "@navith/tailwindcss-plugin-author-types": "^1.8.1-0.1", 37 | "@types/assert": "^1.5.2", 38 | "@types/lodash": "^4.14.164", 39 | "@types/mocha": "^8.0.3", 40 | "@typescript-eslint/eslint-plugin": "^4.6.0", 41 | "@typescript-eslint/parser": "^4.6.0", 42 | "cross-env": "^7.0.2", 43 | "eslint": "^7.12.1", 44 | "eslint-config-airbnb-base": "^14.2.0", 45 | "eslint-plugin-import": "^2.22.1", 46 | "jest-matcher-css": "^1.1.0", 47 | "mocha": "^8.2.0", 48 | "postcss": "^8.1.4", 49 | "tailwindcss-pseudo": "^1.0.3", 50 | "ts-node": "^9.0.0", 51 | "typescript": "^4.0.5" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | dependencies: 2 | lodash: 4.17.20 3 | tailwindcss: 1.9.6 4 | devDependencies: 5 | '@navith/tailwindcss-plugin-author-types': 1.8.1-0.1 6 | '@types/assert': 1.5.2 7 | '@types/lodash': 4.14.164 8 | '@types/mocha': 8.0.3 9 | '@typescript-eslint/eslint-plugin': 4.6.0_5b45abdb13fea4fae68d9888b9d8cc1b 10 | '@typescript-eslint/parser': 4.6.0_eslint@7.12.1+typescript@4.0.5 11 | cross-env: 7.0.2 12 | eslint: 7.12.1 13 | eslint-config-airbnb-base: 14.2.0_3a1fce794bc129e59feb46aec1bbca0d 14 | eslint-plugin-import: 2.22.1_eslint@7.12.1 15 | jest-matcher-css: 1.1.0 16 | mocha: 8.2.0 17 | postcss: 8.1.4 18 | tailwindcss-pseudo: 1.0.3 19 | ts-node: 9.0.0_typescript@4.0.5 20 | typescript: 4.0.5 21 | lockfileVersion: 5.2 22 | packages: 23 | /@babel/code-frame/7.10.4: 24 | dependencies: 25 | '@babel/highlight': 7.10.4 26 | dev: true 27 | resolution: 28 | integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== 29 | /@babel/helper-validator-identifier/7.10.4: 30 | dev: true 31 | resolution: 32 | integrity: sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== 33 | /@babel/highlight/7.10.4: 34 | dependencies: 35 | '@babel/helper-validator-identifier': 7.10.4 36 | chalk: 2.4.2 37 | js-tokens: 4.0.0 38 | dev: true 39 | resolution: 40 | integrity: sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== 41 | /@eslint/eslintrc/0.2.1: 42 | dependencies: 43 | ajv: 6.12.6 44 | debug: 4.2.0 45 | espree: 7.3.0 46 | globals: 12.4.0 47 | ignore: 4.0.6 48 | import-fresh: 3.2.2 49 | js-yaml: 3.14.0 50 | lodash: 4.17.20 51 | minimatch: 3.0.4 52 | strip-json-comments: 3.1.1 53 | dev: true 54 | engines: 55 | node: ^10.12.0 || >=12.0.0 56 | resolution: 57 | integrity: sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA== 58 | /@fullhuman/postcss-purgecss/2.3.0: 59 | dependencies: 60 | postcss: 7.0.32 61 | purgecss: 2.3.0 62 | resolution: 63 | integrity: sha512-qnKm5dIOyPGJ70kPZ5jiz0I9foVOic0j+cOzNDoo8KoCf6HjicIZ99UfO2OmE7vCYSKAAepEwJtNzpiiZAh9xw== 64 | /@navith/tailwindcss-plugin-author-types/1.8.1-0.1: 65 | dependencies: 66 | tailwindcss: 1.9.6 67 | dev: true 68 | resolution: 69 | integrity: sha512-IWbqc/0YKyckvTFVPfZ4xq5i3dKXfml8KlhGL34GOA03+ih/6dNCuHJ3Ex9HM4ybUvKP9X5su3Ht18WAJPrdCA== 70 | /@nodelib/fs.scandir/2.1.3: 71 | dependencies: 72 | '@nodelib/fs.stat': 2.0.3 73 | run-parallel: 1.1.10 74 | dev: true 75 | engines: 76 | node: '>= 8' 77 | resolution: 78 | integrity: sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== 79 | /@nodelib/fs.stat/2.0.3: 80 | dev: true 81 | engines: 82 | node: '>= 8' 83 | resolution: 84 | integrity: sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== 85 | /@nodelib/fs.walk/1.2.4: 86 | dependencies: 87 | '@nodelib/fs.scandir': 2.1.3 88 | fastq: 1.9.0 89 | dev: true 90 | engines: 91 | node: '>= 8' 92 | resolution: 93 | integrity: sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== 94 | /@types/assert/1.5.2: 95 | dev: true 96 | resolution: 97 | integrity: sha512-DLsoZH9z5DLDi6qMbXKqeqlQLK1h3rfR9dK+KX8UJSGHJylvIZPOCQEKr/d/FClPoZE/eHOa3+e270eUJCUTog== 98 | /@types/json-schema/7.0.6: 99 | dev: true 100 | resolution: 101 | integrity: sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== 102 | /@types/json5/0.0.29: 103 | dev: true 104 | resolution: 105 | integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4= 106 | /@types/lodash/4.14.164: 107 | dev: true 108 | resolution: 109 | integrity: sha512-fXCEmONnrtbYUc5014avwBeMdhHHO8YJCkOBflUL9EoJBSKZ1dei+VO74fA7JkTHZ1GvZack2TyIw5U+1lT8jg== 110 | /@types/mocha/8.0.3: 111 | dev: true 112 | resolution: 113 | integrity: sha512-vyxR57nv8NfcU0GZu8EUXZLTbCMupIUwy95LJ6lllN+JRPG25CwMHoB1q5xKh8YKhQnHYRAn4yW2yuHbf/5xgg== 114 | /@typescript-eslint/eslint-plugin/4.6.0_5b45abdb13fea4fae68d9888b9d8cc1b: 115 | dependencies: 116 | '@typescript-eslint/experimental-utils': 4.6.0_eslint@7.12.1+typescript@4.0.5 117 | '@typescript-eslint/parser': 4.6.0_eslint@7.12.1+typescript@4.0.5 118 | '@typescript-eslint/scope-manager': 4.6.0 119 | debug: 4.2.0 120 | eslint: 7.12.1 121 | functional-red-black-tree: 1.0.1 122 | regexpp: 3.1.0 123 | semver: 7.3.2 124 | tsutils: 3.17.1_typescript@4.0.5 125 | typescript: 4.0.5 126 | dev: true 127 | engines: 128 | node: ^10.12.0 || >=12.0.0 129 | peerDependencies: 130 | '@typescript-eslint/parser': ^4.0.0 131 | eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 132 | typescript: '*' 133 | peerDependenciesMeta: 134 | typescript: 135 | optional: true 136 | resolution: 137 | integrity: sha512-1+419X+Ynijytr1iWI+/IcX/kJryc78YNpdaXR1aRO1sU3bC0vZrIAF1tIX7rudVI84W7o7M4zo5p1aVt70fAg== 138 | /@typescript-eslint/experimental-utils/4.6.0_eslint@7.12.1+typescript@4.0.5: 139 | dependencies: 140 | '@types/json-schema': 7.0.6 141 | '@typescript-eslint/scope-manager': 4.6.0 142 | '@typescript-eslint/types': 4.6.0 143 | '@typescript-eslint/typescript-estree': 4.6.0_typescript@4.0.5 144 | eslint: 7.12.1 145 | eslint-scope: 5.1.1 146 | eslint-utils: 2.1.0 147 | dev: true 148 | engines: 149 | node: ^10.12.0 || >=12.0.0 150 | peerDependencies: 151 | eslint: '*' 152 | typescript: '*' 153 | resolution: 154 | integrity: sha512-pnh6Beh2/4xjJVNL+keP49DFHk3orDHHFylSp3WEjtgW3y1U+6l+jNnJrGlbs6qhAz5z96aFmmbUyKhunXKvKw== 155 | /@typescript-eslint/parser/4.6.0_eslint@7.12.1+typescript@4.0.5: 156 | dependencies: 157 | '@typescript-eslint/scope-manager': 4.6.0 158 | '@typescript-eslint/types': 4.6.0 159 | '@typescript-eslint/typescript-estree': 4.6.0_typescript@4.0.5 160 | debug: 4.2.0 161 | eslint: 7.12.1 162 | typescript: 4.0.5 163 | dev: true 164 | engines: 165 | node: ^10.12.0 || >=12.0.0 166 | peerDependencies: 167 | eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 168 | typescript: '*' 169 | peerDependenciesMeta: 170 | typescript: 171 | optional: true 172 | resolution: 173 | integrity: sha512-Dj6NJxBhbdbPSZ5DYsQqpR32MwujF772F2H3VojWU6iT4AqL4BKuoNWOPFCoSZvCcADDvQjDpa6OLDAaiZPz2Q== 174 | /@typescript-eslint/scope-manager/4.6.0: 175 | dependencies: 176 | '@typescript-eslint/types': 4.6.0 177 | '@typescript-eslint/visitor-keys': 4.6.0 178 | dev: true 179 | engines: 180 | node: ^8.10.0 || ^10.13.0 || >=11.10.1 181 | resolution: 182 | integrity: sha512-uZx5KvStXP/lwrMrfQQwDNvh2ppiXzz5TmyTVHb+5TfZ3sUP7U1onlz3pjoWrK9konRyFe1czyxObWTly27Ang== 183 | /@typescript-eslint/types/4.6.0: 184 | dev: true 185 | engines: 186 | node: ^8.10.0 || ^10.13.0 || >=11.10.1 187 | resolution: 188 | integrity: sha512-5FAgjqH68SfFG4UTtIFv+rqYJg0nLjfkjD0iv+5O27a0xEeNZ5rZNDvFGZDizlCD1Ifj7MAbSW2DPMrf0E9zjA== 189 | /@typescript-eslint/typescript-estree/4.6.0_typescript@4.0.5: 190 | dependencies: 191 | '@typescript-eslint/types': 4.6.0 192 | '@typescript-eslint/visitor-keys': 4.6.0 193 | debug: 4.2.0 194 | globby: 11.0.1 195 | is-glob: 4.0.1 196 | lodash: 4.17.20 197 | semver: 7.3.2 198 | tsutils: 3.17.1_typescript@4.0.5 199 | typescript: 4.0.5 200 | dev: true 201 | engines: 202 | node: ^10.12.0 || >=12.0.0 203 | peerDependencies: 204 | typescript: '*' 205 | peerDependenciesMeta: 206 | typescript: 207 | optional: true 208 | resolution: 209 | integrity: sha512-s4Z9qubMrAo/tw0CbN0IN4AtfwuehGXVZM0CHNMdfYMGBDhPdwTEpBrecwhP7dRJu6d9tT9ECYNaWDHvlFSngA== 210 | /@typescript-eslint/visitor-keys/4.6.0: 211 | dependencies: 212 | '@typescript-eslint/types': 4.6.0 213 | eslint-visitor-keys: 2.0.0 214 | dev: true 215 | engines: 216 | node: ^8.10.0 || ^10.13.0 || >=11.10.1 217 | resolution: 218 | integrity: sha512-38Aa9Ztl0XyFPVzmutHXqDMCu15Xx8yKvUo38Gu3GhsuckCh3StPI5t2WIO9LHEsOH7MLmlGfKUisU8eW1Sjhg== 219 | /@ungap/promise-all-settled/1.1.2: 220 | dev: true 221 | resolution: 222 | integrity: sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 223 | /acorn-jsx/5.3.1_acorn@7.4.1: 224 | dependencies: 225 | acorn: 7.4.1 226 | dev: true 227 | peerDependencies: 228 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 229 | resolution: 230 | integrity: sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== 231 | /acorn-node/1.8.2: 232 | dependencies: 233 | acorn: 7.4.1 234 | acorn-walk: 7.2.0 235 | xtend: 4.0.2 236 | resolution: 237 | integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== 238 | /acorn-walk/7.2.0: 239 | engines: 240 | node: '>=0.4.0' 241 | resolution: 242 | integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== 243 | /acorn/7.4.1: 244 | engines: 245 | node: '>=0.4.0' 246 | hasBin: true 247 | resolution: 248 | integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 249 | /ajv/6.12.6: 250 | dependencies: 251 | fast-deep-equal: 3.1.3 252 | fast-json-stable-stringify: 2.1.0 253 | json-schema-traverse: 0.4.1 254 | uri-js: 4.4.0 255 | dev: true 256 | resolution: 257 | integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 258 | /ansi-colors/4.1.1: 259 | dev: true 260 | engines: 261 | node: '>=6' 262 | resolution: 263 | integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 264 | /ansi-regex/3.0.0: 265 | dev: true 266 | engines: 267 | node: '>=4' 268 | resolution: 269 | integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 270 | /ansi-regex/4.1.0: 271 | dev: true 272 | engines: 273 | node: '>=6' 274 | resolution: 275 | integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 276 | /ansi-regex/5.0.0: 277 | dev: true 278 | engines: 279 | node: '>=8' 280 | resolution: 281 | integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 282 | /ansi-styles/3.2.1: 283 | dependencies: 284 | color-convert: 1.9.3 285 | engines: 286 | node: '>=4' 287 | resolution: 288 | integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 289 | /ansi-styles/4.3.0: 290 | dependencies: 291 | color-convert: 2.0.1 292 | engines: 293 | node: '>=8' 294 | resolution: 295 | integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 296 | /anymatch/3.1.1: 297 | dependencies: 298 | normalize-path: 3.0.0 299 | picomatch: 2.2.2 300 | dev: true 301 | engines: 302 | node: '>= 8' 303 | resolution: 304 | integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== 305 | /arg/4.1.3: 306 | dev: true 307 | resolution: 308 | integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 309 | /argparse/1.0.10: 310 | dependencies: 311 | sprintf-js: 1.0.3 312 | dev: true 313 | resolution: 314 | integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 315 | /array-includes/3.1.1: 316 | dependencies: 317 | define-properties: 1.1.3 318 | es-abstract: 1.17.7 319 | is-string: 1.0.5 320 | dev: true 321 | engines: 322 | node: '>= 0.4' 323 | resolution: 324 | integrity: sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== 325 | /array-union/2.1.0: 326 | dev: true 327 | engines: 328 | node: '>=8' 329 | resolution: 330 | integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 331 | /array.prototype.flat/1.2.3: 332 | dependencies: 333 | define-properties: 1.1.3 334 | es-abstract: 1.17.7 335 | dev: true 336 | engines: 337 | node: '>= 0.4' 338 | resolution: 339 | integrity: sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== 340 | /astral-regex/1.0.0: 341 | dev: true 342 | engines: 343 | node: '>=4' 344 | resolution: 345 | integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 346 | /autoprefixer/9.8.6: 347 | dependencies: 348 | browserslist: 4.14.6 349 | caniuse-lite: 1.0.30001154 350 | colorette: 1.2.1 351 | normalize-range: 0.1.2 352 | num2fraction: 1.2.2 353 | postcss: 7.0.35 354 | postcss-value-parser: 4.1.0 355 | hasBin: true 356 | resolution: 357 | integrity: sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== 358 | /balanced-match/1.0.0: 359 | resolution: 360 | integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 361 | /binary-extensions/2.1.0: 362 | dev: true 363 | engines: 364 | node: '>=8' 365 | resolution: 366 | integrity: sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== 367 | /brace-expansion/1.1.11: 368 | dependencies: 369 | balanced-match: 1.0.0 370 | concat-map: 0.0.1 371 | resolution: 372 | integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 373 | /braces/3.0.2: 374 | dependencies: 375 | fill-range: 7.0.1 376 | dev: true 377 | engines: 378 | node: '>=8' 379 | resolution: 380 | integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 381 | /browser-stdout/1.3.1: 382 | dev: true 383 | resolution: 384 | integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 385 | /browserslist/4.14.6: 386 | dependencies: 387 | caniuse-lite: 1.0.30001154 388 | electron-to-chromium: 1.3.585 389 | escalade: 3.1.1 390 | node-releases: 1.1.65 391 | engines: 392 | node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 393 | hasBin: true 394 | resolution: 395 | integrity: sha512-zeFYcUo85ENhc/zxHbiIp0LGzzTrE2Pv2JhxvS7kpUb9Q9D38kUX6Bie7pGutJ/5iF5rOxE7CepAuWD56xJ33A== 396 | /buffer-from/1.1.1: 397 | dev: true 398 | resolution: 399 | integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 400 | /bytes/3.1.0: 401 | engines: 402 | node: '>= 0.8' 403 | resolution: 404 | integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 405 | /call-bind/1.0.0: 406 | dependencies: 407 | function-bind: 1.1.1 408 | get-intrinsic: 1.0.1 409 | dev: true 410 | resolution: 411 | integrity: sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== 412 | /callsites/3.1.0: 413 | dev: true 414 | engines: 415 | node: '>=6' 416 | resolution: 417 | integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 418 | /camelcase-css/2.0.1: 419 | engines: 420 | node: '>= 6' 421 | resolution: 422 | integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== 423 | /camelcase/5.3.1: 424 | dev: true 425 | engines: 426 | node: '>=6' 427 | resolution: 428 | integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 429 | /camelcase/6.2.0: 430 | dev: true 431 | engines: 432 | node: '>=10' 433 | resolution: 434 | integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== 435 | /caniuse-lite/1.0.30001154: 436 | resolution: 437 | integrity: sha512-y9DvdSti8NnYB9Be92ddMZQrcOe04kcQtcxtBx4NkB04+qZ+JUWotnXBJTmxlKudhxNTQ3RRknMwNU2YQl/Org== 438 | /chalk/2.4.2: 439 | dependencies: 440 | ansi-styles: 3.2.1 441 | escape-string-regexp: 1.0.5 442 | supports-color: 5.5.0 443 | engines: 444 | node: '>=4' 445 | resolution: 446 | integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 447 | /chalk/4.1.0: 448 | dependencies: 449 | ansi-styles: 4.3.0 450 | supports-color: 7.2.0 451 | engines: 452 | node: '>=10' 453 | resolution: 454 | integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 455 | /chokidar/3.4.3: 456 | dependencies: 457 | anymatch: 3.1.1 458 | braces: 3.0.2 459 | glob-parent: 5.1.1 460 | is-binary-path: 2.1.0 461 | is-glob: 4.0.1 462 | normalize-path: 3.0.0 463 | readdirp: 3.5.0 464 | dev: true 465 | engines: 466 | node: '>= 8.10.0' 467 | optionalDependencies: 468 | fsevents: 2.1.3 469 | resolution: 470 | integrity: sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== 471 | /cliui/5.0.0: 472 | dependencies: 473 | string-width: 3.1.0 474 | strip-ansi: 5.2.0 475 | wrap-ansi: 5.1.0 476 | dev: true 477 | resolution: 478 | integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 479 | /color-convert/1.9.3: 480 | dependencies: 481 | color-name: 1.1.3 482 | resolution: 483 | integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 484 | /color-convert/2.0.1: 485 | dependencies: 486 | color-name: 1.1.4 487 | engines: 488 | node: '>=7.0.0' 489 | resolution: 490 | integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 491 | /color-name/1.1.3: 492 | resolution: 493 | integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 494 | /color-name/1.1.4: 495 | resolution: 496 | integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 497 | /color-string/1.5.4: 498 | dependencies: 499 | color-name: 1.1.4 500 | simple-swizzle: 0.2.2 501 | resolution: 502 | integrity: sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw== 503 | /color/3.1.3: 504 | dependencies: 505 | color-convert: 1.9.3 506 | color-string: 1.5.4 507 | resolution: 508 | integrity: sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== 509 | /colorette/1.2.1: 510 | resolution: 511 | integrity: sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== 512 | /commander/5.1.0: 513 | engines: 514 | node: '>= 6' 515 | resolution: 516 | integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== 517 | /concat-map/0.0.1: 518 | resolution: 519 | integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 520 | /confusing-browser-globals/1.0.10: 521 | dev: true 522 | resolution: 523 | integrity: sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== 524 | /contains-path/0.1.0: 525 | dev: true 526 | engines: 527 | node: '>=0.10.0' 528 | resolution: 529 | integrity: sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= 530 | /cross-env/7.0.2: 531 | dependencies: 532 | cross-spawn: 7.0.3 533 | dev: true 534 | engines: 535 | node: '>=10.14' 536 | npm: '>=6' 537 | yarn: '>=1' 538 | hasBin: true 539 | resolution: 540 | integrity: sha512-KZP/bMEOJEDCkDQAyRhu3RL2ZO/SUVrxQVI0G3YEQ+OLbRA3c6zgixe8Mq8a/z7+HKlNEjo8oiLUs8iRijY2Rw== 541 | /cross-spawn/7.0.3: 542 | dependencies: 543 | path-key: 3.1.1 544 | shebang-command: 2.0.0 545 | which: 2.0.2 546 | dev: true 547 | engines: 548 | node: '>= 8' 549 | resolution: 550 | integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 551 | /css-unit-converter/1.1.2: 552 | resolution: 553 | integrity: sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA== 554 | /cssesc/3.0.0: 555 | engines: 556 | node: '>=4' 557 | hasBin: true 558 | resolution: 559 | integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== 560 | /debug/2.6.9: 561 | dependencies: 562 | ms: 2.0.0 563 | dev: true 564 | resolution: 565 | integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 566 | /debug/4.2.0: 567 | dependencies: 568 | ms: 2.1.2 569 | dev: true 570 | engines: 571 | node: '>=6.0' 572 | peerDependencies: 573 | supports-color: '*' 574 | peerDependenciesMeta: 575 | supports-color: 576 | optional: true 577 | resolution: 578 | integrity: sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== 579 | /debug/4.2.0_supports-color@7.2.0: 580 | dependencies: 581 | ms: 2.1.2 582 | supports-color: 7.2.0 583 | dev: true 584 | engines: 585 | node: '>=6.0' 586 | peerDependencies: 587 | supports-color: '*' 588 | peerDependenciesMeta: 589 | supports-color: 590 | optional: true 591 | resolution: 592 | integrity: sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== 593 | /decamelize/1.2.0: 594 | dev: true 595 | engines: 596 | node: '>=0.10.0' 597 | resolution: 598 | integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 599 | /decamelize/4.0.0: 600 | dev: true 601 | engines: 602 | node: '>=10' 603 | resolution: 604 | integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 605 | /deep-is/0.1.3: 606 | dev: true 607 | resolution: 608 | integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 609 | /define-properties/1.1.3: 610 | dependencies: 611 | object-keys: 1.1.1 612 | dev: true 613 | engines: 614 | node: '>= 0.4' 615 | resolution: 616 | integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 617 | /defined/1.0.0: 618 | resolution: 619 | integrity: sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= 620 | /detective/5.2.0: 621 | dependencies: 622 | acorn-node: 1.8.2 623 | defined: 1.0.0 624 | minimist: 1.2.5 625 | engines: 626 | node: '>=0.8.0' 627 | hasBin: true 628 | resolution: 629 | integrity: sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== 630 | /diff/4.0.2: 631 | dev: true 632 | engines: 633 | node: '>=0.3.1' 634 | resolution: 635 | integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 636 | /dir-glob/3.0.1: 637 | dependencies: 638 | path-type: 4.0.0 639 | dev: true 640 | engines: 641 | node: '>=8' 642 | resolution: 643 | integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 644 | /doctrine/1.5.0: 645 | dependencies: 646 | esutils: 2.0.3 647 | isarray: 1.0.0 648 | dev: true 649 | engines: 650 | node: '>=0.10.0' 651 | resolution: 652 | integrity: sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= 653 | /doctrine/3.0.0: 654 | dependencies: 655 | esutils: 2.0.3 656 | dev: true 657 | engines: 658 | node: '>=6.0.0' 659 | resolution: 660 | integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 661 | /electron-to-chromium/1.3.585: 662 | resolution: 663 | integrity: sha512-xoeqjMQhgHDZM7FiglJAb2aeOxHZWFruUc3MbAGTgE7GB8rr5fTn1Sdh5THGuQtndU3GuXlu91ZKqRivxoCZ/A== 664 | /emoji-regex/7.0.3: 665 | dev: true 666 | resolution: 667 | integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 668 | /enquirer/2.3.6: 669 | dependencies: 670 | ansi-colors: 4.1.1 671 | dev: true 672 | engines: 673 | node: '>=8.6' 674 | resolution: 675 | integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 676 | /error-ex/1.3.2: 677 | dependencies: 678 | is-arrayish: 0.2.1 679 | dev: true 680 | resolution: 681 | integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 682 | /es-abstract/1.17.7: 683 | dependencies: 684 | es-to-primitive: 1.2.1 685 | function-bind: 1.1.1 686 | has: 1.0.3 687 | has-symbols: 1.0.1 688 | is-callable: 1.2.2 689 | is-regex: 1.1.1 690 | object-inspect: 1.8.0 691 | object-keys: 1.1.1 692 | object.assign: 4.1.2 693 | string.prototype.trimend: 1.0.2 694 | string.prototype.trimstart: 1.0.2 695 | dev: true 696 | engines: 697 | node: '>= 0.4' 698 | resolution: 699 | integrity: sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== 700 | /es-abstract/1.18.0-next.1: 701 | dependencies: 702 | es-to-primitive: 1.2.1 703 | function-bind: 1.1.1 704 | has: 1.0.3 705 | has-symbols: 1.0.1 706 | is-callable: 1.2.2 707 | is-negative-zero: 2.0.0 708 | is-regex: 1.1.1 709 | object-inspect: 1.8.0 710 | object-keys: 1.1.1 711 | object.assign: 4.1.2 712 | string.prototype.trimend: 1.0.2 713 | string.prototype.trimstart: 1.0.2 714 | dev: true 715 | engines: 716 | node: '>= 0.4' 717 | resolution: 718 | integrity: sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== 719 | /es-to-primitive/1.2.1: 720 | dependencies: 721 | is-callable: 1.2.2 722 | is-date-object: 1.0.2 723 | is-symbol: 1.0.3 724 | dev: true 725 | engines: 726 | node: '>= 0.4' 727 | resolution: 728 | integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 729 | /escalade/3.1.1: 730 | engines: 731 | node: '>=6' 732 | resolution: 733 | integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 734 | /escape-string-regexp/1.0.5: 735 | engines: 736 | node: '>=0.8.0' 737 | resolution: 738 | integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 739 | /escape-string-regexp/4.0.0: 740 | dev: true 741 | engines: 742 | node: '>=10' 743 | resolution: 744 | integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 745 | /eslint-config-airbnb-base/14.2.0_3a1fce794bc129e59feb46aec1bbca0d: 746 | dependencies: 747 | confusing-browser-globals: 1.0.10 748 | eslint: 7.12.1 749 | eslint-plugin-import: 2.22.1_eslint@7.12.1 750 | object.assign: 4.1.2 751 | object.entries: 1.1.2 752 | dev: true 753 | engines: 754 | node: '>= 6' 755 | peerDependencies: 756 | eslint: ^5.16.0 || ^6.8.0 || ^7.2.0 757 | eslint-plugin-import: ^2.21.2 758 | resolution: 759 | integrity: sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q== 760 | /eslint-import-resolver-node/0.3.4: 761 | dependencies: 762 | debug: 2.6.9 763 | resolve: 1.18.1 764 | dev: true 765 | resolution: 766 | integrity: sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== 767 | /eslint-module-utils/2.6.0: 768 | dependencies: 769 | debug: 2.6.9 770 | pkg-dir: 2.0.0 771 | dev: true 772 | engines: 773 | node: '>=4' 774 | resolution: 775 | integrity: sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== 776 | /eslint-plugin-import/2.22.1_eslint@7.12.1: 777 | dependencies: 778 | array-includes: 3.1.1 779 | array.prototype.flat: 1.2.3 780 | contains-path: 0.1.0 781 | debug: 2.6.9 782 | doctrine: 1.5.0 783 | eslint: 7.12.1 784 | eslint-import-resolver-node: 0.3.4 785 | eslint-module-utils: 2.6.0 786 | has: 1.0.3 787 | minimatch: 3.0.4 788 | object.values: 1.1.1 789 | read-pkg-up: 2.0.0 790 | resolve: 1.18.1 791 | tsconfig-paths: 3.9.0 792 | dev: true 793 | engines: 794 | node: '>=4' 795 | peerDependencies: 796 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 797 | resolution: 798 | integrity: sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== 799 | /eslint-scope/5.1.1: 800 | dependencies: 801 | esrecurse: 4.3.0 802 | estraverse: 4.3.0 803 | dev: true 804 | engines: 805 | node: '>=8.0.0' 806 | resolution: 807 | integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 808 | /eslint-utils/2.1.0: 809 | dependencies: 810 | eslint-visitor-keys: 1.3.0 811 | dev: true 812 | engines: 813 | node: '>=6' 814 | resolution: 815 | integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== 816 | /eslint-visitor-keys/1.3.0: 817 | dev: true 818 | engines: 819 | node: '>=4' 820 | resolution: 821 | integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 822 | /eslint-visitor-keys/2.0.0: 823 | dev: true 824 | engines: 825 | node: '>=10' 826 | resolution: 827 | integrity: sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== 828 | /eslint/7.12.1: 829 | dependencies: 830 | '@babel/code-frame': 7.10.4 831 | '@eslint/eslintrc': 0.2.1 832 | ajv: 6.12.6 833 | chalk: 4.1.0 834 | cross-spawn: 7.0.3 835 | debug: 4.2.0 836 | doctrine: 3.0.0 837 | enquirer: 2.3.6 838 | eslint-scope: 5.1.1 839 | eslint-utils: 2.1.0 840 | eslint-visitor-keys: 2.0.0 841 | espree: 7.3.0 842 | esquery: 1.3.1 843 | esutils: 2.0.3 844 | file-entry-cache: 5.0.1 845 | functional-red-black-tree: 1.0.1 846 | glob-parent: 5.1.1 847 | globals: 12.4.0 848 | ignore: 4.0.6 849 | import-fresh: 3.2.2 850 | imurmurhash: 0.1.4 851 | is-glob: 4.0.1 852 | js-yaml: 3.14.0 853 | json-stable-stringify-without-jsonify: 1.0.1 854 | levn: 0.4.1 855 | lodash: 4.17.20 856 | minimatch: 3.0.4 857 | natural-compare: 1.4.0 858 | optionator: 0.9.1 859 | progress: 2.0.3 860 | regexpp: 3.1.0 861 | semver: 7.3.2 862 | strip-ansi: 6.0.0 863 | strip-json-comments: 3.1.1 864 | table: 5.4.6 865 | text-table: 0.2.0 866 | v8-compile-cache: 2.2.0 867 | dev: true 868 | engines: 869 | node: ^10.12.0 || >=12.0.0 870 | hasBin: true 871 | resolution: 872 | integrity: sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg== 873 | /espree/7.3.0: 874 | dependencies: 875 | acorn: 7.4.1 876 | acorn-jsx: 5.3.1_acorn@7.4.1 877 | eslint-visitor-keys: 1.3.0 878 | dev: true 879 | engines: 880 | node: ^10.12.0 || >=12.0.0 881 | resolution: 882 | integrity: sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== 883 | /esprima/4.0.1: 884 | dev: true 885 | engines: 886 | node: '>=4' 887 | hasBin: true 888 | resolution: 889 | integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 890 | /esquery/1.3.1: 891 | dependencies: 892 | estraverse: 5.2.0 893 | dev: true 894 | engines: 895 | node: '>=0.10' 896 | resolution: 897 | integrity: sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== 898 | /esrecurse/4.3.0: 899 | dependencies: 900 | estraverse: 5.2.0 901 | dev: true 902 | engines: 903 | node: '>=4.0' 904 | resolution: 905 | integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 906 | /estraverse/4.3.0: 907 | dev: true 908 | engines: 909 | node: '>=4.0' 910 | resolution: 911 | integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 912 | /estraverse/5.2.0: 913 | dev: true 914 | engines: 915 | node: '>=4.0' 916 | resolution: 917 | integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== 918 | /esutils/2.0.3: 919 | dev: true 920 | engines: 921 | node: '>=0.10.0' 922 | resolution: 923 | integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 924 | /fast-deep-equal/3.1.3: 925 | dev: true 926 | resolution: 927 | integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 928 | /fast-glob/3.2.4: 929 | dependencies: 930 | '@nodelib/fs.stat': 2.0.3 931 | '@nodelib/fs.walk': 1.2.4 932 | glob-parent: 5.1.1 933 | merge2: 1.4.1 934 | micromatch: 4.0.2 935 | picomatch: 2.2.2 936 | dev: true 937 | engines: 938 | node: '>=8' 939 | resolution: 940 | integrity: sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== 941 | /fast-json-stable-stringify/2.1.0: 942 | dev: true 943 | resolution: 944 | integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 945 | /fast-levenshtein/2.0.6: 946 | dev: true 947 | resolution: 948 | integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 949 | /fastq/1.9.0: 950 | dependencies: 951 | reusify: 1.0.4 952 | dev: true 953 | resolution: 954 | integrity: sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w== 955 | /file-entry-cache/5.0.1: 956 | dependencies: 957 | flat-cache: 2.0.1 958 | dev: true 959 | engines: 960 | node: '>=4' 961 | resolution: 962 | integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== 963 | /fill-range/7.0.1: 964 | dependencies: 965 | to-regex-range: 5.0.1 966 | dev: true 967 | engines: 968 | node: '>=8' 969 | resolution: 970 | integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 971 | /find-up/2.1.0: 972 | dependencies: 973 | locate-path: 2.0.0 974 | dev: true 975 | engines: 976 | node: '>=4' 977 | resolution: 978 | integrity: sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 979 | /find-up/3.0.0: 980 | dependencies: 981 | locate-path: 3.0.0 982 | dev: true 983 | engines: 984 | node: '>=6' 985 | resolution: 986 | integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 987 | /find-up/5.0.0: 988 | dependencies: 989 | locate-path: 6.0.0 990 | path-exists: 4.0.0 991 | dev: true 992 | engines: 993 | node: '>=10' 994 | resolution: 995 | integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 996 | /flat-cache/2.0.1: 997 | dependencies: 998 | flatted: 2.0.2 999 | rimraf: 2.6.3 1000 | write: 1.0.3 1001 | dev: true 1002 | engines: 1003 | node: '>=4' 1004 | resolution: 1005 | integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== 1006 | /flat/5.0.2: 1007 | dev: true 1008 | hasBin: true 1009 | resolution: 1010 | integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 1011 | /flatted/2.0.2: 1012 | dev: true 1013 | resolution: 1014 | integrity: sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== 1015 | /fs-extra/8.1.0: 1016 | dependencies: 1017 | graceful-fs: 4.2.4 1018 | jsonfile: 4.0.0 1019 | universalify: 0.1.2 1020 | engines: 1021 | node: '>=6 <7 || >=8' 1022 | resolution: 1023 | integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== 1024 | /fs.realpath/1.0.0: 1025 | resolution: 1026 | integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1027 | /fsevents/2.1.3: 1028 | dev: true 1029 | engines: 1030 | node: ^8.16.0 || ^10.6.0 || >=11.0.0 1031 | optional: true 1032 | os: 1033 | - darwin 1034 | resolution: 1035 | integrity: sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== 1036 | /function-bind/1.1.1: 1037 | resolution: 1038 | integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1039 | /functional-red-black-tree/1.0.1: 1040 | dev: true 1041 | resolution: 1042 | integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 1043 | /get-caller-file/2.0.5: 1044 | dev: true 1045 | engines: 1046 | node: 6.* || 8.* || >= 10.* 1047 | resolution: 1048 | integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1049 | /get-intrinsic/1.0.1: 1050 | dependencies: 1051 | function-bind: 1.1.1 1052 | has: 1.0.3 1053 | has-symbols: 1.0.1 1054 | dev: true 1055 | resolution: 1056 | integrity: sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== 1057 | /glob-parent/5.1.1: 1058 | dependencies: 1059 | is-glob: 4.0.1 1060 | dev: true 1061 | engines: 1062 | node: '>= 6' 1063 | resolution: 1064 | integrity: sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== 1065 | /glob/7.1.6: 1066 | dependencies: 1067 | fs.realpath: 1.0.0 1068 | inflight: 1.0.6 1069 | inherits: 2.0.4 1070 | minimatch: 3.0.4 1071 | once: 1.4.0 1072 | path-is-absolute: 1.0.1 1073 | resolution: 1074 | integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 1075 | /globals/12.4.0: 1076 | dependencies: 1077 | type-fest: 0.8.1 1078 | dev: true 1079 | engines: 1080 | node: '>=8' 1081 | resolution: 1082 | integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== 1083 | /globby/11.0.1: 1084 | dependencies: 1085 | array-union: 2.1.0 1086 | dir-glob: 3.0.1 1087 | fast-glob: 3.2.4 1088 | ignore: 5.1.8 1089 | merge2: 1.4.1 1090 | slash: 3.0.0 1091 | dev: true 1092 | engines: 1093 | node: '>=10' 1094 | resolution: 1095 | integrity: sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== 1096 | /graceful-fs/4.2.4: 1097 | resolution: 1098 | integrity: sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== 1099 | /growl/1.10.5: 1100 | dev: true 1101 | engines: 1102 | node: '>=4.x' 1103 | resolution: 1104 | integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 1105 | /has-flag/3.0.0: 1106 | engines: 1107 | node: '>=4' 1108 | resolution: 1109 | integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1110 | /has-flag/4.0.0: 1111 | engines: 1112 | node: '>=8' 1113 | resolution: 1114 | integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1115 | /has-symbols/1.0.1: 1116 | dev: true 1117 | engines: 1118 | node: '>= 0.4' 1119 | resolution: 1120 | integrity: sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== 1121 | /has/1.0.3: 1122 | dependencies: 1123 | function-bind: 1.1.1 1124 | engines: 1125 | node: '>= 0.4.0' 1126 | resolution: 1127 | integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1128 | /he/1.2.0: 1129 | dev: true 1130 | hasBin: true 1131 | resolution: 1132 | integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 1133 | /hosted-git-info/2.8.8: 1134 | dev: true 1135 | resolution: 1136 | integrity: sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== 1137 | /html-tags/3.1.0: 1138 | engines: 1139 | node: '>=8' 1140 | resolution: 1141 | integrity: sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== 1142 | /ignore/4.0.6: 1143 | dev: true 1144 | engines: 1145 | node: '>= 4' 1146 | resolution: 1147 | integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 1148 | /ignore/5.1.8: 1149 | dev: true 1150 | engines: 1151 | node: '>= 4' 1152 | resolution: 1153 | integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== 1154 | /import-fresh/3.2.2: 1155 | dependencies: 1156 | parent-module: 1.0.1 1157 | resolve-from: 4.0.0 1158 | dev: true 1159 | engines: 1160 | node: '>=6' 1161 | resolution: 1162 | integrity: sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== 1163 | /imurmurhash/0.1.4: 1164 | dev: true 1165 | engines: 1166 | node: '>=0.8.19' 1167 | resolution: 1168 | integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o= 1169 | /indexes-of/1.0.1: 1170 | resolution: 1171 | integrity: sha1-8w9xbI4r00bHtn0985FVZqfAVgc= 1172 | /inflight/1.0.6: 1173 | dependencies: 1174 | once: 1.4.0 1175 | wrappy: 1.0.2 1176 | resolution: 1177 | integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1178 | /inherits/2.0.4: 1179 | resolution: 1180 | integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1181 | /is-arrayish/0.2.1: 1182 | dev: true 1183 | resolution: 1184 | integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 1185 | /is-arrayish/0.3.2: 1186 | resolution: 1187 | integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== 1188 | /is-binary-path/2.1.0: 1189 | dependencies: 1190 | binary-extensions: 2.1.0 1191 | dev: true 1192 | engines: 1193 | node: '>=8' 1194 | resolution: 1195 | integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1196 | /is-callable/1.2.2: 1197 | dev: true 1198 | engines: 1199 | node: '>= 0.4' 1200 | resolution: 1201 | integrity: sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== 1202 | /is-core-module/2.0.0: 1203 | dependencies: 1204 | has: 1.0.3 1205 | resolution: 1206 | integrity: sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw== 1207 | /is-date-object/1.0.2: 1208 | dev: true 1209 | engines: 1210 | node: '>= 0.4' 1211 | resolution: 1212 | integrity: sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== 1213 | /is-extglob/2.1.1: 1214 | dev: true 1215 | engines: 1216 | node: '>=0.10.0' 1217 | resolution: 1218 | integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1219 | /is-fullwidth-code-point/2.0.0: 1220 | dev: true 1221 | engines: 1222 | node: '>=4' 1223 | resolution: 1224 | integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 1225 | /is-glob/4.0.1: 1226 | dependencies: 1227 | is-extglob: 2.1.1 1228 | dev: true 1229 | engines: 1230 | node: '>=0.10.0' 1231 | resolution: 1232 | integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1233 | /is-negative-zero/2.0.0: 1234 | dev: true 1235 | engines: 1236 | node: '>= 0.4' 1237 | resolution: 1238 | integrity: sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= 1239 | /is-number/7.0.0: 1240 | dev: true 1241 | engines: 1242 | node: '>=0.12.0' 1243 | resolution: 1244 | integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1245 | /is-plain-obj/2.1.0: 1246 | dev: true 1247 | engines: 1248 | node: '>=8' 1249 | resolution: 1250 | integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 1251 | /is-regex/1.1.1: 1252 | dependencies: 1253 | has-symbols: 1.0.1 1254 | dev: true 1255 | engines: 1256 | node: '>= 0.4' 1257 | resolution: 1258 | integrity: sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== 1259 | /is-string/1.0.5: 1260 | dev: true 1261 | engines: 1262 | node: '>= 0.4' 1263 | resolution: 1264 | integrity: sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== 1265 | /is-symbol/1.0.3: 1266 | dependencies: 1267 | has-symbols: 1.0.1 1268 | dev: true 1269 | engines: 1270 | node: '>= 0.4' 1271 | resolution: 1272 | integrity: sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== 1273 | /isarray/1.0.0: 1274 | dev: true 1275 | resolution: 1276 | integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1277 | /isexe/2.0.0: 1278 | dev: true 1279 | resolution: 1280 | integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1281 | /isobject/2.1.0: 1282 | dependencies: 1283 | isarray: 1.0.0 1284 | dev: true 1285 | engines: 1286 | node: '>=0.10.0' 1287 | resolution: 1288 | integrity: sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= 1289 | /jest-matcher-css/1.1.0: 1290 | dev: true 1291 | resolution: 1292 | integrity: sha512-HycxxNw36Cx/CD/XjIt4qcJ0SDpEH9F2ZWTndoyfK7nLiZnIJp/sGSdpQC4GoaC/XshKEee7nBJ81FhIScc5vA== 1293 | /js-tokens/4.0.0: 1294 | dev: true 1295 | resolution: 1296 | integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1297 | /js-yaml/3.14.0: 1298 | dependencies: 1299 | argparse: 1.0.10 1300 | esprima: 4.0.1 1301 | dev: true 1302 | hasBin: true 1303 | resolution: 1304 | integrity: sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== 1305 | /json-schema-traverse/0.4.1: 1306 | dev: true 1307 | resolution: 1308 | integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1309 | /json-stable-stringify-without-jsonify/1.0.1: 1310 | dev: true 1311 | resolution: 1312 | integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1313 | /json5/1.0.1: 1314 | dependencies: 1315 | minimist: 1.2.5 1316 | dev: true 1317 | hasBin: true 1318 | resolution: 1319 | integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== 1320 | /jsonfile/4.0.0: 1321 | optionalDependencies: 1322 | graceful-fs: 4.2.4 1323 | resolution: 1324 | integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= 1325 | /levn/0.4.1: 1326 | dependencies: 1327 | prelude-ls: 1.2.1 1328 | type-check: 0.4.0 1329 | dev: true 1330 | engines: 1331 | node: '>= 0.8.0' 1332 | resolution: 1333 | integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1334 | /line-column/1.0.2: 1335 | dependencies: 1336 | isarray: 1.0.0 1337 | isobject: 2.1.0 1338 | dev: true 1339 | resolution: 1340 | integrity: sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI= 1341 | /load-json-file/2.0.0: 1342 | dependencies: 1343 | graceful-fs: 4.2.4 1344 | parse-json: 2.2.0 1345 | pify: 2.3.0 1346 | strip-bom: 3.0.0 1347 | dev: true 1348 | engines: 1349 | node: '>=4' 1350 | resolution: 1351 | integrity: sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= 1352 | /locate-path/2.0.0: 1353 | dependencies: 1354 | p-locate: 2.0.0 1355 | path-exists: 3.0.0 1356 | dev: true 1357 | engines: 1358 | node: '>=4' 1359 | resolution: 1360 | integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 1361 | /locate-path/3.0.0: 1362 | dependencies: 1363 | p-locate: 3.0.0 1364 | path-exists: 3.0.0 1365 | dev: true 1366 | engines: 1367 | node: '>=6' 1368 | resolution: 1369 | integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 1370 | /locate-path/6.0.0: 1371 | dependencies: 1372 | p-locate: 5.0.0 1373 | dev: true 1374 | engines: 1375 | node: '>=10' 1376 | resolution: 1377 | integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1378 | /lodash.toarray/4.4.0: 1379 | resolution: 1380 | integrity: sha1-JMS/zWsvuji/0FlNsRedjptlZWE= 1381 | /lodash/4.17.20: 1382 | resolution: 1383 | integrity: sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== 1384 | /log-symbols/4.0.0: 1385 | dependencies: 1386 | chalk: 4.1.0 1387 | dev: true 1388 | engines: 1389 | node: '>=10' 1390 | resolution: 1391 | integrity: sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== 1392 | /make-error/1.3.6: 1393 | dev: true 1394 | resolution: 1395 | integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 1396 | /merge2/1.4.1: 1397 | dev: true 1398 | engines: 1399 | node: '>= 8' 1400 | resolution: 1401 | integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1402 | /micromatch/4.0.2: 1403 | dependencies: 1404 | braces: 3.0.2 1405 | picomatch: 2.2.2 1406 | dev: true 1407 | engines: 1408 | node: '>=8' 1409 | resolution: 1410 | integrity: sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== 1411 | /minimatch/3.0.4: 1412 | dependencies: 1413 | brace-expansion: 1.1.11 1414 | resolution: 1415 | integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1416 | /minimist/1.2.5: 1417 | resolution: 1418 | integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1419 | /mkdirp/0.5.5: 1420 | dependencies: 1421 | minimist: 1.2.5 1422 | dev: true 1423 | hasBin: true 1424 | resolution: 1425 | integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 1426 | /mocha/8.2.0: 1427 | dependencies: 1428 | '@ungap/promise-all-settled': 1.1.2 1429 | ansi-colors: 4.1.1 1430 | browser-stdout: 1.3.1 1431 | chokidar: 3.4.3 1432 | debug: 4.2.0_supports-color@7.2.0 1433 | diff: 4.0.2 1434 | escape-string-regexp: 4.0.0 1435 | find-up: 5.0.0 1436 | glob: 7.1.6 1437 | growl: 1.10.5 1438 | he: 1.2.0 1439 | js-yaml: 3.14.0 1440 | log-symbols: 4.0.0 1441 | minimatch: 3.0.4 1442 | ms: 2.1.2 1443 | nanoid: 3.1.12 1444 | serialize-javascript: 5.0.1 1445 | strip-json-comments: 3.1.1 1446 | supports-color: 7.2.0 1447 | which: 2.0.2 1448 | wide-align: 1.1.3 1449 | workerpool: 6.0.2 1450 | yargs: 13.3.2 1451 | yargs-parser: 13.1.2 1452 | yargs-unparser: 2.0.0 1453 | dev: true 1454 | engines: 1455 | node: '>= 10.12.0' 1456 | hasBin: true 1457 | resolution: 1458 | integrity: sha512-lEWEMq2LMfNJMKeuEwb5UELi+OgFDollXaytR5ggQcHpzG3NP/R7rvixAvF+9/lLsTWhWG+4yD2M70GsM06nxw== 1459 | /ms/2.0.0: 1460 | dev: true 1461 | resolution: 1462 | integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1463 | /ms/2.1.2: 1464 | dev: true 1465 | resolution: 1466 | integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1467 | /nanoid/3.1.12: 1468 | dev: true 1469 | engines: 1470 | node: ^10 || ^12 || >=13.7 1471 | hasBin: true 1472 | resolution: 1473 | integrity: sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== 1474 | /nanoid/3.1.16: 1475 | dev: true 1476 | engines: 1477 | node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 1478 | hasBin: true 1479 | resolution: 1480 | integrity: sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w== 1481 | /natural-compare/1.4.0: 1482 | dev: true 1483 | resolution: 1484 | integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1485 | /node-emoji/1.10.0: 1486 | dependencies: 1487 | lodash.toarray: 4.4.0 1488 | resolution: 1489 | integrity: sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== 1490 | /node-releases/1.1.65: 1491 | resolution: 1492 | integrity: sha512-YpzJOe2WFIW0V4ZkJQd/DGR/zdVwc/pI4Nl1CZrBO19FdRcSTmsuhdttw9rsTzzJLrNcSloLiBbEYx1C4f6gpA== 1493 | /normalize-package-data/2.5.0: 1494 | dependencies: 1495 | hosted-git-info: 2.8.8 1496 | resolve: 1.18.1 1497 | semver: 5.7.1 1498 | validate-npm-package-license: 3.0.4 1499 | dev: true 1500 | resolution: 1501 | integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 1502 | /normalize-path/3.0.0: 1503 | dev: true 1504 | engines: 1505 | node: '>=0.10.0' 1506 | resolution: 1507 | integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1508 | /normalize-range/0.1.2: 1509 | engines: 1510 | node: '>=0.10.0' 1511 | resolution: 1512 | integrity: sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= 1513 | /normalize.css/8.0.1: 1514 | resolution: 1515 | integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== 1516 | /num2fraction/1.2.2: 1517 | resolution: 1518 | integrity: sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= 1519 | /object-assign/4.1.1: 1520 | engines: 1521 | node: '>=0.10.0' 1522 | resolution: 1523 | integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1524 | /object-hash/2.0.3: 1525 | engines: 1526 | node: '>= 6' 1527 | resolution: 1528 | integrity: sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg== 1529 | /object-inspect/1.8.0: 1530 | dev: true 1531 | resolution: 1532 | integrity: sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== 1533 | /object-keys/1.1.1: 1534 | dev: true 1535 | engines: 1536 | node: '>= 0.4' 1537 | resolution: 1538 | integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1539 | /object.assign/4.1.2: 1540 | dependencies: 1541 | call-bind: 1.0.0 1542 | define-properties: 1.1.3 1543 | has-symbols: 1.0.1 1544 | object-keys: 1.1.1 1545 | dev: true 1546 | engines: 1547 | node: '>= 0.4' 1548 | resolution: 1549 | integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== 1550 | /object.entries/1.1.2: 1551 | dependencies: 1552 | define-properties: 1.1.3 1553 | es-abstract: 1.17.7 1554 | has: 1.0.3 1555 | dev: true 1556 | engines: 1557 | node: '>= 0.4' 1558 | resolution: 1559 | integrity: sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== 1560 | /object.values/1.1.1: 1561 | dependencies: 1562 | define-properties: 1.1.3 1563 | es-abstract: 1.17.7 1564 | function-bind: 1.1.1 1565 | has: 1.0.3 1566 | dev: true 1567 | engines: 1568 | node: '>= 0.4' 1569 | resolution: 1570 | integrity: sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== 1571 | /once/1.4.0: 1572 | dependencies: 1573 | wrappy: 1.0.2 1574 | resolution: 1575 | integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1576 | /optionator/0.9.1: 1577 | dependencies: 1578 | deep-is: 0.1.3 1579 | fast-levenshtein: 2.0.6 1580 | levn: 0.4.1 1581 | prelude-ls: 1.2.1 1582 | type-check: 0.4.0 1583 | word-wrap: 1.2.3 1584 | dev: true 1585 | engines: 1586 | node: '>= 0.8.0' 1587 | resolution: 1588 | integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1589 | /p-limit/1.3.0: 1590 | dependencies: 1591 | p-try: 1.0.0 1592 | dev: true 1593 | engines: 1594 | node: '>=4' 1595 | resolution: 1596 | integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 1597 | /p-limit/2.3.0: 1598 | dependencies: 1599 | p-try: 2.2.0 1600 | dev: true 1601 | engines: 1602 | node: '>=6' 1603 | resolution: 1604 | integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1605 | /p-limit/3.0.2: 1606 | dependencies: 1607 | p-try: 2.2.0 1608 | dev: true 1609 | engines: 1610 | node: '>=10' 1611 | resolution: 1612 | integrity: sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== 1613 | /p-locate/2.0.0: 1614 | dependencies: 1615 | p-limit: 1.3.0 1616 | dev: true 1617 | engines: 1618 | node: '>=4' 1619 | resolution: 1620 | integrity: sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 1621 | /p-locate/3.0.0: 1622 | dependencies: 1623 | p-limit: 2.3.0 1624 | dev: true 1625 | engines: 1626 | node: '>=6' 1627 | resolution: 1628 | integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 1629 | /p-locate/5.0.0: 1630 | dependencies: 1631 | p-limit: 3.0.2 1632 | dev: true 1633 | engines: 1634 | node: '>=10' 1635 | resolution: 1636 | integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1637 | /p-try/1.0.0: 1638 | dev: true 1639 | engines: 1640 | node: '>=4' 1641 | resolution: 1642 | integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 1643 | /p-try/2.2.0: 1644 | dev: true 1645 | engines: 1646 | node: '>=6' 1647 | resolution: 1648 | integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1649 | /parent-module/1.0.1: 1650 | dependencies: 1651 | callsites: 3.1.0 1652 | dev: true 1653 | engines: 1654 | node: '>=6' 1655 | resolution: 1656 | integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1657 | /parse-json/2.2.0: 1658 | dependencies: 1659 | error-ex: 1.3.2 1660 | dev: true 1661 | engines: 1662 | node: '>=0.10.0' 1663 | resolution: 1664 | integrity: sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= 1665 | /path-exists/3.0.0: 1666 | dev: true 1667 | engines: 1668 | node: '>=4' 1669 | resolution: 1670 | integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 1671 | /path-exists/4.0.0: 1672 | dev: true 1673 | engines: 1674 | node: '>=8' 1675 | resolution: 1676 | integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1677 | /path-is-absolute/1.0.1: 1678 | engines: 1679 | node: '>=0.10.0' 1680 | resolution: 1681 | integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1682 | /path-key/3.1.1: 1683 | dev: true 1684 | engines: 1685 | node: '>=8' 1686 | resolution: 1687 | integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1688 | /path-parse/1.0.6: 1689 | resolution: 1690 | integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 1691 | /path-type/2.0.0: 1692 | dependencies: 1693 | pify: 2.3.0 1694 | dev: true 1695 | engines: 1696 | node: '>=4' 1697 | resolution: 1698 | integrity: sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= 1699 | /path-type/4.0.0: 1700 | dev: true 1701 | engines: 1702 | node: '>=8' 1703 | resolution: 1704 | integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1705 | /picomatch/2.2.2: 1706 | dev: true 1707 | engines: 1708 | node: '>=8.6' 1709 | resolution: 1710 | integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 1711 | /pify/2.3.0: 1712 | dev: true 1713 | engines: 1714 | node: '>=0.10.0' 1715 | resolution: 1716 | integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 1717 | /pkg-dir/2.0.0: 1718 | dependencies: 1719 | find-up: 2.1.0 1720 | dev: true 1721 | engines: 1722 | node: '>=4' 1723 | resolution: 1724 | integrity: sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= 1725 | /postcss-functions/3.0.0: 1726 | dependencies: 1727 | glob: 7.1.6 1728 | object-assign: 4.1.1 1729 | postcss: 6.0.23 1730 | postcss-value-parser: 3.3.1 1731 | resolution: 1732 | integrity: sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4= 1733 | /postcss-js/2.0.3: 1734 | dependencies: 1735 | camelcase-css: 2.0.1 1736 | postcss: 7.0.35 1737 | resolution: 1738 | integrity: sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w== 1739 | /postcss-nested/4.2.3: 1740 | dependencies: 1741 | postcss: 7.0.35 1742 | postcss-selector-parser: 6.0.4 1743 | resolution: 1744 | integrity: sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw== 1745 | /postcss-selector-parser/6.0.4: 1746 | dependencies: 1747 | cssesc: 3.0.0 1748 | indexes-of: 1.0.1 1749 | uniq: 1.0.1 1750 | util-deprecate: 1.0.2 1751 | engines: 1752 | node: '>=4' 1753 | resolution: 1754 | integrity: sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== 1755 | /postcss-value-parser/3.3.1: 1756 | resolution: 1757 | integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== 1758 | /postcss-value-parser/4.1.0: 1759 | resolution: 1760 | integrity: sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== 1761 | /postcss/6.0.23: 1762 | dependencies: 1763 | chalk: 2.4.2 1764 | source-map: 0.6.1 1765 | supports-color: 5.5.0 1766 | engines: 1767 | node: '>=4.0.0' 1768 | resolution: 1769 | integrity: sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== 1770 | /postcss/7.0.32: 1771 | dependencies: 1772 | chalk: 2.4.2 1773 | source-map: 0.6.1 1774 | supports-color: 6.1.0 1775 | engines: 1776 | node: '>=6.0.0' 1777 | resolution: 1778 | integrity: sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== 1779 | /postcss/7.0.35: 1780 | dependencies: 1781 | chalk: 2.4.2 1782 | source-map: 0.6.1 1783 | supports-color: 6.1.0 1784 | engines: 1785 | node: '>=6.0.0' 1786 | resolution: 1787 | integrity: sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== 1788 | /postcss/8.1.4: 1789 | dependencies: 1790 | colorette: 1.2.1 1791 | line-column: 1.0.2 1792 | nanoid: 3.1.16 1793 | source-map: 0.6.1 1794 | dev: true 1795 | engines: 1796 | node: ^10 || ^12 || >=14 1797 | resolution: 1798 | integrity: sha512-LfqcwgMq9LOd8pX7K2+r2HPitlIGC5p6PoZhVELlqhh2YGDVcXKpkCseqan73Hrdik6nBd2OvoDPUaP/oMj9hQ== 1799 | /prelude-ls/1.2.1: 1800 | dev: true 1801 | engines: 1802 | node: '>= 0.8.0' 1803 | resolution: 1804 | integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1805 | /pretty-hrtime/1.0.3: 1806 | engines: 1807 | node: '>= 0.8' 1808 | resolution: 1809 | integrity: sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= 1810 | /progress/2.0.3: 1811 | dev: true 1812 | engines: 1813 | node: '>=0.4.0' 1814 | resolution: 1815 | integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1816 | /punycode/2.1.1: 1817 | dev: true 1818 | engines: 1819 | node: '>=6' 1820 | resolution: 1821 | integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1822 | /purgecss/2.3.0: 1823 | dependencies: 1824 | commander: 5.1.0 1825 | glob: 7.1.6 1826 | postcss: 7.0.32 1827 | postcss-selector-parser: 6.0.4 1828 | hasBin: true 1829 | resolution: 1830 | integrity: sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ== 1831 | /randombytes/2.1.0: 1832 | dependencies: 1833 | safe-buffer: 5.2.1 1834 | dev: true 1835 | resolution: 1836 | integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1837 | /read-pkg-up/2.0.0: 1838 | dependencies: 1839 | find-up: 2.1.0 1840 | read-pkg: 2.0.0 1841 | dev: true 1842 | engines: 1843 | node: '>=4' 1844 | resolution: 1845 | integrity: sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= 1846 | /read-pkg/2.0.0: 1847 | dependencies: 1848 | load-json-file: 2.0.0 1849 | normalize-package-data: 2.5.0 1850 | path-type: 2.0.0 1851 | dev: true 1852 | engines: 1853 | node: '>=4' 1854 | resolution: 1855 | integrity: sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= 1856 | /readdirp/3.5.0: 1857 | dependencies: 1858 | picomatch: 2.2.2 1859 | dev: true 1860 | engines: 1861 | node: '>=8.10.0' 1862 | resolution: 1863 | integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== 1864 | /reduce-css-calc/2.1.7: 1865 | dependencies: 1866 | css-unit-converter: 1.1.2 1867 | postcss-value-parser: 3.3.1 1868 | resolution: 1869 | integrity: sha512-fDnlZ+AybAS3C7Q9xDq5y8A2z+lT63zLbynew/lur/IR24OQF5x98tfNwf79mzEdfywZ0a2wpM860FhFfMxZlA== 1870 | /regexpp/3.1.0: 1871 | dev: true 1872 | engines: 1873 | node: '>=8' 1874 | resolution: 1875 | integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== 1876 | /require-directory/2.1.1: 1877 | dev: true 1878 | engines: 1879 | node: '>=0.10.0' 1880 | resolution: 1881 | integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 1882 | /require-main-filename/2.0.0: 1883 | dev: true 1884 | resolution: 1885 | integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 1886 | /resolve-from/4.0.0: 1887 | dev: true 1888 | engines: 1889 | node: '>=4' 1890 | resolution: 1891 | integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1892 | /resolve/1.18.1: 1893 | dependencies: 1894 | is-core-module: 2.0.0 1895 | path-parse: 1.0.6 1896 | resolution: 1897 | integrity: sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA== 1898 | /reusify/1.0.4: 1899 | dev: true 1900 | engines: 1901 | iojs: '>=1.0.0' 1902 | node: '>=0.10.0' 1903 | resolution: 1904 | integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1905 | /rimraf/2.6.3: 1906 | dependencies: 1907 | glob: 7.1.6 1908 | dev: true 1909 | hasBin: true 1910 | resolution: 1911 | integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 1912 | /run-parallel/1.1.10: 1913 | dev: true 1914 | resolution: 1915 | integrity: sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== 1916 | /safe-buffer/5.2.1: 1917 | dev: true 1918 | resolution: 1919 | integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1920 | /semver/5.7.1: 1921 | dev: true 1922 | hasBin: true 1923 | resolution: 1924 | integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1925 | /semver/7.3.2: 1926 | dev: true 1927 | engines: 1928 | node: '>=10' 1929 | hasBin: true 1930 | resolution: 1931 | integrity: sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== 1932 | /serialize-javascript/5.0.1: 1933 | dependencies: 1934 | randombytes: 2.1.0 1935 | dev: true 1936 | resolution: 1937 | integrity: sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== 1938 | /set-blocking/2.0.0: 1939 | dev: true 1940 | resolution: 1941 | integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1942 | /shebang-command/2.0.0: 1943 | dependencies: 1944 | shebang-regex: 3.0.0 1945 | dev: true 1946 | engines: 1947 | node: '>=8' 1948 | resolution: 1949 | integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1950 | /shebang-regex/3.0.0: 1951 | dev: true 1952 | engines: 1953 | node: '>=8' 1954 | resolution: 1955 | integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1956 | /simple-swizzle/0.2.2: 1957 | dependencies: 1958 | is-arrayish: 0.3.2 1959 | resolution: 1960 | integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= 1961 | /slash/3.0.0: 1962 | dev: true 1963 | engines: 1964 | node: '>=8' 1965 | resolution: 1966 | integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1967 | /slice-ansi/2.1.0: 1968 | dependencies: 1969 | ansi-styles: 3.2.1 1970 | astral-regex: 1.0.0 1971 | is-fullwidth-code-point: 2.0.0 1972 | dev: true 1973 | engines: 1974 | node: '>=6' 1975 | resolution: 1976 | integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== 1977 | /source-map-support/0.5.19: 1978 | dependencies: 1979 | buffer-from: 1.1.1 1980 | source-map: 0.6.1 1981 | dev: true 1982 | resolution: 1983 | integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 1984 | /source-map/0.6.1: 1985 | engines: 1986 | node: '>=0.10.0' 1987 | resolution: 1988 | integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1989 | /spdx-correct/3.1.1: 1990 | dependencies: 1991 | spdx-expression-parse: 3.0.1 1992 | spdx-license-ids: 3.0.6 1993 | dev: true 1994 | resolution: 1995 | integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== 1996 | /spdx-exceptions/2.3.0: 1997 | dev: true 1998 | resolution: 1999 | integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 2000 | /spdx-expression-parse/3.0.1: 2001 | dependencies: 2002 | spdx-exceptions: 2.3.0 2003 | spdx-license-ids: 3.0.6 2004 | dev: true 2005 | resolution: 2006 | integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 2007 | /spdx-license-ids/3.0.6: 2008 | dev: true 2009 | resolution: 2010 | integrity: sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== 2011 | /sprintf-js/1.0.3: 2012 | dev: true 2013 | resolution: 2014 | integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 2015 | /string-width/2.1.1: 2016 | dependencies: 2017 | is-fullwidth-code-point: 2.0.0 2018 | strip-ansi: 4.0.0 2019 | dev: true 2020 | engines: 2021 | node: '>=4' 2022 | resolution: 2023 | integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 2024 | /string-width/3.1.0: 2025 | dependencies: 2026 | emoji-regex: 7.0.3 2027 | is-fullwidth-code-point: 2.0.0 2028 | strip-ansi: 5.2.0 2029 | dev: true 2030 | engines: 2031 | node: '>=6' 2032 | resolution: 2033 | integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 2034 | /string.prototype.trimend/1.0.2: 2035 | dependencies: 2036 | define-properties: 1.1.3 2037 | es-abstract: 1.18.0-next.1 2038 | dev: true 2039 | resolution: 2040 | integrity: sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw== 2041 | /string.prototype.trimstart/1.0.2: 2042 | dependencies: 2043 | define-properties: 1.1.3 2044 | es-abstract: 1.18.0-next.1 2045 | dev: true 2046 | resolution: 2047 | integrity: sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg== 2048 | /strip-ansi/4.0.0: 2049 | dependencies: 2050 | ansi-regex: 3.0.0 2051 | dev: true 2052 | engines: 2053 | node: '>=4' 2054 | resolution: 2055 | integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8= 2056 | /strip-ansi/5.2.0: 2057 | dependencies: 2058 | ansi-regex: 4.1.0 2059 | dev: true 2060 | engines: 2061 | node: '>=6' 2062 | resolution: 2063 | integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 2064 | /strip-ansi/6.0.0: 2065 | dependencies: 2066 | ansi-regex: 5.0.0 2067 | dev: true 2068 | engines: 2069 | node: '>=8' 2070 | resolution: 2071 | integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 2072 | /strip-bom/3.0.0: 2073 | dev: true 2074 | engines: 2075 | node: '>=4' 2076 | resolution: 2077 | integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 2078 | /strip-json-comments/3.1.1: 2079 | dev: true 2080 | engines: 2081 | node: '>=8' 2082 | resolution: 2083 | integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2084 | /supports-color/5.5.0: 2085 | dependencies: 2086 | has-flag: 3.0.0 2087 | engines: 2088 | node: '>=4' 2089 | resolution: 2090 | integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2091 | /supports-color/6.1.0: 2092 | dependencies: 2093 | has-flag: 3.0.0 2094 | engines: 2095 | node: '>=6' 2096 | resolution: 2097 | integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== 2098 | /supports-color/7.2.0: 2099 | dependencies: 2100 | has-flag: 4.0.0 2101 | engines: 2102 | node: '>=8' 2103 | resolution: 2104 | integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2105 | /table/5.4.6: 2106 | dependencies: 2107 | ajv: 6.12.6 2108 | lodash: 4.17.20 2109 | slice-ansi: 2.1.0 2110 | string-width: 3.1.0 2111 | dev: true 2112 | engines: 2113 | node: '>=6.0.0' 2114 | resolution: 2115 | integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== 2116 | /tailwindcss-pseudo/1.0.3: 2117 | dependencies: 2118 | lodash: 4.17.20 2119 | dev: true 2120 | resolution: 2121 | integrity: sha512-R0APxj9bwOrz9CHmPIwk35SXyr4f6WD8fJ4uISIMpyMWthx2r7TIdC+S6s9xaLuZAffFcgnjeZ5rsMZuy21F1g== 2122 | /tailwindcss/1.9.6: 2123 | dependencies: 2124 | '@fullhuman/postcss-purgecss': 2.3.0 2125 | autoprefixer: 9.8.6 2126 | browserslist: 4.14.6 2127 | bytes: 3.1.0 2128 | chalk: 4.1.0 2129 | color: 3.1.3 2130 | detective: 5.2.0 2131 | fs-extra: 8.1.0 2132 | html-tags: 3.1.0 2133 | lodash: 4.17.20 2134 | node-emoji: 1.10.0 2135 | normalize.css: 8.0.1 2136 | object-hash: 2.0.3 2137 | postcss: 7.0.35 2138 | postcss-functions: 3.0.0 2139 | postcss-js: 2.0.3 2140 | postcss-nested: 4.2.3 2141 | postcss-selector-parser: 6.0.4 2142 | postcss-value-parser: 4.1.0 2143 | pretty-hrtime: 1.0.3 2144 | reduce-css-calc: 2.1.7 2145 | resolve: 1.18.1 2146 | engines: 2147 | node: '>=8.9.0' 2148 | hasBin: true 2149 | resolution: 2150 | integrity: sha512-nY8WYM/RLPqGsPEGEV2z63riyQPcHYZUJpAwdyBzVpxQHOHqHE+F/fvbCeXhdF1+TA5l72vSkZrtYCB9hRcwkQ== 2151 | /text-table/0.2.0: 2152 | dev: true 2153 | resolution: 2154 | integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 2155 | /to-regex-range/5.0.1: 2156 | dependencies: 2157 | is-number: 7.0.0 2158 | dev: true 2159 | engines: 2160 | node: '>=8.0' 2161 | resolution: 2162 | integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2163 | /ts-node/9.0.0_typescript@4.0.5: 2164 | dependencies: 2165 | arg: 4.1.3 2166 | diff: 4.0.2 2167 | make-error: 1.3.6 2168 | source-map-support: 0.5.19 2169 | typescript: 4.0.5 2170 | yn: 3.1.1 2171 | dev: true 2172 | engines: 2173 | node: '>=10.0.0' 2174 | hasBin: true 2175 | peerDependencies: 2176 | typescript: '>=2.7' 2177 | resolution: 2178 | integrity: sha512-/TqB4SnererCDR/vb4S/QvSZvzQMJN8daAslg7MeaiHvD8rDZsSfXmNeNumyZZzMned72Xoq/isQljYSt8Ynfg== 2179 | /tsconfig-paths/3.9.0: 2180 | dependencies: 2181 | '@types/json5': 0.0.29 2182 | json5: 1.0.1 2183 | minimist: 1.2.5 2184 | strip-bom: 3.0.0 2185 | dev: true 2186 | resolution: 2187 | integrity: sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== 2188 | /tslib/1.14.1: 2189 | dev: true 2190 | resolution: 2191 | integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 2192 | /tsutils/3.17.1_typescript@4.0.5: 2193 | dependencies: 2194 | tslib: 1.14.1 2195 | typescript: 4.0.5 2196 | dev: true 2197 | engines: 2198 | node: '>= 6' 2199 | peerDependencies: 2200 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 2201 | resolution: 2202 | integrity: sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== 2203 | /type-check/0.4.0: 2204 | dependencies: 2205 | prelude-ls: 1.2.1 2206 | dev: true 2207 | engines: 2208 | node: '>= 0.8.0' 2209 | resolution: 2210 | integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 2211 | /type-fest/0.8.1: 2212 | dev: true 2213 | engines: 2214 | node: '>=8' 2215 | resolution: 2216 | integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 2217 | /typescript/4.0.5: 2218 | dev: true 2219 | engines: 2220 | node: '>=4.2.0' 2221 | hasBin: true 2222 | resolution: 2223 | integrity: sha512-ywmr/VrTVCmNTJ6iV2LwIrfG1P+lv6luD8sUJs+2eI9NLGigaN+nUQc13iHqisq7bra9lnmUSYqbJvegraBOPQ== 2224 | /uniq/1.0.1: 2225 | resolution: 2226 | integrity: sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= 2227 | /universalify/0.1.2: 2228 | engines: 2229 | node: '>= 4.0.0' 2230 | resolution: 2231 | integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 2232 | /uri-js/4.4.0: 2233 | dependencies: 2234 | punycode: 2.1.1 2235 | dev: true 2236 | resolution: 2237 | integrity: sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== 2238 | /util-deprecate/1.0.2: 2239 | resolution: 2240 | integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2241 | /v8-compile-cache/2.2.0: 2242 | dev: true 2243 | resolution: 2244 | integrity: sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== 2245 | /validate-npm-package-license/3.0.4: 2246 | dependencies: 2247 | spdx-correct: 3.1.1 2248 | spdx-expression-parse: 3.0.1 2249 | dev: true 2250 | resolution: 2251 | integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 2252 | /which-module/2.0.0: 2253 | dev: true 2254 | resolution: 2255 | integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 2256 | /which/2.0.2: 2257 | dependencies: 2258 | isexe: 2.0.0 2259 | dev: true 2260 | engines: 2261 | node: '>= 8' 2262 | hasBin: true 2263 | resolution: 2264 | integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2265 | /wide-align/1.1.3: 2266 | dependencies: 2267 | string-width: 2.1.1 2268 | dev: true 2269 | resolution: 2270 | integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 2271 | /word-wrap/1.2.3: 2272 | dev: true 2273 | engines: 2274 | node: '>=0.10.0' 2275 | resolution: 2276 | integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 2277 | /workerpool/6.0.2: 2278 | dev: true 2279 | resolution: 2280 | integrity: sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q== 2281 | /wrap-ansi/5.1.0: 2282 | dependencies: 2283 | ansi-styles: 3.2.1 2284 | string-width: 3.1.0 2285 | strip-ansi: 5.2.0 2286 | dev: true 2287 | engines: 2288 | node: '>=6' 2289 | resolution: 2290 | integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 2291 | /wrappy/1.0.2: 2292 | resolution: 2293 | integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2294 | /write/1.0.3: 2295 | dependencies: 2296 | mkdirp: 0.5.5 2297 | dev: true 2298 | engines: 2299 | node: '>=4' 2300 | resolution: 2301 | integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== 2302 | /xtend/4.0.2: 2303 | engines: 2304 | node: '>=0.4' 2305 | resolution: 2306 | integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 2307 | /y18n/4.0.0: 2308 | dev: true 2309 | resolution: 2310 | integrity: sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== 2311 | /yargs-parser/13.1.2: 2312 | dependencies: 2313 | camelcase: 5.3.1 2314 | decamelize: 1.2.0 2315 | dev: true 2316 | resolution: 2317 | integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== 2318 | /yargs-unparser/2.0.0: 2319 | dependencies: 2320 | camelcase: 6.2.0 2321 | decamelize: 4.0.0 2322 | flat: 5.0.2 2323 | is-plain-obj: 2.1.0 2324 | dev: true 2325 | engines: 2326 | node: '>=10' 2327 | resolution: 2328 | integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 2329 | /yargs/13.3.2: 2330 | dependencies: 2331 | cliui: 5.0.0 2332 | find-up: 3.0.0 2333 | get-caller-file: 2.0.5 2334 | require-directory: 2.1.1 2335 | require-main-filename: 2.0.0 2336 | set-blocking: 2.0.0 2337 | string-width: 3.1.0 2338 | which-module: 2.0.0 2339 | y18n: 4.0.0 2340 | yargs-parser: 13.1.2 2341 | dev: true 2342 | resolution: 2343 | integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== 2344 | /yn/3.1.1: 2345 | dev: true 2346 | engines: 2347 | node: '>=6' 2348 | resolution: 2349 | integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 2350 | specifiers: 2351 | '@navith/tailwindcss-plugin-author-types': ^1.8.1-0.1 2352 | '@types/assert': ^1.5.2 2353 | '@types/lodash': ^4.14.164 2354 | '@types/mocha': ^8.0.3 2355 | '@typescript-eslint/eslint-plugin': ^4.6.0 2356 | '@typescript-eslint/parser': ^4.6.0 2357 | cross-env: ^7.0.2 2358 | eslint: ^7.12.1 2359 | eslint-config-airbnb-base: ^14.2.0 2360 | eslint-plugin-import: ^2.22.1 2361 | jest-matcher-css: ^1.1.0 2362 | lodash: ^4.17.20 2363 | mocha: ^8.2.0 2364 | postcss: ^8.1.4 2365 | tailwindcss: ^1.9.6 2366 | tailwindcss-pseudo: ^1.0.3 2367 | ts-node: ^9.0.0 2368 | typescript: ^4.0.5 2369 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable no-param-reassign */ 2 | import { kebabCase } from "lodash"; 3 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment 4 | // @ts-ignore 5 | import prefixNegativeModifiers from "tailwindcss/lib/util/prefixNegativeModifiers"; 6 | import plugin from "tailwindcss/plugin"; 7 | 8 | import { ThisPlugin, ThisPluginOptions } from "./types"; 9 | 10 | const thisPlugin: ThisPlugin = plugin(({ 11 | addUtilities, e, theme, variants, 12 | }) => { 13 | const customUtilities: [string, ThisPluginOptions][] = Object.entries(theme("customUtilities", {}) ?? {}); 14 | // Warn when there is no configuration for the plugin 15 | if (customUtilities.length === 0) console.warn("the tailwindcss-custom-native plugin does not have any configuration, so no utilities can/will be generated; this can be fixed by putting something like { keyName: {} } in `theme.customUtilities`"); 16 | 17 | customUtilities.forEach(([key, { property, rename, addUtilitiesOptions }]) => { 18 | const configuration = Object.entries(theme(key, {}) ?? {}); 19 | // Warn when no property-value pairs were given in `theme` for this utility 20 | if (configuration.length === 0) { 21 | console.warn(`the custom utility ${key} does not have any configuration in \`theme\`, so no classes can/will be generated for this utility`); 22 | return; 23 | } 24 | 25 | // E.x. 'mixBlendMode' -> 'mix-blend-mode' 26 | const keyHyphenated = kebabCase(key); 27 | 28 | if (property === undefined) property = keyHyphenated; 29 | if (rename === undefined) rename = keyHyphenated; 30 | if (addUtilitiesOptions === undefined) addUtilitiesOptions = {}; 31 | 32 | // Forbid specifying variants in addUtilitiesOptions 33 | if (Object.prototype.hasOwnProperty.call(addUtilitiesOptions, "variants")) throw new TypeError(`the specified addUtilitiesOptions ${addUtilitiesOptions} for the custom utility ${key} has unacceptable property \`variants\`. this can be fixed by removing that property from addUtilitiesOptions and instead specifying variants in the \`variants\` key in \`theme.customUtilities.${key}\``); 34 | 35 | const utilities = configuration.reduce((css, [name, value]) => { 36 | const className: string = rename === "" ? name : prefixNegativeModifiers(rename, name); 37 | 38 | css[`.${e(className)}`] = { 39 | // eslint-disable-next-line @typescript-eslint/no-non-null-assertion 40 | [property!]: value, 41 | }; 42 | 43 | return css; 44 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 45 | }, {} as { [property: string]: any }); 46 | 47 | addUtilities(utilities, { variants: variants(key, []), ...addUtilitiesOptions }); 48 | }); 49 | }); 50 | 51 | export = thisPlugin; 52 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | import { AddUtilitiesOptionsObject, WrappedPlugin } from "@navith/tailwindcss-plugin-author-types"; 2 | 3 | export interface ThisPluginOptions { 4 | property?: string; 5 | rename?: string; 6 | addUtilitiesOptions?: Omit; 7 | } 8 | 9 | export type ThisPlugin = WrappedPlugin; 10 | -------------------------------------------------------------------------------- /tests/index.ts: -------------------------------------------------------------------------------- 1 | import { TailwindCSSConfig } from "@navith/tailwindcss-plugin-author-types"; 2 | import assert from "assert"; 3 | import cssMatcher from "jest-matcher-css"; 4 | import { merge } from "lodash"; 5 | import { describe, it } from "mocha"; 6 | import postcss from "postcss"; 7 | import tailwindcss from "tailwindcss"; 8 | // eslint-disable-next-line @typescript-eslint/ban-ts-comment 9 | // @ts-ignore 10 | import tailwindcssPseudo from "tailwindcss-pseudo"; 11 | 12 | import thisPlugin from "../src/index"; 13 | 14 | const generatePluginCss = (config: TailwindCSSConfig): Promise => postcss( 15 | tailwindcss( 16 | merge({ 17 | theme: {}, 18 | corePlugins: false, 19 | plugins: [ 20 | thisPlugin, 21 | ], 22 | } as TailwindCSSConfig, config), 23 | ), 24 | ).process("@tailwind utilities", { 25 | from: undefined, 26 | }).then((result) => result.css); 27 | 28 | const assertCSS = (actual: string, expected: string): void => { 29 | const { pass, message } = cssMatcher(actual, expected); 30 | assert.ok(pass, message()); 31 | }; 32 | 33 | describe("tailwindcss-custom-native", () => { 34 | it("works when there's just a key and no extra config", async () => { 35 | assertCSS(await generatePluginCss({ 36 | theme: { 37 | mixBlendMode: { 38 | screen: "screen", 39 | overlay: "overlay", 40 | }, 41 | customUtilities: { 42 | mixBlendMode: {}, 43 | }, 44 | }, 45 | 46 | plugins: [ 47 | thisPlugin, 48 | ], 49 | }), 50 | ` 51 | .mix-blend-mode-screen { 52 | mix-blend-mode: screen; 53 | } 54 | 55 | .mix-blend-mode-overlay { 56 | mix-blend-mode: overlay; 57 | } 58 | `); 59 | }); 60 | 61 | it("variants (hover and focus) with key and no extra config", async () => { 62 | assertCSS(await generatePluginCss({ 63 | theme: { 64 | mixBlendMode: { 65 | screen: "screen", 66 | overlay: "overlay", 67 | }, 68 | customUtilities: { 69 | mixBlendMode: {}, 70 | }, 71 | }, 72 | 73 | variants: { 74 | mixBlendMode: ["hover", "focus"], 75 | }, 76 | 77 | plugins: [ 78 | thisPlugin, 79 | ], 80 | }), 81 | ` 82 | .mix-blend-mode-screen { 83 | mix-blend-mode: screen; 84 | } 85 | .mix-blend-mode-overlay { 86 | mix-blend-mode: overlay; 87 | } 88 | 89 | .hover\\:mix-blend-mode-screen:hover { 90 | mix-blend-mode: screen; 91 | } 92 | .hover\\:mix-blend-mode-overlay:hover { 93 | mix-blend-mode: overlay; 94 | } 95 | 96 | .focus\\:mix-blend-mode-screen:focus { 97 | mix-blend-mode: screen; 98 | } 99 | .focus\\:mix-blend-mode-overlay:focus { 100 | mix-blend-mode: overlay; 101 | } 102 | `); 103 | }); 104 | 105 | it("rename with responsive variants", async () => { 106 | assertCSS(await generatePluginCss({ 107 | theme: { 108 | extend: { 109 | customUtilities: { 110 | filter: { rename: "" }, 111 | }, 112 | 113 | filter: { 114 | grayscale: "grayscale(100%)", 115 | "blur-4": "blur(1rem)", 116 | }, 117 | }, 118 | 119 | screens: { 120 | "sm": "640px", 121 | "md": "768px", 122 | "lg": "1024px", 123 | "xl": "1280px", 124 | } 125 | }, 126 | variants: { 127 | filter: ["responsive"], 128 | }, 129 | plugins: [ 130 | thisPlugin, 131 | ], 132 | }), 133 | ` 134 | .grayscale { 135 | filter: grayscale(100%); 136 | } 137 | 138 | .blur-4 { 139 | filter: blur(1rem); 140 | } 141 | 142 | @media (min-width: 640px) { 143 | .sm\\:grayscale { 144 | filter: grayscale(100%); 145 | } 146 | 147 | .sm\\:blur-4 { 148 | filter: blur(1rem); 149 | } 150 | } 151 | 152 | @media (min-width: 768px) { 153 | .md\\:grayscale { 154 | filter: grayscale(100%); 155 | } 156 | 157 | .md\\:blur-4 { 158 | filter: blur(1rem); 159 | } 160 | } 161 | 162 | @media (min-width: 1024px) { 163 | .lg\\:grayscale { 164 | filter: grayscale(100%); 165 | } 166 | 167 | .lg\\:blur-4 { 168 | filter: blur(1rem); 169 | } 170 | } 171 | 172 | @media (min-width: 1280px) { 173 | .xl\\:grayscale { 174 | filter: grayscale(100%); 175 | } 176 | 177 | .xl\\:blur-4 { 178 | filter: blur(1rem); 179 | } 180 | } 181 | `); 182 | }); 183 | 184 | it("property with active variants", async () => { 185 | assertCSS(await generatePluginCss({ 186 | theme: { 187 | extend: { 188 | blur: { 189 | 0: "blur(0)", 190 | 1: "blur(0.25rem)", 191 | 2: "blur(0.5rem)", 192 | }, 193 | 194 | customUtilities: { 195 | blur: { property: "filter" }, 196 | }, 197 | }, 198 | }, 199 | variants: { 200 | blur: ["active"], 201 | }, 202 | plugins: [ 203 | thisPlugin, 204 | ], 205 | }), 206 | ` 207 | .blur-0 { 208 | filter: blur(0); 209 | } 210 | .blur-1 { 211 | filter: blur(0.25rem); 212 | } 213 | .blur-2 { 214 | filter: blur(0.5rem); 215 | } 216 | 217 | .active\\:blur-0:active { 218 | filter: blur(0); 219 | } 220 | .active\\:blur-1:active { 221 | filter: blur(0.25rem); 222 | } 223 | .active\\:blur-2:active { 224 | filter: blur(0.5rem); 225 | } 226 | `); 227 | }); 228 | 229 | it("multiple custom utilities with rename", async () => { 230 | assertCSS(await generatePluginCss({ 231 | theme: { 232 | customUtilities: { 233 | listStyleImage: { rename: "list" }, 234 | scrollBehavior: { rename: "scroll" }, 235 | }, 236 | 237 | listStyleImage: { 238 | checkmark: "url('/img/checkmark.png')", 239 | }, 240 | 241 | scrollBehavior: { 242 | immediately: "auto", 243 | smoothly: "smooth", 244 | }, 245 | }, 246 | variants: {}, 247 | plugins: [ 248 | thisPlugin, 249 | ], 250 | }), 251 | ` 252 | .list-checkmark { 253 | list-style-image: url('/img/checkmark.png'); 254 | } 255 | 256 | .scroll-immediately { 257 | scroll-behavior: auto; 258 | } 259 | 260 | .scroll-smoothly { 261 | scroll-behavior: smooth; 262 | } 263 | `); 264 | }); 265 | 266 | it("can use other plugins (tailwindcss-pseudo)'s variants", async () => { 267 | assertCSS(await generatePluginCss({ 268 | theme: { 269 | extend: { 270 | content: { 271 | empty: "''", 272 | smile: "'\\1F60A'", 273 | checkmark: "url(/img/checkmark.png)", 274 | }, 275 | 276 | customUtilities: { 277 | content: {}, 278 | }, 279 | 280 | // This is tailwindcss-pseudo config 281 | pseudo: { 282 | before: "before", 283 | after: "after", 284 | }, 285 | }, 286 | }, 287 | variants: { 288 | content: ["before", "after"], 289 | }, 290 | plugins: [ 291 | tailwindcssPseudo(), 292 | thisPlugin, 293 | ], 294 | }), 295 | ` 296 | .empty { 297 | content: ''; 298 | } 299 | .content-empty { 300 | content: ''; 301 | } 302 | .content-smile { 303 | content: '\\1F60A'; 304 | } 305 | .content-checkmark { 306 | content: url(/img/checkmark.png); 307 | } 308 | 309 | .before\\:content-empty::before { 310 | content: ''; 311 | } 312 | .before\\:content-smile::before { 313 | content: '\\1F60A'; 314 | } 315 | .before\\:content-checkmark::before { 316 | content: url(/img/checkmark.png); 317 | } 318 | 319 | .after\\:content-empty::after { 320 | content: ''; 321 | } 322 | .after\\:content-smile::after { 323 | content: '\\1F60A'; 324 | } 325 | .after\\:content-checkmark::after { 326 | content: url(/img/checkmark.png); 327 | } 328 | `); 329 | }); 330 | 331 | it("negative properties are prefixed with - without variants", async () => { 332 | assertCSS(await generatePluginCss({ 333 | theme: { 334 | extend: { 335 | customUtilities: { 336 | scaleY: { property: "transform" }, 337 | }, 338 | scaleY: { 339 | "0%": "scaleY(0%)", 340 | "-50%": "scaleY(-50%)", 341 | "-100%": "scaleY(-100%)", 342 | "-200%": "scaleY(-200%)", 343 | }, 344 | }, 345 | }, 346 | variants: { 347 | }, 348 | plugins: [ 349 | thisPlugin, 350 | ], 351 | }), 352 | ` 353 | .scale-y-0\\% { 354 | transform: scaleY(0%) 355 | } 356 | 357 | .-scale-y-50\\% { 358 | transform: scaleY(-50%) 359 | } 360 | 361 | .-scale-y-100\\% { 362 | transform: scaleY(-100%) 363 | } 364 | 365 | .-scale-y-200\\% { 366 | transform: scaleY(-200%) 367 | } 368 | `); 369 | }); 370 | 371 | it("negative properties are prefixed with - when renamed without variants", async () => { 372 | assertCSS(await generatePluginCss({ 373 | theme: { 374 | margin: { 375 | "-4": "-1rem", 376 | "-2": "-0.5rem", 377 | 0: "0", 378 | 1: "0.25rem", 379 | }, 380 | customUtilities: { 381 | margin: { rename: "outside-space" }, 382 | }, 383 | }, 384 | variants: { 385 | margin: [], 386 | }, 387 | plugins: [ 388 | thisPlugin, 389 | ], 390 | }), 391 | ` 392 | .outside-space-0 { 393 | margin: 0; 394 | } 395 | 396 | .outside-space-1 { 397 | margin: 0.25rem; 398 | } 399 | 400 | .-outside-space-4 { 401 | margin: -1rem; 402 | } 403 | 404 | .-outside-space-2 { 405 | margin: -0.5rem; 406 | } 407 | `); 408 | }); 409 | 410 | it("negative properties are prefixed with - with variants", async () => { 411 | assertCSS(await generatePluginCss({ 412 | theme: { 413 | extend: { 414 | customUtilities: { 415 | scaleX: { property: "transform" }, 416 | }, 417 | scaleX: { 418 | 0: "scaleX(0%)", 419 | "-0.5": "scaleX(-50%)", 420 | "-1": "scaleX(-100%)", 421 | "-2": "scaleX(-200%)", 422 | }, 423 | }, 424 | }, 425 | variants: { 426 | scaleX: ["focus", "group-hover"], 427 | }, 428 | plugins: [ 429 | thisPlugin, 430 | ], 431 | }), 432 | ` 433 | .scale-x-0 { 434 | transform: scaleX(0%); 435 | } 436 | .-scale-x-0\\.5 { 437 | transform: scaleX(-50%); 438 | } 439 | .-scale-x-1 { 440 | transform: scaleX(-100%); 441 | } 442 | .-scale-x-2 { 443 | transform: scaleX(-200%); 444 | } 445 | 446 | .focus\\:scale-x-0:focus { 447 | transform: scaleX(0%); 448 | } 449 | .focus\\:-scale-x-0\\.5:focus { 450 | transform: scaleX(-50%); 451 | } 452 | .focus\\:-scale-x-1:focus { 453 | transform: scaleX(-100%); 454 | } 455 | .focus\\:-scale-x-2:focus { 456 | transform: scaleX(-200%); 457 | } 458 | 459 | .group:hover .group-hover\\:scale-x-0 { 460 | transform: scaleX(0%); 461 | } 462 | .group:hover .group-hover\\:-scale-x-0\\.5 { 463 | transform: scaleX(-50%); 464 | } 465 | .group:hover .group-hover\\:-scale-x-1 { 466 | transform: scaleX(-100%); 467 | } 468 | .group:hover .group-hover\\:-scale-x-2 { 469 | transform: scaleX(-200%); 470 | } 471 | `); 472 | }); 473 | 474 | it("negative properties are prefixed with - when renamed with variants", async () => { 475 | assertCSS(await generatePluginCss({ 476 | theme: { 477 | tracking: { 478 | "-3": "-3px", 479 | "-2": "-2px", 480 | "-1": "-1px", 481 | 0: "0", 482 | 1: "1px", 483 | }, 484 | customUtilities: { 485 | // Just ignore the fact this is not a real CSS property 486 | tracking: { rename: "letter-spacing" }, 487 | }, 488 | }, 489 | variants: { 490 | tracking: ["even", "disabled"], 491 | }, 492 | plugins: [ 493 | thisPlugin, 494 | ], 495 | }), 496 | ` 497 | .letter-spacing-0 { 498 | tracking: 0; 499 | } 500 | .letter-spacing-1 { 501 | tracking: 1px; 502 | } 503 | .-letter-spacing-3 { 504 | tracking: -3px; 505 | } 506 | .-letter-spacing-2 { 507 | tracking: -2px; 508 | } 509 | .-letter-spacing-1 { 510 | tracking: -1px; 511 | } 512 | 513 | .even\\:letter-spacing-0:nth-child(even) { 514 | tracking: 0; 515 | } 516 | .even\\:letter-spacing-1:nth-child(even) { 517 | tracking: 1px; 518 | } 519 | .even\\:-letter-spacing-3:nth-child(even) { 520 | tracking: -3px; 521 | } 522 | .even\\:-letter-spacing-2:nth-child(even) { 523 | tracking: -2px; 524 | } 525 | .even\\:-letter-spacing-1:nth-child(even) { 526 | tracking: -1px; 527 | } 528 | 529 | .disabled\\:letter-spacing-0:disabled { 530 | tracking: 0; 531 | } 532 | .disabled\\:letter-spacing-1:disabled { 533 | tracking: 1px; 534 | } 535 | .disabled\\:-letter-spacing-3:disabled { 536 | tracking: -3px; 537 | } 538 | .disabled\\:-letter-spacing-2:disabled { 539 | tracking: -2px; 540 | } 541 | .disabled\\:-letter-spacing-1:disabled { 542 | tracking: -1px; 543 | } 544 | `); 545 | }); 546 | }); 547 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2019", 4 | "module": "commonjs", 5 | "esModuleInterop": true, 6 | "declaration": true, 7 | "baseUrl": ".", 8 | "outDir": "./dist", 9 | "strict": true 10 | }, 11 | "include": [ 12 | "src", 13 | "tests", 14 | "types" 15 | ], 16 | "exclude": [ 17 | "node_modules", 18 | "dist" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /types/decs.d.ts: -------------------------------------------------------------------------------- 1 | declare module "tailwindcss"; 2 | 3 | declare module "tailwindcss/plugin" { 4 | import { CreatePlugin } from "@navith/tailwindcss-plugin-author-types"; 5 | 6 | const createPlugin: CreatePlugin; 7 | export default createPlugin; 8 | } 9 | 10 | declare module "jest-matcher-css"; 11 | --------------------------------------------------------------------------------