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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pacc",
3
- "version": "1.0.3",
3
+ "version": "2.0.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
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 { tokens } from "./tokens.mjs";
17
-
18
- export { tokens };
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
- const esc = {
14
- "\\": "\\",
15
- b: "\b",
16
- f: "\f",
17
- n: "\n",
18
- r: "\r",
19
- t: "\t"
20
- };
21
- buffer += esc[c];
22
- state = "string";
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
- yield state + c;
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
  }