@hypergood/css-core 0.0.2 → 0.0.3
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 +131 -24
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.js +131 -24
- package/dist/plugin.js.map +1 -1
- package/package.json +2 -1
- package/src/evaluate.ts +132 -20
- package/src/plugin.ts +13 -4
- package/src/print.ts +1 -9
- package/tests/evaluate.test.ts +73 -0
package/dist/plugin.js
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);
|
|
67388
|
+
}
|
|
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
|
+
}
|
|
67381
67412
|
}
|
|
67413
|
+
return known(elements);
|
|
67382
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,9 @@ function evaluateObjectExpression(node, knownConstants) {
|
|
|
67425
67502
|
for (const property of node.properties) {
|
|
67426
67503
|
switch (property.type) {
|
|
67427
67504
|
case "ObjectMethod":
|
|
67428
|
-
return UNKNOWN;
|
|
67505
|
+
return UNKNOWN(property);
|
|
67429
67506
|
case "SpreadElement":
|
|
67430
|
-
return UNKNOWN;
|
|
67507
|
+
return UNKNOWN(property);
|
|
67431
67508
|
case "ObjectProperty": {
|
|
67432
67509
|
const keyNode = property.key;
|
|
67433
67510
|
let key2;
|
|
@@ -67439,11 +67516,12 @@ function evaluateObjectExpression(node, knownConstants) {
|
|
|
67439
67516
|
} else if (keyNode.type === "Identifier") {
|
|
67440
67517
|
key2 = known(keyNode.name);
|
|
67441
67518
|
} else {
|
|
67442
|
-
return UNKNOWN;
|
|
67519
|
+
return UNKNOWN(property);
|
|
67443
67520
|
}
|
|
67444
67521
|
}
|
|
67445
67522
|
const value2 = evaluateBabelExpression(property.value, knownConstants);
|
|
67446
|
-
if (!key2 || !key2.confident || !value2.confident)
|
|
67523
|
+
if (!key2 || !key2.confident || !value2.confident)
|
|
67524
|
+
return UNKNOWN(property);
|
|
67447
67525
|
result[key2.value] = value2.value;
|
|
67448
67526
|
}
|
|
67449
67527
|
}
|
|
@@ -67459,7 +67537,7 @@ function evaluateTemplateLiteral(node, knownConstants) {
|
|
|
67459
67537
|
(e) => evaluateBabelExpression(e, knownConstants)
|
|
67460
67538
|
);
|
|
67461
67539
|
if (expressions.some((e) => !e.confident)) {
|
|
67462
|
-
return UNKNOWN;
|
|
67540
|
+
return UNKNOWN(node);
|
|
67463
67541
|
}
|
|
67464
67542
|
const expressionValues = expressions.map((e) => e.value);
|
|
67465
67543
|
let result = "";
|
|
@@ -67472,6 +67550,26 @@ function evaluateTemplateLiteral(node, knownConstants) {
|
|
|
67472
67550
|
}
|
|
67473
67551
|
return known(result);
|
|
67474
67552
|
}
|
|
67553
|
+
function evaluateUnaryExpression(node, knownConstants) {
|
|
67554
|
+
const argument = evaluateBabelExpression(node.argument, knownConstants);
|
|
67555
|
+
if (!argument.confident) return UNKNOWN(argument.badNode);
|
|
67556
|
+
switch (node.operator) {
|
|
67557
|
+
case "+":
|
|
67558
|
+
return known(+argument.value);
|
|
67559
|
+
case "-":
|
|
67560
|
+
return known(-argument.value);
|
|
67561
|
+
case "void":
|
|
67562
|
+
return known(void argument.value);
|
|
67563
|
+
case "!":
|
|
67564
|
+
return known(!argument.value);
|
|
67565
|
+
case "~":
|
|
67566
|
+
return known(~argument.value);
|
|
67567
|
+
case "typeof":
|
|
67568
|
+
return known(typeof argument.value);
|
|
67569
|
+
default:
|
|
67570
|
+
return UNKNOWN(node);
|
|
67571
|
+
}
|
|
67572
|
+
}
|
|
67475
67573
|
|
|
67476
67574
|
// src/runtime.ts
|
|
67477
67575
|
function mergeClassNames(classNames) {
|
|
@@ -67505,7 +67603,7 @@ ${styleRules2.map((rule) => ` ${rule.property}: ${rule.value};`).join("\n")}
|
|
|
67505
67603
|
});
|
|
67506
67604
|
const tree = groupStyleRules(styleRules, []);
|
|
67507
67605
|
const rulesSection = renderStyleRuleNode(tree, styleRuleToClassName);
|
|
67508
|
-
return keyframesSection + "\n" + rulesSection
|
|
67606
|
+
return keyframesSection + "\n" + rulesSection;
|
|
67509
67607
|
}
|
|
67510
67608
|
function renderStyleRuleNode(node, styleRuleToClassName, indent = 0) {
|
|
67511
67609
|
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 +68059,7 @@ function babelPluginReplaceCssProp({
|
|
|
67961
68059
|
}
|
|
67962
68060
|
}
|
|
67963
68061
|
},
|
|
67964
|
-
JSXAttribute(path) {
|
|
68062
|
+
JSXAttribute(path, state) {
|
|
67965
68063
|
if (path.node.name && path.node.name.type === "JSXIdentifier" && path.node.name.name === "css") {
|
|
67966
68064
|
const value2 = path.node.value;
|
|
67967
68065
|
if (value2?.type !== "JSXExpressionContainer") return;
|
|
@@ -67974,9 +68072,18 @@ function babelPluginReplaceCssProp({
|
|
|
67974
68072
|
);
|
|
67975
68073
|
let styleObject = styleObjectResult.value;
|
|
67976
68074
|
if (!styleObjectResult.confident) {
|
|
67977
|
-
|
|
67978
|
-
|
|
67979
|
-
|
|
68075
|
+
const badNode = styleObjectResult.badNode;
|
|
68076
|
+
if (badNode) {
|
|
68077
|
+
const { start, end } = badNode;
|
|
68078
|
+
const rawCode = state.file.code.slice(start, end);
|
|
68079
|
+
console.error(`COULD NOT EVALUATE CSS: \`${rawCode}\``);
|
|
68080
|
+
return;
|
|
68081
|
+
} else {
|
|
68082
|
+
console.error(
|
|
68083
|
+
"COULD NOT EVALUATE CSS: L" + expression.loc?.start.line
|
|
68084
|
+
);
|
|
68085
|
+
return;
|
|
68086
|
+
}
|
|
67980
68087
|
}
|
|
67981
68088
|
const classNames = styleObjectToClassNames(styleObject);
|
|
67982
68089
|
path.node.name.name = "className";
|