repository-provider 33.0.0 → 33.0.1

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.
Files changed (2) hide show
  1. package/package.json +7 -7
  2. package/src/attribute.mjs +106 -46
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "repository-provider",
3
- "version": "33.0.0",
3
+ "version": "33.0.1",
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,87 @@
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) {
28
26
  switch (c) {
29
27
  case "\t":
30
28
  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
- }
29
+ switch (state) {
30
+ case undefined:
31
+ break;
32
+ case "string":
33
+ buffer += c;
34
+ break;
35
+ case "identifier":
36
+ yield buffer;
37
+ buffer = "";
38
+ state = undefined;
39
+ break;
40
+ default:
41
+ yield state;
42
+ state = undefined;
42
43
  }
43
44
  break;
44
45
 
45
46
  case '"':
46
47
  case "'":
47
- if (isString) {
48
- yield identifier;
49
- identifier = "";
50
- isString = false;
51
- } else {
52
- isString = true;
48
+ switch (state) {
49
+ case undefined:
50
+ buffer = "";
51
+ state = "string";
52
+ break;
53
+ case "string":
54
+ yield buffer;
55
+ state = undefined;
56
+ break;
57
+ case "identifier":
58
+ yield buffer;
59
+ buffer = "";
60
+ state = "string";
61
+ break;
62
+ default:
63
+ yield state;
64
+ buffer = "";
65
+ state = "string";
53
66
  }
54
67
  break;
55
68
  case "!":
56
69
  case ">":
57
70
  case "<":
58
- if (last) {
59
- yield last;
71
+ switch (state) {
72
+ case undefined:
73
+ state = c;
74
+ break;
75
+ case "string":
76
+ buffer += c;
77
+ break;
78
+ case "identifier":
79
+ yield buffer;
80
+ state = c;
81
+ break;
82
+ default:
83
+ yield state;
84
+ state = c;
60
85
  }
61
- last = c;
62
86
  break;
63
87
 
64
88
  case "=":
65
- if (last) {
66
- yield last + c;
67
- last = undefined;
68
- break;
89
+ switch (state) {
90
+ case undefined:
91
+ state = c;
92
+ break;
93
+ case "string":
94
+ buffer += c;
95
+ break;
96
+ case "identifier":
97
+ yield buffer;
98
+ state = c;
99
+ break;
100
+ default:
101
+ state += c;
69
102
  }
70
-
103
+ break;
71
104
  case ".":
72
105
  case "+":
73
106
  case "-":
@@ -77,30 +110,57 @@ export function* tokens(string) {
77
110
  case ")":
78
111
  case "[":
79
112
  case "]":
80
- if (last) {
81
- yield last;
82
- last = undefined;
83
- }
84
- if (identifier.length) {
85
- yield identifier;
86
- identifier = "";
113
+ switch (state) {
114
+ case undefined:
115
+ state = c;
116
+ break;
117
+ case "string":
118
+ buffer += c;
119
+ break;
120
+ case "identifier":
121
+ yield buffer;
122
+ state = c;
123
+ break;
124
+ default:
125
+ yield state;
126
+ state = c;
87
127
  }
88
- yield c;
89
128
  break;
90
129
  default:
91
- if (last) {
92
- yield last;
93
- last = undefined;
130
+ switch (state) {
131
+ case undefined:
132
+ buffer = c;
133
+ state = "identifier";
134
+ break;
135
+ case "string":
136
+ case "identifier":
137
+ buffer += c;
138
+ break;
139
+ default:
140
+ if (
141
+ (c >= "a" && c <= "z") ||
142
+ (c >= "A" && c <= "Z") ||
143
+ (c >= "0" && c <= "9") || c === '_'
144
+ ) {
145
+ yield state;
146
+ state = "identifier";
147
+ buffer = c;
148
+ } else {
149
+ state += c;
150
+ }
94
151
  }
95
- identifier += c;
96
152
  }
97
153
  }
98
154
 
99
- if (identifier.length) {
100
- yield identifier;
101
- }
102
- if (last) {
103
- yield last;
155
+ switch (state) {
156
+ case undefined:
157
+ break;
158
+ case "string":
159
+ case "identifier":
160
+ yield buffer;
161
+ break;
162
+ default:
163
+ yield state;
104
164
  }
105
165
  }
106
166
 
@@ -143,7 +203,7 @@ export function setAttribute(object, name, value) {
143
203
 
144
204
  /**
145
205
  * Deliver attribute value.
146
- * The name may be a property path like 'a.b.c'.
206
+ * The name may be a property path like 'a.b.c' or a[2]
147
207
  * @param {Object} object
148
208
  * @param {string} name
149
209
  * @returns {any} value associated with the given property name