├── .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 | 
89 |
90 | #### Tests failed
91 |
92 | 
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 |
--------------------------------------------------------------------------------