├── .gitignore ├── .prettierrc ├── LICENSE.md ├── README.md ├── SilentReporter.js ├── StdIo.js ├── helpers.js ├── index.js ├── package.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .DS_store 3 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "proseWrap": "always", 3 | "singleQuote": true, 4 | "trailingComma": "es5" 5 | } 6 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Rick Hanlon II 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

Jest Silent Reporter

4 |

5 |

6 | Custom reporter 7 | for Jest that only prints failed tests.

8 |

9 | 10 |

11 | 12 | ## Installation 13 | 14 | Using [npm](https://www.npmjs.com/): 15 | 16 | ```sh 17 | $ npm i --save-dev jest-silent-reporter 18 | ``` 19 | 20 | Using [yarn](https://yarnpkg.com/): 21 | 22 | ```sh 23 | $ yarn add --dev jest-silent-reporter 24 | ``` 25 | 26 | ## Usage 27 | 28 | Jest CLI: 29 | 30 | ```bash 31 | jest --reporters=jest-silent-reporter 32 | ``` 33 | 34 | Jest config: 35 | 36 | ```json 37 | { 38 | "reporters": ["jest-silent-reporter"] 39 | } 40 | ``` 41 | 42 | ## Options 43 | 44 | ### useDots: boolean 45 | 46 | For large test suites, `jest-silent-reporter` can cause CI to fail due to having 47 | no output for some configured amount of time. Using the `useDots` option will 48 | output dots for each test file, similar to a dot reporter. 49 | 50 | ```json 51 | { 52 | "reporters": [["jest-silent-reporter", { "useDots": true }]] 53 | } 54 | ``` 55 | 56 | Note: this config is also available as an environment variable `JEST_SILENT_REPORTER_DOTS=true`. 57 | 58 | ### showWarnings: boolean 59 | 60 | Warnings are supressed by default, use `showWarnings` to log them. 61 | 62 | ```json 63 | { 64 | "reporters": [["jest-silent-reporter", { "showWarnings": true }]] 65 | } 66 | ``` 67 | 68 | Note: this config is also available as an environment variable `JEST_SILENT_REPORTER_SHOW_WARNINGS=true`. 69 | 70 | 71 | ### showPaths: boolean 72 | 73 | Sometimes it might come in handy to display the test suites' paths (i.e. when 74 | running tests in a terminal inside IDE for quicker file navigation). 75 | 76 | ```json 77 | { 78 | "reporters": [["jest-silent-reporter", { "showPaths": true }]] 79 | } 80 | ``` 81 | 82 | Note: this config is also available as an environment variable `JEST_SILENT_REPORTER_SHOW_PATHS=true`. 83 | 84 | ## Screenshots 85 | 86 | #### All tests passed 87 | 88 | ![Screenshot: all tests passed](https://user-images.githubusercontent.com/2440089/188526258-3d352067-d0c4-4999-9e22-5613981c8887.png) 89 | 90 | #### Tests failed 91 | 92 | ![Screenshot: some tests failed](https://user-images.githubusercontent.com/2440089/188526185-4b3e217c-0228-4e3d-930a-5e508e4770b3.png) 93 | 94 | ## Licence 95 | 96 | MIT 97 | -------------------------------------------------------------------------------- /SilentReporter.js: -------------------------------------------------------------------------------- 1 | const jestUtils = require('jest-util'); 2 | const helpers = require('./helpers'); 3 | const StdIo = require('./StdIo'); 4 | 5 | class SilentReporter { 6 | constructor(globalConfig, options = {}) { 7 | this._globalConfig = globalConfig; 8 | this.stdio = new StdIo(); 9 | this.useDots = !!process.env.JEST_SILENT_REPORTER_DOTS || !!options.useDots; 10 | this.showPaths = 11 | !!process.env.JEST_SILENT_REPORTER_SHOW_PATHS || !!options.showPaths; 12 | this.showWarnings = 13 | !!process.env.JEST_SILENT_REPORTER_SHOW_WARNINGS || 14 | !!options.showWarnings; 15 | this.showSeed = !!globalConfig.showSeed 16 | } 17 | 18 | onRunStart() { 19 | if (jestUtils.isInteractive) { 20 | jestUtils.clearLine(process.stderr); 21 | } 22 | } 23 | 24 | onRunComplete() { 25 | if (this.useDots) { 26 | this.stdio.log('\n'); 27 | } 28 | if (this.showSeed) { 29 | this.stdio.log(`Seed: ${this._globalConfig.seed}`) 30 | } 31 | this.stdio.close(); 32 | } 33 | 34 | onTestResult(test, testResult) { 35 | if (this.useDots) { 36 | this.stdio.logInline('.'); 37 | } 38 | 39 | if (!testResult.skipped) { 40 | const didUpdate = this._globalConfig.updateSnapshot === 'all'; 41 | let hasSnapshotFailures = false; 42 | if (testResult.snapshot) { 43 | if (!didUpdate && testResult.snapshot.unchecked) { 44 | hasSnapshotFailures = true; 45 | } 46 | if (testResult.snapshot.unmatched) { 47 | hasSnapshotFailures = true; 48 | } 49 | } 50 | 51 | const hasFailures = testResult.failureMessage || hasSnapshotFailures; 52 | 53 | if (this.showPaths && hasFailures) { 54 | this.stdio.log('\n' + test.path); 55 | } 56 | if (testResult.failureMessage) 57 | this.stdio.log('\n' + testResult.failureMessage); 58 | if (testResult.console && this.showWarnings) { 59 | testResult.console 60 | .filter(entry => ['error', 'warn'].includes(entry.type) && entry.message) 61 | .map(entry => entry.message) 62 | .forEach(this.stdio.log); 63 | } 64 | const snapshotStatuses = helpers.getSnapshotStatus( 65 | testResult.snapshot, 66 | didUpdate 67 | ); 68 | snapshotStatuses.forEach(this.stdio.log); 69 | } 70 | } 71 | } 72 | 73 | module.exports = SilentReporter; 74 | -------------------------------------------------------------------------------- /StdIo.js: -------------------------------------------------------------------------------- 1 | class StdIo { 2 | constructor() { 3 | this._out = process.stdout.write.bind(process.stdout); 4 | this._err = process.stderr.write.bind(process.stderr); 5 | this._bufferedOutput = new Set(); 6 | this._wrapStdio(process.stdout); 7 | this._wrapStdio(process.stderr); 8 | } 9 | 10 | log(message) { 11 | process.stderr.write(message + '\n'); 12 | } 13 | 14 | logInline(message) { 15 | process.stderr.write(message); 16 | } 17 | 18 | close() { 19 | this._forceFlushBufferedOutput(); 20 | process.stdout.write = this._out; 21 | process.stderr.write = this._err; 22 | } 23 | 24 | // Don't wait for the debounced call and flush all output immediately. 25 | _forceFlushBufferedOutput() { 26 | for (const flushBufferedOutput of this._bufferedOutput) { 27 | flushBufferedOutput(); 28 | } 29 | } 30 | 31 | _wrapStdio(stream) { 32 | const originalWrite = stream.write; 33 | 34 | let buffer = []; 35 | let timeout = null; 36 | 37 | const flushBufferedOutput = () => { 38 | const string = buffer.join(''); 39 | buffer = []; 40 | 41 | if (string) { 42 | originalWrite.call(stream, string); 43 | } 44 | 45 | this._bufferedOutput.delete(flushBufferedOutput); 46 | }; 47 | 48 | this._bufferedOutput.add(flushBufferedOutput); 49 | 50 | const debouncedFlush = () => { 51 | // If the process blows up no errors would be printed. 52 | // There should be a smart way to buffer stderr, but for now 53 | // we just won't buffer it. 54 | if (stream === process.stderr) { 55 | flushBufferedOutput(); 56 | } else { 57 | if (!timeout) { 58 | timeout = setTimeout(() => { 59 | flushBufferedOutput(); 60 | timeout = null; 61 | }, 100); 62 | } 63 | } 64 | }; 65 | 66 | stream.write = chunk => { 67 | buffer.push(chunk); 68 | debouncedFlush(); 69 | return true; 70 | }; 71 | } 72 | } 73 | 74 | module.exports = StdIo; 75 | -------------------------------------------------------------------------------- /helpers.js: -------------------------------------------------------------------------------- 1 | const chalk = require('chalk'); 2 | 3 | const ARROW = ' \u203A '; 4 | const FAIL_COLOR = chalk.bold.red; 5 | const SNAPSHOT_ADDED = chalk.bold.green; 6 | const SNAPSHOT_REMOVED = chalk.bold.red; 7 | const SNAPSHOT_UPDATED = chalk.bold.green; 8 | 9 | const pluralize = (word, count) => `${count} ${word}${count === 1 ? '' : 's'}`; 10 | 11 | const getSnapshotStatus = (snapshot, afterUpdate) => { 12 | const statuses = []; 13 | 14 | if (snapshot.added) { 15 | statuses.push( 16 | SNAPSHOT_ADDED(ARROW + pluralize('snapshot', snapshot.added)) + 17 | ' written.' 18 | ); 19 | } 20 | 21 | if (snapshot.updated) { 22 | statuses.push( 23 | SNAPSHOT_UPDATED(ARROW + pluralize('snapshot', snapshot.updated)) + 24 | ` updated.` 25 | ); 26 | } 27 | 28 | if (snapshot.unchecked) { 29 | statuses.push( 30 | FAIL_COLOR(ARROW + pluralize('obsolete snapshot', snapshot.unchecked)) + 31 | (afterUpdate ? ' removed' : ' found') + 32 | '.' 33 | ); 34 | } 35 | 36 | if (snapshot.fileDeleted) { 37 | statuses.push( 38 | SNAPSHOT_REMOVED(ARROW + 'Obsolete snapshot file') + ` removed.` 39 | ); 40 | } 41 | 42 | if (snapshot.unmatched) { 43 | statuses.push( 44 | FAIL_COLOR(ARROW + pluralize('snapshot test', snapshot.unmatched)) + 45 | ' failed.' 46 | ); 47 | } 48 | return statuses; 49 | }; 50 | 51 | module.exports = { 52 | getSnapshotStatus, 53 | }; 54 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const SilentReporter = require('./SilentReporter'); 2 | 3 | module.exports = SilentReporter; 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jest-silent-reporter", 3 | "version": "0.6.0", 4 | "description": "A silent reporter for Jest", 5 | "main": "index.js", 6 | "repository": "https://github.com/rickhanlonii/jest-silent-reporter", 7 | "author": "rickhanlonii ", 8 | "license": "MIT", 9 | "scripts": { 10 | "prettier": "prettier --write **/**.js **/**.md" 11 | }, 12 | "dependencies": { 13 | "chalk": "^4.0.0", 14 | "jest-util": "^26.0.0" 15 | }, 16 | "devDependencies": { 17 | "prettier": "^1.10.2" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@jest/types@^26.6.1": 6 | version "26.6.1" 7 | resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.1.tgz#2638890e8031c0bc8b4681e0357ed986e2f866c5" 8 | integrity sha512-ywHavIKNpAVrStiRY5wiyehvcktpijpItvGiK72RAn5ctqmzvPk8OvKnvHeBqa1XdQr959CTWAJMqxI8BTibyg== 9 | dependencies: 10 | "@types/istanbul-lib-coverage" "^2.0.0" 11 | "@types/istanbul-reports" "^3.0.0" 12 | "@types/node" "*" 13 | "@types/yargs" "^15.0.0" 14 | chalk "^4.0.0" 15 | 16 | "@types/color-name@^1.1.1": 17 | version "1.1.1" 18 | resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" 19 | integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== 20 | 21 | "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": 22 | version "2.0.1" 23 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" 24 | integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== 25 | 26 | "@types/istanbul-lib-report@*": 27 | version "3.0.0" 28 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" 29 | integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== 30 | dependencies: 31 | "@types/istanbul-lib-coverage" "*" 32 | 33 | "@types/istanbul-reports@^3.0.0": 34 | version "3.0.0" 35 | resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" 36 | integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== 37 | dependencies: 38 | "@types/istanbul-lib-report" "*" 39 | 40 | "@types/node@*": 41 | version "14.14.3" 42 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.3.tgz#e1c09064121f894baaad2bd9f12ce4a41bffb274" 43 | integrity sha512-33/L34xS7HVUx23e0wOT2V1qPF1IrHgQccdJVm9uXGTB9vFBrrzBtkQymT8VskeKOxjz55MSqMv0xuLq+u98WQ== 44 | 45 | "@types/yargs-parser@*": 46 | version "15.0.0" 47 | resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" 48 | integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== 49 | 50 | "@types/yargs@^15.0.0": 51 | version "15.0.4" 52 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299" 53 | integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg== 54 | dependencies: 55 | "@types/yargs-parser" "*" 56 | 57 | ansi-styles@^4.1.0: 58 | version "4.2.1" 59 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" 60 | integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== 61 | dependencies: 62 | "@types/color-name" "^1.1.1" 63 | color-convert "^2.0.1" 64 | 65 | braces@^3.0.1: 66 | version "3.0.2" 67 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 68 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 69 | dependencies: 70 | fill-range "^7.0.1" 71 | 72 | chalk@^4.0.0: 73 | version "4.1.0" 74 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" 75 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 76 | dependencies: 77 | ansi-styles "^4.1.0" 78 | supports-color "^7.1.0" 79 | 80 | ci-info@^2.0.0: 81 | version "2.0.0" 82 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" 83 | integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== 84 | 85 | color-convert@^2.0.1: 86 | version "2.0.1" 87 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 88 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 89 | dependencies: 90 | color-name "~1.1.4" 91 | 92 | color-name@~1.1.4: 93 | version "1.1.4" 94 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 95 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 96 | 97 | fill-range@^7.0.1: 98 | version "7.0.1" 99 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 100 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 101 | dependencies: 102 | to-regex-range "^5.0.1" 103 | 104 | graceful-fs@^4.2.4: 105 | version "4.2.4" 106 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" 107 | integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== 108 | 109 | has-flag@^4.0.0: 110 | version "4.0.0" 111 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 112 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 113 | 114 | is-ci@^2.0.0: 115 | version "2.0.0" 116 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" 117 | integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== 118 | dependencies: 119 | ci-info "^2.0.0" 120 | 121 | is-number@^7.0.0: 122 | version "7.0.0" 123 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 124 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 125 | 126 | jest-util@^26.0.0: 127 | version "26.6.1" 128 | resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.1.tgz#4cc0d09ec57f28d12d053887eec5dc976a352e9b" 129 | integrity sha512-xCLZUqVoqhquyPLuDXmH7ogceGctbW8SMyQVjD9o+1+NPWI7t0vO08udcFLVPLgKWcvc+zotaUv/RuaR6l8HIA== 130 | dependencies: 131 | "@jest/types" "^26.6.1" 132 | "@types/node" "*" 133 | chalk "^4.0.0" 134 | graceful-fs "^4.2.4" 135 | is-ci "^2.0.0" 136 | micromatch "^4.0.2" 137 | 138 | micromatch@^4.0.2: 139 | version "4.0.2" 140 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" 141 | integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== 142 | dependencies: 143 | braces "^3.0.1" 144 | picomatch "^2.0.5" 145 | 146 | picomatch@^2.0.5: 147 | version "2.2.2" 148 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 149 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 150 | 151 | prettier@^1.10.2: 152 | version "1.19.1" 153 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" 154 | integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== 155 | 156 | supports-color@^7.1.0: 157 | version "7.1.0" 158 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" 159 | integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== 160 | dependencies: 161 | has-flag "^4.0.0" 162 | 163 | to-regex-range@^5.0.1: 164 | version "5.0.1" 165 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 166 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 167 | dependencies: 168 | is-number "^7.0.0" 169 | --------------------------------------------------------------------------------