@astralsight/astroforge-rsbuild-plugin 0.0.9 → 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 +99 -12
  2. package/package.json +2 -2
package/dist/index.mjs CHANGED
@@ -7,10 +7,25 @@ import { parse } from "@babel/parser";
7
7
  function collectAssets(root, document) {
8
8
  const assets = /* @__PURE__ */ new Map();
9
9
  addAsset(root, document.manifest.icon, assets);
10
+ collectCommonAssets(root, assets);
10
11
  for (const page of Object.values(document.pages)) collectPageAssets(root, page, assets);
11
12
  for (const component of Object.values(document.components)) collectComponentAssets(root, component, assets);
12
13
  return [...assets.values()];
13
14
  }
15
+ function collectCommonAssets(root, assets) {
16
+ const commonRoot = resolve(root, "src", "common");
17
+ if (!existsSync(commonRoot)) return;
18
+ for (const file of walkFiles$1(commonRoot)) addAsset(root, `/${relative(resolve(root, "src"), file).split(sep).join("/")}`, assets);
19
+ }
20
+ function walkFiles$1(dir) {
21
+ const out = [];
22
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
23
+ const next = join(dir, entry.name);
24
+ if (entry.isDirectory()) out.push(...walkFiles$1(next));
25
+ else if (entry.isFile()) out.push(next);
26
+ }
27
+ return out;
28
+ }
14
29
  function collectPageAssets(root, page, assets) {
15
30
  collectNodeAssets(root, page.template, assets);
16
31
  collectStyleAssets(root, page.style, assets);
@@ -853,6 +868,56 @@ function lowerVariableDeclaration(context, statement) {
853
868
  });
854
869
  return `${statement.kind} ${declarations.join(", ")};`;
855
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
+ }
856
921
  function lowerExpression(context, expression, aliases = /* @__PURE__ */ new Map()) {
857
922
  const node = unwrapExpression(expression);
858
923
  switch (node.type) {
@@ -867,9 +932,12 @@ function lowerExpression(context, expression, aliases = /* @__PURE__ */ new Map(
867
932
  case "BooleanLiteral": return String(node.value);
868
933
  case "NullLiteral": return "null";
869
934
  case "BinaryExpression":
870
- case "LogicalExpression": return `${lowerExpression(context, node.left, aliases)} ${node.operator} ${lowerExpression(context, node.right, aliases)}`;
871
- case "UnaryExpression": return `${node.operator}${lowerExpression(context, node.argument, aliases)}`;
872
- 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")}`;
873
941
  case "UpdateExpression": {
874
942
  const argument = lowerExpression(context, node.argument, aliases);
875
943
  return node.prefix ? `${node.operator}${argument}` : `${argument}${node.operator}`;
@@ -888,7 +956,7 @@ function lowerExpression(context, expression, aliases = /* @__PURE__ */ new Map(
888
956
  }
889
957
  }
890
958
  function lowerMemberExpression(context, node, aliases) {
891
- const object = lowerExpression(context, node.object, aliases);
959
+ const object = lowerExpressionOperand(context, node.object, aliases, expressionPrecedence(node), "operand");
892
960
  if (node.computed) return `${object}[${lowerExpression(context, node.property, aliases)}]`;
893
961
  return `${object}.${sourceForNode(context.source, node.property)}`;
894
962
  }
@@ -950,6 +1018,10 @@ function lowerTemplateStatementAsBlock(context, statement) {
950
1018
  if (statement.type === "BlockStatement") return lowerTemplateStatement(context, statement);
951
1019
  return `{\n ${lowerTemplateStatement(context, statement)}\n}`;
952
1020
  }
1021
+ function lowerTemplateExpressionOperand(context, expression, parentPrecedence, side) {
1022
+ const code = lowerTemplateExpression(context, expression);
1023
+ return needsExpressionParens(expression, parentPrecedence, side) ? `(${code})` : code;
1024
+ }
953
1025
  function lowerTemplateExpression(context, expression) {
954
1026
  const node = unwrapExpression(expression);
955
1027
  switch (node.type) {
@@ -961,9 +1033,12 @@ function lowerTemplateExpression(context, expression) {
961
1033
  case "TemplateLiteral": return lowerTemplateLiteral(context, node);
962
1034
  case "ConditionalExpression": return `${lowerTemplateExpression(context, node.test)} ? ${lowerTemplateExpression(context, node.consequent)} : ${lowerTemplateExpression(context, node.alternate)}`;
963
1035
  case "BinaryExpression":
964
- case "LogicalExpression": return `${lowerTemplateExpression(context, node.left)} ${node.operator} ${lowerTemplateExpression(context, node.right)}`;
965
- case "UnaryExpression": return `${node.operator}${lowerTemplateExpression(context, node.argument)}`;
966
- 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")}`;
967
1042
  case "UpdateExpression": {
968
1043
  const argument = lowerTemplateExpression(context, node.argument);
969
1044
  return node.prefix ? `${node.operator}${argument}` : `${argument}${node.operator}`;
@@ -989,7 +1064,7 @@ function lowerTemplateMemberExpression(context, node) {
989
1064
  const object = unwrapExpression(node.object);
990
1065
  let base;
991
1066
  if (object.type === "Identifier" && object.name === "props") base = "_vm_";
992
- else base = lowerTemplateExpression(context, object);
1067
+ else base = lowerTemplateExpressionOperand(context, object, expressionPrecedence(node), "operand");
993
1068
  const operator = node.optional ? "?." : ".";
994
1069
  if (node.computed) return `${base}${node.optional ? "?." : ""}[${lowerTemplateExpression(context, node.property)}]`;
995
1070
  const property = sourceForNode(context.source, node.property);
@@ -999,7 +1074,7 @@ function lowerTemplateCallExpression(context, node) {
999
1074
  const setterTarget = node.callee.type === "Identifier" ? context.scriptContext.stateSetters.get(node.callee.name) : void 0;
1000
1075
  if (setterTarget) return lowerTemplateStateSetterCall(context, setterTarget, node);
1001
1076
  const optional = node.optional ? "?." : "";
1002
- return `${lowerTemplateExpression(context, node.callee)}${optional}(${node.arguments.map((arg) => {
1077
+ return `${lowerTemplateExpressionOperand(context, node.callee, expressionPrecedence(node), "operand")}${optional}(${node.arguments.map((arg) => {
1003
1078
  if (arg.type === "SpreadElement") return `...${lowerTemplateExpression(context, arg.argument)}`;
1004
1079
  return lowerTemplateExpression(context, arg);
1005
1080
  }).join(", ")})`;
@@ -1048,18 +1123,28 @@ const TEMPLATE_GLOBALS = new Set([
1048
1123
  "Object",
1049
1124
  "Promise",
1050
1125
  "String",
1126
+ "app",
1127
+ "audio",
1128
+ "cipher",
1051
1129
  "console",
1130
+ "device",
1052
1131
  "false",
1132
+ "file",
1133
+ "geolocation",
1053
1134
  "isFinite",
1054
1135
  "isNaN",
1055
1136
  "null",
1056
1137
  "parseFloat",
1057
1138
  "parseInt",
1139
+ "prompt",
1058
1140
  "network",
1141
+ "record",
1059
1142
  "router",
1143
+ "sensor",
1060
1144
  "storage",
1061
1145
  "true",
1062
1146
  "undefined",
1147
+ "vibrator",
1063
1148
  "velaBattery",
1064
1149
  "velaBluetoothBLE",
1065
1150
  "velaBrightness",
@@ -1077,7 +1162,8 @@ const TEMPLATE_GLOBALS = new Set([
1077
1162
  "velaProtobuf",
1078
1163
  "velaServiceClient",
1079
1164
  "velaVolume",
1080
- "velaZlib"
1165
+ "velaZlib",
1166
+ "zip"
1081
1167
  ]);
1082
1168
  function findTopLevelBinding(body, name) {
1083
1169
  for (const statement of body) {
@@ -1637,7 +1723,8 @@ function defaultIrOutFile(root, cacheDir) {
1637
1723
  function createIrDocument(manifestInput, pages) {
1638
1724
  const routerPages = {};
1639
1725
  for (const page of pages) routerPages[page.route] = { component: page.component };
1640
- const source = manifestSource(manifestInput, pages[0].route, routerPages);
1726
+ const entry = typeof manifestInput.router === "object" && manifestInput.router !== null && !Array.isArray(manifestInput.router) && typeof manifestInput.router.entry === "string" && routerPages[manifestInput.router.entry] ? manifestInput.router.entry : pages[0].route;
1727
+ const source = manifestSource(manifestInput, entry, routerPages);
1641
1728
  return {
1642
1729
  ir_version: 1,
1643
1730
  manifest: {
@@ -1655,7 +1742,7 @@ function createIrDocument(manifestInput, pages) {
1655
1742
  design_width: manifestInput.config?.designWidth
1656
1743
  },
1657
1744
  router: {
1658
- entry: pages[0].route,
1745
+ entry,
1659
1746
  pages: routerPages
1660
1747
  },
1661
1748
  source
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astralsight/astroforge-rsbuild-plugin",
3
- "version": "0.0.9",
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.9"
41
+ "@astralsight/astroforge-core": "^0.0.11"
42
42
  },
43
43
  "scripts": {
44
44
  "build": "tsdown"