+1
-1
.mtn-ignore
+1
-1
.mtn-ignore
+13
-2
CHANGELOG.md
+13
-2
CHANGELOG.md
···
1
# ChangeLog
2
3
## 2.1.0 - 2025-08-03
4
5
### Changed
6
7
-
- when fields are CHOICEs now both the field name and the choice name are shown (fixes GitHub #102)
8
- upgrade minimum NodeJS version supported from 12.20.0 to 14.6.0 due to usage of ?. and ?? operators in defs.js (ECMAScript 2020); older code is still linted against ECMAScript 2015 for now
9
10
### Added
···
15
16
### Added
17
18
-
- add proper support for standard Base64 (we previously only supported Base64url) (fixes GitHub #99)
19
- improve test harness
20
21
## 2.0.5 - 2025-04-12
···
1
# ChangeLog
2
3
+
## 2.1.1 - 2025-10-24
4
+
5
+
### Changed
6
+
7
+
- update dev dependencies
8
+
- fix test suite that was reporting no error with empty responses
9
+
10
+
### Added
11
+
12
+
- add content length check for BOOLEAN, INTEGER, OID ([GitHub #104](https://github.com/lapo-luchini/asn1js/pull/104))
13
+
14
## 2.1.0 - 2025-08-03
15
16
### Changed
17
18
+
- when fields are CHOICEs now both the field name and the choice name are shown (fixes [GitHub #102](https://github.com/lapo-luchini/asn1js/issues/102))
19
- upgrade minimum NodeJS version supported from 12.20.0 to 14.6.0 due to usage of ?. and ?? operators in defs.js (ECMAScript 2020); older code is still linted against ECMAScript 2015 for now
20
21
### Added
···
26
27
### Added
28
29
+
- add proper support for standard Base64 (we previously only supported Base64url) (fixes [GitHub #99](https://github.com/lapo-luchini/asn1js/pull/99))
30
- improve test harness
31
32
## 2.0.5 - 2025-04-12
+4
-3
README.md
+4
-3
README.md
···
101
links
102
-----
103
104
-
- [official website](https://lapo.it/asn1js/)
105
-
- [dedicated domain](https://asn1js.eu/)
106
-
- [InDefero tracker](http://idf.lapo.it/p/asn1js/)
107
- [GitHub mirror](https://github.com/lapo-luchini/asn1js)
108
- [ChangeLog on GitHub](https://github.com/lapo-luchini/asn1js/blob/trunk/CHANGELOG.md)
109
- [Ohloh code stats](https://www.openhub.net/p/asn1js)
···
101
links
102
-----
103
104
+
- [official website](https://asn1js.eu/)
105
+
- [alternate website](https://lapo.it/asn1js/)
106
+
- [single-file version working locally](https://asn1js.eu/index-local.html) (just save this link)
107
+
- [InDefero tracker](http://idf.lapo.it/p/asn1js/) (currently offline)
108
- [GitHub mirror](https://github.com/lapo-luchini/asn1js)
109
- [ChangeLog on GitHub](https://github.com/lapo-luchini/asn1js/blob/trunk/CHANGELOG.md)
110
- [Ohloh code stats](https://www.openhub.net/p/asn1js)
+273
-72
asn1.js
+273
-72
asn1.js
···
13
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15
16
-
import { Int10 } from './int10.js';
17
import { oids } from './oids.js';
18
19
const
···
42
['CDELNRSTZcdelnrstz', 'ฤฤฤฤฝลลล ลคลฝฤฤฤฤพลลลกลฅลพ'], // Caron
43
];
44
45
function stringCut(str, len) {
46
if (str.length > len)
47
str = str.substring(0, len) + ellipsis;
48
return str;
49
}
50
51
function checkPrintable(s) {
52
let i, v;
53
for (i = 0; i < s.length; ++i) {
···
57
}
58
}
59
60
-
/** Class to manage a stream of bytes, with a zero-copy approach.
61
-
* It uses an existing array or binary string and advances a position index. */
62
export class Stream {
63
64
/**
65
* @param {Stream|array|string} enc data (will not be copied)
66
* @param {?number} pos starting position (mandatory when `end` is not a Stream)
67
*/
···
75
}
76
if (typeof this.pos != 'number')
77
throw new Error('"pos" must be a numeric value');
78
if (typeof this.enc == 'string')
79
this.getRaw = pos => this.enc.charCodeAt(pos);
80
else if (typeof this.enc[0] == 'number')
···
82
else
83
throw new Error('"enc" must be a numeric array or a string');
84
}
85
-
/** Get the byte at current position (and increment it) or at a specified position (and avoid moving current position).
86
-
* @param {?number} pos read position if specified, else current position (and increment it) */
87
get(pos) {
88
if (pos === undefined)
89
pos = this.pos++;
···
91
throw new Error('Requesting byte offset ' + pos + ' on a stream of length ' + this.enc.length);
92
return this.getRaw(pos);
93
}
94
-
/** Convert a single byte to an hexadcimal string (of length 2).
95
-
* @param {number} b */
96
static hexByte(b) {
97
return hexDigits.charAt((b >> 4) & 0xF) + hexDigits.charAt(b & 0xF);
98
}
99
-
/** Hexadecimal dump of a specified region of the stream.
100
-
* @param {number} start starting position (included)
101
-
* @param {number} end ending position (excluded)
102
-
* @param {string} type 'raw', 'byte' or 'dump' (default) */
103
hexDump(start, end, type = 'dump') {
104
let s = '';
105
for (let i = start; i < end; ++i) {
···
115
}
116
return s;
117
}
118
-
/** Base64url dump of a specified region of the stream (according to RFC 4648 section 5).
119
-
* @param {number} start starting position (included)
120
-
* @param {number} end ending position (excluded)
121
-
* @param {string} type 'url' (default, section 5 without padding) or 'std' (section 4 with padding) */
122
b64Dump(start, end, type = 'url') {
123
-
const b64 = type === 'url' ? b64URL : b64Std;
124
-
let extra = (end - start) % 3,
125
-
s = '',
126
i, c;
127
for (i = start; i + 2 < end; i += 3) {
128
c = this.get(i) << 16 | this.get(i + 1) << 8 | this.get(i + 2);
···
141
}
142
return s;
143
}
144
isASCII(start, end) {
145
for (let i = start; i < end; ++i) {
146
let c = this.get(i);
···
149
}
150
return true;
151
}
152
parseStringISO(start, end, maxLength) {
153
let s = '';
154
for (let i = start; i < end; ++i)
155
s += String.fromCharCode(this.get(i));
156
return { size: s.length, str: stringCut(s, maxLength) };
157
}
158
parseStringT61(start, end, maxLength) {
159
// warning: this code is not very well tested so far
160
function merge(c, d) {
161
-
let t = tableT61[c - 0xC0];
162
-
let i = t[0].indexOf(String.fromCharCode(d));
163
return (i < 0) ? '\0' : t[1].charAt(i);
164
}
165
let s = '', c;
···
176
}
177
return { size: s.length, str: stringCut(s, maxLength) };
178
}
179
parseStringUTF(start, end, maxLength) {
180
function ex(c) { // must be 10xxxxxx
181
if ((c < 0x80) || (c >= 0xC0))
182
throw new Error('Invalid UTF-8 continuation byte: ' + c);
183
return (c & 0x3F);
184
}
185
function surrogate(cp) {
186
if (cp < 0x10000)
187
throw new Error('UTF-8 overlong encoding, codepoint encoded in 4 bytes: ' + cp);
···
191
}
192
let s = '';
193
for (let i = start; i < end; ) {
194
-
let c = this.get(i++);
195
if (c < 0x80) // 0xxxxxxx (7 bit)
196
s += String.fromCharCode(c);
197
else if (c < 0xC0)
···
207
}
208
return { size: s.length, str: stringCut(s, maxLength) };
209
}
210
parseStringBMP(start, end, maxLength) {
211
let s = '', hi, lo;
212
for (let i = start; i < end; ) {
···
216
}
217
return { size: s.length, str: stringCut(s, maxLength) };
218
}
219
parseTime(start, end, shortYear) {
220
let s = this.parseStringISO(start, end).str,
221
m = (shortYear ? reTimeS : reTimeL).exec(s);
···
243
}
244
return s;
245
}
246
parseInteger(start, end) {
247
let v = this.get(start),
248
-
neg = (v > 127),
249
-
pad = neg ? 255 : 0,
250
-
len,
251
s = '';
252
// skip unuseful bits (not allowed in DER)
253
while (v == pad && ++start < end)
254
v = this.get(start);
255
-
len = end - start;
256
if (len === 0)
257
return neg ? '-1' : '0';
258
// show bit length of huge integers
259
if (len > 4) {
260
-
s = v;
261
-
len <<= 3;
262
-
while (((s ^ pad) & 0x80) == 0) {
263
-
s <<= 1;
264
-
--len;
265
}
266
-
s = '(' + len + ' bit)\n';
267
}
268
// decode the integer
269
if (neg) v = v - 256;
270
-
let n = new Int10(v);
271
for (let i = start + 1; i < end; ++i)
272
-
n.mulAdd(256, this.get(i));
273
-
return s + n.toString();
274
}
275
parseBitString(start, end, maxLength) {
276
-
let unusedBits = this.get(start);
277
if (unusedBits > 7)
278
throw new Error('Invalid BitString with unusedBits=' + unusedBits);
279
-
let lenBit = ((end - start - 1) << 3) - unusedBits,
280
-
s = '';
281
for (let i = start + 1; i < end; ++i) {
282
let b = this.get(i),
283
skip = (i == end - 1) ? unusedBits : 0;
···
288
}
289
return { size: lenBit, str: s };
290
}
291
parseOctetString(start, end, maxLength) {
292
-
let len = end - start,
293
-
s;
294
try {
295
-
s = this.parseStringUTF(start, end, maxLength);
296
checkPrintable(s.str);
297
return { size: end - start, str: s.str };
298
} catch (ignore) {
299
-
// ignore
300
}
301
maxLength /= 2; // we work in bytes
302
if (len > maxLength)
303
end = start + maxLength;
304
-
s = '';
305
for (let i = start; i < end; ++i)
306
s += Stream.hexByte(this.get(i));
307
if (len > maxLength)
308
s += ellipsis;
309
return { size: len, str: s };
310
}
311
parseOID(start, end, maxLength, isRelative) {
312
let s = '',
313
-
n = new Int10(),
314
bits = 0;
315
for (let i = start; i < end; ++i) {
316
let v = this.get(i);
317
-
n.mulAdd(128, v & 0x7F);
318
bits += 7;
319
if (!(v & 0x80)) { // finished
320
if (s === '') {
321
-
n = n.simplify();
322
if (isRelative) {
323
-
s = (n instanceof Int10) ? n.toString() : '' + n;
324
-
} else if (n instanceof Int10) {
325
-
n.sub(80);
326
-
s = '2.' + n.toString();
327
} else {
328
-
let m = n < 80 ? n < 40 ? 0 : 1 : 2;
329
-
s = m + '.' + (n - m * 40);
330
}
331
} else
332
-
s += '.' + n.toString();
333
if (s.length > maxLength)
334
return stringCut(s, maxLength);
335
-
n = new Int10();
336
bits = 0;
337
}
338
}
339
if (bits > 0)
340
s += '.incomplete';
341
if (typeof oids === 'object' && !isRelative) {
342
let oid = oids[s];
343
if (oid) {
···
348
}
349
return s;
350
}
351
parseRelativeOID(start, end, maxLength) {
352
return this.parseOID(start, end, maxLength, true);
353
}
···
380
this.tagConstructed = ((buf & 0x20) !== 0);
381
this.tagNumber = buf & 0x1F;
382
if (this.tagNumber == 0x1F) { // long tag
383
-
let n = new Int10();
384
do {
385
buf = stream.get();
386
-
n.mulAdd(128, buf & 0x7F);
387
} while (buf & 0x80);
388
-
this.tagNumber = n.simplify();
389
}
390
}
391
isUniversal() {
···
396
}
397
}
398
399
export class ASN1 {
400
constructor(stream, header, length, tag, tagLen, sub) {
401
if (!(tag instanceof ASN1Tag)) throw new Error('Invalid tag value.');
402
this.stream = stream;
···
406
this.tagLen = tagLen;
407
this.sub = sub;
408
}
409
typeName() {
410
switch (this.tag.tagClass) {
411
case 0: // universal
···
445
case 3: return 'Private_' + this.tag.tagNumber.toString();
446
}
447
}
448
-
/** A string preview of the content (intended for humans). */
449
content(maxLength) {
450
if (this.tag === undefined)
451
return null;
452
if (maxLength === undefined)
453
maxLength = Infinity;
454
-
let content = this.posContent(),
455
len = Math.abs(this.length);
456
if (!this.tag.isUniversal()) {
457
if (this.sub !== null)
···
461
}
462
switch (this.tag.tagNumber) {
463
case 0x01: // BOOLEAN
464
-
if (len === 0) return 'invalid length 0';
465
return (this.stream.get(content) === 0) ? 'false' : 'true';
466
case 0x02: // INTEGER
467
-
if (len === 0) return 'invalid length 0';
468
return this.stream.parseInteger(content, content + len);
469
case 0x03: { // BIT_STRING
470
let d = recurse(this, 'parseBitString', maxLength);
471
return '(' + d.size + ' bit)\n' + d.str;
472
}
473
case 0x04: { // OCTET_STRING
474
-
if (len === 0) return 'invalid length 0';
475
let d = recurse(this, 'parseOctetString', maxLength);
476
return '(' + d.size + ' byte)\n' + d.str;
477
}
478
//case 0x05: // NULL
479
case 0x06: // OBJECT_IDENTIFIER
480
return this.stream.parseOID(content, content + len, maxLength);
481
//case 0x07: // ObjectDescriptor
482
//case 0x08: // EXTERNAL
···
513
}
514
return null;
515
}
516
toString() {
517
return this.typeName() + '@' + this.stream.pos + '[header:' + this.header + ',length:' + this.length + ',sub:' + ((this.sub === null) ? 'null' : this.sub.length) + ']';
518
}
519
toPrettyString(indent) {
520
if (indent === undefined) indent = '';
521
let s = indent;
···
546
}
547
return s;
548
}
549
posStart() {
550
return this.stream.pos;
551
}
552
posContent() {
553
return this.stream.pos + this.header;
554
}
555
posEnd() {
556
return this.stream.pos + this.header + Math.abs(this.length);
557
}
558
-
/** Position of the length. */
559
posLen() {
560
return this.stream.pos + this.tagLen;
561
}
562
-
/** Hexadecimal dump of the node.
563
-
* @param type 'raw', 'byte' or 'dump' */
564
toHexString(type = 'raw') {
565
return this.stream.hexDump(this.posStart(), this.posEnd(), type);
566
}
567
-
/** Base64url dump of the node (according to RFC 4648 section 5).
568
-
* @param {string} type 'url' (default, section 5 without padding) or 'std' (section 4 with padding)
569
-
*/
570
toB64String(type = 'url') {
571
return this.stream.b64Dump(this.posStart(), this.posEnd(), type);
572
}
573
static decodeLength(stream) {
574
-
let buf = stream.get(),
575
len = buf & 0x7F;
576
if (len == buf) // first bit was 0, short form
577
return len;
578
if (len === 0) // long form with length 0 is a special case
579
return null; // undefined length
580
-
if (len > 6) // no reason to use Int10, as it would be a huge buffer anyways
581
throw new Error('Length over 48 bits not supported at position ' + (stream.pos - 1));
582
-
buf = 0;
583
for (let i = 0; i < len; ++i)
584
-
buf = (buf * 256) + stream.get();
585
-
return buf;
586
}
587
static decode(stream, offset, type = ASN1) {
588
if (!(type == ASN1 || type.prototype instanceof ASN1))
589
throw new Error('Must pass a class that extends ASN1');
···
13
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15
16
import { oids } from './oids.js';
17
18
const
···
41
['CDELNRSTZcdelnrstz', 'ฤฤฤฤฝลลล ลคลฝฤฤฤฤพลลลกลฅลพ'], // Caron
42
];
43
44
+
/**
45
+
* Truncates a string to a specified length and adds an ellipsis if needed.
46
+
* @param {string} str - The input string to truncate
47
+
* @param {number} len - The maximum length of the string
48
+
* @returns {string} The truncated string
49
+
*/
50
function stringCut(str, len) {
51
if (str.length > len)
52
str = str.substring(0, len) + ellipsis;
53
return str;
54
}
55
56
+
/**
57
+
* Checks if a string contains only printable characters (ASCII 32-126, plus tab, newline, carriage return)
58
+
* @param {string} s - The string to check
59
+
* @throws {Error} If an unprintable character is found
60
+
*/
61
function checkPrintable(s) {
62
let i, v;
63
for (i = 0; i < s.length; ++i) {
···
67
}
68
}
69
70
+
/**
71
+
* Class to manage a stream of bytes, with a zero-copy approach.
72
+
* It uses an existing array or binary string and advances a position index.
73
+
*/
74
export class Stream {
75
76
/**
77
+
* Creates a new Stream object.
78
* @param {Stream|array|string} enc data (will not be copied)
79
* @param {?number} pos starting position (mandatory when `end` is not a Stream)
80
*/
···
88
}
89
if (typeof this.pos != 'number')
90
throw new Error('"pos" must be a numeric value');
91
+
// Set up the raw byte access function based on the type of data
92
if (typeof this.enc == 'string')
93
this.getRaw = pos => this.enc.charCodeAt(pos);
94
else if (typeof this.enc[0] == 'number')
···
96
else
97
throw new Error('"enc" must be a numeric array or a string');
98
}
99
+
100
+
/**
101
+
* Get the byte at current position (and increment it) or at a specified position (and avoid moving current position).
102
+
* @param {?number} pos read position if specified, else current position (and increment it)
103
+
* @returns {number} The byte value at the specified position
104
+
*/
105
get(pos) {
106
if (pos === undefined)
107
pos = this.pos++;
···
109
throw new Error('Requesting byte offset ' + pos + ' on a stream of length ' + this.enc.length);
110
return this.getRaw(pos);
111
}
112
+
113
+
/**
114
+
* Convert a single byte to a hexadecimal string (of length 2).
115
+
* @param {number} b - The byte to convert
116
+
* @returns {string} Hexadecimal representation of the byte
117
+
*/
118
static hexByte(b) {
119
return hexDigits.charAt((b >> 4) & 0xF) + hexDigits.charAt(b & 0xF);
120
}
121
+
122
+
/**
123
+
* Hexadecimal dump of a specified region of the stream.
124
+
* @param {number} start - starting position (included)
125
+
* @param {number} end - ending position (excluded)
126
+
* @param {string} type - 'raw', 'byte' or 'dump' (default)
127
+
* @returns {string} Hexadecimal representation of the data
128
+
*/
129
hexDump(start, end, type = 'dump') {
130
let s = '';
131
for (let i = start; i < end; ++i) {
···
141
}
142
return s;
143
}
144
+
145
+
/**
146
+
* Base64url dump of a specified region of the stream (according to RFC 4648 section 5).
147
+
* @param {number} start - starting position (included)
148
+
* @param {number} end - ending position (excluded)
149
+
* @param {string} type - 'url' (default, section 5 without padding) or 'std' (section 4 with padding)
150
+
* @returns {string} Base64 encoded representation of the data
151
+
*/
152
b64Dump(start, end, type = 'url') {
153
+
const b64 = type === 'url' ? b64URL : b64Std,
154
+
extra = (end - start) % 3;
155
+
let s = '',
156
i, c;
157
for (i = start; i + 2 < end; i += 3) {
158
c = this.get(i) << 16 | this.get(i + 1) << 8 | this.get(i + 2);
···
171
}
172
return s;
173
}
174
+
175
+
/**
176
+
* Check if a region of the stream contains only ASCII characters (32-176)
177
+
* @param {number} start - starting position (included)
178
+
* @param {number} end - ending position (excluded)
179
+
* @returns {boolean} True if all characters are ASCII, false otherwise
180
+
*/
181
isASCII(start, end) {
182
for (let i = start; i < end; ++i) {
183
let c = this.get(i);
···
186
}
187
return true;
188
}
189
+
190
+
/**
191
+
* Parse a region of the stream as an ISO string
192
+
* @param {number} start - starting position (included)
193
+
* @param {number} end - ending position (excluded)
194
+
* @param {number} maxLength - maximum length of the output string
195
+
* @returns {Object} Object with size and str properties
196
+
*/
197
parseStringISO(start, end, maxLength) {
198
let s = '';
199
for (let i = start; i < end; ++i)
200
s += String.fromCharCode(this.get(i));
201
return { size: s.length, str: stringCut(s, maxLength) };
202
}
203
+
204
+
/**
205
+
* Parse a region of the stream as a T.61 string
206
+
* @param {number} start - starting position (included)
207
+
* @param {number} end - ending position (excluded)
208
+
* @param {number} maxLength - maximum length of the output string
209
+
* @returns {Object} Object with size and str properties
210
+
*/
211
parseStringT61(start, end, maxLength) {
212
// warning: this code is not very well tested so far
213
function merge(c, d) {
214
+
const t = tableT61[c - 0xC0];
215
+
const i = t[0].indexOf(String.fromCharCode(d));
216
return (i < 0) ? '\0' : t[1].charAt(i);
217
}
218
let s = '', c;
···
229
}
230
return { size: s.length, str: stringCut(s, maxLength) };
231
}
232
+
233
+
/**
234
+
* Parse a region of the stream as a UTF-8 string
235
+
* @param {number} start - starting position (included)
236
+
* @param {number} end - ending position (excluded)
237
+
* @param {number} maxLength - maximum length of the output string
238
+
* @returns {Object} Object with size and str properties
239
+
*/
240
parseStringUTF(start, end, maxLength) {
241
+
/**
242
+
* Helper function to process UTF-8 continuation bytes
243
+
* @param {number} c - The continuation byte
244
+
* @returns {number} The extracted data bits
245
+
*/
246
function ex(c) { // must be 10xxxxxx
247
if ((c < 0x80) || (c >= 0xC0))
248
throw new Error('Invalid UTF-8 continuation byte: ' + c);
249
return (c & 0x3F);
250
}
251
+
/**
252
+
* Helper function to convert a code point to a surrogate pair
253
+
* @param {number} cp - The code point to convert
254
+
* @returns {string} The surrogate pair as a string
255
+
*/
256
function surrogate(cp) {
257
if (cp < 0x10000)
258
throw new Error('UTF-8 overlong encoding, codepoint encoded in 4 bytes: ' + cp);
···
262
}
263
let s = '';
264
for (let i = start; i < end; ) {
265
+
const c = this.get(i++);
266
if (c < 0x80) // 0xxxxxxx (7 bit)
267
s += String.fromCharCode(c);
268
else if (c < 0xC0)
···
278
}
279
return { size: s.length, str: stringCut(s, maxLength) };
280
}
281
+
282
+
/**
283
+
* Parse a region of the stream as a BMP (Basic Multilingual Plane) string
284
+
* @param {number} start - starting position (included)
285
+
* @param {number} end - ending position (excluded)
286
+
* @param {number} maxLength - maximum length of the output string
287
+
* @returns {Object} Object with size and str properties
288
+
*/
289
parseStringBMP(start, end, maxLength) {
290
let s = '', hi, lo;
291
for (let i = start; i < end; ) {
···
295
}
296
return { size: s.length, str: stringCut(s, maxLength) };
297
}
298
+
299
+
/**
300
+
* Parse a region of the stream as a time string
301
+
* @param {number} start - starting position (included)
302
+
* @param {number} end - ending position (excluded)
303
+
* @param {boolean} shortYear - Whether to parse as short year (2-digit)
304
+
* @returns {string} Formatted time string
305
+
*/
306
parseTime(start, end, shortYear) {
307
let s = this.parseStringISO(start, end).str,
308
m = (shortYear ? reTimeS : reTimeL).exec(s);
···
330
}
331
return s;
332
}
333
+
334
+
/**
335
+
* Parse a region of the stream as an integer
336
+
* @param {number} start - starting position (included)
337
+
* @param {number} end - ending position (excluded)
338
+
* @returns {string} Formatted integer string
339
+
*/
340
parseInteger(start, end) {
341
let v = this.get(start),
342
s = '';
343
+
const neg = (v > 127),
344
+
pad = neg ? 255 : 0;
345
// skip unuseful bits (not allowed in DER)
346
while (v == pad && ++start < end)
347
v = this.get(start);
348
+
const len = end - start;
349
if (len === 0)
350
return neg ? '-1' : '0';
351
// show bit length of huge integers
352
if (len > 4) {
353
+
let v2 = v,
354
+
lenBit = len << 3;
355
+
while (((v2 ^ pad) & 0x80) == 0) {
356
+
v2 <<= 1;
357
+
--lenBit;
358
}
359
+
s = '(' + lenBit + ' bit)\n';
360
}
361
// decode the integer
362
if (neg) v = v - 256;
363
+
let n = BigInt(v);
364
for (let i = start + 1; i < end; ++i)
365
+
n = (n << 8n) | BigInt(this.get(i));
366
+
return s + n;
367
}
368
+
369
+
/**
370
+
* Parse a region of the stream as a bit string.
371
+
* @param {number} start - starting position (included)
372
+
* @param {number} end - ending position (excluded)
373
+
* @param {number} maxLength - maximum length of the output string
374
+
* @returns {Object} Object with size and str properties
375
+
*/
376
parseBitString(start, end, maxLength) {
377
+
const unusedBits = this.get(start);
378
if (unusedBits > 7)
379
throw new Error('Invalid BitString with unusedBits=' + unusedBits);
380
+
const lenBit = ((end - start - 1) << 3) - unusedBits;
381
+
let s = '';
382
for (let i = start + 1; i < end; ++i) {
383
let b = this.get(i),
384
skip = (i == end - 1) ? unusedBits : 0;
···
389
}
390
return { size: lenBit, str: s };
391
}
392
+
393
+
/**
394
+
* Parse a region of the stream as an octet string.
395
+
* @param {number} start - starting position (included)
396
+
* @param {number} end - ending position (excluded)
397
+
* @param {number} maxLength - maximum length of the output string
398
+
* @returns {Object} Object with size and str properties
399
+
*/
400
parseOctetString(start, end, maxLength) {
401
try {
402
+
let s = this.parseStringUTF(start, end, maxLength);
403
checkPrintable(s.str);
404
return { size: end - start, str: s.str };
405
} catch (ignore) {
406
+
// If UTF-8 parsing fails, fall back to hexadecimal dump
407
}
408
+
const len = end - start;
409
maxLength /= 2; // we work in bytes
410
if (len > maxLength)
411
end = start + maxLength;
412
+
let s = '';
413
for (let i = start; i < end; ++i)
414
s += Stream.hexByte(this.get(i));
415
if (len > maxLength)
416
s += ellipsis;
417
return { size: len, str: s };
418
}
419
+
420
+
/**
421
+
* Parse a region of the stream as an OID (Object Identifier).
422
+
* @param {number} start - starting position (included)
423
+
* @param {number} end - ending position (excluded)
424
+
* @param {number} maxLength - maximum length of the output string
425
+
* @param {boolean} isRelative - Whether the OID is relative
426
+
* @returns {string} Formatted OID string
427
+
*/
428
parseOID(start, end, maxLength, isRelative) {
429
let s = '',
430
+
n = 0n,
431
bits = 0;
432
for (let i = start; i < end; ++i) {
433
let v = this.get(i);
434
+
// Shift bits and add the lower 7 bits of the byte
435
+
n = (n << 7n) | BigInt(v & 0x7F);
436
bits += 7;
437
+
// If the most significant bit is 0, this is the last byte of the OID component
438
if (!(v & 0x80)) { // finished
439
+
// If this is the first component, handle it specially
440
if (s === '') {
441
if (isRelative) {
442
+
s = n.toString();
443
} else {
444
+
let m = n < 80 ? n < 40 ? 0n : 1n : 2n;
445
+
s = m + '.' + (n - m * 40n);
446
}
447
} else
448
+
s += '.' + n;
449
if (s.length > maxLength)
450
return stringCut(s, maxLength);
451
+
n = 0n;
452
bits = 0;
453
}
454
}
455
if (bits > 0)
456
s += '.incomplete';
457
+
// If OIDs mapping is available and the OID is absolute, try to resolve it
458
if (typeof oids === 'object' && !isRelative) {
459
let oid = oids[s];
460
if (oid) {
···
465
}
466
return s;
467
}
468
+
469
+
/**
470
+
* Parse a region of the stream as a relative OID (Object Identifier).
471
+
* @param {number} start - starting position (included)
472
+
* @param {number} end - ending position (excluded)
473
+
* @param {number} maxLength - maximum length of the output string
474
+
* @returns {string} Formatted relative OID string
475
+
*/
476
parseRelativeOID(start, end, maxLength) {
477
return this.parseOID(start, end, maxLength, true);
478
}
···
505
this.tagConstructed = ((buf & 0x20) !== 0);
506
this.tagNumber = buf & 0x1F;
507
if (this.tagNumber == 0x1F) { // long tag
508
+
let n = 0n;
509
do {
510
buf = stream.get();
511
+
n = (n << 7n) | BigInt(buf & 0x7F);
512
} while (buf & 0x80);
513
+
this.tagNumber = n <= Number.MAX_SAFE_INTEGER ? Number(n) : n;
514
}
515
}
516
isUniversal() {
···
521
}
522
}
523
524
+
/**
525
+
* ASN1 class for parsing ASN.1 encoded data.
526
+
* Instances of this class represent an ASN.1 element and provides methods to parse and display its content.
527
+
*/
528
export class ASN1 {
529
+
/**
530
+
* Creates an ASN1 parser object.
531
+
* @param {Stream} stream - The stream containing the ASN.1 data.
532
+
* @param {number} header - The header length.
533
+
* @param {number} length - The length of the data.
534
+
* @param {ASN1Tag} tag - The ASN.1 tag.
535
+
* @param {number} tagLen - The length of the tag.
536
+
* @param {Array} sub - The sub-elements.
537
+
*/
538
constructor(stream, header, length, tag, tagLen, sub) {
539
if (!(tag instanceof ASN1Tag)) throw new Error('Invalid tag value.');
540
this.stream = stream;
···
544
this.tagLen = tagLen;
545
this.sub = sub;
546
}
547
+
548
+
/**
549
+
* Get the type name of the ASN.1 element.
550
+
* @returns {string} The type name.
551
+
*/
552
typeName() {
553
switch (this.tag.tagClass) {
554
case 0: // universal
···
588
case 3: return 'Private_' + this.tag.tagNumber.toString();
589
}
590
}
591
+
592
+
/**
593
+
* Get a string preview of the content (intended for humans).
594
+
* @param {number} maxLength - The maximum length of the content.
595
+
* @returns {string|null} The content preview or null if not supported.
596
+
*/
597
content(maxLength) {
598
if (this.tag === undefined)
599
return null;
600
if (maxLength === undefined)
601
maxLength = Infinity;
602
+
const content = this.posContent(),
603
len = Math.abs(this.length);
604
if (!this.tag.isUniversal()) {
605
if (this.sub !== null)
···
609
}
610
switch (this.tag.tagNumber) {
611
case 0x01: // BOOLEAN
612
+
if (len != 1) return 'invalid length ' + len;
613
return (this.stream.get(content) === 0) ? 'false' : 'true';
614
case 0x02: // INTEGER
615
+
if (len < 1) return 'invalid length ' + len;
616
return this.stream.parseInteger(content, content + len);
617
case 0x03: { // BIT_STRING
618
let d = recurse(this, 'parseBitString', maxLength);
619
return '(' + d.size + ' bit)\n' + d.str;
620
}
621
case 0x04: { // OCTET_STRING
622
let d = recurse(this, 'parseOctetString', maxLength);
623
return '(' + d.size + ' byte)\n' + d.str;
624
}
625
//case 0x05: // NULL
626
case 0x06: // OBJECT_IDENTIFIER
627
+
if (len < 1) return 'invalid length ' + len; // pgut001's dumpasn1.c enforces a minimum lenght of 3
628
return this.stream.parseOID(content, content + len, maxLength);
629
//case 0x07: // ObjectDescriptor
630
//case 0x08: // EXTERNAL
···
661
}
662
return null;
663
}
664
+
665
+
/**
666
+
* Get a string representation of the ASN.1 element.
667
+
* @returns {string} The string representation.
668
+
*/
669
toString() {
670
return this.typeName() + '@' + this.stream.pos + '[header:' + this.header + ',length:' + this.length + ',sub:' + ((this.sub === null) ? 'null' : this.sub.length) + ']';
671
}
672
+
673
+
/**
674
+
* Get a pretty string representation of the ASN.1 element.
675
+
* @param {string} indent - The indentation string.
676
+
* @returns {string} The pretty string representation.
677
+
*/
678
toPrettyString(indent) {
679
if (indent === undefined) indent = '';
680
let s = indent;
···
705
}
706
return s;
707
}
708
+
709
+
/**
710
+
* Get the starting position of the element in the stream.
711
+
* @returns {number} The starting position.
712
+
*/
713
posStart() {
714
return this.stream.pos;
715
}
716
+
717
+
/**
718
+
* Get the position of the content in the stream.
719
+
* @returns {number} The content position.
720
+
*/
721
posContent() {
722
return this.stream.pos + this.header;
723
}
724
+
725
+
/**
726
+
* Get the ending position of the element in the stream.
727
+
* @returns {number} The ending position.
728
+
*/
729
posEnd() {
730
return this.stream.pos + this.header + Math.abs(this.length);
731
}
732
+
733
+
/**
734
+
* Get the position of the length in the stream.
735
+
* @returns {number} The length position.
736
+
*/
737
posLen() {
738
return this.stream.pos + this.tagLen;
739
}
740
+
741
+
/**
742
+
* Get a hexadecimal dump of the node.
743
+
* @param {string} [type='raw'] - The dump type: 'raw', 'byte', or 'dump'.
744
+
* @returns {string} The hexadecimal dump.
745
+
*/
746
toHexString(type = 'raw') {
747
return this.stream.hexDump(this.posStart(), this.posEnd(), type);
748
}
749
+
750
+
/**
751
+
* Get a base64url dump of the node (according to RFC 4648 section 5).
752
+
* @param {string} [type='url'] - The dump type: 'url' (section 5 without padding) or 'std' (section 4 with padding).
753
+
* @returns {string} The base64 encoded representation.
754
+
*/
755
toB64String(type = 'url') {
756
return this.stream.b64Dump(this.posStart(), this.posEnd(), type);
757
}
758
+
759
+
/**
760
+
* Decode the length field of an ASN.1 element.
761
+
* @param {Stream} stream - The stream to read from.
762
+
* @returns {number|null} The decoded length, or null for indefinite length.
763
+
* @throws {Error} If the length is invalid or exceeds 48 bits.
764
+
*/
765
static decodeLength(stream) {
766
+
const buf = stream.get(),
767
len = buf & 0x7F;
768
if (len == buf) // first bit was 0, short form
769
return len;
770
if (len === 0) // long form with length 0 is a special case
771
return null; // undefined length
772
+
if (len > 6) // no reason to use BigInt, as it would be a huge buffer anyways
773
throw new Error('Length over 48 bits not supported at position ' + (stream.pos - 1));
774
+
let value = 0;
775
for (let i = 0; i < len; ++i)
776
+
value = (value << 8) | stream.get();
777
+
return value;
778
}
779
+
780
+
/**
781
+
* Decode an ASN.1 element from a stream.
782
+
* @param {Stream|array|string} stream - The input data.
783
+
* @param {number} [offset=0] - The offset to start decoding from.
784
+
* @param {Function} [type=ASN1] - The class to instantiate.
785
+
* @returns {ASN1} The decoded ASN.1 element.
786
+
* @throws {Error} If the decoding fails.
787
+
*/
788
static decode(stream, offset, type = ASN1) {
789
if (!(type == ASN1 || type.prototype instanceof ASN1))
790
throw new Error('Must pass a class that extends ASN1');
+1
defs.js
+1
defs.js
···
140
[ 'PKCS#10 certification request', '1.2.840.113549.1.10.1.1', 'CertificationRequest' ],
141
[ 'CMP PKI Message', '1.3.6.1.5.5.7.0.16', 'PKIMessage' ],
142
[ 'LDAP Message', '1.3.6.1.1.18', 'LDAPMessage' ],
143
].map(arr => ({ description: arr[0], ...Defs.moduleAndType(rfcdef[arr[1]], arr[2]) }));
···
140
[ 'PKCS#10 certification request', '1.2.840.113549.1.10.1.1', 'CertificationRequest' ],
141
[ 'CMP PKI Message', '1.3.6.1.5.5.7.0.16', 'PKIMessage' ],
142
[ 'LDAP Message', '1.3.6.1.1.18', 'LDAPMessage' ],
143
+
[ 'Time Stamp Request', '1.3.6.1.5.5.7.0.13', 'TimeStampReq' ],
144
].map(arr => ({ description: arr[0], ...Defs.moduleAndType(rfcdef[arr[1]], arr[2]) }));
+1
-7
eslint.config.js
+1
-7
eslint.config.js
···
10
...globals.node,
11
Uint8Array: 'readonly',
12
},
13
-
ecmaVersion: 2015,
14
},
15
rules: {
16
indent: ['error', 4],
···
26
'no-unused-vars': ['error', {
27
caughtErrorsIgnorePattern: 'ignore',
28
}],
29
-
},
30
-
},
31
-
{
32
-
files: ['defs.js'],
33
-
languageOptions: {
34
-
ecmaVersion: 2020, // by use of optional chaining operator (?.) and null coalesching operator (??)
35
},
36
},
37
{
+5
examples/timestamp-req.b64
+5
examples/timestamp-req.b64
+1
index.html
+1
index.html
···
61
<option value="crl-rfc5280.b64">CRL example (RFC 5280)</option>
62
<option value="cmpv2.b64">CMP PKI message (RFC 4210)</option>
63
<option value="ldapmessage.b64">LDAP message (RFC 4511)</option>
64
+
<option value="timestamp-req.b64">TimeStamp request (RFC 3161)</option>
65
</select>
66
<input id="butExample" type="button" value="load"><br>
67
</td></tr>
-112
int10.js
-112
int10.js
···
1
-
// Big integer base-10 printing library
2
-
// Copyright (c) 2008 Lapo Luchini <lapo@lapo.it>
3
-
4
-
// Permission to use, copy, modify, and/or distribute this software for any
5
-
// purpose with or without fee is hereby granted, provided that the above
6
-
// copyright notice and this permission notice appear in all copies.
7
-
//
8
-
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9
-
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10
-
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11
-
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12
-
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13
-
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14
-
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15
-
16
-
/** Biggest 10^n integer that can still fit 2^53 when multiplied by 256. */
17
-
const max = 10000000000000;
18
-
19
-
export class Int10 {
20
-
/**
21
-
* Arbitrary length base-10 value.
22
-
* @param {number} value - Optional initial value (will be 0 otherwise).
23
-
*/
24
-
constructor(value) {
25
-
this.buf = [+value || 0];
26
-
}
27
-
28
-
/**
29
-
* Multiply value by m and add c.
30
-
* @param {number} m - multiplier, must be 0<m<=256
31
-
* @param {number} c - value to add, must be c>=0
32
-
*/
33
-
mulAdd(m, c) {
34
-
// assert(m > 0)
35
-
// assert(m <= 256)
36
-
// assert(c >= 0)
37
-
let b = this.buf,
38
-
l = b.length,
39
-
i, t;
40
-
for (i = 0; i < l; ++i) {
41
-
t = b[i] * m + c;
42
-
if (t < max)
43
-
c = 0;
44
-
else {
45
-
c = 0|(t / max);
46
-
t -= c * max;
47
-
}
48
-
b[i] = t;
49
-
}
50
-
if (c > 0)
51
-
b[i] = c;
52
-
}
53
-
54
-
/**
55
-
* Subtract value.
56
-
* @param {number} c - value to subtract
57
-
*/
58
-
sub(c) {
59
-
let b = this.buf,
60
-
l = b.length,
61
-
i, t;
62
-
for (i = 0; i < l; ++i) {
63
-
t = b[i] - c;
64
-
if (t < 0) {
65
-
t += max;
66
-
c = 1;
67
-
} else
68
-
c = 0;
69
-
b[i] = t;
70
-
}
71
-
while (b[b.length - 1] === 0)
72
-
b.pop();
73
-
}
74
-
75
-
/**
76
-
* Convert to decimal string representation.
77
-
* @param {number} [base=10] - optional value, only value accepted is 10
78
-
* @returns {string} The decimal string representation.
79
-
*/
80
-
toString(base = 10) {
81
-
if (base != 10)
82
-
throw new Error('only base 10 is supported');
83
-
let b = this.buf,
84
-
s = b[b.length - 1].toString();
85
-
for (let i = b.length - 2; i >= 0; --i)
86
-
s += (max + b[i]).toString().substring(1);
87
-
return s;
88
-
}
89
-
90
-
/**
91
-
* Convert to Number value representation.
92
-
* Will probably overflow 2^53 and thus become approximate.
93
-
* @returns {number} The numeric value.
94
-
*/
95
-
valueOf() {
96
-
let b = this.buf,
97
-
v = 0;
98
-
for (let i = b.length - 1; i >= 0; --i)
99
-
v = v * max + b[i];
100
-
return v;
101
-
}
102
-
103
-
/**
104
-
* Return value as a simple Number (if it is <= 10000000000000), or return this.
105
-
* @returns {number | Int10} The simplified value.
106
-
*/
107
-
simplify() {
108
-
let b = this.buf;
109
-
return (b.length == 1) ? b[0] : this;
110
-
}
111
-
112
-
}
···
+8
-9
package.json
+8
-9
package.json
···
1
{
2
"name": "@lapo/asn1js",
3
-
"version": "2.1.0",
4
"description": "Generic ASN.1 parser/decoder that can decode any valid ASN.1 DER or BER structures.",
5
"type": "module",
6
"main": "asn1.js",
···
24
"asn1.js",
25
"base64.js",
26
"hex.js",
27
-
"int10.js",
28
"dom.js",
29
"defs.js",
30
"oids.js",
···
32
"dumpASN1.js"
33
],
34
"scripts": {
35
-
"lint": "npx eslint asn1.js base64.js hex.js int10.js dom.js defs.js oids.js rfcdef.js tags.js context.js index.js parseRFC.js dumpASN1.js test.js testDefs.js vite.config.js theme.js",
36
"lint-action": "npx @action-validator/cli .github/workflows/node.js.yml",
37
"build": "vite build",
38
"serve": "npx -p local-web-server ws",
···
48
"packageManager": "pnpm@7.33.7",
49
"devDependencies": {
50
"@eslint/eslintrc": "^3.3.1",
51
-
"@eslint/js": "^9.32.0",
52
-
"@rollup/wasm-node": "^4.46.2",
53
"diff": "^8.0.2",
54
-
"eslint": "^9.32.0",
55
-
"globals": "^16.3.0",
56
"htmlparser2": "^9.1.0",
57
-
"vite": "^5.4.19",
58
-
"vite-plugin-dom": "^1.0.4",
59
"vite-plugin-singlefile": "^2.3.0"
60
},
61
"overrides": {
···
1
{
2
"name": "@lapo/asn1js",
3
+
"version": "2.1.1",
4
"description": "Generic ASN.1 parser/decoder that can decode any valid ASN.1 DER or BER structures.",
5
"type": "module",
6
"main": "asn1.js",
···
24
"asn1.js",
25
"base64.js",
26
"hex.js",
27
"dom.js",
28
"defs.js",
29
"oids.js",
···
31
"dumpASN1.js"
32
],
33
"scripts": {
34
+
"lint": "npx eslint asn1.js base64.js hex.js dom.js defs.js oids.js rfcdef.js tags.js context.js index.js parseRFC.js dumpASN1.js test.js testDefs.js vite.config.js theme.js",
35
"lint-action": "npx @action-validator/cli .github/workflows/node.js.yml",
36
"build": "vite build",
37
"serve": "npx -p local-web-server ws",
···
47
"packageManager": "pnpm@7.33.7",
48
"devDependencies": {
49
"@eslint/eslintrc": "^3.3.1",
50
+
"@eslint/js": "^9.38.0",
51
+
"@rollup/wasm-node": "^4.52.5",
52
"diff": "^8.0.2",
53
+
"eslint": "^9.38.0",
54
+
"globals": "^16.4.0",
55
"htmlparser2": "^9.1.0",
56
+
"vite": "^7.1.12",
57
+
"vite-plugin-dom": "^1.0.5",
58
"vite-plugin-singlefile": "^2.3.0"
59
},
60
"overrides": {
+718
-951
pnpm-lock.yaml
+718
-951
pnpm-lock.yaml
···
1
-
lockfileVersion: '9.0'
2
-
3
-
settings:
4
-
autoInstallPeers: true
5
-
excludeLinksFromLockfile: false
6
7
overrides:
8
rollup: npm:@rollup/wasm-node
9
10
-
importers:
11
12
-
.:
13
-
devDependencies:
14
-
'@eslint/eslintrc':
15
-
specifier: ^3.3.1
16
-
version: 3.3.1
17
-
'@eslint/js':
18
-
specifier: ^9.32.0
19
-
version: 9.32.0
20
-
'@rollup/wasm-node':
21
-
specifier: ^4.46.2
22
-
version: 4.46.2
23
-
diff:
24
-
specifier: ^8.0.2
25
-
version: 8.0.2
26
-
eslint:
27
-
specifier: ^9.32.0
28
-
version: 9.32.0
29
-
globals:
30
-
specifier: ^16.3.0
31
-
version: 16.3.0
32
-
htmlparser2:
33
-
specifier: ^9.1.0
34
-
version: 9.1.0
35
-
vite:
36
-
specifier: ^5.4.19
37
-
version: 5.4.19
38
-
vite-plugin-dom:
39
-
specifier: ^1.0.4
40
-
version: 1.0.4(vite@5.4.19)
41
-
vite-plugin-singlefile:
42
-
specifier: ^2.3.0
43
-
version: 2.3.0(rollup@4.46.2)(vite@5.4.19)
44
45
packages:
46
47
-
'@esbuild/aix-ppc64@0.21.5':
48
-
resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
49
-
engines: {node: '>=12'}
50
cpu: [ppc64]
51
os: [aix]
52
53
-
'@esbuild/android-arm64@0.21.5':
54
-
resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
55
-
engines: {node: '>=12'}
56
-
cpu: [arm64]
57
os: [android]
58
59
-
'@esbuild/android-arm@0.21.5':
60
-
resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
61
-
engines: {node: '>=12'}
62
-
cpu: [arm]
63
os: [android]
64
65
-
'@esbuild/android-x64@0.21.5':
66
-
resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
67
-
engines: {node: '>=12'}
68
cpu: [x64]
69
os: [android]
70
71
-
'@esbuild/darwin-arm64@0.21.5':
72
-
resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
73
-
engines: {node: '>=12'}
74
cpu: [arm64]
75
os: [darwin]
76
77
-
'@esbuild/darwin-x64@0.21.5':
78
-
resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
79
-
engines: {node: '>=12'}
80
cpu: [x64]
81
os: [darwin]
82
83
-
'@esbuild/freebsd-arm64@0.21.5':
84
-
resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
85
-
engines: {node: '>=12'}
86
cpu: [arm64]
87
os: [freebsd]
88
89
-
'@esbuild/freebsd-x64@0.21.5':
90
-
resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
91
-
engines: {node: '>=12'}
92
cpu: [x64]
93
os: [freebsd]
94
95
-
'@esbuild/linux-arm64@0.21.5':
96
-
resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
97
-
engines: {node: '>=12'}
98
-
cpu: [arm64]
99
os: [linux]
100
101
-
'@esbuild/linux-arm@0.21.5':
102
-
resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
103
-
engines: {node: '>=12'}
104
-
cpu: [arm]
105
os: [linux]
106
107
-
'@esbuild/linux-ia32@0.21.5':
108
-
resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
109
-
engines: {node: '>=12'}
110
cpu: [ia32]
111
os: [linux]
112
113
-
'@esbuild/linux-loong64@0.21.5':
114
-
resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
115
-
engines: {node: '>=12'}
116
cpu: [loong64]
117
os: [linux]
118
119
-
'@esbuild/linux-mips64el@0.21.5':
120
-
resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
121
-
engines: {node: '>=12'}
122
cpu: [mips64el]
123
os: [linux]
124
125
-
'@esbuild/linux-ppc64@0.21.5':
126
-
resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
127
-
engines: {node: '>=12'}
128
cpu: [ppc64]
129
os: [linux]
130
131
-
'@esbuild/linux-riscv64@0.21.5':
132
-
resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
133
-
engines: {node: '>=12'}
134
cpu: [riscv64]
135
os: [linux]
136
137
-
'@esbuild/linux-s390x@0.21.5':
138
-
resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
139
-
engines: {node: '>=12'}
140
cpu: [s390x]
141
os: [linux]
142
143
-
'@esbuild/linux-x64@0.21.5':
144
-
resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
145
-
engines: {node: '>=12'}
146
cpu: [x64]
147
os: [linux]
148
149
-
'@esbuild/netbsd-x64@0.21.5':
150
-
resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
151
-
engines: {node: '>=12'}
152
cpu: [x64]
153
os: [netbsd]
154
155
-
'@esbuild/openbsd-x64@0.21.5':
156
-
resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
157
-
engines: {node: '>=12'}
158
cpu: [x64]
159
os: [openbsd]
160
161
-
'@esbuild/sunos-x64@0.21.5':
162
-
resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
163
-
engines: {node: '>=12'}
164
cpu: [x64]
165
os: [sunos]
166
167
-
'@esbuild/win32-arm64@0.21.5':
168
-
resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
169
-
engines: {node: '>=12'}
170
cpu: [arm64]
171
os: [win32]
172
173
-
'@esbuild/win32-ia32@0.21.5':
174
-
resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
175
-
engines: {node: '>=12'}
176
cpu: [ia32]
177
os: [win32]
178
179
-
'@esbuild/win32-x64@0.21.5':
180
-
resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
181
-
engines: {node: '>=12'}
182
cpu: [x64]
183
os: [win32]
184
185
-
'@eslint-community/eslint-utils@4.7.0':
186
-
resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
187
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
188
peerDependencies:
189
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
190
191
-
'@eslint-community/regexpp@4.12.1':
192
-
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
193
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
194
195
-
'@eslint/config-array@0.21.0':
196
-
resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==}
197
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
198
199
-
'@eslint/config-helpers@0.3.0':
200
-
resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==}
201
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
202
203
-
'@eslint/core@0.15.1':
204
-
resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==}
205
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
206
207
-
'@eslint/eslintrc@3.3.1':
208
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
209
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
210
211
-
'@eslint/js@9.32.0':
212
-
resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==}
213
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
214
215
-
'@eslint/object-schema@2.1.6':
216
-
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
217
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
218
219
-
'@eslint/plugin-kit@0.3.4':
220
-
resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==}
221
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
222
223
-
'@humanfs/core@0.19.1':
224
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
225
engines: {node: '>=18.18.0'}
226
227
-
'@humanfs/node@0.16.6':
228
-
resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
229
engines: {node: '>=18.18.0'}
230
231
-
'@humanwhocodes/module-importer@1.0.1':
232
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
233
engines: {node: '>=12.22'}
234
235
-
'@humanwhocodes/retry@0.3.1':
236
-
resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
237
-
engines: {node: '>=18.18'}
238
-
239
-
'@humanwhocodes/retry@0.4.3':
240
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
241
engines: {node: '>=18.18'}
242
-
243
-
'@rollup/rollup-android-arm-eabi@4.46.2':
244
-
resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==}
245
-
cpu: [arm]
246
-
os: [android]
247
248
-
'@rollup/rollup-android-arm64@4.46.2':
249
-
resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==}
250
-
cpu: [arm64]
251
-
os: [android]
252
-
253
-
'@rollup/rollup-darwin-arm64@4.46.2':
254
-
resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==}
255
-
cpu: [arm64]
256
-
os: [darwin]
257
-
258
-
'@rollup/rollup-darwin-x64@4.46.2':
259
-
resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==}
260
-
cpu: [x64]
261
-
os: [darwin]
262
-
263
-
'@rollup/rollup-freebsd-arm64@4.46.2':
264
-
resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==}
265
-
cpu: [arm64]
266
-
os: [freebsd]
267
-
268
-
'@rollup/rollup-freebsd-x64@4.46.2':
269
-
resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==}
270
-
cpu: [x64]
271
-
os: [freebsd]
272
-
273
-
'@rollup/rollup-linux-arm-gnueabihf@4.46.2':
274
-
resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==}
275
-
cpu: [arm]
276
-
os: [linux]
277
-
278
-
'@rollup/rollup-linux-arm-musleabihf@4.46.2':
279
-
resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==}
280
-
cpu: [arm]
281
-
os: [linux]
282
-
283
-
'@rollup/rollup-linux-arm64-gnu@4.46.2':
284
-
resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==}
285
-
cpu: [arm64]
286
-
os: [linux]
287
-
288
-
'@rollup/rollup-linux-arm64-musl@4.46.2':
289
-
resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==}
290
-
cpu: [arm64]
291
-
os: [linux]
292
-
293
-
'@rollup/rollup-linux-loongarch64-gnu@4.46.2':
294
-
resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==}
295
-
cpu: [loong64]
296
-
os: [linux]
297
-
298
-
'@rollup/rollup-linux-ppc64-gnu@4.46.2':
299
-
resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==}
300
-
cpu: [ppc64]
301
-
os: [linux]
302
-
303
-
'@rollup/rollup-linux-riscv64-gnu@4.46.2':
304
-
resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==}
305
-
cpu: [riscv64]
306
-
os: [linux]
307
-
308
-
'@rollup/rollup-linux-riscv64-musl@4.46.2':
309
-
resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==}
310
-
cpu: [riscv64]
311
-
os: [linux]
312
-
313
-
'@rollup/rollup-linux-s390x-gnu@4.46.2':
314
-
resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==}
315
-
cpu: [s390x]
316
-
os: [linux]
317
-
318
-
'@rollup/rollup-linux-x64-gnu@4.46.2':
319
-
resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==}
320
-
cpu: [x64]
321
-
os: [linux]
322
-
323
-
'@rollup/rollup-linux-x64-musl@4.46.2':
324
-
resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==}
325
-
cpu: [x64]
326
-
os: [linux]
327
-
328
-
'@rollup/rollup-win32-arm64-msvc@4.46.2':
329
-
resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==}
330
-
cpu: [arm64]
331
-
os: [win32]
332
-
333
-
'@rollup/rollup-win32-ia32-msvc@4.46.2':
334
-
resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==}
335
-
cpu: [ia32]
336
-
os: [win32]
337
-
338
-
'@rollup/rollup-win32-x64-msvc@4.46.2':
339
-
resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==}
340
-
cpu: [x64]
341
-
os: [win32]
342
-
343
-
'@rollup/wasm-node@4.46.2':
344
-
resolution: {integrity: sha512-lZRiZl+B1R3VhqZgORtuUpc2YYbgIv+X6g3LgQHS5sjlf1ENiK1HZ6N5e8pEZ04nAWiwYM0JX7rP0eyxflkJRg==}
345
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
346
hasBin: true
347
348
-
'@types/estree@1.0.8':
349
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
350
351
-
'@types/json-schema@7.0.15':
352
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
353
354
-
acorn-jsx@5.3.2:
355
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
356
peerDependencies:
357
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
358
359
-
acorn@8.15.0:
360
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
361
engines: {node: '>=0.4.0'}
362
hasBin: true
363
364
-
ajv@6.12.6:
365
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
366
367
-
ansi-styles@4.3.0:
368
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
369
engines: {node: '>=8'}
370
371
-
argparse@2.0.1:
372
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
373
374
-
balanced-match@1.0.2:
375
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
376
377
-
brace-expansion@1.1.12:
378
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
379
380
-
braces@3.0.3:
381
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
382
engines: {node: '>=8'}
383
384
-
callsites@3.1.0:
385
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
386
engines: {node: '>=6'}
387
388
-
chalk@4.1.2:
389
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
390
engines: {node: '>=10'}
391
392
-
color-convert@2.0.1:
393
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
394
engines: {node: '>=7.0.0'}
395
396
-
color-name@1.1.4:
397
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
398
399
-
concat-map@0.0.1:
400
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
401
402
-
cross-spawn@7.0.6:
403
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
404
engines: {node: '>= 8'}
405
406
-
debug@4.4.1:
407
-
resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
408
engines: {node: '>=6.0'}
409
peerDependencies:
410
supports-color: '*'
411
peerDependenciesMeta:
412
supports-color:
413
optional: true
414
415
-
deep-is@0.1.4:
416
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
417
418
-
diff@8.0.2:
419
resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==}
420
engines: {node: '>=0.3.1'}
421
422
-
dom-serializer@2.0.0:
423
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
424
425
-
domelementtype@2.3.0:
426
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
427
428
-
domhandler@5.0.3:
429
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
430
engines: {node: '>= 4'}
431
432
-
domutils@3.2.2:
433
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
434
435
-
entities@4.5.0:
436
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
437
engines: {node: '>=0.12'}
438
439
-
esbuild@0.21.5:
440
-
resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
441
-
engines: {node: '>=12'}
442
hasBin: true
443
444
-
escape-string-regexp@4.0.0:
445
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
446
engines: {node: '>=10'}
447
448
-
eslint-scope@8.4.0:
449
resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
450
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
451
452
-
eslint-visitor-keys@3.4.3:
453
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
454
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
455
456
-
eslint-visitor-keys@4.2.1:
457
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
458
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
459
460
-
eslint@9.32.0:
461
-
resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==}
462
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
463
hasBin: true
464
peerDependencies:
···
466
peerDependenciesMeta:
467
jiti:
468
optional: true
469
470
-
espree@10.4.0:
471
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
472
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
473
474
-
esquery@1.6.0:
475
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
476
engines: {node: '>=0.10'}
477
478
-
esrecurse@4.3.0:
479
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
480
engines: {node: '>=4.0'}
481
482
-
estraverse@5.3.0:
483
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
484
engines: {node: '>=4.0'}
485
486
-
esutils@2.0.3:
487
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
488
engines: {node: '>=0.10.0'}
489
490
-
fast-deep-equal@3.1.3:
491
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
492
493
-
fast-json-stable-stringify@2.1.0:
494
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
495
496
-
fast-levenshtein@2.0.6:
497
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
498
499
-
file-entry-cache@8.0.0:
500
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
501
engines: {node: '>=16.0.0'}
502
503
-
fill-range@7.1.1:
504
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
505
engines: {node: '>=8'}
506
507
-
find-up@5.0.0:
508
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
509
engines: {node: '>=10'}
510
511
-
flat-cache@4.0.1:
512
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
513
engines: {node: '>=16'}
514
515
-
flatted@3.3.3:
516
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
517
518
-
fsevents@2.3.3:
519
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
520
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
521
os: [darwin]
522
523
-
glob-parent@6.0.2:
524
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
525
engines: {node: '>=10.13.0'}
526
527
-
globals@14.0.0:
528
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
529
engines: {node: '>=18'}
530
531
-
globals@16.3.0:
532
-
resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==}
533
engines: {node: '>=18'}
534
535
-
has-flag@4.0.0:
536
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
537
engines: {node: '>=8'}
538
539
-
htmlparser2@9.1.0:
540
resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==}
541
542
-
ignore@5.3.2:
543
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
544
engines: {node: '>= 4'}
545
546
-
import-fresh@3.3.1:
547
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
548
engines: {node: '>=6'}
549
550
-
imurmurhash@0.1.4:
551
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
552
engines: {node: '>=0.8.19'}
553
554
-
is-extglob@2.1.1:
555
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
556
engines: {node: '>=0.10.0'}
557
558
-
is-glob@4.0.3:
559
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
560
engines: {node: '>=0.10.0'}
561
562
-
is-number@7.0.0:
563
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
564
engines: {node: '>=0.12.0'}
565
566
-
isexe@2.0.0:
567
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
568
569
-
js-yaml@4.1.0:
570
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
571
hasBin: true
572
573
-
json-buffer@3.0.1:
574
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
575
576
-
json-schema-traverse@0.4.1:
577
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
578
579
-
json-stable-stringify-without-jsonify@1.0.1:
580
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
581
582
-
keyv@4.5.4:
583
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
584
585
-
levn@0.4.1:
586
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
587
engines: {node: '>= 0.8.0'}
588
589
-
locate-path@6.0.0:
590
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
591
engines: {node: '>=10'}
592
593
-
lodash.merge@4.6.2:
594
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
595
596
-
micromatch@4.0.8:
597
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
598
engines: {node: '>=8.6'}
599
600
-
minimatch@3.1.2:
601
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
602
603
-
ms@2.1.3:
604
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
605
606
-
nanoid@3.3.11:
607
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
608
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
609
hasBin: true
610
611
-
natural-compare@1.4.0:
612
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
613
614
-
optionator@0.9.4:
615
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
616
engines: {node: '>= 0.8.0'}
617
618
-
p-limit@3.1.0:
619
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
620
engines: {node: '>=10'}
621
622
-
p-locate@5.0.0:
623
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
624
engines: {node: '>=10'}
625
626
-
parent-module@1.0.1:
627
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
628
engines: {node: '>=6'}
629
630
-
path-exists@4.0.0:
631
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
632
engines: {node: '>=8'}
633
634
-
path-key@3.1.1:
635
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
636
engines: {node: '>=8'}
637
638
-
picocolors@1.1.1:
639
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
640
641
-
picomatch@2.3.1:
642
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
643
engines: {node: '>=8.6'}
644
645
-
postcss@8.5.6:
646
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
647
engines: {node: ^10 || ^12 || >=14}
648
649
-
prelude-ls@1.2.1:
650
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
651
engines: {node: '>= 0.8.0'}
652
653
-
punycode@2.3.1:
654
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
655
engines: {node: '>=6'}
656
657
-
resolve-from@4.0.0:
658
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
659
engines: {node: '>=4'}
660
-
661
-
rollup@4.46.2:
662
-
resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==}
663
-
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
664
-
hasBin: true
665
666
-
shebang-command@2.0.0:
667
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
668
engines: {node: '>=8'}
669
670
-
shebang-regex@3.0.0:
671
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
672
engines: {node: '>=8'}
673
674
-
source-map-js@1.2.1:
675
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
676
engines: {node: '>=0.10.0'}
677
678
-
strip-json-comments@3.1.1:
679
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
680
engines: {node: '>=8'}
681
682
-
supports-color@7.2.0:
683
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
684
engines: {node: '>=8'}
685
686
-
to-regex-range@5.0.1:
687
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
688
engines: {node: '>=8.0'}
689
690
-
type-check@0.4.0:
691
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
692
engines: {node: '>= 0.8.0'}
693
694
-
uri-js@4.4.1:
695
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
696
697
-
vite-plugin-dom@1.0.4:
698
-
resolution: {integrity: sha512-GkmDAsVDo0Aabb7RmGTGWZNDowV5K+IkrhmJfrgMpgjHdE7F8H1OsTk48DQmnQ/2llM5UvP4z5h0icdsnL/C/g==}
699
peerDependencies:
700
vite: '>=4.0.0'
701
702
-
vite-plugin-singlefile@2.3.0:
703
resolution: {integrity: sha512-DAcHzYypM0CasNLSz/WG0VdKOCxGHErfrjOoyIPiNxTPTGmO6rRD/te93n1YL/s+miXq66ipF1brMBikf99c6A==}
704
engines: {node: '>18.0.0'}
705
peerDependencies:
706
rollup: ^4.44.1
707
vite: ^5.4.11 || ^6.0.0 || ^7.0.0
708
709
-
vite@5.4.19:
710
-
resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==}
711
-
engines: {node: ^18.0.0 || >=20.0.0}
712
hasBin: true
713
peerDependencies:
714
-
'@types/node': ^18.0.0 || >=20.0.0
715
-
less: '*'
716
lightningcss: ^1.21.0
717
-
sass: '*'
718
-
sass-embedded: '*'
719
-
stylus: '*'
720
-
sugarss: '*'
721
-
terser: ^5.4.0
722
peerDependenciesMeta:
723
'@types/node':
724
optional: true
725
less:
726
optional: true
···
736
optional: true
737
terser:
738
optional: true
739
740
-
which@2.0.2:
741
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
742
engines: {node: '>= 8'}
743
hasBin: true
744
745
-
word-wrap@1.2.5:
746
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
747
engines: {node: '>=0.10.0'}
748
749
-
yocto-queue@0.1.0:
750
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
751
engines: {node: '>=10'}
752
-
753
-
snapshots:
754
-
755
-
'@esbuild/aix-ppc64@0.21.5':
756
-
optional: true
757
-
758
-
'@esbuild/android-arm64@0.21.5':
759
-
optional: true
760
-
761
-
'@esbuild/android-arm@0.21.5':
762
-
optional: true
763
-
764
-
'@esbuild/android-x64@0.21.5':
765
-
optional: true
766
-
767
-
'@esbuild/darwin-arm64@0.21.5':
768
-
optional: true
769
-
770
-
'@esbuild/darwin-x64@0.21.5':
771
-
optional: true
772
-
773
-
'@esbuild/freebsd-arm64@0.21.5':
774
-
optional: true
775
-
776
-
'@esbuild/freebsd-x64@0.21.5':
777
-
optional: true
778
-
779
-
'@esbuild/linux-arm64@0.21.5':
780
-
optional: true
781
-
782
-
'@esbuild/linux-arm@0.21.5':
783
-
optional: true
784
-
785
-
'@esbuild/linux-ia32@0.21.5':
786
-
optional: true
787
-
788
-
'@esbuild/linux-loong64@0.21.5':
789
-
optional: true
790
-
791
-
'@esbuild/linux-mips64el@0.21.5':
792
-
optional: true
793
-
794
-
'@esbuild/linux-ppc64@0.21.5':
795
-
optional: true
796
-
797
-
'@esbuild/linux-riscv64@0.21.5':
798
-
optional: true
799
-
800
-
'@esbuild/linux-s390x@0.21.5':
801
-
optional: true
802
-
803
-
'@esbuild/linux-x64@0.21.5':
804
-
optional: true
805
-
806
-
'@esbuild/netbsd-x64@0.21.5':
807
-
optional: true
808
-
809
-
'@esbuild/openbsd-x64@0.21.5':
810
-
optional: true
811
-
812
-
'@esbuild/sunos-x64@0.21.5':
813
-
optional: true
814
-
815
-
'@esbuild/win32-arm64@0.21.5':
816
-
optional: true
817
-
818
-
'@esbuild/win32-ia32@0.21.5':
819
-
optional: true
820
-
821
-
'@esbuild/win32-x64@0.21.5':
822
-
optional: true
823
-
824
-
'@eslint-community/eslint-utils@4.7.0(eslint@9.32.0)':
825
-
dependencies:
826
-
eslint: 9.32.0
827
-
eslint-visitor-keys: 3.4.3
828
-
829
-
'@eslint-community/regexpp@4.12.1': {}
830
-
831
-
'@eslint/config-array@0.21.0':
832
-
dependencies:
833
-
'@eslint/object-schema': 2.1.6
834
-
debug: 4.4.1
835
-
minimatch: 3.1.2
836
-
transitivePeerDependencies:
837
-
- supports-color
838
-
839
-
'@eslint/config-helpers@0.3.0': {}
840
-
841
-
'@eslint/core@0.15.1':
842
-
dependencies:
843
-
'@types/json-schema': 7.0.15
844
-
845
-
'@eslint/eslintrc@3.3.1':
846
-
dependencies:
847
-
ajv: 6.12.6
848
-
debug: 4.4.1
849
-
espree: 10.4.0
850
-
globals: 14.0.0
851
-
ignore: 5.3.2
852
-
import-fresh: 3.3.1
853
-
js-yaml: 4.1.0
854
-
minimatch: 3.1.2
855
-
strip-json-comments: 3.1.1
856
-
transitivePeerDependencies:
857
-
- supports-color
858
-
859
-
'@eslint/js@9.32.0': {}
860
-
861
-
'@eslint/object-schema@2.1.6': {}
862
-
863
-
'@eslint/plugin-kit@0.3.4':
864
-
dependencies:
865
-
'@eslint/core': 0.15.1
866
-
levn: 0.4.1
867
-
868
-
'@humanfs/core@0.19.1': {}
869
-
870
-
'@humanfs/node@0.16.6':
871
-
dependencies:
872
-
'@humanfs/core': 0.19.1
873
-
'@humanwhocodes/retry': 0.3.1
874
-
875
-
'@humanwhocodes/module-importer@1.0.1': {}
876
-
877
-
'@humanwhocodes/retry@0.3.1': {}
878
-
879
-
'@humanwhocodes/retry@0.4.3': {}
880
-
881
-
'@rollup/rollup-android-arm-eabi@4.46.2':
882
-
optional: true
883
-
884
-
'@rollup/rollup-android-arm64@4.46.2':
885
-
optional: true
886
-
887
-
'@rollup/rollup-darwin-arm64@4.46.2':
888
-
optional: true
889
-
890
-
'@rollup/rollup-darwin-x64@4.46.2':
891
-
optional: true
892
-
893
-
'@rollup/rollup-freebsd-arm64@4.46.2':
894
-
optional: true
895
-
896
-
'@rollup/rollup-freebsd-x64@4.46.2':
897
-
optional: true
898
-
899
-
'@rollup/rollup-linux-arm-gnueabihf@4.46.2':
900
-
optional: true
901
-
902
-
'@rollup/rollup-linux-arm-musleabihf@4.46.2':
903
-
optional: true
904
-
905
-
'@rollup/rollup-linux-arm64-gnu@4.46.2':
906
-
optional: true
907
-
908
-
'@rollup/rollup-linux-arm64-musl@4.46.2':
909
-
optional: true
910
-
911
-
'@rollup/rollup-linux-loongarch64-gnu@4.46.2':
912
-
optional: true
913
-
914
-
'@rollup/rollup-linux-ppc64-gnu@4.46.2':
915
-
optional: true
916
-
917
-
'@rollup/rollup-linux-riscv64-gnu@4.46.2':
918
-
optional: true
919
-
920
-
'@rollup/rollup-linux-riscv64-musl@4.46.2':
921
-
optional: true
922
-
923
-
'@rollup/rollup-linux-s390x-gnu@4.46.2':
924
-
optional: true
925
-
926
-
'@rollup/rollup-linux-x64-gnu@4.46.2':
927
-
optional: true
928
-
929
-
'@rollup/rollup-linux-x64-musl@4.46.2':
930
-
optional: true
931
-
932
-
'@rollup/rollup-win32-arm64-msvc@4.46.2':
933
-
optional: true
934
-
935
-
'@rollup/rollup-win32-ia32-msvc@4.46.2':
936
-
optional: true
937
-
938
-
'@rollup/rollup-win32-x64-msvc@4.46.2':
939
-
optional: true
940
-
941
-
'@rollup/wasm-node@4.46.2':
942
-
dependencies:
943
-
'@types/estree': 1.0.8
944
-
optionalDependencies:
945
-
fsevents: 2.3.3
946
-
947
-
'@types/estree@1.0.8': {}
948
-
949
-
'@types/json-schema@7.0.15': {}
950
-
951
-
acorn-jsx@5.3.2(acorn@8.15.0):
952
-
dependencies:
953
-
acorn: 8.15.0
954
-
955
-
acorn@8.15.0: {}
956
-
957
-
ajv@6.12.6:
958
-
dependencies:
959
-
fast-deep-equal: 3.1.3
960
-
fast-json-stable-stringify: 2.1.0
961
-
json-schema-traverse: 0.4.1
962
-
uri-js: 4.4.1
963
-
964
-
ansi-styles@4.3.0:
965
-
dependencies:
966
-
color-convert: 2.0.1
967
-
968
-
argparse@2.0.1: {}
969
-
970
-
balanced-match@1.0.2: {}
971
-
972
-
brace-expansion@1.1.12:
973
-
dependencies:
974
-
balanced-match: 1.0.2
975
-
concat-map: 0.0.1
976
-
977
-
braces@3.0.3:
978
-
dependencies:
979
-
fill-range: 7.1.1
980
-
981
-
callsites@3.1.0: {}
982
-
983
-
chalk@4.1.2:
984
-
dependencies:
985
-
ansi-styles: 4.3.0
986
-
supports-color: 7.2.0
987
-
988
-
color-convert@2.0.1:
989
-
dependencies:
990
-
color-name: 1.1.4
991
-
992
-
color-name@1.1.4: {}
993
-
994
-
concat-map@0.0.1: {}
995
-
996
-
cross-spawn@7.0.6:
997
-
dependencies:
998
-
path-key: 3.1.1
999
-
shebang-command: 2.0.0
1000
-
which: 2.0.2
1001
-
1002
-
debug@4.4.1:
1003
-
dependencies:
1004
-
ms: 2.1.3
1005
-
1006
-
deep-is@0.1.4: {}
1007
-
1008
-
diff@8.0.2: {}
1009
-
1010
-
dom-serializer@2.0.0:
1011
-
dependencies:
1012
-
domelementtype: 2.3.0
1013
-
domhandler: 5.0.3
1014
-
entities: 4.5.0
1015
-
1016
-
domelementtype@2.3.0: {}
1017
-
1018
-
domhandler@5.0.3:
1019
-
dependencies:
1020
-
domelementtype: 2.3.0
1021
-
1022
-
domutils@3.2.2:
1023
-
dependencies:
1024
-
dom-serializer: 2.0.0
1025
-
domelementtype: 2.3.0
1026
-
domhandler: 5.0.3
1027
-
1028
-
entities@4.5.0: {}
1029
-
1030
-
esbuild@0.21.5:
1031
-
optionalDependencies:
1032
-
'@esbuild/aix-ppc64': 0.21.5
1033
-
'@esbuild/android-arm': 0.21.5
1034
-
'@esbuild/android-arm64': 0.21.5
1035
-
'@esbuild/android-x64': 0.21.5
1036
-
'@esbuild/darwin-arm64': 0.21.5
1037
-
'@esbuild/darwin-x64': 0.21.5
1038
-
'@esbuild/freebsd-arm64': 0.21.5
1039
-
'@esbuild/freebsd-x64': 0.21.5
1040
-
'@esbuild/linux-arm': 0.21.5
1041
-
'@esbuild/linux-arm64': 0.21.5
1042
-
'@esbuild/linux-ia32': 0.21.5
1043
-
'@esbuild/linux-loong64': 0.21.5
1044
-
'@esbuild/linux-mips64el': 0.21.5
1045
-
'@esbuild/linux-ppc64': 0.21.5
1046
-
'@esbuild/linux-riscv64': 0.21.5
1047
-
'@esbuild/linux-s390x': 0.21.5
1048
-
'@esbuild/linux-x64': 0.21.5
1049
-
'@esbuild/netbsd-x64': 0.21.5
1050
-
'@esbuild/openbsd-x64': 0.21.5
1051
-
'@esbuild/sunos-x64': 0.21.5
1052
-
'@esbuild/win32-arm64': 0.21.5
1053
-
'@esbuild/win32-ia32': 0.21.5
1054
-
'@esbuild/win32-x64': 0.21.5
1055
-
1056
-
escape-string-regexp@4.0.0: {}
1057
-
1058
-
eslint-scope@8.4.0:
1059
-
dependencies:
1060
-
esrecurse: 4.3.0
1061
-
estraverse: 5.3.0
1062
-
1063
-
eslint-visitor-keys@3.4.3: {}
1064
-
1065
-
eslint-visitor-keys@4.2.1: {}
1066
-
1067
-
eslint@9.32.0:
1068
-
dependencies:
1069
-
'@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0)
1070
-
'@eslint-community/regexpp': 4.12.1
1071
-
'@eslint/config-array': 0.21.0
1072
-
'@eslint/config-helpers': 0.3.0
1073
-
'@eslint/core': 0.15.1
1074
-
'@eslint/eslintrc': 3.3.1
1075
-
'@eslint/js': 9.32.0
1076
-
'@eslint/plugin-kit': 0.3.4
1077
-
'@humanfs/node': 0.16.6
1078
-
'@humanwhocodes/module-importer': 1.0.1
1079
-
'@humanwhocodes/retry': 0.4.3
1080
-
'@types/estree': 1.0.8
1081
-
'@types/json-schema': 7.0.15
1082
-
ajv: 6.12.6
1083
-
chalk: 4.1.2
1084
-
cross-spawn: 7.0.6
1085
-
debug: 4.4.1
1086
-
escape-string-regexp: 4.0.0
1087
-
eslint-scope: 8.4.0
1088
-
eslint-visitor-keys: 4.2.1
1089
-
espree: 10.4.0
1090
-
esquery: 1.6.0
1091
-
esutils: 2.0.3
1092
-
fast-deep-equal: 3.1.3
1093
-
file-entry-cache: 8.0.0
1094
-
find-up: 5.0.0
1095
-
glob-parent: 6.0.2
1096
-
ignore: 5.3.2
1097
-
imurmurhash: 0.1.4
1098
-
is-glob: 4.0.3
1099
-
json-stable-stringify-without-jsonify: 1.0.1
1100
-
lodash.merge: 4.6.2
1101
-
minimatch: 3.1.2
1102
-
natural-compare: 1.4.0
1103
-
optionator: 0.9.4
1104
-
transitivePeerDependencies:
1105
-
- supports-color
1106
-
1107
-
espree@10.4.0:
1108
-
dependencies:
1109
-
acorn: 8.15.0
1110
-
acorn-jsx: 5.3.2(acorn@8.15.0)
1111
-
eslint-visitor-keys: 4.2.1
1112
-
1113
-
esquery@1.6.0:
1114
-
dependencies:
1115
-
estraverse: 5.3.0
1116
-
1117
-
esrecurse@4.3.0:
1118
-
dependencies:
1119
-
estraverse: 5.3.0
1120
-
1121
-
estraverse@5.3.0: {}
1122
-
1123
-
esutils@2.0.3: {}
1124
-
1125
-
fast-deep-equal@3.1.3: {}
1126
-
1127
-
fast-json-stable-stringify@2.1.0: {}
1128
-
1129
-
fast-levenshtein@2.0.6: {}
1130
-
1131
-
file-entry-cache@8.0.0:
1132
-
dependencies:
1133
-
flat-cache: 4.0.1
1134
-
1135
-
fill-range@7.1.1:
1136
-
dependencies:
1137
-
to-regex-range: 5.0.1
1138
-
1139
-
find-up@5.0.0:
1140
-
dependencies:
1141
-
locate-path: 6.0.0
1142
-
path-exists: 4.0.0
1143
-
1144
-
flat-cache@4.0.1:
1145
-
dependencies:
1146
-
flatted: 3.3.3
1147
-
keyv: 4.5.4
1148
-
1149
-
flatted@3.3.3: {}
1150
-
1151
-
fsevents@2.3.3:
1152
-
optional: true
1153
-
1154
-
glob-parent@6.0.2:
1155
-
dependencies:
1156
-
is-glob: 4.0.3
1157
-
1158
-
globals@14.0.0: {}
1159
-
1160
-
globals@16.3.0: {}
1161
-
1162
-
has-flag@4.0.0: {}
1163
-
1164
-
htmlparser2@9.1.0:
1165
-
dependencies:
1166
-
domelementtype: 2.3.0
1167
-
domhandler: 5.0.3
1168
-
domutils: 3.2.2
1169
-
entities: 4.5.0
1170
-
1171
-
ignore@5.3.2: {}
1172
-
1173
-
import-fresh@3.3.1:
1174
-
dependencies:
1175
-
parent-module: 1.0.1
1176
-
resolve-from: 4.0.0
1177
-
1178
-
imurmurhash@0.1.4: {}
1179
-
1180
-
is-extglob@2.1.1: {}
1181
-
1182
-
is-glob@4.0.3:
1183
-
dependencies:
1184
-
is-extglob: 2.1.1
1185
-
1186
-
is-number@7.0.0: {}
1187
-
1188
-
isexe@2.0.0: {}
1189
-
1190
-
js-yaml@4.1.0:
1191
-
dependencies:
1192
-
argparse: 2.0.1
1193
-
1194
-
json-buffer@3.0.1: {}
1195
-
1196
-
json-schema-traverse@0.4.1: {}
1197
-
1198
-
json-stable-stringify-without-jsonify@1.0.1: {}
1199
-
1200
-
keyv@4.5.4:
1201
-
dependencies:
1202
-
json-buffer: 3.0.1
1203
-
1204
-
levn@0.4.1:
1205
-
dependencies:
1206
-
prelude-ls: 1.2.1
1207
-
type-check: 0.4.0
1208
-
1209
-
locate-path@6.0.0:
1210
-
dependencies:
1211
-
p-locate: 5.0.0
1212
-
1213
-
lodash.merge@4.6.2: {}
1214
-
1215
-
micromatch@4.0.8:
1216
-
dependencies:
1217
-
braces: 3.0.3
1218
-
picomatch: 2.3.1
1219
-
1220
-
minimatch@3.1.2:
1221
-
dependencies:
1222
-
brace-expansion: 1.1.12
1223
-
1224
-
ms@2.1.3: {}
1225
-
1226
-
nanoid@3.3.11: {}
1227
-
1228
-
natural-compare@1.4.0: {}
1229
-
1230
-
optionator@0.9.4:
1231
-
dependencies:
1232
-
deep-is: 0.1.4
1233
-
fast-levenshtein: 2.0.6
1234
-
levn: 0.4.1
1235
-
prelude-ls: 1.2.1
1236
-
type-check: 0.4.0
1237
-
word-wrap: 1.2.5
1238
-
1239
-
p-limit@3.1.0:
1240
-
dependencies:
1241
-
yocto-queue: 0.1.0
1242
-
1243
-
p-locate@5.0.0:
1244
-
dependencies:
1245
-
p-limit: 3.1.0
1246
-
1247
-
parent-module@1.0.1:
1248
-
dependencies:
1249
-
callsites: 3.1.0
1250
-
1251
-
path-exists@4.0.0: {}
1252
-
1253
-
path-key@3.1.1: {}
1254
-
1255
-
picocolors@1.1.1: {}
1256
-
1257
-
picomatch@2.3.1: {}
1258
-
1259
-
postcss@8.5.6:
1260
-
dependencies:
1261
-
nanoid: 3.3.11
1262
-
picocolors: 1.1.1
1263
-
source-map-js: 1.2.1
1264
-
1265
-
prelude-ls@1.2.1: {}
1266
-
1267
-
punycode@2.3.1: {}
1268
-
1269
-
resolve-from@4.0.0: {}
1270
-
1271
-
rollup@4.46.2:
1272
-
dependencies:
1273
-
'@types/estree': 1.0.8
1274
-
optionalDependencies:
1275
-
'@rollup/rollup-android-arm-eabi': 4.46.2
1276
-
'@rollup/rollup-android-arm64': 4.46.2
1277
-
'@rollup/rollup-darwin-arm64': 4.46.2
1278
-
'@rollup/rollup-darwin-x64': 4.46.2
1279
-
'@rollup/rollup-freebsd-arm64': 4.46.2
1280
-
'@rollup/rollup-freebsd-x64': 4.46.2
1281
-
'@rollup/rollup-linux-arm-gnueabihf': 4.46.2
1282
-
'@rollup/rollup-linux-arm-musleabihf': 4.46.2
1283
-
'@rollup/rollup-linux-arm64-gnu': 4.46.2
1284
-
'@rollup/rollup-linux-arm64-musl': 4.46.2
1285
-
'@rollup/rollup-linux-loongarch64-gnu': 4.46.2
1286
-
'@rollup/rollup-linux-ppc64-gnu': 4.46.2
1287
-
'@rollup/rollup-linux-riscv64-gnu': 4.46.2
1288
-
'@rollup/rollup-linux-riscv64-musl': 4.46.2
1289
-
'@rollup/rollup-linux-s390x-gnu': 4.46.2
1290
-
'@rollup/rollup-linux-x64-gnu': 4.46.2
1291
-
'@rollup/rollup-linux-x64-musl': 4.46.2
1292
-
'@rollup/rollup-win32-arm64-msvc': 4.46.2
1293
-
'@rollup/rollup-win32-ia32-msvc': 4.46.2
1294
-
'@rollup/rollup-win32-x64-msvc': 4.46.2
1295
-
fsevents: 2.3.3
1296
-
1297
-
shebang-command@2.0.0:
1298
-
dependencies:
1299
-
shebang-regex: 3.0.0
1300
-
1301
-
shebang-regex@3.0.0: {}
1302
-
1303
-
source-map-js@1.2.1: {}
1304
-
1305
-
strip-json-comments@3.1.1: {}
1306
-
1307
-
supports-color@7.2.0:
1308
-
dependencies:
1309
-
has-flag: 4.0.0
1310
-
1311
-
to-regex-range@5.0.1:
1312
-
dependencies:
1313
-
is-number: 7.0.0
1314
-
1315
-
type-check@0.4.0:
1316
-
dependencies:
1317
-
prelude-ls: 1.2.1
1318
-
1319
-
uri-js@4.4.1:
1320
-
dependencies:
1321
-
punycode: 2.3.1
1322
-
1323
-
vite-plugin-dom@1.0.4(vite@5.4.19):
1324
-
dependencies:
1325
-
htmlparser2: 9.1.0
1326
-
vite: 5.4.19
1327
-
1328
-
vite-plugin-singlefile@2.3.0(rollup@4.46.2)(vite@5.4.19):
1329
-
dependencies:
1330
-
micromatch: 4.0.8
1331
-
rollup: 4.46.2
1332
-
vite: 5.4.19
1333
-
1334
-
vite@5.4.19:
1335
-
dependencies:
1336
-
esbuild: 0.21.5
1337
-
postcss: 8.5.6
1338
-
rollup: '@rollup/wasm-node@4.46.2'
1339
-
optionalDependencies:
1340
-
fsevents: 2.3.3
1341
-
1342
-
which@2.0.2:
1343
-
dependencies:
1344
-
isexe: 2.0.0
1345
-
1346
-
word-wrap@1.2.5: {}
1347
-
1348
-
yocto-queue@0.1.0: {}
···
1
+
lockfileVersion: 5.4
2
3
overrides:
4
rollup: npm:@rollup/wasm-node
5
6
+
specifiers:
7
+
'@eslint/eslintrc': ^3.3.1
8
+
'@eslint/js': ^9.38.0
9
+
'@rollup/wasm-node': ^4.52.5
10
+
diff: ^8.0.2
11
+
eslint: ^9.38.0
12
+
globals: ^16.4.0
13
+
htmlparser2: ^9.1.0
14
+
vite: ^7.1.12
15
+
vite-plugin-dom: ^1.0.5
16
+
vite-plugin-singlefile: ^2.3.0
17
18
+
devDependencies:
19
+
'@eslint/eslintrc': 3.3.1
20
+
'@eslint/js': 9.38.0
21
+
'@rollup/wasm-node': 4.52.5
22
+
diff: 8.0.2
23
+
eslint: 9.38.0
24
+
globals: 16.4.0
25
+
htmlparser2: 9.1.0
26
+
vite: 7.1.12
27
+
vite-plugin-dom: 1.0.5_vite@7.1.12
28
+
vite-plugin-singlefile: 2.3.0_vite@7.1.12
29
30
packages:
31
32
+
/@esbuild/aix-ppc64/0.25.11:
33
+
resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==}
34
+
engines: {node: '>=18'}
35
cpu: [ppc64]
36
os: [aix]
37
+
requiresBuild: true
38
+
dev: true
39
+
optional: true
40
41
+
/@esbuild/android-arm/0.25.11:
42
+
resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==}
43
+
engines: {node: '>=18'}
44
+
cpu: [arm]
45
os: [android]
46
+
requiresBuild: true
47
+
dev: true
48
+
optional: true
49
50
+
/@esbuild/android-arm64/0.25.11:
51
+
resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==}
52
+
engines: {node: '>=18'}
53
+
cpu: [arm64]
54
os: [android]
55
+
requiresBuild: true
56
+
dev: true
57
+
optional: true
58
59
+
/@esbuild/android-x64/0.25.11:
60
+
resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==}
61
+
engines: {node: '>=18'}
62
cpu: [x64]
63
os: [android]
64
+
requiresBuild: true
65
+
dev: true
66
+
optional: true
67
68
+
/@esbuild/darwin-arm64/0.25.11:
69
+
resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==}
70
+
engines: {node: '>=18'}
71
cpu: [arm64]
72
os: [darwin]
73
+
requiresBuild: true
74
+
dev: true
75
+
optional: true
76
77
+
/@esbuild/darwin-x64/0.25.11:
78
+
resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==}
79
+
engines: {node: '>=18'}
80
cpu: [x64]
81
os: [darwin]
82
+
requiresBuild: true
83
+
dev: true
84
+
optional: true
85
86
+
/@esbuild/freebsd-arm64/0.25.11:
87
+
resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==}
88
+
engines: {node: '>=18'}
89
cpu: [arm64]
90
os: [freebsd]
91
+
requiresBuild: true
92
+
dev: true
93
+
optional: true
94
95
+
/@esbuild/freebsd-x64/0.25.11:
96
+
resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==}
97
+
engines: {node: '>=18'}
98
cpu: [x64]
99
os: [freebsd]
100
+
requiresBuild: true
101
+
dev: true
102
+
optional: true
103
104
+
/@esbuild/linux-arm/0.25.11:
105
+
resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==}
106
+
engines: {node: '>=18'}
107
+
cpu: [arm]
108
os: [linux]
109
+
requiresBuild: true
110
+
dev: true
111
+
optional: true
112
113
+
/@esbuild/linux-arm64/0.25.11:
114
+
resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==}
115
+
engines: {node: '>=18'}
116
+
cpu: [arm64]
117
os: [linux]
118
+
requiresBuild: true
119
+
dev: true
120
+
optional: true
121
122
+
/@esbuild/linux-ia32/0.25.11:
123
+
resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==}
124
+
engines: {node: '>=18'}
125
cpu: [ia32]
126
os: [linux]
127
+
requiresBuild: true
128
+
dev: true
129
+
optional: true
130
131
+
/@esbuild/linux-loong64/0.25.11:
132
+
resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==}
133
+
engines: {node: '>=18'}
134
cpu: [loong64]
135
os: [linux]
136
+
requiresBuild: true
137
+
dev: true
138
+
optional: true
139
140
+
/@esbuild/linux-mips64el/0.25.11:
141
+
resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==}
142
+
engines: {node: '>=18'}
143
cpu: [mips64el]
144
os: [linux]
145
+
requiresBuild: true
146
+
dev: true
147
+
optional: true
148
149
+
/@esbuild/linux-ppc64/0.25.11:
150
+
resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==}
151
+
engines: {node: '>=18'}
152
cpu: [ppc64]
153
os: [linux]
154
+
requiresBuild: true
155
+
dev: true
156
+
optional: true
157
158
+
/@esbuild/linux-riscv64/0.25.11:
159
+
resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==}
160
+
engines: {node: '>=18'}
161
cpu: [riscv64]
162
os: [linux]
163
+
requiresBuild: true
164
+
dev: true
165
+
optional: true
166
167
+
/@esbuild/linux-s390x/0.25.11:
168
+
resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==}
169
+
engines: {node: '>=18'}
170
cpu: [s390x]
171
os: [linux]
172
+
requiresBuild: true
173
+
dev: true
174
+
optional: true
175
176
+
/@esbuild/linux-x64/0.25.11:
177
+
resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==}
178
+
engines: {node: '>=18'}
179
cpu: [x64]
180
os: [linux]
181
+
requiresBuild: true
182
+
dev: true
183
+
optional: true
184
185
+
/@esbuild/netbsd-arm64/0.25.11:
186
+
resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==}
187
+
engines: {node: '>=18'}
188
+
cpu: [arm64]
189
+
os: [netbsd]
190
+
requiresBuild: true
191
+
dev: true
192
+
optional: true
193
+
194
+
/@esbuild/netbsd-x64/0.25.11:
195
+
resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==}
196
+
engines: {node: '>=18'}
197
cpu: [x64]
198
os: [netbsd]
199
+
requiresBuild: true
200
+
dev: true
201
+
optional: true
202
203
+
/@esbuild/openbsd-arm64/0.25.11:
204
+
resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==}
205
+
engines: {node: '>=18'}
206
+
cpu: [arm64]
207
+
os: [openbsd]
208
+
requiresBuild: true
209
+
dev: true
210
+
optional: true
211
+
212
+
/@esbuild/openbsd-x64/0.25.11:
213
+
resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==}
214
+
engines: {node: '>=18'}
215
cpu: [x64]
216
os: [openbsd]
217
+
requiresBuild: true
218
+
dev: true
219
+
optional: true
220
221
+
/@esbuild/openharmony-arm64/0.25.11:
222
+
resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==}
223
+
engines: {node: '>=18'}
224
+
cpu: [arm64]
225
+
os: [openharmony]
226
+
requiresBuild: true
227
+
dev: true
228
+
optional: true
229
+
230
+
/@esbuild/sunos-x64/0.25.11:
231
+
resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==}
232
+
engines: {node: '>=18'}
233
cpu: [x64]
234
os: [sunos]
235
+
requiresBuild: true
236
+
dev: true
237
+
optional: true
238
239
+
/@esbuild/win32-arm64/0.25.11:
240
+
resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==}
241
+
engines: {node: '>=18'}
242
cpu: [arm64]
243
os: [win32]
244
+
requiresBuild: true
245
+
dev: true
246
+
optional: true
247
248
+
/@esbuild/win32-ia32/0.25.11:
249
+
resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==}
250
+
engines: {node: '>=18'}
251
cpu: [ia32]
252
os: [win32]
253
+
requiresBuild: true
254
+
dev: true
255
+
optional: true
256
257
+
/@esbuild/win32-x64/0.25.11:
258
+
resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==}
259
+
engines: {node: '>=18'}
260
cpu: [x64]
261
os: [win32]
262
+
requiresBuild: true
263
+
dev: true
264
+
optional: true
265
266
+
/@eslint-community/eslint-utils/4.9.0_eslint@9.38.0:
267
+
resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==}
268
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
269
peerDependencies:
270
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
271
+
dependencies:
272
+
eslint: 9.38.0
273
+
eslint-visitor-keys: 3.4.3
274
+
dev: true
275
276
+
/@eslint-community/regexpp/4.12.2:
277
+
resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
278
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
279
+
dev: true
280
281
+
/@eslint/config-array/0.21.1:
282
+
resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==}
283
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
284
+
dependencies:
285
+
'@eslint/object-schema': 2.1.7
286
+
debug: 4.4.3
287
+
minimatch: 3.1.2
288
+
transitivePeerDependencies:
289
+
- supports-color
290
+
dev: true
291
292
+
/@eslint/config-helpers/0.4.2:
293
+
resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
294
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
295
+
dependencies:
296
+
'@eslint/core': 0.17.0
297
+
dev: true
298
299
+
/@eslint/core/0.16.0:
300
+
resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==}
301
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
302
+
dependencies:
303
+
'@types/json-schema': 7.0.15
304
+
dev: true
305
306
+
/@eslint/core/0.17.0:
307
+
resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
308
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
309
+
dependencies:
310
+
'@types/json-schema': 7.0.15
311
+
dev: true
312
+
313
+
/@eslint/eslintrc/3.3.1:
314
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
315
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
316
+
dependencies:
317
+
ajv: 6.12.6
318
+
debug: 4.4.3
319
+
espree: 10.4.0
320
+
globals: 14.0.0
321
+
ignore: 5.3.2
322
+
import-fresh: 3.3.1
323
+
js-yaml: 4.1.0
324
+
minimatch: 3.1.2
325
+
strip-json-comments: 3.1.1
326
+
transitivePeerDependencies:
327
+
- supports-color
328
+
dev: true
329
330
+
/@eslint/js/9.38.0:
331
+
resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==}
332
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
333
+
dev: true
334
335
+
/@eslint/object-schema/2.1.7:
336
+
resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
337
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
338
+
dev: true
339
340
+
/@eslint/plugin-kit/0.4.1:
341
+
resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
342
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
343
+
dependencies:
344
+
'@eslint/core': 0.17.0
345
+
levn: 0.4.1
346
+
dev: true
347
348
+
/@humanfs/core/0.19.1:
349
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
350
engines: {node: '>=18.18.0'}
351
+
dev: true
352
353
+
/@humanfs/node/0.16.7:
354
+
resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==}
355
engines: {node: '>=18.18.0'}
356
+
dependencies:
357
+
'@humanfs/core': 0.19.1
358
+
'@humanwhocodes/retry': 0.4.3
359
+
dev: true
360
361
+
/@humanwhocodes/module-importer/1.0.1:
362
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
363
engines: {node: '>=12.22'}
364
+
dev: true
365
366
+
/@humanwhocodes/retry/0.4.3:
367
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
368
engines: {node: '>=18.18'}
369
+
dev: true
370
371
+
/@rollup/wasm-node/4.52.5:
372
+
resolution: {integrity: sha512-ldY4tEzSMBHNwB8TfRpi7RRRjjyfKlwjdebw5pS1lu0xaY3g4RDc6ople2wEYulVOKVeH7ZJwRx0iw4pGtjMHg==}
373
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
374
hasBin: true
375
+
dependencies:
376
+
'@types/estree': 1.0.8
377
+
optionalDependencies:
378
+
fsevents: 2.3.3
379
+
dev: true
380
381
+
/@types/estree/1.0.8:
382
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
383
+
dev: true
384
385
+
/@types/json-schema/7.0.15:
386
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
387
+
dev: true
388
389
+
/acorn-jsx/5.3.2_acorn@8.15.0:
390
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
391
peerDependencies:
392
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
393
+
dependencies:
394
+
acorn: 8.15.0
395
+
dev: true
396
397
+
/acorn/8.15.0:
398
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
399
engines: {node: '>=0.4.0'}
400
hasBin: true
401
+
dev: true
402
403
+
/ajv/6.12.6:
404
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
405
+
dependencies:
406
+
fast-deep-equal: 3.1.3
407
+
fast-json-stable-stringify: 2.1.0
408
+
json-schema-traverse: 0.4.1
409
+
uri-js: 4.4.1
410
+
dev: true
411
412
+
/ansi-styles/4.3.0:
413
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
414
engines: {node: '>=8'}
415
+
dependencies:
416
+
color-convert: 2.0.1
417
+
dev: true
418
419
+
/argparse/2.0.1:
420
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
421
+
dev: true
422
423
+
/balanced-match/1.0.2:
424
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
425
+
dev: true
426
427
+
/brace-expansion/1.1.12:
428
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
429
+
dependencies:
430
+
balanced-match: 1.0.2
431
+
concat-map: 0.0.1
432
+
dev: true
433
434
+
/braces/3.0.3:
435
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
436
engines: {node: '>=8'}
437
+
dependencies:
438
+
fill-range: 7.1.1
439
+
dev: true
440
441
+
/callsites/3.1.0:
442
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
443
engines: {node: '>=6'}
444
+
dev: true
445
446
+
/chalk/4.1.2:
447
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
448
engines: {node: '>=10'}
449
+
dependencies:
450
+
ansi-styles: 4.3.0
451
+
supports-color: 7.2.0
452
+
dev: true
453
454
+
/color-convert/2.0.1:
455
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
456
engines: {node: '>=7.0.0'}
457
+
dependencies:
458
+
color-name: 1.1.4
459
+
dev: true
460
461
+
/color-name/1.1.4:
462
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
463
+
dev: true
464
465
+
/concat-map/0.0.1:
466
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
467
+
dev: true
468
469
+
/cross-spawn/7.0.6:
470
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
471
engines: {node: '>= 8'}
472
+
dependencies:
473
+
path-key: 3.1.1
474
+
shebang-command: 2.0.0
475
+
which: 2.0.2
476
+
dev: true
477
478
+
/debug/4.4.3:
479
+
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
480
engines: {node: '>=6.0'}
481
peerDependencies:
482
supports-color: '*'
483
peerDependenciesMeta:
484
supports-color:
485
optional: true
486
+
dependencies:
487
+
ms: 2.1.3
488
+
dev: true
489
490
+
/deep-is/0.1.4:
491
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
492
+
dev: true
493
494
+
/diff/8.0.2:
495
resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==}
496
engines: {node: '>=0.3.1'}
497
+
dev: true
498
499
+
/dom-serializer/2.0.0:
500
resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
501
+
dependencies:
502
+
domelementtype: 2.3.0
503
+
domhandler: 5.0.3
504
+
entities: 4.5.0
505
+
dev: true
506
507
+
/domelementtype/2.3.0:
508
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
509
+
dev: true
510
511
+
/domhandler/5.0.3:
512
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
513
engines: {node: '>= 4'}
514
+
dependencies:
515
+
domelementtype: 2.3.0
516
+
dev: true
517
518
+
/domutils/3.2.2:
519
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
520
+
dependencies:
521
+
dom-serializer: 2.0.0
522
+
domelementtype: 2.3.0
523
+
domhandler: 5.0.3
524
+
dev: true
525
526
+
/entities/4.5.0:
527
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
528
engines: {node: '>=0.12'}
529
+
dev: true
530
531
+
/entities/6.0.1:
532
+
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
533
+
engines: {node: '>=0.12'}
534
+
dev: true
535
+
536
+
/esbuild/0.25.11:
537
+
resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==}
538
+
engines: {node: '>=18'}
539
hasBin: true
540
+
requiresBuild: true
541
+
optionalDependencies:
542
+
'@esbuild/aix-ppc64': 0.25.11
543
+
'@esbuild/android-arm': 0.25.11
544
+
'@esbuild/android-arm64': 0.25.11
545
+
'@esbuild/android-x64': 0.25.11
546
+
'@esbuild/darwin-arm64': 0.25.11
547
+
'@esbuild/darwin-x64': 0.25.11
548
+
'@esbuild/freebsd-arm64': 0.25.11
549
+
'@esbuild/freebsd-x64': 0.25.11
550
+
'@esbuild/linux-arm': 0.25.11
551
+
'@esbuild/linux-arm64': 0.25.11
552
+
'@esbuild/linux-ia32': 0.25.11
553
+
'@esbuild/linux-loong64': 0.25.11
554
+
'@esbuild/linux-mips64el': 0.25.11
555
+
'@esbuild/linux-ppc64': 0.25.11
556
+
'@esbuild/linux-riscv64': 0.25.11
557
+
'@esbuild/linux-s390x': 0.25.11
558
+
'@esbuild/linux-x64': 0.25.11
559
+
'@esbuild/netbsd-arm64': 0.25.11
560
+
'@esbuild/netbsd-x64': 0.25.11
561
+
'@esbuild/openbsd-arm64': 0.25.11
562
+
'@esbuild/openbsd-x64': 0.25.11
563
+
'@esbuild/openharmony-arm64': 0.25.11
564
+
'@esbuild/sunos-x64': 0.25.11
565
+
'@esbuild/win32-arm64': 0.25.11
566
+
'@esbuild/win32-ia32': 0.25.11
567
+
'@esbuild/win32-x64': 0.25.11
568
+
dev: true
569
570
+
/escape-string-regexp/4.0.0:
571
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
572
engines: {node: '>=10'}
573
+
dev: true
574
575
+
/eslint-scope/8.4.0:
576
resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
577
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
578
+
dependencies:
579
+
esrecurse: 4.3.0
580
+
estraverse: 5.3.0
581
+
dev: true
582
583
+
/eslint-visitor-keys/3.4.3:
584
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
585
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
586
+
dev: true
587
588
+
/eslint-visitor-keys/4.2.1:
589
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
590
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
591
+
dev: true
592
593
+
/eslint/9.38.0:
594
+
resolution: {integrity: sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==}
595
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
596
hasBin: true
597
peerDependencies:
···
599
peerDependenciesMeta:
600
jiti:
601
optional: true
602
+
dependencies:
603
+
'@eslint-community/eslint-utils': 4.9.0_eslint@9.38.0
604
+
'@eslint-community/regexpp': 4.12.2
605
+
'@eslint/config-array': 0.21.1
606
+
'@eslint/config-helpers': 0.4.2
607
+
'@eslint/core': 0.16.0
608
+
'@eslint/eslintrc': 3.3.1
609
+
'@eslint/js': 9.38.0
610
+
'@eslint/plugin-kit': 0.4.1
611
+
'@humanfs/node': 0.16.7
612
+
'@humanwhocodes/module-importer': 1.0.1
613
+
'@humanwhocodes/retry': 0.4.3
614
+
'@types/estree': 1.0.8
615
+
ajv: 6.12.6
616
+
chalk: 4.1.2
617
+
cross-spawn: 7.0.6
618
+
debug: 4.4.3
619
+
escape-string-regexp: 4.0.0
620
+
eslint-scope: 8.4.0
621
+
eslint-visitor-keys: 4.2.1
622
+
espree: 10.4.0
623
+
esquery: 1.6.0
624
+
esutils: 2.0.3
625
+
fast-deep-equal: 3.1.3
626
+
file-entry-cache: 8.0.0
627
+
find-up: 5.0.0
628
+
glob-parent: 6.0.2
629
+
ignore: 5.3.2
630
+
imurmurhash: 0.1.4
631
+
is-glob: 4.0.3
632
+
json-stable-stringify-without-jsonify: 1.0.1
633
+
lodash.merge: 4.6.2
634
+
minimatch: 3.1.2
635
+
natural-compare: 1.4.0
636
+
optionator: 0.9.4
637
+
transitivePeerDependencies:
638
+
- supports-color
639
+
dev: true
640
641
+
/espree/10.4.0:
642
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
643
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
644
+
dependencies:
645
+
acorn: 8.15.0
646
+
acorn-jsx: 5.3.2_acorn@8.15.0
647
+
eslint-visitor-keys: 4.2.1
648
+
dev: true
649
650
+
/esquery/1.6.0:
651
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
652
engines: {node: '>=0.10'}
653
+
dependencies:
654
+
estraverse: 5.3.0
655
+
dev: true
656
657
+
/esrecurse/4.3.0:
658
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
659
engines: {node: '>=4.0'}
660
+
dependencies:
661
+
estraverse: 5.3.0
662
+
dev: true
663
664
+
/estraverse/5.3.0:
665
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
666
engines: {node: '>=4.0'}
667
+
dev: true
668
669
+
/esutils/2.0.3:
670
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
671
engines: {node: '>=0.10.0'}
672
+
dev: true
673
674
+
/fast-deep-equal/3.1.3:
675
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
676
+
dev: true
677
678
+
/fast-json-stable-stringify/2.1.0:
679
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
680
+
dev: true
681
682
+
/fast-levenshtein/2.0.6:
683
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
684
+
dev: true
685
686
+
/fdir/6.5.0_picomatch@4.0.3:
687
+
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
688
+
engines: {node: '>=12.0.0'}
689
+
peerDependencies:
690
+
picomatch: ^3 || ^4
691
+
peerDependenciesMeta:
692
+
picomatch:
693
+
optional: true
694
+
dependencies:
695
+
picomatch: 4.0.3
696
+
dev: true
697
+
698
+
/file-entry-cache/8.0.0:
699
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
700
engines: {node: '>=16.0.0'}
701
+
dependencies:
702
+
flat-cache: 4.0.1
703
+
dev: true
704
705
+
/fill-range/7.1.1:
706
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
707
engines: {node: '>=8'}
708
+
dependencies:
709
+
to-regex-range: 5.0.1
710
+
dev: true
711
712
+
/find-up/5.0.0:
713
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
714
engines: {node: '>=10'}
715
+
dependencies:
716
+
locate-path: 6.0.0
717
+
path-exists: 4.0.0
718
+
dev: true
719
720
+
/flat-cache/4.0.1:
721
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
722
engines: {node: '>=16'}
723
+
dependencies:
724
+
flatted: 3.3.3
725
+
keyv: 4.5.4
726
+
dev: true
727
728
+
/flatted/3.3.3:
729
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
730
+
dev: true
731
732
+
/fsevents/2.3.3:
733
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
734
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
735
os: [darwin]
736
+
requiresBuild: true
737
+
dev: true
738
+
optional: true
739
740
+
/glob-parent/6.0.2:
741
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
742
engines: {node: '>=10.13.0'}
743
+
dependencies:
744
+
is-glob: 4.0.3
745
+
dev: true
746
747
+
/globals/14.0.0:
748
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
749
engines: {node: '>=18'}
750
+
dev: true
751
752
+
/globals/16.4.0:
753
+
resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==}
754
engines: {node: '>=18'}
755
+
dev: true
756
757
+
/has-flag/4.0.0:
758
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
759
engines: {node: '>=8'}
760
+
dev: true
761
762
+
/htmlparser2/10.0.0:
763
+
resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==}
764
+
dependencies:
765
+
domelementtype: 2.3.0
766
+
domhandler: 5.0.3
767
+
domutils: 3.2.2
768
+
entities: 6.0.1
769
+
dev: true
770
+
771
+
/htmlparser2/9.1.0:
772
resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==}
773
+
dependencies:
774
+
domelementtype: 2.3.0
775
+
domhandler: 5.0.3
776
+
domutils: 3.2.2
777
+
entities: 4.5.0
778
+
dev: true
779
780
+
/ignore/5.3.2:
781
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
782
engines: {node: '>= 4'}
783
+
dev: true
784
785
+
/import-fresh/3.3.1:
786
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
787
engines: {node: '>=6'}
788
+
dependencies:
789
+
parent-module: 1.0.1
790
+
resolve-from: 4.0.0
791
+
dev: true
792
793
+
/imurmurhash/0.1.4:
794
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
795
engines: {node: '>=0.8.19'}
796
+
dev: true
797
798
+
/is-extglob/2.1.1:
799
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
800
engines: {node: '>=0.10.0'}
801
+
dev: true
802
803
+
/is-glob/4.0.3:
804
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
805
engines: {node: '>=0.10.0'}
806
+
dependencies:
807
+
is-extglob: 2.1.1
808
+
dev: true
809
810
+
/is-number/7.0.0:
811
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
812
engines: {node: '>=0.12.0'}
813
+
dev: true
814
815
+
/isexe/2.0.0:
816
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
817
+
dev: true
818
819
+
/js-yaml/4.1.0:
820
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
821
hasBin: true
822
+
dependencies:
823
+
argparse: 2.0.1
824
+
dev: true
825
826
+
/json-buffer/3.0.1:
827
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
828
+
dev: true
829
830
+
/json-schema-traverse/0.4.1:
831
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
832
+
dev: true
833
834
+
/json-stable-stringify-without-jsonify/1.0.1:
835
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
836
+
dev: true
837
838
+
/keyv/4.5.4:
839
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
840
+
dependencies:
841
+
json-buffer: 3.0.1
842
+
dev: true
843
844
+
/levn/0.4.1:
845
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
846
engines: {node: '>= 0.8.0'}
847
+
dependencies:
848
+
prelude-ls: 1.2.1
849
+
type-check: 0.4.0
850
+
dev: true
851
852
+
/locate-path/6.0.0:
853
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
854
engines: {node: '>=10'}
855
+
dependencies:
856
+
p-locate: 5.0.0
857
+
dev: true
858
859
+
/lodash.merge/4.6.2:
860
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
861
+
dev: true
862
863
+
/micromatch/4.0.8:
864
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
865
engines: {node: '>=8.6'}
866
+
dependencies:
867
+
braces: 3.0.3
868
+
picomatch: 2.3.1
869
+
dev: true
870
871
+
/minimatch/3.1.2:
872
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
873
+
dependencies:
874
+
brace-expansion: 1.1.12
875
+
dev: true
876
877
+
/ms/2.1.3:
878
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
879
+
dev: true
880
881
+
/nanoid/3.3.11:
882
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
883
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
884
hasBin: true
885
+
dev: true
886
887
+
/natural-compare/1.4.0:
888
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
889
+
dev: true
890
891
+
/optionator/0.9.4:
892
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
893
engines: {node: '>= 0.8.0'}
894
+
dependencies:
895
+
deep-is: 0.1.4
896
+
fast-levenshtein: 2.0.6
897
+
levn: 0.4.1
898
+
prelude-ls: 1.2.1
899
+
type-check: 0.4.0
900
+
word-wrap: 1.2.5
901
+
dev: true
902
903
+
/p-limit/3.1.0:
904
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
905
engines: {node: '>=10'}
906
+
dependencies:
907
+
yocto-queue: 0.1.0
908
+
dev: true
909
910
+
/p-locate/5.0.0:
911
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
912
engines: {node: '>=10'}
913
+
dependencies:
914
+
p-limit: 3.1.0
915
+
dev: true
916
917
+
/parent-module/1.0.1:
918
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
919
engines: {node: '>=6'}
920
+
dependencies:
921
+
callsites: 3.1.0
922
+
dev: true
923
924
+
/path-exists/4.0.0:
925
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
926
engines: {node: '>=8'}
927
+
dev: true
928
929
+
/path-key/3.1.1:
930
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
931
engines: {node: '>=8'}
932
+
dev: true
933
934
+
/picocolors/1.1.1:
935
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
936
+
dev: true
937
938
+
/picomatch/2.3.1:
939
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
940
engines: {node: '>=8.6'}
941
+
dev: true
942
943
+
/picomatch/4.0.3:
944
+
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
945
+
engines: {node: '>=12'}
946
+
dev: true
947
+
948
+
/postcss/8.5.6:
949
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
950
engines: {node: ^10 || ^12 || >=14}
951
+
dependencies:
952
+
nanoid: 3.3.11
953
+
picocolors: 1.1.1
954
+
source-map-js: 1.2.1
955
+
dev: true
956
957
+
/prelude-ls/1.2.1:
958
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
959
engines: {node: '>= 0.8.0'}
960
+
dev: true
961
962
+
/punycode/2.3.1:
963
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
964
engines: {node: '>=6'}
965
+
dev: true
966
967
+
/resolve-from/4.0.0:
968
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
969
engines: {node: '>=4'}
970
+
dev: true
971
972
+
/shebang-command/2.0.0:
973
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
974
engines: {node: '>=8'}
975
+
dependencies:
976
+
shebang-regex: 3.0.0
977
+
dev: true
978
979
+
/shebang-regex/3.0.0:
980
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
981
engines: {node: '>=8'}
982
+
dev: true
983
984
+
/source-map-js/1.2.1:
985
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
986
engines: {node: '>=0.10.0'}
987
+
dev: true
988
989
+
/strip-json-comments/3.1.1:
990
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
991
engines: {node: '>=8'}
992
+
dev: true
993
994
+
/supports-color/7.2.0:
995
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
996
engines: {node: '>=8'}
997
+
dependencies:
998
+
has-flag: 4.0.0
999
+
dev: true
1000
1001
+
/tinyglobby/0.2.15:
1002
+
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
1003
+
engines: {node: '>=12.0.0'}
1004
+
dependencies:
1005
+
fdir: 6.5.0_picomatch@4.0.3
1006
+
picomatch: 4.0.3
1007
+
dev: true
1008
+
1009
+
/to-regex-range/5.0.1:
1010
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1011
engines: {node: '>=8.0'}
1012
+
dependencies:
1013
+
is-number: 7.0.0
1014
+
dev: true
1015
1016
+
/type-check/0.4.0:
1017
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
1018
engines: {node: '>= 0.8.0'}
1019
+
dependencies:
1020
+
prelude-ls: 1.2.1
1021
+
dev: true
1022
1023
+
/uri-js/4.4.1:
1024
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
1025
+
dependencies:
1026
+
punycode: 2.3.1
1027
+
dev: true
1028
1029
+
/vite-plugin-dom/1.0.5_vite@7.1.12:
1030
+
resolution: {integrity: sha512-G3MbuH30FpBD800I26xlB6lUiDm7sCxvQkHPt9OAJyUEbyiO9UWrKADxVUhWbO65WqL/TGtH1OEez+w++TlfMw==}
1031
peerDependencies:
1032
vite: '>=4.0.0'
1033
+
dependencies:
1034
+
htmlparser2: 10.0.0
1035
+
vite: 7.1.12
1036
+
dev: true
1037
1038
+
/vite-plugin-singlefile/2.3.0_vite@7.1.12:
1039
resolution: {integrity: sha512-DAcHzYypM0CasNLSz/WG0VdKOCxGHErfrjOoyIPiNxTPTGmO6rRD/te93n1YL/s+miXq66ipF1brMBikf99c6A==}
1040
engines: {node: '>18.0.0'}
1041
peerDependencies:
1042
rollup: ^4.44.1
1043
vite: ^5.4.11 || ^6.0.0 || ^7.0.0
1044
+
dependencies:
1045
+
micromatch: 4.0.8
1046
+
vite: 7.1.12
1047
+
dev: true
1048
1049
+
/vite/7.1.12:
1050
+
resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==}
1051
+
engines: {node: ^20.19.0 || >=22.12.0}
1052
hasBin: true
1053
peerDependencies:
1054
+
'@types/node': ^20.19.0 || >=22.12.0
1055
+
jiti: '>=1.21.0'
1056
+
less: ^4.0.0
1057
lightningcss: ^1.21.0
1058
+
sass: ^1.70.0
1059
+
sass-embedded: ^1.70.0
1060
+
stylus: '>=0.54.8'
1061
+
sugarss: ^5.0.0
1062
+
terser: ^5.16.0
1063
+
tsx: ^4.8.1
1064
+
yaml: ^2.4.2
1065
peerDependenciesMeta:
1066
'@types/node':
1067
+
optional: true
1068
+
jiti:
1069
optional: true
1070
less:
1071
optional: true
···
1081
optional: true
1082
terser:
1083
optional: true
1084
+
tsx:
1085
+
optional: true
1086
+
yaml:
1087
+
optional: true
1088
+
dependencies:
1089
+
esbuild: 0.25.11
1090
+
fdir: 6.5.0_picomatch@4.0.3
1091
+
picomatch: 4.0.3
1092
+
postcss: 8.5.6
1093
+
rollup: /@rollup/wasm-node/4.52.5
1094
+
tinyglobby: 0.2.15
1095
+
optionalDependencies:
1096
+
fsevents: 2.3.3
1097
+
dev: true
1098
1099
+
/which/2.0.2:
1100
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1101
engines: {node: '>= 8'}
1102
hasBin: true
1103
+
dependencies:
1104
+
isexe: 2.0.0
1105
+
dev: true
1106
1107
+
/word-wrap/1.2.5:
1108
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
1109
engines: {node: '>=0.10.0'}
1110
+
dev: true
1111
1112
+
/yocto-queue/0.1.0:
1113
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
1114
engines: {node: '>=10'}
1115
+
dev: true
+1
-1
release.sh
+1
-1
release.sh
+18
-25
test.js
+18
-25
test.js
···
5
import { Defs } from './defs.js';
6
import { Hex } from './hex.js';
7
import { Base64 } from './base64.js';
8
-
import { Int10 } from './int10.js';
9
import { createPatch } from 'diff';
10
11
const all = (process.argv[2] == 'all');
···
78
*/
79
checkResult(result, expected, comment) {
80
++stats.run;
81
-
if (!result || result == expected) {
82
if (all) console.log('\x1B[1m\x1B[32mOK \x1B[39m\x1B[22m ' + comment);
83
} else {
84
++stats.error;
85
console.log('\x1B[1m\x1B[31mERR\x1B[39m\x1B[22m ' + comment);
86
-
if (result.length > 100) {
87
console.log(' \x1B[1m\x1B[34mDIF\x1B[39m\x1B[22m ' + diff(result, expected.toString()).replace(/\n/g, '\n '));
88
} else {
89
console.log(' \x1B[1m\x1B[34mEXP\x1B[39m\x1B[22m ' + expected.toString().replace(/\n/g, '\n '));
···
180
['0D04C27B0302','8571.3.2', 'Relative OID from ISO/IEC 8825-1:2002 8.20.5'],
181
// UTF-8
182
['0C0E4C61706FE280997320F09F9A972E', 'Lapoโs ๐.', 'UTF-8 4-byte sequence'],
183
-
// T-REC-X.690-201508
184
['0307040A3B5F291CD0', '(44 bit)\n00001010001110110101111100101001000111001101', 'Example 8.6.4.2: bit string (primitive encoding)'],
185
['23800303000A3B0305045F291CD00000', '(44 bit)\n00001010001110110101111100101001000111001101', 'Example 8.6.4.2: bit string (constructed encoding)'],
186
// avoid past bugs
187
['23800303000A3B230A0302005F030404291CD00000', '(44 bit)\n00001010001110110101111100101001000111001101', 'Bit string (recursive constructed)'],
188
['0348003045022100DE601E573DAFB59BC551D58E3E7B9EDA0612DD0112805A2217B734759B884417022067C3FDE60780D41C1D7A3B90291F3D39C4DC2F206DCCBA2F982C06B67C09B232', '(568 bit)\n0011000001000101000000100010000100000000110111100110000000011110010101110011110110101111101101011001101111000101010100011101010110001110001111100111101110011110110110100000011000010010110111010000000100010010100000000101101000100010000101111011011100110100011101011001101110001000010001000001011100000010001000000110011111000011111111011110011000000111100000001101010000011100000111010111101000111011100100000010100100011111001111010011100111000100110111000010111100100000011011011100110010111010001011111001100000101100000001101011011001111100000010011011001000110010', 'not constructed, but contains structures'],
···
236
'ABCDEFE=',
237
'ABCDEFGH',
238
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQR\nSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456w==',
239
-
]));
240
-
241
-
tests.push(new Tests('Int10', function (t) {
242
-
this.row = (0|this.row) + 1;
243
-
this.num = this.num || new Int10();
244
-
this.num.mulAdd(t[0], t[1]);
245
-
this.checkResult(this.num.toString(), t[2], 'Int10 row ' + this.row);
246
-
}, [
247
-
[0, 1000000000, '1000000000'],
248
-
[256, 23, '256000000023'],
249
-
[256, 23, '65536000005911'],
250
-
[256, 23, '16777216001513239'],
251
-
[256, 23, '4294967296387389207'],
252
-
[256, 23, '1099511627875171637015'],
253
-
[256, 23, '281474976736043939075863'],
254
-
[253, 1, '71213169114219116586193340'],
255
-
[253, 1, '18016931785897436496306915021'],
256
-
[253, 1, '4558283741832051433565649500314'],
257
-
[253, 1, '1153245786683509012692109323579443'],
258
-
[253, 1, '291771184030927780211103658865599080'],
259
-
[1, 0, '291771184030927780211103658865599080'],
260
]));
261
262
for (const t of tests)
···
5
import { Defs } from './defs.js';
6
import { Hex } from './hex.js';
7
import { Base64 } from './base64.js';
8
import { createPatch } from 'diff';
9
10
const all = (process.argv[2] == 'all');
···
77
*/
78
checkResult(result, expected, comment) {
79
++stats.run;
80
+
if ((typeof expected != 'string' && !result) || result == expected) {
81
if (all) console.log('\x1B[1m\x1B[32mOK \x1B[39m\x1B[22m ' + comment);
82
} else {
83
++stats.error;
84
console.log('\x1B[1m\x1B[31mERR\x1B[39m\x1B[22m ' + comment);
85
+
if (!result) result = '(empty)';
86
+
if (typeof expected != 'string') {
87
+
console.log(' ' + result);
88
+
} else if (result.length > 100) {
89
console.log(' \x1B[1m\x1B[34mDIF\x1B[39m\x1B[22m ' + diff(result, expected.toString()).replace(/\n/g, '\n '));
90
} else {
91
console.log(' \x1B[1m\x1B[34mEXP\x1B[39m\x1B[22m ' + expected.toString().replace(/\n/g, '\n '));
···
182
['0D04C27B0302','8571.3.2', 'Relative OID from ISO/IEC 8825-1:2002 8.20.5'],
183
// UTF-8
184
['0C0E4C61706FE280997320F09F9A972E', 'Lapoโs ๐.', 'UTF-8 4-byte sequence'],
185
+
// T-REC-X.690-202102
186
['0307040A3B5F291CD0', '(44 bit)\n00001010001110110101111100101001000111001101', 'Example 8.6.4.2: bit string (primitive encoding)'],
187
['23800303000A3B0305045F291CD00000', '(44 bit)\n00001010001110110101111100101001000111001101', 'Example 8.6.4.2: bit string (constructed encoding)'],
188
+
['0603883703', '2.999.3', 'Example 8.19.5: object identifier'],
189
+
// X.690 section 8.2.1 โThe contents octets shall consist of a single octet.โ
190
+
['010100', 'false', 'Boolean with correct length (false)'],
191
+
['010101', 'true', 'Boolean with correct length (true)'],
192
+
['0100', 'invalid length 0', 'Boolean with zero length'],
193
+
['01020000', 'invalid length 2', 'Boolean with excessive length'],
194
+
// X.690 section 8.3.1 โThe contents octets shall consist of one or more octets.โ
195
+
['020100', '0', 'Integer with correct length'],
196
+
['0200', 'invalid length 0', 'Integer with zero length'],
197
+
// X.690 section 8.19.4 kinda imples that the minimum number of components is 2
198
+
['0600', 'invalid length 0', 'Object identifier with zero length'],
199
+
['060100', '0.0', 'Object identifier with minimal (?) length'],
200
// avoid past bugs
201
['23800303000A3B230A0302005F030404291CD00000', '(44 bit)\n00001010001110110101111100101001000111001101', 'Bit string (recursive constructed)'],
202
['0348003045022100DE601E573DAFB59BC551D58E3E7B9EDA0612DD0112805A2217B734759B884417022067C3FDE60780D41C1D7A3B90291F3D39C4DC2F206DCCBA2F982C06B67C09B232', '(568 bit)\n0011000001000101000000100010000100000000110111100110000000011110010101110011110110101111101101011001101111000101010100011101010110001110001111100111101110011110110110100000011000010010110111010000000100010010100000000101101000100010000101111011011100110100011101011001101110001000010001000001011100000010001000000110011111000011111111011110011000000111100000001101010000011100000111010111101000111011100100000010100100011111001111010011100111000100110111000010111100100000011011011100110010111010001011111001100000101100000001101011011001111100000010011011001000110010', 'not constructed, but contains structures'],
···
250
'ABCDEFE=',
251
'ABCDEFGH',
252
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQR\nSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456w==',
253
]));
254
255
for (const t of tests)
+7
-1
vite.config.js
+7
-1
vite.config.js
···
16
};
17
};
18
19
export default defineConfig({
20
plugins: [
21
preventSVGEmit(),
···
25
if (removeNodes.includes(node.attribs.id))
26
DomUtils.removeElement(node);
27
else if (node.name == 'link' && node.attribs.rel == 'icon')
28
-
node.attribs.href = 'data:image/svg+xml;base64,' + btoa(fs.readFileSync('favicon.svg', 'ascii').replace(/^([^<]+|<[^s]|<s[^v]|<sv[^g])+/, '').trim());
29
},
30
}),
31
viteSingleFile(),
···
16
};
17
};
18
19
+
function massageSVG(str) {
20
+
return str.replace(/["<>#]/g, (c) => {
21
+
return '%' + c.charCodeAt(0).toString(16).toUpperCase().padStart(2, '0');
22
+
});
23
+
}
24
+
25
export default defineConfig({
26
plugins: [
27
preventSVGEmit(),
···
31
if (removeNodes.includes(node.attribs.id))
32
DomUtils.removeElement(node);
33
else if (node.name == 'link' && node.attribs.rel == 'icon')
34
+
node.attribs.href = 'data:image/svg+xml,' + massageSVG(fs.readFileSync('favicon.svg', 'ascii').replace(/^([^<]+|<[^s]|<s[^v]|<sv[^g])+/, '').trim());
35
},
36
}),
37
viteSingleFile(),