@hypergood/css-core 0.0.1 → 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.js CHANGED
@@ -67084,7 +67084,6 @@ var atomizers = {
67084
67084
  const ast = csstree.parse(value2, { context: "value" });
67085
67085
  const matchResult = csstree.lexer.matchProperty("animation", ast);
67086
67086
  const match = matchResult.matched?.match;
67087
- console.log({ match: JSON.stringify(match) });
67088
67087
  if (!match) return void 0;
67089
67088
  const animationNames = [];
67090
67089
  const animationDurations = [];
@@ -67352,51 +67351,129 @@ function cssJsLogger() {
67352
67351
  }
67353
67352
 
67354
67353
  // src/evaluate.ts
67355
- var UNKNOWN = {
67354
+ var UNKNOWN = (badNode) => ({
67356
67355
  confident: false,
67357
- value: void 0
67358
- };
67356
+ value: void 0,
67357
+ badNode
67358
+ });
67359
67359
  var known = (value2) => ({
67360
67360
  confident: true,
67361
67361
  value: value2
67362
67362
  });
67363
67363
  function evaluateBabelExpression(node, knownConstants) {
67364
- if (!node) return UNKNOWN;
67364
+ if (!node) return UNKNOWN(node);
67365
67365
  switch (node.type) {
67366
+ case "ArrayExpression":
67367
+ return evaluateArrayExpression(node, knownConstants);
67366
67368
  case "BinaryExpression":
67367
67369
  return evaluateBinaryExpression(node, knownConstants);
67368
67370
  case "Identifier":
67369
67371
  return evaluateIdentifier(node, knownConstants);
67370
- case "NumericLiteral":
67371
- return evaluateNumericLiteral(node);
67372
67372
  case "MemberExpression":
67373
67373
  return evaluateMemberExpression(node, knownConstants);
67374
+ case "NullLiteral":
67375
+ return evaluateNullLiteral(node);
67376
+ case "NumericLiteral":
67377
+ return evaluateNumericLiteral(node);
67374
67378
  case "ObjectExpression":
67375
67379
  return evaluateObjectExpression(node, knownConstants);
67376
67380
  case "StringLiteral":
67377
67381
  return evaluateStringLiteral(node);
67382
+ case "TemplateLiteral":
67383
+ return evaluateTemplateLiteral(node, knownConstants);
67384
+ case "UnaryExpression":
67385
+ return evaluateUnaryExpression(node, knownConstants);
67378
67386
  default:
67379
- return UNKNOWN;
67387
+ return UNKNOWN(node);
67380
67388
  }
67381
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
+ }
67382
67415
  function evaluateBinaryExpression(node, knownConstants) {
67383
67416
  const left = evaluateBabelExpression(node.left, knownConstants);
67384
67417
  const right = evaluateBabelExpression(node.right, knownConstants);
67385
- if (!left.confident || !right.confident) return UNKNOWN;
67418
+ if (!left.confident) return UNKNOWN(left.badNode);
67419
+ if (!right.confident) return UNKNOWN(right.badNode);
67386
67420
  switch (node.operator) {
67387
- case "*":
67388
- return known(left.value * right.value);
67389
67421
  case "+":
67390
67422
  return known(left.value + right.value);
67423
+ case "-":
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);
67391
67465
  default:
67392
- return UNKNOWN;
67466
+ return UNKNOWN(node);
67393
67467
  }
67394
67468
  }
67395
67469
  function evaluateIdentifier(node, knownConstants) {
67396
67470
  if (node.name in knownConstants) {
67397
67471
  return known(knownConstants[node.name]);
67398
67472
  }
67399
- return UNKNOWN;
67473
+ if (node.name === "undefined") {
67474
+ return known(void 0);
67475
+ }
67476
+ return UNKNOWN(node);
67400
67477
  }
67401
67478
  function evaluateMemberExpression(node, knownConstants) {
67402
67479
  const obj = evaluateBabelExpression(node.object, knownConstants);
@@ -67408,12 +67485,15 @@ function evaluateMemberExpression(node, knownConstants) {
67408
67485
  if (propertyNode.type === "Identifier") {
67409
67486
  property = known(propertyNode.name);
67410
67487
  } else {
67411
- return UNKNOWN;
67488
+ return UNKNOWN(node);
67412
67489
  }
67413
67490
  }
67414
- if (!obj.confident || !property.confident) return UNKNOWN;
67491
+ if (!obj.confident || !property.confident) return UNKNOWN(node);
67415
67492
  return known(obj.value[property.value]);
67416
67493
  }
