@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.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);
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 || !right.confident) return UNKNOWN;
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
- return UNKNOWN;
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
- return UNKNOWN;
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) return UNKNOWN;
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 + "\n/* " + JSON.stringify(styleRules, null, 2) + " */";
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
- throw new Error(
67978
- "COULD NOT EVALUATE CSS: L" + expression.loc?.start.line
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";