@astralsight/astroforge-rsbuild-plugin 0.0.10 → 0.0.11

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.
Files changed (2) hide show
  1. package/dist/index.mjs +81 -10
  2. package/package.json +2 -2
package/dist/index.mjs CHANGED
@@ -868,6 +868,56 @@ function lowerVariableDeclaration(context, statement) {
868
868
  });
869
869
  return `${statement.kind} ${declarations.join(", ")};`;
870
870
  }
871
+ function expressionPrecedence(expression) {
872
+ const node = unwrapExpression(expression);
873
+ switch (node.type) {
874
+ case "Identifier":
875
+ case "StringLiteral":
876
+ case "NumericLiteral":
877
+ case "BooleanLiteral":
878
+ case "NullLiteral":
879
+ case "TemplateLiteral":
880
+ case "ArrayExpression":
881
+ case "ObjectExpression": return 20;
882
+ case "MemberExpression":
883
+ case "OptionalMemberExpression": return 19;
884
+ case "CallExpression":
885
+ case "OptionalCallExpression": return 18;
886
+ case "UpdateExpression": return 17;
887
+ case "UnaryExpression": return 16;
888
+ case "BinaryExpression": return binaryOperatorPrecedence(node.operator);
889
+ case "LogicalExpression": return logicalOperatorPrecedence(node.operator);
890
+ case "ConditionalExpression": return 4;
891
+ case "AssignmentExpression": return 3;
892
+ default: return 20;
893
+ }
894
+ }
895
+ function binaryOperatorPrecedence(operator) {
896
+ if (operator === "*" || operator === "/" || operator === "%") return 14;
897
+ if (operator === "+" || operator === "-") return 13;
898
+ if (operator === "<<" || operator === ">>" || operator === ">>>") return 12;
899
+ if (operator === "<" || operator === "<=" || operator === ">" || operator === ">=" || operator === "in" || operator === "instanceof") return 11;
900
+ if (operator === "==" || operator === "!=" || operator === "===" || operator === "!==") return 10;
901
+ if (operator === "&") return 9;
902
+ if (operator === "^") return 8;
903
+ if (operator === "|") return 7;
904
+ return 13;
905
+ }
906
+ function logicalOperatorPrecedence(operator) {
907
+ if (operator === "&&") return 6;
908
+ if (operator === "||" || operator === "??") return 5;
909
+ return 5;
910
+ }
911
+ function needsExpressionParens(expression, parentPrecedence, side) {
912
+ const precedence = expressionPrecedence(expression);
913
+ if (precedence < parentPrecedence) return true;
914
+ if (precedence > parentPrecedence) return false;
915
+ return side === "right";
916
+ }
917
+ function lowerExpressionOperand(context, expression, aliases, parentPrecedence, side) {
918
+ const code = lowerExpression(context, expression, aliases);
919
+ return needsExpressionParens(expression, parentPrecedence, side) ? `(${code})` : code;
920
+ }
871
921
  function lowerExpression(context, expression, aliases = /* @__PURE__ */ new Map()) {
872
922
  const node = unwrapExpression(expression);
873
923
  switch (node.type) {
@@ -882,9 +932,12 @@ function lowerExpression(context, expression, aliases = /* @__PURE__ */ new Map(
882
932
  case "BooleanLiteral": return String(node.value);
883
933
  case "NullLiteral": return "null";
884
934
  case "BinaryExpression":
885
- case "LogicalExpression": return `${lowerExpression(context, node.left, aliases)} ${node.operator} ${lowerExpression(context, node.right, aliases)}`;
886
- case "UnaryExpression": return `${node.operator}${lowerExpression(context, node.argument, aliases)}`;
887
- case "AssignmentExpression": return `${lowerExpression(context, node.left, aliases)} ${node.operator} ${lowerExpression(context, node.right, aliases)}`;
935
+ case "LogicalExpression": {
936
+ const precedence = expressionPrecedence(node);
937
+ return `${lowerExpressionOperand(context, node.left, aliases, precedence, "left")} ${node.operator} ${lowerExpressionOperand(context, node.right, aliases, precedence, "right")}`;
938
+ }
939
+ case "UnaryExpression": return `${node.operator}${lowerExpressionOperand(context, node.argument, aliases, expressionPrecedence(node), "operand")}`;
940
+ case "AssignmentExpression": return `${lowerExpressionOperand(context, node.left, aliases, expressionPrecedence(node), "left")} ${node.operator} ${lowerExpressionOperand(context, node.right, aliases, expressionPrecedence(node), "right")}`;
888
941
  case "UpdateExpression": {
889
942
  const argument = lowerExpression(context, node.argument, aliases);
890
943
  return node.prefix ? `${node.operator}${argument}` : `${argument}${node.operator}`;
@@ -903,7 +956,7 @@ function lowerExpression(context, expression, aliases = /* @__PURE__ */ new Map(
903
956
  }
904
957
  }
905
958
  function lowerMemberExpression(context, node, aliases) {
906
- const object = lowerExpression(context, node.object, aliases);
959
+ const object = lowerExpressionOperand(context, node.object, aliases, expressionPrecedence(node), "operand");
907
960
  if (node.computed) return `${object}[${lowerExpression(context, node.property, aliases)}]`;
908
961
  return `${object}.${sourceForNode(context.source, node.property)}`;
909
962
  }
@@ -965,6 +1018,10 @@ function lowerTemplateStatementAsBlock(context, statement) {
965
1018
  if (statement.type === "BlockStatement") return lowerTemplateStatement(context, statement);
966
1019
  return `{\n ${lowerTemplateStatement(context, statement)}\n}`;
967
1020
  }
1021
+ function lowerTemplateExpressionOperand(context, expression, parentPrecedence, side) {
1022
+ const code = lowerTemplateExpression(context, expression);
1023
+ return needsExpressionParens(expression, parentPrecedence, side) ? `(${code})` : code;
1024
+ }
968
1025
  function lowerTemplateExpression(context, expression) {
969
1026
  const node = unwrapExpression(expression);
970
1027
  switch (node.type) {
@@ -976,9 +1033,12 @@ function lowerTemplateExpression(context, expression) {
976
1033
  case "TemplateLiteral": return lowerTemplateLiteral(context, node);
977
1034
  case "ConditionalExpression": return `${lowerTemplateExpression(context, node.test)} ? ${lowerTemplateExpression(context, node.consequent)} : ${lowerTemplateExpression(context, node.alternate)}`;
978
1035
  case "BinaryExpression":
979
- case "LogicalExpression": return `${lowerTemplateExpression(context, node.left)} ${node.operator} ${lowerTemplateExpression(context, node.right)}`;
980
- case "UnaryExpression": return `${node.operator}${lowerTemplateExpression(context, node.argument)}`;
981
- case "AssignmentExpression": return `${lowerTemplateExpression(context, node.left)} ${node.operator} ${lowerTemplateExpression(context, node.right)}`;
1036
+ case "LogicalExpression": {
1037
+ const precedence = expressionPrecedence(node);
1038
+ return `${lowerTemplateExpressionOperand(context, node.left, precedence, "left")} ${node.operator} ${lowerTemplateExpressionOperand(context, node.right, precedence, "right")}`;
1039
+ }
1040
+ case "UnaryExpression": return `${node.operator}${lowerTemplateExpressionOperand(context, node.argument, expressionPrecedence(node), "operand")}`;
1041
+ case "AssignmentExpression": return `${lowerTemplateExpressionOperand(context, node.left, expressionPrecedence(node), "left")} ${node.operator} ${lowerTemplateExpressionOperand(context, node.right, expressionPrecedence(node), "right")}`;
982
1042
  case "UpdateExpression": {
983
1043
  const argument = lowerTemplateExpression(context, node.argument);
984
1044
  return node.prefix ? `${node.operator}${argument}` : `${argument}${node.operator}`;
@@ -1004,7 +1064,7 @@ function lowerTemplateMemberExpression(context, node) {
1004
1064
  const object = unwrapExpression(node.object);
1005
1065
  let base;
1006
1066
  if (object.type === "Identifier" && object.name === "props") base = "_vm_";
1007
- else base = lowerTemplateExpression(context, object);
1067
+ else base = lowerTemplateExpressionOperand(context, object, expressionPrecedence(node), "operand");
1008
1068
  const operator = node.optional ? "?." : ".";
1009
1069
  if (node.computed) return `${base}${node.optional ? "?." : ""}[${lowerTemplateExpression(context, node.property)}]`;
1010
1070
  const property = sourceForNode(context.source, node.property);
@@ -1014,7 +1074,7 @@ function lowerTemplateCallExpression(context, node) {
1014
1074
  const setterTarget = node.callee.type === "Identifier" ? context.scriptContext.stateSetters.get(node.callee.name) : void 0;
1015
1075
  if (setterTarget) return lowerTemplateStateSetterCall(context, setterTarget, node);
1016
1076
  const optional = node.optional ? "?." : "";
1017
- return `${lowerTemplateExpression(context, node.callee)}${optional}(${node.arguments.map((arg) => {
1077
+ return `${lowerTemplateExpressionOperand(context, node.callee, expressionPrecedence(node), "operand")}${optional}(${node.arguments.map((arg) => {
1018
1078
  if (arg.type === "SpreadElement") return `...${lowerTemplateExpression(context, arg.argument)}`;
1019
1079
  return lowerTemplateExpression(context, arg);
1020
1080
  }).join(", ")})`;
@@ -1063,18 +1123,28 @@ const TEMPLATE_GLOBALS = new Set([
1063
1123
  "Object",
1064
1124
  "Promise",
1065
1125
  "String",
1126
+ "app",
1127
+ "audio",
1128
+ "cipher",
1066
1129
  "console",
1130
+ "device",
1067
1131
  "false",
1132
+ "file",
1133
+ "geolocation",
1068
1134
  "isFinite",
1069
1135
  "isNaN",
1070
1136
  "null",
1071
1137
  "parseFloat",
1072
1138
  "parseInt",
1139
+ "prompt",
1073
1140
  "network",
1141
+ "record",
1074
1142
  "router",
1143
+ "sensor",
1075
1144
  "storage",
1076
1145
  "true",
1077
1146
  "undefined",
1147
+ "vibrator",
1078
1148
  "velaBattery",
1079
1149
  "velaBluetoothBLE",
1080
1150
  "velaBrightness",
@@ -1092,7 +1162,8 @@ const TEMPLATE_GLOBALS = new Set([
1092
1162
  "velaProtobuf",
1093
1163
  "velaServiceClient",
1094
1164
  "velaVolume",
1095
- "velaZlib"
1165
+ "velaZlib",
1166
+ "zip"
1096
1167
  ]);
1097
1168
  function findTopLevelBinding(body, name) {
1098
1169
  for (const statement of body) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astralsight/astroforge-rsbuild-plugin",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "description": "AstroForge Plugin for RsBuild",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@babel/parser": "^7.29.3",
41
- "@astralsight/astroforge-core": "^0.0.10"
41
+ "@astralsight/astroforge-core": "^0.0.11"
42
42
  },
43
43
  "scripts": {
44
44
  "build": "tsdown"