repository-provider 33.0.0 → 33.0.2

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.0",
3
+ "version": "33.0.2",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -21,9 +21,9 @@
21
21
  "license": "BSD-2-Clause",
22
22
  "scripts": {
23
23
  "test": "npm run test:browser-ava && npm run test:ava",
24
- "test:ava": "ava --timeout 2m tests/*-ava.mjs tests/*-ava-node.mjs",
24
+ "test:ava": "ava --timeout 2m tests/*-ava.mjs tests/*-ava-node.mjs && ava --timeout 4m tests/*-ava.mjs tests/*-ava-node.mjs",
25
25
  "test:browser-ava": "browser-ava --headless --no-keep-open tests/*-ava.mjs tests/*-ava-browser.mjs",
26
- "cover": "c8 -x 'tests/**/*' --temp-directory build/tmp ava --timeout 2m tests/*-ava.mjs tests/*-ava-node.mjs && c8 report -r lcov -o build/coverage --temp-directory build/tmp",
26
+ "cover": "c8 -x 'tests/**/*' --temp-directory build/tmp ava --timeout 4m tests/*-ava.mjs tests/*-ava-node.mjs && c8 report -r lcov -o build/coverage --temp-directory build/tmp",
27
27
  "docs": "documentation readme --section=API ./src/**/*.mjs",
28
28
  "lint": "npm run lint:docs && npm run lint:tsc",
29
29
  "lint:docs": "documentation lint ./src/**/*.mjs",
@@ -34,15 +34,15 @@
34
34
  },
35
35
  "devDependencies": {
36
36
  "ava": "^5.3.1",
37
- "browser-ava": "^1.3.57",
37
+ "browser-ava": "^1.3.60",
38
38
  "c8": "^8.0.1",
39
39
  "documentation": "^14.0.2",
40
- "repository-provider-test-support": "^2.4.2",
41
- "semantic-release": "^21.1.1",
40
+ "repository-provider-test-support": "^2.4.3",
41
+ "semantic-release": "^22.0.5",
42
42
  "typescript": "^5.2.2"
43
43
  },
44
44
  "engines": {
45
- "node": ">=18.17.1"
45
+ "node": ">=18.18.0"
46
46
  },
47
47
  "repository": {
48
48
  "type": "git",
package/src/attribute.mjs CHANGED
@@ -20,54 +20,109 @@
20
20
  * @yields {string}
21
21
  */
22
22
  export function* tokens(string) {
23
- let isString = false;
24
- let identifier = "";
25
- let last;
23
+ let state, buffer;
26
24
 
27
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
+
28
41
  switch (c) {
29
42
  case "\t":
30
43
  case " ":
31
- if (isString) {
32
- identifier += c;
33
- } else {
34
- if (identifier.length) {
35
- yield identifier;
36
- identifier = "";
37
- }
38
- if (last) {
39
- yield last;
40
- last = undefined;
41
- }
44
+ switch (state) {
45
+ case undefined:
46
+ break;
47
+ case "string":
48
+ buffer += c;
49
+ break;
50
+ case "identifier":
51
+ yield buffer;
52
+ buffer = "";
53
+ state = undefined;
54
+ break;
55
+ default:
56
+ yield state;
57
+ state = undefined;
42
58
  }
43
59
  break;
44
60
 
61
+ case "\\":
62
+ switch (state) {
63
+ case "string":
64
+ state = "string-escaping";
65
+ break;
66
+ }
67
+ break;
45
68
  case '"':
46
69
  case "'":
47
- if (isString) {
48
- yield identifier;
49
- identifier = "";
50
- isString = false;
51
- } else {
52
- isString = true;
70
+ switch (state) {
71
+ case undefined:
72
+ buffer = "";
73
+ state = "string";
74
+ break;
75
+ case "string":
76
+ yield buffer;
77
+ state = undefined;
78
+ break;
79
+ case "identifier":
80
+ yield buffer;
81
+ buffer = "";
82
+ state = "string";
83
+ break;
84
+ default:
85
+ yield state;
86
+ buffer = "";
87
+ state = "string";
53
88
  }
54
89
  break;
55
90
  case "!":
56
91
  case ">":
57
92
  case "<":
58
- if (last) {
59
- yield last;
93
+ switch (state) {
94
+ case undefined:
95
+ state = c;
96
+ break;
97
+ case "string":
98
+ buffer += c;
99
+ break;
100
+ case "identifier":
101
+ yield buffer;
102
+ state = c;
103
+ break;
104
+ default:
105
+ yield state;
106
+ state = c;
60
107
  }
61
- last = c;
62
108
  break;
63
109
 
64
110
  case "=":
65
- if (last) {
66
- yield last + c;
67
- last = undefined;
68
- break;
111
+ switch (state) {
112
+ case undefined:
113
+ state = c;
114
+ break;
115
+ case "string":
116
+ buffer += c;
117
+ break;
118
+ case "identifier":
119
+ yield buffer;
120
+ state = c;
121
+ break;
122
+ default:
123
+ state += c;
69
124
  }
70
-
125
+ break;
71
126
  case ".":
72
127
  case "+":
73
128
  case "-":
@@ -77,30 +132,59 @@ export function* tokens(string) {
77
132
  case ")":
78
133
  case "[":
79
134
  case "]":
80
- if (last) {
81
- yield last;
82
- last = undefined;
135
+ switch (state) {
136
+ case undefined:
137
+ state = c;
138
+ break;
139
+ case "string":
140
+ buffer += c;
141
+ break;
142
+ case "identifier":
143
+ yield buffer;
144
+ state = c;
145
+ break;
146
+ default:
147
+ yield state;
148
+ state = c;
83
149
  }
84
- if (identifier.length) {
85
- yield identifier;
86
- identifier = "";
87
- }
88
- yield c;
89
150
  break;
90
151
  default:
91
- if (last) {
92
- yield last;
93
- last = undefined;
152
+ switch (state) {
153
+ case undefined:
154
+ buffer = c;
155
+ state = "identifier";
156
+ break;
157
+ case "string":
158
+ case "identifier":
159
+ buffer += c;
160
+ break;
161
+ default:
162
+ if (
163
+ (c >= "a" && c <= "z") ||
164
+ (c >= "A" && c <= "Z") ||
165
+ (c >= "0" && c <= "9") ||
166
+ c === "_"
167
+ ) {
168
+ yield state;
169
+ state = "identifier";
170
+ buffer = c;
171
+ } else {
172
+ state += c;
173
+ }
94
174
  }
95
- identifier += c;
96
175
  }
97
176
  }
98
177
 
99
- if (identifier.length) {
100
- yield identifier;
101
- }
102
- if (last) {
103
- yield last;
178
+ switch (state) {
179
+ case undefined:
180
+ break;
181
+ case "string":
182
+ throw new Error("unterminated string");
183
+ case "identifier":
184
+ yield buffer;
185
+ break;
186
+ default:
187
+ yield state;
104
188
  }
105
189
  }
106
190
 
@@ -143,7 +227,7 @@ export function setAttribute(object, name, value) {
143
227
 
144
228
  /**
145
229
  * Deliver attribute value.
146
- * The name may be a property path like 'a.b.c'.
230
+ * The name may be a property path like 'a.b.c' or a[2]
147
231
  * @param {Object} object
148
232
  * @param {string} name
149
233
  * @returns {any} value associated with the given property name