pacc 4.14.1 → 4.15.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pacc",
3
- "version": "4.14.1",
3
+ "version": "4.15.0",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "provenance": true
@@ -38,7 +38,7 @@
38
38
  "browser-ava": "^2.3.31",
39
39
  "c8": "^10.1.3",
40
40
  "documentation": "^14.0.3",
41
- "semantic-release": "^24.2.7",
41
+ "semantic-release": "^24.2.8",
42
42
  "typescript": "^5.9.2"
43
43
  },
44
44
  "engines": {
@@ -66,6 +66,7 @@ export function parse(context) {
66
66
  switch (typeof token) {
67
67
  case "string":
68
68
  return { path: [token] };
69
+ case "boolean":
69
70
  case "number":
70
71
  return token;
71
72
  }
@@ -75,7 +76,45 @@ export function parse(context) {
75
76
 
76
77
  const led = (token, left) => {
77
78
  switch (token.type) {
78
- case "infix":
79
+ case "infixr": {
80
+ const right = expression(token.precedence - 1);
81
+ if (typeof left === typeof right) {
82
+ switch (typeof left) {
83
+ case "number":
84
+ case "string":
85
+ switch (token) {
86
+ case GREATER:
87
+ return left > right;
88
+ case GREATER_EQUAL:
89
+ return left >= right;
90
+ case LESS:
91
+ return left < right;
92
+ case LESS_EQUAL:
93
+ return left <= right;
94
+ case EQUAL:
95
+ return left == right;
96
+ case NOT_EQUAL:
97
+ return left != right;
98
+ }
99
+ break;
100
+
101
+ case "boolean":
102
+ switch (token) {
103
+ case DOUBLE_BAR:
104
+ return left || right;
105
+ case DOUBLE_AMPERSAND:
106
+ return left && right;
107
+ }
108
+ }
109
+ }
110
+ return {
111
+ token,
112
+ left,
113
+ right
114
+ };
115
+ }
116
+
117
+ case "infix": {
79
118
  const right = expression(token.precedence);
80
119
  if (typeof left === typeof right) {
81
120
  switch (typeof left) {
@@ -91,13 +130,6 @@ export function parse(context) {
91
130
  return left / right;
92
131
  }
93
132
  break;
94
- case "boolean":
95
- switch (token) {
96
- case DOUBLE_BAR:
97
- return left || right;
98
- case DOUBLE_AMPERSAND:
99
- return left && right;
100
- }
101
133
  }
102
134
  }
103
135
  if (token === DOT) {
@@ -105,9 +137,11 @@ export function parse(context) {
105
137
  left.path.push(...right.path);
106
138
  return left;
107
139
  }
108
- if (typeof left === "number") {
109
- right.path.unshift(left);
110
- return right;
140
+ switch (typeof left) {
141
+ case "number":
142
+ case "boolean":
143
+ right.path.unshift(left);
144
+ return right;
111
145
  }
112
146
  return { path: [left.token, right.token] };
113
147
  }
@@ -120,14 +154,7 @@ export function parse(context) {
120
154
  left,
121
155
  right
122
156
  };
123
-
124
- case "infixr":
125
- return {
126
- token,
127
- left,
128
- right: expression(token.precedence - 1)
129
- };
130
-
157
+ }
131
158
  case "prefix":
132
159
  switch (token) {
133
160
  case OPEN_BRACKET: {
package/src/tokens.mjs CHANGED
@@ -25,6 +25,7 @@ export /** @type {Token} */ const STAR = createToken("*", 60, "infix");
25
25
  export /** @type {Token} */ const DIVIDE = createToken("/", 60, "infix");
26
26
  export /** @type {Token} */ const NOT = createToken("!");
27
27
  export /** @type {Token} */ const NOT_EQUAL = createToken("!=", 40, "infixr");
28
+ export /** @type {Token} */ const EQUAL = createToken("=", 40, "infixr");
28
29
  export /** @type {Token} */ const GREATER = createToken(">", 40, "infixr");
29
30
  export /** @type {Token} */ const GREATER_EQUAL = createToken(
30
31
  ">=",
@@ -33,7 +34,6 @@ export /** @type {Token} */ const GREATER_EQUAL = createToken(
33
34
  );
34
35
  export /** @type {Token} */ const LESS = createToken("<", 40, "infixr");
35
36
  export /** @type {Token} */ const LESS_EQUAL = createToken("<=", 40, "infixr");
36
- export /** @type {Token} */ const EQUAL = createToken("=", 40);
37
37
  export /** @type {Token} */ const OPEN_ROUND = createToken("(", 0, "prefix");
38
38
  export /** @type {Token} */ const CLOSE_ROUND = createToken(")", 0, "infix");
39
39
  export /** @type {Token} */ const OPEN_BRACKET = createToken("[", 10, "prefix");
@@ -13,11 +13,11 @@ export namespace STAR { }
13
13
  export namespace DIVIDE { }
14
14
  export namespace NOT { }
15
15
  export namespace NOT_EQUAL { }
16
+ export namespace EQUAL { }
16
17
  export namespace GREATER { }
17
18
  export namespace GREATER_EQUAL { }
18
19
  export namespace LESS { }
19
20
  export namespace LESS_EQUAL { }
20
- export namespace EQUAL { }
21
21
  export namespace OPEN_ROUND { }
22
22
  export namespace CLOSE_ROUND { }
23
23
  export namespace OPEN_BRACKET { }