@hypergood/css-core 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/plugin.cjs +145 -25
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.js +145 -25
- package/dist/plugin.js.map +1 -1
- package/package.json +2 -1
- package/src/evaluate.ts +146 -21
- package/src/plugin.ts +13 -4
- package/src/print.ts +1 -9
- package/tests/evaluate.test.ts +76 -0
package/dist/plugin.cjs
CHANGED
|
@@ -67351,55 +67351,129 @@ function cssJsLogger() {
|
|
|
67351
67351
|
}
|
|
67352
67352
|
|
|
67353
67353
|
// src/evaluate.ts
|
|
67354
|
-
var UNKNOWN = {
|
|
67354
|
+
var UNKNOWN = (badNode) => ({
|
|
67355
67355
|
confident: false,
|
|
67356
|
-
value: void 0
|
|
67357
|
-
|
|
67356
|
+
value: void 0,
|
|
67357
|
+
badNode
|
|
67358
|
+
});
|
|
67358
67359
|
var known = (value2) => ({
|
|
67359
67360
|
confident: true,
|
|
67360
67361
|
value: value2
|
|
67361
67362
|
});
|
|
67362
67363
|
function evaluateBabelExpression(node, knownConstants) {
|
|
67363
|
-
if (!node) return UNKNOWN;
|
|
67364
|
+
if (!node) return UNKNOWN(node);
|
|
67364
67365
|
switch (node.type) {
|
|
67366
|
+
case "ArrayExpression":
|
|
67367
|
+
return evaluateArrayExpression(node, knownConstants);
|
|
67365
67368
|
case "BinaryExpression":
|
|
67366
67369
|
return evaluateBinaryExpression(node, knownConstants);
|
|
67367
67370
|
case "Identifier":
|
|
67368
67371
|
return evaluateIdentifier(node, knownConstants);
|
|
67369
|
-
case "NumericLiteral":
|
|
67370
|
-
return evaluateNumericLiteral(node);
|
|
67371
67372
|
case "MemberExpression":
|
|
67372
67373
|
return evaluateMemberExpression(node, knownConstants);
|
|
67374
|
+
case "NullLiteral":
|
|
67375
|
+
return evaluateNullLiteral(node);
|
|
67376
|
+
case "NumericLiteral":
|
|
67377
|
+
return evaluateNumericLiteral(node);
|
|
67373
67378
|
case "ObjectExpression":
|
|
67374
67379
|
return evaluateObjectExpression(node, knownConstants);
|
|
67375
67380
|
case "StringLiteral":
|
|
67376
67381
|
return evaluateStringLiteral(node);
|
|
67377
67382
|
case "TemplateLiteral":
|
|
67378
67383
|
return evaluateTemplateLiteral(node, knownConstants);
|
|
67384
|
+
case "UnaryExpression":
|
|
67385
|
+
return evaluateUnaryExpression(node, knownConstants);
|
|
67379
67386
|
default:
|
|
67380
|
-
return UNKNOWN;
|
|
67387
|
+
return UNKNOWN(node);
|
|
67381
67388
|
}
|
|
67382
67389
|
}
|
|
67390
|
+
function evaluateArrayExpression(node, knownConstants) {
|
|
67391
|
+
const elements = [];
|
|
67392
|
+
for (const item of node.elements) {
|
|
67393
|
+
if (!item) return UNKNOWN(node);
|
|
67394
|
+
if (item.type === "SpreadElement") {
|
|
67395
|
+
const spreadElements = evaluateBabelExpression(
|
|
67396
|
+
item.argument,
|
|
67397
|
+
knownConstants
|
|
67398
|
+
);
|
|
67399
|
+
if (spreadElements.confident) {
|
|
67400
|
+
elements.push(...spreadElements.value);
|
|
67401
|
+
continue;
|
|
67402
|
+
} else {
|
|
67403
|
+
return UNKNOWN(spreadElements.badNode);
|
|
67404
|
+
}
|
|
67405
|
+
}
|
|
67406
|
+
const result = evaluateBabelExpression(item, knownConstants);
|
|
67407
|
+
if (result.confident) {
|
|
67408
|
+
elements.push(result.value);
|
|
67409
|
+
} else {
|
|
67410
|
+
return UNKNOWN(result.badNode);
|
|
67411
|
+
}
|
|
67412
|
+
}
|
|
67413
|
+
return known(elements);
|
|
67414
|
+
}
|
|
67383
67415
|
function evaluateBinaryExpression(node, knownConstants) {
|
|
67384
67416
|
const left = evaluateBabelExpression(node.left, knownConstants);
|
|
67385
67417
|
const right = evaluateBabelExpression(node.right, knownConstants);
|
|
67386
|
-
if (!left.confident
|
|
67418
|
+
if (!left.confident) return UNKNOWN(left.badNode);
|
|
67419
|
+
if (!right.confident) return UNKNOWN(right.badNode);
|
|
67387
67420
|
switch (node.operator) {
|
|
67388
|
-
case "*":
|
|
67389
|
-
return known(left.value * right.value);
|
|
67390
67421
|
case "+":
|
|
67391
67422
|
return known(left.value + right.value);
|
|
67392
67423
|
case "-":
|
|
67393
67424
|
return known(left.value - right.value);
|
|
67425
|
+
case "/":
|
|
67426
|
+
return known(left.value / right.value);
|
|
67427
|
+
case "%":
|
|
67428
|
+
return known(left.value % right.value);
|
|
67429
|
+
case "*":
|
|
67430
|
+
return known(left.value * right.value);
|
|
67431
|
+
case "**":
|
|
67432
|
+
return known(left.value ** right.value);
|
|
67433
|
+
case "&":
|
|
67434
|
+
return known(left.value & right.value);
|
|
67435
|
+
case "|":
|
|
67436
|
+
return known(left.value | right.value);
|
|
67437
|
+
case ">>":
|
|
67438
|
+
return known(left.value >> right.value);
|
|
67439
|
+
case ">>>":
|
|
67440
|
+
return known(left.value >>> right.value);
|
|
67441
|
+
case "<<":
|
|
67442
|
+
return known(left.value << right.value);
|
|
67443
|
+
case "^":
|
|
67444
|
+
return known(left.value ^ right.value);
|
|
67445
|
+
case "==":
|
|
67446
|
+
return known(left.value == right.value);
|
|
67447
|
+
case "===":
|
|
67448
|
+
return known(left.value === right.value);
|
|
67449
|
+
case "!=":
|
|
67450
|
+
return known(left.value != right.value);
|
|
67451
|
+
case "!==":
|
|
67452
|
+
return known(left.value !== right.value);
|
|
67453
|
+
case "in":
|
|
67454
|
+
return known(left.value in right.value);
|
|
67455
|
+
case "instanceof":
|
|
67456
|
+
return known(left.value instanceof right.value);
|
|
67457
|
+
case ">":
|
|
67458
|
+
return known(left.value > right.value);
|
|
67459
|
+
case "<":
|
|
67460
|
+
return known(left.value < right.value);
|
|
67461
|
+
case ">=":
|
|
67462
|
+
return known(left.value >= right.value);
|
|
67463
|
+
case "<=":
|
|
67464
|
+
return known(left.value <= right.value);
|
|
67394
67465
|
default:
|
|
67395
|
-
return UNKNOWN;
|
|
67466
|
+
return UNKNOWN(node);
|
|
67396
67467
|
}
|
|
67397
67468
|
}
|
|
67398
67469
|
function evaluateIdentifier(node, knownConstants) {
|
|
67399
67470
|
if (node.name in knownConstants) {
|
|
67400
67471
|
return known(knownConstants[node.name]);
|
|
67401
67472
|
}
|
|
67402
|
-
|
|
67473
|
+
if (node.name === "undefined") {
|
|
67474
|
+
return known(void 0);
|
|
67475
|
+
}
|
|
67476
|
+
return UNKNOWN(node);
|
|
67403
67477
|
}
|
|
67404
67478
|
function evaluateMemberExpression(node, knownConstants) {
|
|
67405
67479
|
const obj = evaluateBabelExpression(node.object, knownConstants);
|
|
@@ -67411,12 +67485,15 @@ function evaluateMemberExpression(node, knownConstants) {
|
|
|
67411
67485
|
if (propertyNode.type === "Identifier") {
|
|
67412
67486
|
property = known(propertyNode.name);
|
|
67413
67487
|
} else {
|
|
67414
|
-
return UNKNOWN;
|
|
67488
|
+
return UNKNOWN(node);
|
|
67415
67489
|
}
|
|
67416
67490
|
}
|
|
67417
|
-
if (!obj.confident || !property.confident) return UNKNOWN;
|
|
67491
|
+
if (!obj.confident || !property.confident) return UNKNOWN(node);
|
|
67418
67492
|
return known(obj.value[property.value]);
|
|
67419
67493
|
}
|
|
67494
|
+
function evaluateNullLiteral(node) {
|
|
67495
|
+
return known(null);
|
|
67496
|
+
}
|
|
67420
67497
|
function evaluateNumericLiteral(node) {
|
|
67421
67498
|
return known(node.value);
|
|
67422
67499
|
}
|
|
@@ -67425,9 +67502,22 @@ function evaluateObjectExpression(node, knownConstants) {
|
|
|
67425
67502
|
for (const property of node.properties) {
|
|
67426
67503
|
switch (property.type) {
|
|
67427
67504
|
case "ObjectMethod":
|
|
67428
|
-
return UNKNOWN;
|
|
67429
|
-
case "SpreadElement":
|
|
67430
|
-
|
|
67505
|
+
return UNKNOWN(property);
|
|
67506
|
+
case "SpreadElement": {
|
|
67507
|
+
const values = evaluateBabelExpression(
|
|
67508
|
+
property.argument,
|
|
67509
|
+
knownConstants
|
|
67510
|
+
);
|
|
67511
|
+
if (values.confident) {
|
|
67512
|
+
result = {
|
|
67513
|
+
...result,
|
|
67514
|
+
...values.value
|
|
67515
|
+
};
|
|
67516
|
+
continue;
|
|
67517
|
+
} else {
|
|
67518
|
+
return UNKNOWN(property);
|
|
67519
|
+
}
|
|
67520
|
+
}
|
|
67431
67521
|
case "ObjectProperty": {
|
|
67432
67522
|
const keyNode = property.key;
|
|
67433
67523
|
let key2;
|
|
@@ -67439,11 +67529,12 @@ function evaluateObjectExpression(node, knownConstants) {
|
|
|
67439
67529
|
} else if (keyNode.type === "Identifier") {
|
|
67440
67530
|
key2 = known(keyNode.name);
|
|
67441
67531
|
} else {
|
|
67442
|
-
return UNKNOWN;
|
|
67532
|
+
return UNKNOWN(property);
|
|
67443
67533
|
}
|
|
67444
67534
|
}
|
|
67445
67535
|
const value2 = evaluateBabelExpression(property.value, knownConstants);
|
|
67446
|
-
if (!key2 || !key2.confident || !value2.confident)
|
|
67536
|
+
if (!key2 || !key2.confident || !value2.confident)
|
|
67537
|
+
return UNKNOWN(property);
|
|
67447
67538
|
result[key2.value] = value2.value;
|
|
67448
67539
|
}
|
|
67449
67540
|
}
|
|
@@ -67459,7 +67550,7 @@ function evaluateTemplateLiteral(node, knownConstants) {
|
|
|
67459
67550
|
(e) => evaluateBabelExpression(e, knownConstants)
|
|
67460
67551
|
);
|
|
67461
67552
|
if (expressions.some((e) => !e.confident)) {
|
|
67462
|
-
return UNKNOWN;
|
|
67553
|
+
return UNKNOWN(node);
|
|
67463
67554
|
}
|
|
67464
67555
|
const expressionValues = expressions.map((e) => e.value);
|
|
67465
67556
|
let result = "";
|
|
@@ -67472,6 +67563,26 @@ function evaluateTemplateLiteral(node, knownConstants) {
|
|
|
67472
67563
|
}
|
|
67473
67564
|
return known(result);
|
|
67474
67565
|
}
|
|
67566
|
+
function evaluateUnaryExpression(node, knownConstants) {
|
|
67567
|
+
const argument = evaluateBabelExpression(node.argument, knownConstants);
|
|
67568
|
+
if (!argument.confident) return UNKNOWN(argument.badNode);
|
|
67569
|
+
switch (node.operator) {
|
|
67570
|
+
case "+":
|
|
67571
|
+
return known(+argument.value);
|
|
67572
|
+
case "-":
|
|
67573
|
+
return known(-argument.value);
|
|
67574
|
+
case "void":
|
|
67575
|
+
return known(void argument.value);
|
|
67576
|
+
case "!":
|
|
67577
|
+
return known(!argument.value);
|
|
67578
|
+
case "~":
|
|
67579
|
+
return known(~argument.value);
|
|
67580
|
+
case "typeof":
|
|
67581
|
+
return known(typeof argument.value);
|
|
67582
|
+
default:
|
|
67583
|
+
return UNKNOWN(node);
|
|
67584
|
+
}
|
|
67585
|
+
}
|
|
67475
67586
|
|
|
67476
67587
|
// src/runtime.ts
|
|
67477
67588
|
function mergeClassNames(classNames) {
|
|
@@ -67505,7 +67616,7 @@ ${styleRules2.map((rule) => ` ${rule.property}: ${rule.value};`).join("\n")}
|
|
|
67505
67616
|
});
|
|
67506
67617
|
const tree = groupStyleRules(styleRules, []);
|
|
67507
67618
|
const rulesSection = renderStyleRuleNode(tree, styleRuleToClassName);
|
|
67508
|
-
return keyframesSection + "\n" + rulesSection
|
|
67619
|
+
return keyframesSection + "\n" + rulesSection;
|
|
67509
67620
|
}
|
|
67510
67621
|
function renderStyleRuleNode(node, styleRuleToClassName, indent = 0) {
|
|
67511
67622
|
const rulesSection = node.rules.sort((a, b) => a.value.localeCompare(b.value)).sort((a, b) => a.property.localeCompare(b.property)).sort((a, b) => a.selector.length - b.selector.length).sort((a, b) => a.atRules.length - b.atRules.length).map((rule) => {
|
|
@@ -67961,7 +68072,7 @@ function babelPluginReplaceCssProp({
|
|
|
67961
68072
|
}
|
|
67962
68073
|
}
|
|
67963
68074
|
},
|
|
67964
|
-
JSXAttribute(path) {
|
|
68075
|
+
JSXAttribute(path, state) {
|
|
67965
68076
|
if (path.node.name && path.node.name.type === "JSXIdentifier" && path.node.name.name === "css") {
|
|
67966
68077
|
const value2 = path.node.value;
|
|
67967
68078
|
if (value2?.type !== "JSXExpressionContainer") return;
|
|
@@ -67974,9 +68085,18 @@ function babelPluginReplaceCssProp({
|
|
|
67974
68085
|
);
|
|
67975
68086
|
let styleObject = styleObjectResult.value;
|
|
67976
68087
|
if (!styleObjectResult.confident) {
|
|
67977
|
-
|
|
67978
|
-
|
|
67979
|
-
|
|
68088
|
+
const badNode = styleObjectResult.badNode;
|
|
68089
|
+
if (badNode) {
|
|
68090
|
+
const { start, end } = badNode;
|
|
68091
|
+
const rawCode = state.file.code.slice(start, end);
|
|
68092
|
+
console.error(`COULD NOT EVALUATE CSS: \`${rawCode}\``);
|
|
68093
|
+
return;
|
|
68094
|
+
} else {
|
|
68095
|
+
console.error(
|
|
68096
|
+
"COULD NOT EVALUATE CSS: L" + expression.loc?.start.line
|
|
68097
|
+
);
|
|
68098
|
+
return;
|
|
68099
|
+
}
|
|
67980
68100
|
}
|
|
67981
68101
|
const classNames = styleObjectToClassNames(styleObject);
|
|
67982
68102
|
path.node.name.name = "className";
|