pacc 4.7.2 → 4.8.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.7.2",
3
+ "version": "4.8.0",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "provenance": true
@@ -1,4 +1,3 @@
1
-
2
1
  /**
3
2
  * @typedef {import('./tokens.mjs').Token} Token
4
3
  */
@@ -17,6 +16,16 @@ import {
17
16
  STAR
18
17
  } from "./tokens.mjs";
19
18
 
19
+ function predicate(tokens, endToken) {
20
+ let predicate = [];
21
+ for (const token of tokens) {
22
+ if (token === endToken) break;
23
+ predicate.push(token);
24
+ }
25
+
26
+ return predicate;
27
+ }
28
+
20
29
  /**
21
30
  * Set object attribute.
22
31
  * The name may be a property path like 'a.b.c'.
@@ -27,12 +36,14 @@ import {
27
36
  export function setAttribute(object, expression, value) {
28
37
  let anchor, anchorKey;
29
38
 
30
- for (const token of tokens(expression)) {
39
+ const next = tokens(expression);
40
+
41
+ for (let token of next) {
31
42
  switch (token) {
32
43
  case DOT:
33
- case OPEN_BRACKET:
34
- case CLOSE_BRACKET:
35
44
  break;
45
+ case OPEN_BRACKET:
46
+ token = predicate(next, CLOSE_BRACKET)[0];
36
47
 
37
48
  default:
38
49
  if (anchor) {
@@ -40,13 +51,13 @@ export function setAttribute(object, expression, value) {
40
51
  anchor = undefined;
41
52
  }
42
53
 
43
- const next = object[token];
54
+ const walk = object[token];
44
55
 
45
- if (next === undefined || typeof next !== "object") {
56
+ if (walk === undefined || typeof walk !== "object") {
46
57
  anchor = object;
47
58
  anchorKey = token;
48
59
  } else {
49
- object = next;
60
+ object = walk;
50
61
  }
51
62
  }
52
63
  }
@@ -91,7 +102,9 @@ export function getAttributeAndOperator(object, expression) {
91
102
  let predicateTokens;
92
103
  let op = EQUAL;
93
104
 
94
- for (const token of tokens(expression)) {
105
+ const next = tokens(expression);
106
+
107
+ for (const token of next) {
95
108
  switch (token) {
96
109
  case GREATER_EQUAL:
97
110
  case LESS_EQUAL:
package/src/tokens.mjs CHANGED
@@ -116,10 +116,6 @@ export function* tokens(string) {
116
116
  case '"':
117
117
  case "'":
118
118
  switch (state) {
119
- case undefined:
120
- value = "";
121
- state = "string";
122
- break;
123
119
  case "string":
124
120
  yield value;
125
121
  state = undefined;
@@ -133,8 +129,10 @@ export function* tokens(string) {
133
129
  break;
134
130
  default:
135
131
  yield lookup[state];
132
+ case undefined:
136
133
  value = "";
137
134
  state = "string";
135
+ break;
138
136
  }
139
137
  break;
140
138
  case "!":
@@ -211,9 +209,6 @@ export function* tokens(string) {
211
209
  case "{":
212
210
  case "}":
213
211
  switch (state) {
214
- case undefined:
215
- state = c;
216
- break;
217
212
  case "string":
218
213
  value += c;
219
214
  break;
@@ -225,7 +220,9 @@ export function* tokens(string) {
225
220
  break;
226
221
  default:
227
222
  yield lookup[state];
223
+ case undefined:
228
224
  state = c;
225
+ break;
229
226
  }
230
227
  break;
231
228
  case "0":
@@ -245,10 +242,10 @@ export function* tokens(string) {
245
242
  value = c.charCodeAt(0) - 48;
246
243
  state = "number";
247
244
  break;
248
- case '.':
249
- state = "number-fraction";
250
- value = 0;
251
- divider = 10;
245
+ case ".":
246
+ state = "number-fraction";
247
+ value = 0;
248
+ divider = 10;
252
249
  case "number-fraction":
253
250
  value = value + (c.charCodeAt(0) - 48) / divider;
254
251
  divider *= 10;
@@ -266,18 +263,16 @@ export function* tokens(string) {
266
263
 
267
264
  default:
268
265
  switch (state) {
269
- case undefined:
270
- value = c;
271
- state = "identifier";
272
- break;
273
266
  case "string":
274
267
  case "identifier":
275
268
  value += c;
276
269
  break;
277
270
  default:
278
271
  yield lookup[state];
272
+ case undefined:
279
273
  state = "identifier";
280
274
  value = c;
275
+ break;
281
276
  }
282
277
  }
283
278
  }