Update postcss-less to v3 (#6981)

This commit is contained in:
fisker Cheung authored and GitHub committed 2020-03-10 01:14:34 +02:00
1 parent 8b0798b3b6
commit acff41e7c9
10 files changed
+248 -133

No files matched your search

+1 -1
View File
@@ -52,7 +52,7 @@
"minimatch": "3.0.4",
"minimist": "1.2.0",
"n-readlines": "1.0.0",
"postcss-less": "2.0.0",
"postcss-less": "3.1.4",
"postcss-media-query-parser": "0.2.3",
"postcss-scss": "2.0.0",
"postcss-selector-parser": "2.2.3",
+63 -30
View File
@@ -4,7 +4,7 @@ const createError = require("../common/parser-create-error");
const parseFrontMatter = require("../utils/front-matter");
const lineColumnToIndex = require("../utils/line-column-to-index");
const { hasPragma } = require("./pragma");
const { isSCSS, isSCSSNestedPropertyNode } = require("./utils");
const { isLessParser, isSCSS, isSCSSNestedPropertyNode } = require("./utils");
function parseValueNodes(nodes) {
let parenGroup = {
@@ -199,10 +199,10 @@ function parseSelector(selector) {
// the content of the comment as selectors which turns it into complete
// garbage. Better to print the whole selector as-is and not try to parse
// and reformat it.
if (selector.match(/\/\/|\/\*/)) {
if (/\/\/|\/\*/.test(selector)) {
return {
type: "selector-unknown",
value: selector.replace(/^ +/, "").replace(/ +$/, "")
value: selector.trim()
};
}
@@ -283,16 +283,6 @@ function parseNestedCSS(node, options) {
node.raws.selector = selector;
}
// postcss-less@2.0.0 parse `custom-selector` as `css-decl`
if (
options.parser === "css" &&
node.type === "css-decl" &&
node.prop === "@custom-selector"
) {
selector = node.value;
node.raws.value = selector;
}
let value = "";
if (typeof node.value === "string") {
@@ -385,6 +375,64 @@ function parseNestedCSS(node, options) {
node.value = parseValue(value);
}
if (node.type === "css-atrule") {
if (isLessParser(options)) {
// mixin
if (node.mixin) {
const source =
node.raws.identifier +
node.name +
node.raws.afterName +
node.raws.params;
node.selector = parseSelector(source);
delete node.params;
return node;
}
// function
if (node.function) {
return node;
}
}
// only css support custom-selector
if (options.parser === "css" && node.name === "custom-selector") {
const customSelector = node.params.match(/:--\S+?\s+/)[0].trim();
node.customSelector = customSelector;
node.selector = parseSelector(
node.params.slice(customSelector.length).trim()
);
delete node.params;
return node;
}
if (isLessParser(options)) {
// Whitespace between variable and colon
if (node.name.includes(":") && !node.params) {
node.variable = true;
const parts = node.name.split(":");
node.name = parts[0];
node.value = parseValue(parts.slice(1).join(":"));
}
// Missing whitespace between variable and colon
if (
!["page", "nest"].includes(node.name) &&
node.params &&
node.params[0] === ":"
) {
node.variable = true;
node.value = parseValue(node.params.slice(1));
}
// Less variable
if (node.variable) {
delete node.params;
return node;
}
}
}
if (node.type === "css-atrule" && params.length > 0) {
const { name } = node;
const lowercasedName = node.name.toLowerCase();
@@ -417,6 +465,8 @@ function parseNestedCSS(node, options) {
}
if (lowercasedName === "import") {
node.import = true;
delete node.filename;
node.params = parseValue(params);
return node;
}
@@ -450,16 +500,6 @@ function parseNestedCSS(node, options) {
return node;
}
if (name === "custom-selector") {
const customSelector = params.match(/:--\S+?\s+/)[0].trim();
node.customSelector = customSelector;
node.selector = parseSelector(params.slice(customSelector.length));
delete node.params;
return node;
}
if (["media", "custom-media"].includes(lowercasedName)) {
if (params.includes("#{")) {
// Workaround for media at rule with scss interpolation
@@ -513,13 +553,6 @@ function requireParser(isSCSSParser) {
return require("postcss-scss");
}
// TODO: Remove this hack when this issue is fixed:
// https://github.com/shellscape/postcss-less/issues/88
const LessParser = require("postcss-less/dist/less-parser");
LessParser.prototype.atrule = function(...args) {
return Object.getPrototypeOf(LessParser.prototype).atrule.apply(this, args);
};
return require("postcss-less");
}
+66 -7
View File
@@ -39,6 +39,7 @@ const {
isWideKeywords,
isSCSS,
isLastNode,
isLessParser,
isSCSSControlDirectiveNode,
isDetachedRulesetDeclarationNode,
isRelationalOperatorNode,
@@ -68,7 +69,8 @@ const {
isWordNode,
isColonNode,
isMediaAndSupportsKeywords,
isColorAdjusterFuncNode
isColorAdjusterFuncNode,
lastLineHasInlineComment
} = require("./utils");
function shouldPrintComma(options) {
@@ -115,12 +117,20 @@ function genericPrint(path, options, print) {
options.locStart(node),
options.locEnd(node)
);
const rawText = node.raws.text || node.text;
// Workaround a bug where the location is off.
// https://github.com/postcss/postcss-scss/issues/63
if (!text.includes(rawText)) {
if (node.raws.inline) {
return concat(["// ", rawText]);
if (node.raws.inline || node.inline) {
const needBreakAfter = !(
node.source.input.css.split(/[\r\n]/)[node.source.end.line] || ""
).trim();
return concat([
"//",
node.raws.left + rawText,
needBreakAfter ? line : ""
]);
}
return concat(["/* ", rawText, " */"]);
}
@@ -132,7 +142,12 @@ function genericPrint(path, options, print) {
node.important ? " !important" : "",
node.nodes
? concat([
" {",
node.selector &&
node.selector.type === "selector-unknown" &&
lastLineHasInlineComment(node.selector.value)
? line
: " ",
"{",
node.nodes.length > 0
? indent(
concat([hardline, printNodeSequence(path, options, print)])
@@ -189,6 +204,52 @@ function genericPrint(path, options, print) {
}
case "css-atrule": {
const parentNode = path.getParentNode();
const isTemplatePlaceholderNodeWithoutSemiColon =
isTemplatePlaceholderNode(node) &&
!parentNode.raws.semicolon &&
options.originalText[options.locEnd(node) - 1] !== ";";
if (isLessParser(options)) {
if (node.mixin) {
return concat([
path.call(print, "selector"),
node.important ? " !important" : "",
isTemplatePlaceholderNodeWithoutSemiColon ? "" : ";"
]);
}
if (node.function) {
return concat([
node.name,
concat([path.call(print, "params")]),
isTemplatePlaceholderNodeWithoutSemiColon ? "" : ";"
]);
}
if (node.variable) {
return concat([
"@",
node.name,
": ",
node.value ? concat([path.call(print, "value")]) : "",
node.raws.between.trim() ? node.raws.between.trim() + " " : "",
node.nodes
? concat([
"{",
indent(
concat([
node.nodes.length > 0 ? softline : "",
printNodeSequence(path, options, print)
])
),
softline,
"}"
])
: "",
isTemplatePlaceholderNodeWithoutSemiColon ? "" : ";"
]);
}
}
return concat([
"@",
@@ -242,9 +303,7 @@ function genericPrint(path, options, print) {
softline,
"}"
])
: isTemplatePlaceholderNode(node) &&
!parentNode.raws.semicolon &&
options.originalText[options.locEnd(node) - 1] !== ";"
: isTemplatePlaceholderNodeWithoutSemiColon
? ""
: ";"
]);
+12 -1
View File
@@ -379,6 +379,15 @@ function isColorAdjusterFuncNode(node) {
return colorAdjusterFunctions.includes(node.value.toLowerCase());
}
// TODO: only check `less` when we don't use `less` to parse `css`
function isLessParser(options) {
return options.parser === "css" || options.parser === "less";
}
function lastLineHasInlineComment(text) {
return /\/\//.test(text.split(/[\r\n]/).pop());
}
module.exports = {
getAncestorCounter,
getAncestorNode,
@@ -392,6 +401,7 @@ module.exports = {
isWideKeywords,
isSCSS,
isLastNode,
isLessParser,
isSCSSControlDirectiveNode,
isDetachedRulesetDeclarationNode,
isRelationalOperatorNode,
@@ -424,5 +434,6 @@ module.exports = {
isWordNode,
isColonNode,
isMediaAndSupportsKeywords,
isColorAdjusterFuncNode
isColorAdjusterFuncNode,
lastLineHasInlineComment
};
@@ -217,6 +217,7 @@ $KeepScssVar: val;
@KeepDetachedRuleset();
&:extend(.Keep ALL);
&:EXTEND(.Keep ALL);
.Keep;
@@ -224,6 +225,8 @@ $KeepScssVar: val;
.Keep(4PX)!IMPORTANT;
.Keep() when (@Keep=Keep);
.Keep() when (@Keep=12PX);
.Keep() when (@Keep="12px");
.Keep() when (@Keep="12PX");
.Keep() when (@Keep=Keep12PX);
}
@@ -308,7 +311,7 @@ svg[viewBox] linearGradient,
--Keep-custom-Prop: red;
background: Var(--Keep-custom-Prop);
animation-name: KeepAnimationName;
important: something !IMPORTANT;
important: something !important;
font-family: initial;
padding: unset;
border: inherit;
@@ -364,13 +367,16 @@ $KeepScssVar: val;
@KeepDetachedRuleset();
&: EXTEND(.Keep ALL);
&:extend(.Keep ALL);
&:EXTEND(.Keep ALL);
.Keep;
.Keep();
.Keep(4px) !important;
.Keep() when (@Keep=Keep);
.Keep() when (@Keep=12PX);
.Keep() when (@Keep=12px);
.Keep() when (@Keep="12px");
.Keep() when (@Keep="12PX");
.Keep() when (@Keep=Keep12PX);
}
+3
View File
@@ -72,6 +72,7 @@ $KeepScssVar: val;
@KeepDetachedRuleset();
&:extend(.Keep ALL);
&:EXTEND(.Keep ALL);
.Keep;
@@ -79,6 +80,8 @@ $KeepScssVar: val;
.Keep(4PX)!IMPORTANT;
.Keep() when (@Keep=Keep);
.Keep() when (@Keep=12PX);
.Keep() when (@Keep="12px");
.Keep() when (@Keep="12PX");
.Keep() when (@Keep=Keep12PX);
}
@@ -1000,8 +1000,7 @@ input:not(/* comment 125 */[/* comment 126 */disabled/* comment 127 */]/* commen
,
/* comment 21 */
.element
/* comment 22 */
{
/* comment 22 */ {
}
/* comment 23 */
@@ -1011,8 +1010,7 @@ input:not(/* comment 125 */[/* comment 126 */disabled/* comment 127 */]/* commen
.element
/* comment 27 */
.element
/* comment 28 */
{
/* comment 28 */ {
}
/* comment 29 */
@@ -1024,8 +1022,7 @@ input:not(/* comment 125 */[/* comment 126 */disabled/* comment 127 */]/* commen
>
/* comment 35 */
.element
/* comment 36 */
{
/* comment 36 */ {
}
/* comment 37 */
@@ -1037,8 +1034,7 @@ input:not(/* comment 125 */[/* comment 126 */disabled/* comment 127 */]/* commen
+
/* comment 43 */
.element
/* comment 44 */
{
/* comment 44 */ {
}
/* comment 45 */
@@ -1050,8 +1046,7 @@ input:not(/* comment 125 */[/* comment 126 */disabled/* comment 127 */]/* commen
~
/* comment 51 */
.element
/* comment 52 */
{
/* comment 52 */ {
}
/* comment 53 */
@@ -1063,8 +1058,7 @@ input:not(/* comment 125 */[/* comment 126 */disabled/* comment 127 */]/* commen
>>>
/* comment 59 */
.element
/* comment 60 */
{
/* comment 60 */ {
}
a[/* comment 61 */target/* comment 62 */] {
@@ -1292,7 +1286,7 @@ printWidth: 80
&[data-field-id="1"], // comment 4
&[data-field-id="2"], // comment 5
&[data-field-id="3"], // comment 6
{
{
background: green;
}
}
@@ -1300,7 +1294,7 @@ printWidth: 80
// comment 7
.field
// comment 8
{
{
// comment 9
// comment 10
&[data-field-id="1"], // comment 11
@@ -1311,7 +1305,7 @@ printWidth: 80
// comment 16
&[data-field-id="3"], // comment 17
// comment 18
{
{
// comment 19
// comment 20
background: green;
@@ -1325,7 +1319,7 @@ printWidth: 80
// comment 25
.bar
// comment 26
{
{
}
.foo
@@ -1334,7 +1328,7 @@ printWidth: 80
// comment 28
.bar
// comment 29
{
{
}
================================================================================
@@ -1,5 +1,52 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`function-each.less 1`] = `
====================================options=====================================
parsers: ["less"]
printWidth: 80
| printWidth
=====================================input======================================
// http://lesscss.org/functions/#list-functions-each
@selectors: blue, green, red;
each(@selectors, {
.sel-@{value} {
a: b;
}
});
// TODO: fix this
each(@selectors,
{
.sel-@{value} {
a: b;
}
});
=====================================output=====================================
// http://lesscss.org/functions/#list-functions-each
@selectors: blue, green, red;
each(@selectors, {
.sel-@{value} {
a: b;
}
});
// TODO: fix this
each(@selectors,
{
.sel-@{value} {
a: b;
}
});
================================================================================
`;
exports[`less.less 1`] = `
====================================options=====================================
parsers: ["less"]
@@ -2744,7 +2791,9 @@ div {
header {
background-color: blue;
.desktop-and-old-ie({background-color: red;});
.desktop-and-old-ie({
background-color: red;
});
}
header {
+18
View File
@@ -0,0 +1,18 @@
// http://lesscss.org/functions/#list-functions-each
@selectors: blue, green, red;
each(@selectors, {
.sel-@{value} {
a: b;
}
});
// TODO: fix this
each(@selectors,
{
.sel-@{value} {
a: b;
}
});
+15 -73
View File
@@ -1510,11 +1510,6 @@ ansi-escapes@^4.2.1:
dependencies:
type-fest "^0.8.1"
ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
ansi-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
@@ -1530,11 +1525,6 @@ ansi-regex@^5.0.0:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
ansi-styles@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
ansi-styles@^3.2.0, ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
@@ -2082,17 +2072,6 @@ chalk@3.0.0, chalk@^3.0.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
dependencies:
ansi-styles "^2.2.1"
escape-string-regexp "^1.0.2"
has-ansi "^2.0.0"
strip-ansi "^3.0.0"
supports-color "^2.0.0"
character-entities-legacy@^1.0.0:
version "1.1.3"
resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz#3c729991d9293da0ede6dddcaf1f2ce1009ee8b4"
@@ -3049,7 +3028,7 @@ escape-string-regexp@2.0.0:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
@@ -3850,13 +3829,6 @@ har-validator@~5.1.0:
ajv "^6.5.5"
har-schema "^2.0.0"
has-ansi@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
dependencies:
ansi-regex "^2.0.0"
has-ansi@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-3.0.0.tgz#36077ef1d15f333484aa7fa77a28606f1c655b37"
@@ -3864,11 +3836,6 @@ has-ansi@^3.0.0:
dependencies:
ansi-regex "^3.0.0"
has-flag@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
@@ -4964,11 +4931,6 @@ jest@25.1.0:
import-local "^3.0.2"
jest-cli "^25.1.0"
js-base64@^2.1.9:
version "2.5.1"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121"
integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -6110,12 +6072,12 @@ posix-character-classes@^0.1.0:
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
postcss-less@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-2.0.0.tgz#5d190b8e057ca446d60fe2e2587ad791c9029fb8"
integrity sha512-pPNsVnpCB13nBMOcl5GVh8JGmB0JGFjqkLUDzKdVpptFFKEe9wFdEzvh2j4lD2AD+7qcrUfw9Ta+oi5+Fw7jjQ==
postcss-less@3.1.4:
version "3.1.4"
resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.4.tgz#369f58642b5928ef898ffbc1a6e93c958304c5ad"
integrity sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==
dependencies:
postcss "^5.2.16"
postcss "^7.0.14"
postcss-media-query-parser@0.2.3:
version "0.2.3"
@@ -6147,16 +6109,6 @@ postcss-values-parser@2.0.1:
indexes-of "^1.0.1"
uniq "^1.0.1"
postcss@^5.2.16:
version "5.2.18"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==
dependencies:
chalk "^1.1.3"
js-base64 "^2.1.9"
source-map "^0.5.6"
supports-color "^3.2.3"
postcss@^7.0.0:
version "7.0.26"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.26.tgz#5ed615cfcab35ba9bbb82414a4fa88ea10429587"
@@ -6166,6 +6118,15 @@ postcss@^7.0.0:
source-map "^0.6.1"
supports-color "^6.1.0"
postcss@^7.0.14:
version "7.0.27"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9"
integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==
dependencies:
chalk "^2.4.2"
source-map "^0.6.1"
supports-color "^6.1.0"
prelude-ls@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
@@ -7295,13 +7256,6 @@ strip-ansi@6.0.0, strip-ansi@^6.0.0:
dependencies:
ansi-regex "^5.0.0"
strip-ansi@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
dependencies:
ansi-regex "^2.0.0"
strip-ansi@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
@@ -7339,18 +7293,6 @@ stubs@^3.0.0:
resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b"
integrity sha1-6NK6H6nJBXAwPAMLaQD31fiavls=
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
supports-color@^3.2.3:
version "3.2.3"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=
dependencies:
has-flag "^1.0.0"
supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"