pacc 1.0.3 → 2.0.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 +1 -1
- package/src/attribute.mjs +28 -17
- package/src/tokens.mjs +69 -19
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 DOUBBLE_AMPERSAND = createToken('&&');
|
|
36
|
+
export const BAR = createToken("|");
|
|
37
|
+
export const DOUBBLE_BAR = createToken('||');
|
|
38
|
+
|
|
1
39
|
/**
|
|
2
40
|
* Split property path into tokens
|
|
3
41
|
* @generator
|
|
@@ -5,21 +43,32 @@
|
|
|
5
43
|
* @yields {string}
|
|
6
44
|
*/
|
|
7
45
|
export function* tokens(string) {
|
|
8
|
-
let state, buffer;
|
|
46
|
+
let state, buffer, hex;
|
|
9
47
|
|
|
10
48
|
for (const c of string) {
|
|
11
49
|
switch (state) {
|
|
50
|
+
case "string-escaping-hex":
|
|
51
|
+
hex += c;
|
|
52
|
+
if (hex.length === 4) {
|
|
53
|
+
buffer += String.fromCharCode(parseInt(hex, 16));
|
|
54
|
+
state = "string";
|
|
55
|
+
}
|
|
56
|
+
continue;
|
|
12
57
|
case "string-escaping":
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
58
|
+
if (c === "u") {
|
|
59
|
+
state = "string-escaping-hex";
|
|
60
|
+
hex = "";
|
|
61
|
+
} else {
|
|
62
|
+
const esc = {
|
|
63
|
+
b: "\b",
|
|
64
|
+
f: "\f",
|
|
65
|
+
n: "\n",
|
|
66
|
+
r: "\r",
|
|
67
|
+
t: "\t"
|
|
68
|
+
};
|
|
69
|
+
buffer += esc[c] || c;
|
|
70
|
+
state = "string";
|
|
71
|
+
}
|
|
23
72
|
continue;
|
|
24
73
|
}
|
|
25
74
|
|
|
@@ -38,7 +87,7 @@ export function* tokens(string) {
|
|
|
38
87
|
state = undefined;
|
|
39
88
|
break;
|
|
40
89
|
default:
|
|
41
|
-
yield state;
|
|
90
|
+
yield lookup[state] || state;
|
|
42
91
|
state = undefined;
|
|
43
92
|
}
|
|
44
93
|
break;
|
|
@@ -67,7 +116,7 @@ export function* tokens(string) {
|
|
|
67
116
|
state = "string";
|
|
68
117
|
break;
|
|
69
118
|
default:
|
|
70
|
-
yield state;
|
|
119
|
+
yield lookup[state] || state;
|
|
71
120
|
buffer = "";
|
|
72
121
|
state = "string";
|
|
73
122
|
}
|
|
@@ -81,10 +130,11 @@ export function* tokens(string) {
|
|
|
81
130
|
case "&":
|
|
82
131
|
case "|":
|
|
83
132
|
if (state === c) {
|
|
84
|
-
|
|
133
|
+
state += c;
|
|
134
|
+
yield lookup[state] || state;
|
|
85
135
|
state = undefined;
|
|
86
136
|
} else {
|
|
87
|
-
yield state;
|
|
137
|
+
yield lookup[state] || state;
|
|
88
138
|
state = c;
|
|
89
139
|
}
|
|
90
140
|
break;
|
|
@@ -99,7 +149,7 @@ export function* tokens(string) {
|
|
|
99
149
|
state = c;
|
|
100
150
|
break;
|
|
101
151
|
default:
|
|
102
|
-
yield state;
|
|
152
|
+
yield lookup[state] || state;
|
|
103
153
|
state = c;
|
|
104
154
|
}
|
|
105
155
|
break;
|
|
@@ -146,7 +196,7 @@ export function* tokens(string) {
|
|
|
146
196
|
state = c;
|
|
147
197
|
break;
|
|
148
198
|
default:
|
|
149
|
-
yield state;
|
|
199
|
+
yield lookup[state] || state;
|
|
150
200
|
state = c;
|
|
151
201
|
}
|
|
152
202
|
break;
|
|
@@ -167,7 +217,7 @@ export function* tokens(string) {
|
|
|
167
217
|
(c >= "0" && c <= "9") ||
|
|
168
218
|
c === "_"
|
|
169
219
|
) {
|
|
170
|
-
yield state;
|
|
220
|
+
yield lookup[state] || state;
|
|
171
221
|
state = "identifier";
|
|
172
222
|
buffer = c;
|
|
173
223
|
} else {
|
|
@@ -186,6 +236,6 @@ export function* tokens(string) {
|
|
|
186
236
|
yield buffer;
|
|
187
237
|
break;
|
|
188
238
|
default:
|
|
189
|
-
yield state;
|
|
239
|
+
yield lookup[state] || state;
|
|
190
240
|
}
|
|
191
241
|
}
|