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 +2 -2
- package/src/expression.mjs +46 -19
- package/src/tokens.mjs +1 -1
- package/types/tokens.d.mts +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pacc",
|
|
3
|
-
"version": "4.
|
|
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.
|
|
41
|
+
"semantic-release": "^24.2.8",
|
|
42
42
|
"typescript": "^5.9.2"
|
|
43
43
|
},
|
|
44
44
|
"engines": {
|
package/src/expression.mjs
CHANGED
|
@@ -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 "
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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");
|
package/types/tokens.d.mts
CHANGED
|
@@ -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 { }
|