pacc 1.0.4 → 2.0.1
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 +1 -1
- package/src/attribute.mjs +28 -17
- package/src/tokens.mjs +47 -8
package/package.json
CHANGED
package/src/attribute.mjs
CHANGED
|
@@ -13,9 +13,20 @@
|
|
|
13
13
|
* @property {string[]|string} [env] environment variable use to provide the value
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
import {
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
import {
|
|
17
|
+
tokens,
|
|
18
|
+
EQUAL,
|
|
19
|
+
NOT_EQUAL,
|
|
20
|
+
DOT,
|
|
21
|
+
OPEN_BRACKET,
|
|
22
|
+
CLOSE_BRACKET,
|
|
23
|
+
LESS,
|
|
24
|
+
LESS_EQUAL,
|
|
25
|
+
GREATER,
|
|
26
|
+
GREATER_EQUAL,
|
|
27
|
+
STAR
|
|
28
|
+
} from "./tokens.mjs";
|
|
29
|
+
export * from "./tokens.mjs";
|
|
19
30
|
|
|
20
31
|
/**
|
|
21
32
|
* Set Object attribute.
|
|
@@ -30,9 +41,9 @@ export function setAttribute(object, expression, value) {
|
|
|
30
41
|
|
|
31
42
|
for (const token of tokens(expression)) {
|
|
32
43
|
switch (token) {
|
|
33
|
-
case
|
|
34
|
-
case
|
|
35
|
-
case
|
|
44
|
+
case DOT:
|
|
45
|
+
case OPEN_BRACKET:
|
|
46
|
+
case CLOSE_BRACKET:
|
|
36
47
|
break;
|
|
37
48
|
|
|
38
49
|
default:
|
|
@@ -75,24 +86,24 @@ export function getAttribute(object, expression) {
|
|
|
75
86
|
* @returns {[any,string]} value associated with the given property name
|
|
76
87
|
*/
|
|
77
88
|
export function getAttributeAndOperator(object, expression, getters = {}) {
|
|
78
|
-
let op =
|
|
89
|
+
let op = EQUAL;
|
|
79
90
|
let predicateTokens;
|
|
80
91
|
|
|
81
92
|
for (const token of tokens(expression)) {
|
|
82
93
|
switch (token) {
|
|
83
|
-
case
|
|
84
|
-
case
|
|
85
|
-
case
|
|
86
|
-
case
|
|
87
|
-
case
|
|
88
|
-
case
|
|
94
|
+
case GREATER_EQUAL:
|
|
95
|
+
case LESS_EQUAL:
|
|
96
|
+
case GREATER:
|
|
97
|
+
case LESS:
|
|
98
|
+
case EQUAL:
|
|
99
|
+
case NOT_EQUAL:
|
|
89
100
|
op = token;
|
|
90
101
|
break;
|
|
91
|
-
case
|
|
92
|
-
case
|
|
102
|
+
case DOT:
|
|
103
|
+
case OPEN_BRACKET:
|
|
93
104
|
predicateTokens = [];
|
|
94
105
|
break;
|
|
95
|
-
case
|
|
106
|
+
case CLOSE_BRACKET:
|
|
96
107
|
// TODO: should loop over array actually getAttribute api should deliver iterators
|
|
97
108
|
if (object[Symbol.iterator]) {
|
|
98
109
|
object = [...object][0];
|
|
@@ -100,7 +111,7 @@ export function getAttributeAndOperator(object, expression, getters = {}) {
|
|
|
100
111
|
|
|
101
112
|
predicateTokens = undefined;
|
|
102
113
|
break;
|
|
103
|
-
case
|
|
114
|
+
case STAR:
|
|
104
115
|
predicateTokens.push(token);
|
|
105
116
|
break;
|
|
106
117
|
|
package/src/tokens.mjs
CHANGED
|
@@ -1,3 +1,41 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
const lookup = {};
|
|
4
|
+
|
|
5
|
+
function createToken(str)
|
|
6
|
+
{
|
|
7
|
+
const token = {str};
|
|
8
|
+
lookup[str] = token;
|
|
9
|
+
return token;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const PLUS = createToken("+");
|
|
13
|
+
export const MINUS = createToken("-");
|
|
14
|
+
export const STAR =createToken("*");
|
|
15
|
+
export const DIVIDE = createToken("/");
|
|
16
|
+
export const NOT = createToken("!");
|
|
17
|
+
export const NOT_EQUAL = createToken("!=");
|
|
18
|
+
export const GREATER = createToken(">");
|
|
19
|
+
export const GREATER_EQUAL = createToken(">=");
|
|
20
|
+
export const LESS = createToken("<");
|
|
21
|
+
export const LESS_EQUAL = createToken("<=");
|
|
22
|
+
export const EQUAL = createToken("=");
|
|
23
|
+
export const OPEN_ROUND = createToken("(");
|
|
24
|
+
export const CLOSE_ROUND = createToken(")");
|
|
25
|
+
export const OPEN_BRACKET = createToken("[");
|
|
26
|
+
export const CLOSE_BRACKET = createToken("]");
|
|
27
|
+
export const OPEN_CURLY = createToken("{");
|
|
28
|
+
export const CLOSE_CURLY = createToken("}");
|
|
29
|
+
export const QUESTION = createToken("?");
|
|
30
|
+
export const COLON = createToken(":");
|
|
31
|
+
export const SEMICOLON = createToken(";");
|
|
32
|
+
export const COMMA = createToken(",");
|
|
33
|
+
export const DOT = createToken(".");
|
|
34
|
+
export const AMPERSAND = createToken('&');
|
|
35
|
+
export const DOUBLE_AMPERSAND = createToken('&&');
|
|
36
|
+
export const BAR = createToken("|");
|
|
37
|
+
export const DOUBLE_BAR = createToken('||');
|
|
38
|
+
|
|
1
39
|
/**
|
|
2
40
|
* Split property path into tokens
|
|
3
41
|
* @generator
|
|
@@ -49,7 +87,7 @@ export function* tokens(string) {
|
|
|
49
87
|
state = undefined;
|
|
50
88
|
break;
|
|
51
89
|
default:
|
|
52
|
-
yield state;
|
|
90
|
+
yield lookup[state];
|
|
53
91
|
state = undefined;
|
|
54
92
|
}
|
|
55
93
|
break;
|
|
@@ -78,7 +116,7 @@ export function* tokens(string) {
|
|
|
78
116
|
state = "string";
|
|
79
117
|
break;
|
|
80
118
|
default:
|
|
81
|
-
yield state;
|
|
119
|
+
yield lookup[state];
|
|
82
120
|
buffer = "";
|
|
83
121
|
state = "string";
|
|
84
122
|
}
|
|
@@ -92,10 +130,11 @@ export function* tokens(string) {
|
|
|
92
130
|
case "&":
|
|
93
131
|
case "|":
|
|
94
132
|
if (state === c) {
|
|
95
|
-
|
|
133
|
+
state += c;
|
|
134
|
+
yield lookup[state];
|
|
96
135
|
state = undefined;
|
|
97
136
|
} else {
|
|
98
|
-
yield state;
|
|
137
|
+
yield lookup[state];
|
|
99
138
|
state = c;
|
|
100
139
|
}
|
|
101
140
|
break;
|
|
@@ -110,7 +149,7 @@ export function* tokens(string) {
|
|
|
110
149
|
state = c;
|
|
111
150
|
break;
|
|
112
151
|
default:
|
|
113
|
-
yield state;
|
|
152
|
+
yield lookup[state];
|
|
114
153
|
state = c;
|
|
115
154
|
}
|
|
116
155
|
break;
|
|
@@ -157,7 +196,7 @@ export function* tokens(string) {
|
|
|
157
196
|
state = c;
|
|
158
197
|
break;
|
|
159
198
|
default:
|
|
160
|
-
yield state;
|
|
199
|
+
yield lookup[state];
|
|
161
200
|
state = c;
|
|
162
201
|
}
|
|
163
202
|
break;
|
|
@@ -178,7 +217,7 @@ export function* tokens(string) {
|
|
|
178
217
|
(c >= "0" && c <= "9") ||
|
|
179
218
|
c === "_"
|
|
180
219
|
) {
|
|
181
|
-
yield state;
|
|
220
|
+
yield lookup[state];
|
|
182
221
|
state = "identifier";
|
|
183
222
|
buffer = c;
|
|
184
223
|
} else {
|
|
@@ -197,6 +236,6 @@ export function* tokens(string) {
|
|
|
197
236
|
yield buffer;
|
|
198
237
|
break;
|
|
199
238
|
default:
|
|
200
|
-
yield state;
|
|
239
|
+
yield lookup[state];
|
|
201
240
|
}
|
|
202
241
|
}
|