67494
+ function evaluateNullLiteral(node) {
67495
+ return known(null);
67496
+ }
67417
67497
  function evaluateNumericLiteral(node) {
67418
67498
  return known(node.value);
67419
67499
  }
@@ -67422,9 +67502,9 @@ function evaluateObjectExpression(node, knownConstants) {
67422
67502
  for (const property of node.properties) {
67423
67503
  switch (property.type) {
67424
67504
  case "ObjectMethod":
67425
- return UNKNOWN;
67505
+ return UNKNOWN(property);
67426
67506
  case "SpreadElement":
67427
- return UNKNOWN;
67507
+ return UNKNOWN(property);
67428
67508
  case "ObjectProperty": {
67429
67509
  const keyNode = property.key;
67430
67510
  let key2;
@@ -67436,11 +67516,12 @@ function evaluateObjectExpression(node, knownConstants) {
67436
67516
  } else if (keyNode.type === "Identifier") {
67437
67517
  key2 = known(keyNode.name);
67438
67518
  } else {
67439
- return UNKNOWN;
67519
+ return UNKNOWN(property);
67440
67520
  }
67441
67521
  }
67442
67522
  const value2 = evaluateBabelExpression(property.value, knownConstants);
67443
- if (!key2 || !key2.confident || !value2.confident) return UNKNOWN;
67523
+ if (!key2 || !key2.confident || !value2.confident)
67524
+ return UNKNOWN(property);
67444
67525
  result[key2.value] = value2.value;
67445
67526
  }
67446
67527
  }
@@ -67450,6 +67531,45 @@ function evaluateObjectExpression(node, knownConstants) {
67450
67531
  function evaluateStringLiteral(node) {
67451
67532
  return known(node.value);
67452
67533
  }
67534
+ function evaluateTemplateLiteral(node, knownConstants) {
67535
+ const quasisAsStrings = node.quasis.map((q) => q.value.cooked ?? q.value.raw);
67536
+ const expressions = node.expressions.map(
67537
+ (e) => evaluateBabelExpression(e, knownConstants)
67538
+ );
67539
+ if (expressions.some((e) => !e.confident)) {
67540
+ return UNKNOWN(node);
67541
+ }
67542
+ const expressionValues = expressions.map((e) => e.value);
67543
+ let result = "";
67544
+ for (let i = 0; i < quasisAsStrings.length; i++) {
67545
+ result += quasisAsStrings[i];
67546
+ if (i < expressionValues.length) {
67547
+ let value2 = expressionValues[i];
67548
+ result += value2;
67549
+ }
67550
+ }
67551
+ return known(result);
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
+ }
67453
67573
 
67454
67574
  // src/runtime.ts
67455
67575
  function mergeClassNames(classNames) {
@@ -67483,7 +67603,7 @@ ${styleRules2.map((rule) => ` ${rule.property}: ${rule.value};`).join("\n")}
67483
67603
  });
67484
67604
  const tree = groupStyleRules(styleRules, []);
67485
67605
  const rulesSection = renderStyleRuleNode(tree, styleRuleToClassName);
67486
- return keyframesSection + "\n" + rulesSection + "\n/* " + JSON.stringify(styleRules, null, 2) + " */";
67606
+ return keyframesSection + "\n" + rulesSection;
67487
67607
  }
67488
67608
  function renderStyleRuleNode(node, styleRuleToClassName, indent = 0) {
67489
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) => {
@@ -67939,7 +68059,7 @@ function babelPluginReplaceCssProp({
67939
68059
  }
67940
68060
  }
67941
68061
  },
67942
- JSXAttribute(path) {
68062
+ JSXAttribute(path, state) {
67943
68063
  if (path.node.name && path.node.name.type === "JSXIdentifier" && path.node.name.name === "css") {
67944
68064
  const value2 = path.node.value;
67945
68065
  if (value2?.type !== "JSXExpressionContainer") return;
@@ -67952,9 +68072,18 @@ function babelPluginReplaceCssProp({
67952
68072
  );
67953
68073
  let styleObject = styleObjectResult.value;
67954
68074
  if (!styleObjectResult.confident) {
67955
- throw new Error(
67956
- "COULD NOT EVALUATE CSS: L" + expression.loc?.start.line
67957
- );
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
+ }
67958
68087
  }
67959
68088
  const classNames = styleObjectToClassNames(styleObject);
67960
68089
  path.node.name.name = "className";