Skip to content

Commit b491572

Browse files
authored
fix: parsing custom declarations with auto values (#80)
1 parent c5ee098 commit b491572

1 file changed

Lines changed: 20 additions & 14 deletions

File tree

src/compiler/declarations.ts

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -274,9 +274,9 @@ export function parseDeclaration(
274274
}
275275

276276
if (declaration.property === "unparsed") {
277-
parseDeclarationUnparsed(declaration, builder);
277+
parseUnparsedDeclaration(declaration, builder);
278278
} else if (declaration.property === "custom") {
279-
parseDeclarationCustom(declaration, builder);
279+
parseCustomDeclaration(declaration, builder);
280280
} else {
281281
parseWithParser(declaration, builder);
282282
}
@@ -888,7 +888,7 @@ function parseContainer(
888888
return;
889889
}
890890

891-
export function parseDeclarationUnparsed(
891+
export function parseUnparsedDeclaration(
892892
declaration: Extract<Declaration, { property: "unparsed" }>,
893893
builder: StylesheetBuilder,
894894
) {
@@ -946,7 +946,7 @@ export function parseDeclarationUnparsed(
946946
}
947947
}
948948

949-
export function parseDeclarationCustom(
949+
export function parseCustomDeclaration(
950950
declaration: Extract<Declaration, { property: "custom" }>,
951951
builder: StylesheetBuilder,
952952
) {
@@ -956,7 +956,6 @@ export function parseDeclarationCustom(
956956
property.startsWith("--") ||
957957
property.startsWith("-rn-")
958958
) {
959-
builder.setWarningProperty(property);
960959
builder.addDescriptor(
961960
property,
962961
parseUnparsed(declaration.value.value, builder, allowAuto.has(property)),
@@ -975,9 +974,10 @@ export function parseDeclarationCustom(
975974
export function reduceParseUnparsed(
976975
tokenOrValues: TokenOrValue[],
977976
builder: StylesheetBuilder,
977+
allowAuto: boolean,
978978
): StyleDescriptor {
979979
const result = tokenOrValues
980-
.map((tokenOrValue) => parseUnparsed(tokenOrValue, builder))
980+
.map((tokenOrValue) => parseUnparsed(tokenOrValue, builder, allowAuto))
981981
.filter((v) => v !== undefined);
982982

983983
if (result.length === 0) {
@@ -1022,11 +1022,12 @@ export function reduceParseUnparsed(
10221022
export function unparsedFunction(
10231023
token: Extract<TokenOrValue, { type: "function" }>,
10241024
builder: StylesheetBuilder,
1025+
allowAuto: boolean,
10251026
): StyleFunction {
10261027
return [
10271028
{},
10281029
token.value.name,
1029-
reduceParseUnparsed(token.value.arguments, builder),
1030+
reduceParseUnparsed(token.value.arguments, builder, allowAuto),
10301031
];
10311032
}
10321033

@@ -1066,19 +1067,23 @@ export function parseUnparsed(
10661067
}
10671068

10681069
if (Array.isArray(tokenOrValue)) {
1069-
const args = reduceParseUnparsed(tokenOrValue, builder);
1070+
const args = reduceParseUnparsed(tokenOrValue, builder, allowAuto);
10701071
if (!args) return;
10711072
if (Array.isArray(args) && args.length === 1) return args[0];
10721073
return args;
10731074
}
10741075

10751076
switch (tokenOrValue.type) {
10761077
case "unresolved-color": {
1077-
return parseUnresolvedColor(tokenOrValue.value, builder);
1078+
return parseUnresolvedColor(tokenOrValue.value, builder, allowAuto);
10781079
}
10791080
case "var": {
10801081
let args: StyleDescriptor = tokenOrValue.value.name.ident.slice(2);
1081-
const fallback = parseUnparsed(tokenOrValue.value.fallback, builder);
1082+
const fallback = parseUnparsed(
1083+
tokenOrValue.value.fallback,
1084+
builder,
1085+
allowAuto,
1086+
);
10821087
if (fallback !== undefined) {
10831088
args = [args, fallback];
10841089
}
@@ -1099,7 +1104,7 @@ export function parseUnparsed(
10991104
case "translateX":
11001105
case "translateY":
11011106
tokenOrValue.value.name = `@${tokenOrValue.value.name}`;
1102-
return unparsedFunction(tokenOrValue, builder);
1107+
return unparsedFunction(tokenOrValue, builder, allowAuto);
11031108
case "blur":
11041109
case "brightness":
11051110
case "contrast":
@@ -1124,7 +1129,7 @@ export function parseUnparsed(
11241129
case "sepia":
11251130
case "shadow":
11261131
case "steps":
1127-
return unparsedFunction(tokenOrValue, builder);
1132+
return unparsedFunction(tokenOrValue, builder, allowAuto);
11281133
case "hairlineWidth":
11291134
return [{}, tokenOrValue.value.name, []];
11301135
case "calc":
@@ -2631,6 +2636,7 @@ export function parseTranslateProp(
26312636
export function parseUnresolvedColor(
26322637
color: UnresolvedColor,
26332638
builder: StylesheetBuilder,
2639+
allowAuto: boolean,
26342640
): StyleDescriptor {
26352641
switch (color.type) {
26362642
case "rgb":
@@ -2655,12 +2661,12 @@ export function parseUnresolvedColor(
26552661
m: [["=", "prefers-color-scheme", "dark"]],
26562662
});
26572663
builder.addUnnamedDescriptor(
2658-
reduceParseUnparsed(color.dark, builder),
2664+
reduceParseUnparsed(color.dark, builder, allowAuto),
26592665
false,
26602666
extraRule,
26612667
);
26622668
builder.addExtraRule(extraRule);
2663-
return reduceParseUnparsed(color.light, builder);
2669+
return reduceParseUnparsed(color.light, builder, allowAuto);
26642670
}
26652671
default:
26662672
color satisfies never;

0 commit comments

Comments
 (0)