repository-provider 33.0.1 → 33.0.3

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/README.md CHANGED
@@ -482,7 +482,7 @@ The name may be a property path like 'a.b.c'.
482
482
  ## getAttribute
483
483
 
484
484
  Deliver attribute value.
485
- The name may be a property path like 'a.b.c'.
485
+ The name may be a property path like 'a.b.c' or a\[2]
486
486
 
487
487
  ### Parameters
488
488
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "repository-provider",
3
- "version": "33.0.1",
3
+ "version": "33.0.3",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -42,7 +42,7 @@
42
42
  "typescript": "^5.2.2"
43
43
  },
44
44
  "engines": {
45
- "node": ">=18.18.0"
45
+ "node": ">=18.18.1"
46
46
  },
47
47
  "repository": {
48
48
  "type": "git",
package/src/attribute.mjs CHANGED
@@ -23,6 +23,21 @@ export function* tokens(string) {
23
23
  let state, buffer;
24
24
 
25
25
  for (const c of string) {
26
+ switch (state) {
27
+ case "string-escaping":
28
+ const esc = {
29
+ "\\": "\\",
30
+ t: "\t",
31
+ b: "\b",
32
+ r: "\r",
33
+ n: "\n",
34
+ f: "\f"
35
+ };
36
+ buffer += esc[c];
37
+ state = "string";
38
+ continue;
39
+ }
40
+
26
41
  switch (c) {
27
42
  case "\t":
28
43
  case " ":
@@ -43,6 +58,13 @@ export function* tokens(string) {
43
58
  }
44
59
  break;
45
60
 
61
+ case "\\":
62
+ switch (state) {
63
+ case "string":
64
+ state = "string-escaping";
65
+ break;
66
+ }
67
+ break;
46
68
  case '"':
47
69
  case "'":
48
70
  switch (state) {
@@ -140,7 +162,8 @@ export function* tokens(string) {
140
162
  if (
141
163
  (c >= "a" && c <= "z") ||
142
164
  (c >= "A" && c <= "Z") ||
143
- (c >= "0" && c <= "9") || c === '_'
165
+ (c >= "0" && c <= "9") ||
166
+ c === "_"
144
167
  ) {
145
168
  yield state;
146
169
  state = "identifier";
@@ -156,6 +179,7 @@ export function* tokens(string) {
156
179
  case undefined:
157
180
  break;
158
181
  case "string":
182
+ throw new Error("unterminated string");
159
183
  case "identifier":
160
184
  yield buffer;
161
185
  break;
@@ -213,13 +237,27 @@ export function getAttribute(object, name) {
213
237
  return object[name];
214
238
  }
215
239
 
240
+ let predicateTokens;
241
+
216
242
  for (const token of tokens(name)) {
217
243
  switch (token) {
218
244
  case ">":
219
245
  case "<":
220
246
  case ".":
247
+ break;
221
248
  case "[":
249
+ predicateTokens = [];
250
+ break;
222
251
  case "]":
252
+ // TODO: should loop over array actually getAttribute api should deliver iterators
253
+ if (Array.isArray(object)) {
254
+ object = object[0];
255
+ }
256
+
257
+ predicateTokens = undefined;
258
+ break;
259
+ case "*":
260
+ predicateTokens.push(token);
223
261
  break;
224
262
 
225
263
  default:
@@ -244,6 +282,8 @@ export function getAttribute(object, name) {
244
282
  export function getAttributeAndOperator(object, expression, getters = {}) {
245
283
  let op = "=";
246
284
 
285
+ let predicateTokens;
286
+
247
287
  for (const token of tokens(expression)) {
248
288
  switch (token) {
249
289
  case ">=":
@@ -256,7 +296,18 @@ export function getAttributeAndOperator(object, expression, getters = {}) {
256
296
  break;
257
297
  case ".":
258
298
  case "[":
299
+ predicateTokens = [];
300
+ break;
259
301
  case "]":
302
+ // TODO: should loop over array actually getAttribute api should deliver iterators
303
+ if (Array.isArray(object)) {
304
+ object = object[0];
305
+ }
306
+
307
+ predicateTokens = undefined;
308
+ break;
309
+ case "*":
310
+ predicateTokens.push(token);
260
311
  break;
261
312
 
262
313
  default: