JavaScript generic ASN.1 parser (mirror)

Compare changes

Choose any two refs to compare.

+1 -1
.mtn-ignore
··· 11 11 git-[^.]*[.]txt 12 12 # Artifacts from updateOID.sh 13 13 dumpasn1[.]cfg 14 - # Artifacts from parseRFC.js 14 + # Artifacts from updateRFC.sh / parseRFC.js 15 15 rfc$ 16 16 rfcdef[.]json
+13 -2
CHANGELOG.md
··· 1 1 # ChangeLog 2 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 + 3 14 ## 2.1.0 - 2025-08-03 4 15 5 16 ### Changed 6 17 7 - - when fields are CHOICEs now both the field name and the choice name are shown (fixes GitHub #102) 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)) 8 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 9 20 10 21 ### Added ··· 15 26 16 27 ### Added 17 28 18 - - add proper support for standard Base64 (we previously only supported Base64url) (fixes GitHub #99) 29 + - add proper support for standard Base64 (we previously only supported Base64url) (fixes [GitHub #99](https://github.com/lapo-luchini/asn1js/pull/99)) 19 30 - improve test harness 20 31 21 32 ## 2.0.5 - 2025-04-12
+4 -3
README.md
··· 101 101 links 102 102 ----- 103 103 104 - - [official website](https://lapo.it/asn1js/) 105 - - [dedicated domain](https://asn1js.eu/) 106 - - [InDefero tracker](http://idf.lapo.it/p/asn1js/) 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) 107 108 - [GitHub mirror](https://github.com/lapo-luchini/asn1js) 108 109 - [ChangeLog on GitHub](https://github.com/lapo-luchini/asn1js/blob/trunk/CHANGELOG.md) 109 110 - [Ohloh code stats](https://www.openhub.net/p/asn1js)
+273 -72
asn1.js
··· 13 13 // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 14 // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 15 16 - import { Int10 } from './int10.js'; 17 16 import { oids } from './oids.js'; 18 17 19 18 const ··· 42 41 ['CDELNRSTZcdelnrstz', 'ฤŒฤŽฤšฤฝล‡ล˜ล ลคลฝฤฤฤ›ฤพลˆล™ลกลฅลพ'], // Caron 43 42 ]; 44 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 + */ 45 50 function stringCut(str, len) { 46 51 if (str.length > len) 47 52 str = str.substring(0, len) + ellipsis; 48 53 return str; 49 54 } 50 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 + */ 51 61 function checkPrintable(s) { 52 62 let i, v; 53 63 for (i = 0; i < s.length; ++i) { ··· 57 67 } 58 68 } 59 69 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. */ 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 + */ 62 74 export class Stream { 63 75 64 76 /** 77 + * Creates a new Stream object. 65 78 * @param {Stream|array|string} enc data (will not be copied) 66 79 * @param {?number} pos starting position (mandatory when `end` is not a Stream) 67 80 */ ··· 75 88 } 76 89 if (typeof this.pos != 'number') 77 90 throw new Error('"pos" must be a numeric value'); 91 + // Set up the raw byte access function based on the type of data 78 92 if (typeof this.enc == 'string') 79 93 this.getRaw = pos => this.enc.charCodeAt(pos); 80 94 else if (typeof this.enc[0] == 'number') ··· 82 96 else 83 97 throw new Error('"enc" must be a numeric array or a string'); 84 98 } 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) */ 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 + */ 87 105 get(pos) { 88 106 if (pos === undefined) 89 107 pos = this.pos++; ··· 91 109 throw new Error('Requesting byte offset ' + pos + ' on a stream of length ' + this.enc.length); 92 110 return this.getRaw(pos); 93 111 } 94 - /** Convert a single byte to an hexadcimal string (of length 2). 95 - * @param {number} b */ 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 + */ 96 118 static hexByte(b) { 97 119 return hexDigits.charAt((b >> 4) & 0xF) + hexDigits.charAt(b & 0xF); 98 120 } 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) */ 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 + */ 103 129 hexDump(start, end, type = 'dump') { 104 130 let s = ''; 105 131 for (let i = start; i < end; ++i) { ··· 115 141 } 116 142 return s; 117 143 } 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) */ 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 + */ 122 152 b64Dump(start, end, type = 'url') { 123 - const b64 = type === 'url' ? b64URL : b64Std; 124 - let extra = (end - start) % 3, 125 - s = '', 153 + const b64 = type === 'url' ? b64URL : b64Std, 154 + extra = (end - start) % 3; 155 + let s = '', 126 156 i, c; 127 157 for (i = start; i + 2 < end; i += 3) { 128 158 c = this.get(i) << 16 | this.get(i + 1) << 8 | this.get(i + 2); ··· 141 171 } 142 172 return s; 143 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 + */ 144 181 isASCII(start, end) { 145 182 for (let i = start; i < end; ++i) { 146 183 let c = this.get(i); ··· 149 186 } 150 187 return true; 151 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 + */ 152 197 parseStringISO(start, end, maxLength) { 153 198 let s = ''; 154 199 for (let i = start; i < end; ++i) 155 200 s += String.fromCharCode(this.get(i)); 156 201 return { size: s.length, str: stringCut(s, maxLength) }; 157 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 + */ 158 211 parseStringT61(start, end, maxLength) { 159 212 // warning: this code is not very well tested so far 160 213 function merge(c, d) { 161 - let t = tableT61[c - 0xC0]; 162 - let i = t[0].indexOf(String.fromCharCode(d)); 214 + const t = tableT61[c - 0xC0]; 215 + const i = t[0].indexOf(String.fromCharCode(d)); 163 216 return (i < 0) ? '\0' : t[1].charAt(i); 164 217 } 165 218 let s = '', c; ··· 176 229 } 177 230 return { size: s.length, str: stringCut(s, maxLength) }; 178 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 + */ 179 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 + */ 180 246 function ex(c) { // must be 10xxxxxx 181 247 if ((c < 0x80) || (c >= 0xC0)) 182 248 throw new Error('Invalid UTF-8 continuation byte: ' + c); 183 249 return (c & 0x3F); 184 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 + */ 185 256 function surrogate(cp) { 186 257 if (cp < 0x10000) 187 258 throw new Error('UTF-8 overlong encoding, codepoint encoded in 4 bytes: ' + cp); ··· 191 262 } 192 263 let s = ''; 193 264 for (let i = start; i < end; ) { 194 - let c = this.get(i++); 265 + const c = this.get(i++); 195 266 if (c < 0x80) // 0xxxxxxx (7 bit) 196 267 s += String.fromCharCode(c); 197 268 else if (c < 0xC0) ··· 207 278 } 208 279 return { size: s.length, str: stringCut(s, maxLength) }; 209 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 + */ 210 289 parseStringBMP(start, end, maxLength) { 211 290 let s = '', hi, lo; 212 291 for (let i = start; i < end; ) { ··· 216 295 } 217 296 return { size: s.length, str: stringCut(s, maxLength) }; 218 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 + */ 219 306 parseTime(start, end, shortYear) { 220 307 let s = this.parseStringISO(start, end).str, 221 308 m = (shortYear ? reTimeS : reTimeL).exec(s); ··· 243 330 } 244 331 return s; 245 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 + */ 246 340 parseInteger(start, end) { 247 341 let v = this.get(start), 248 - neg = (v > 127), 249 - pad = neg ? 255 : 0, 250 - len, 251 342 s = ''; 343 + const neg = (v > 127), 344 + pad = neg ? 255 : 0; 252 345 // skip unuseful bits (not allowed in DER) 253 346 while (v == pad && ++start < end) 254 347 v = this.get(start); 255 - len = end - start; 348 + const len = end - start; 256 349 if (len === 0) 257 350 return neg ? '-1' : '0'; 258 351 // show bit length of huge integers 259 352 if (len > 4) { 260 - s = v; 261 - len <<= 3; 262 - while (((s ^ pad) & 0x80) == 0) { 263 - s <<= 1; 264 - --len; 353 + let v2 = v, 354 + lenBit = len << 3; 355 + while (((v2 ^ pad) & 0x80) == 0) { 356 + v2 <<= 1; 357 + --lenBit; 265 358 } 266 - s = '(' + len + ' bit)\n'; 359 + s = '(' + lenBit + ' bit)\n'; 267 360 } 268 361 // decode the integer 269 362 if (neg) v = v - 256; 270 - let n = new Int10(v); 363 + let n = BigInt(v); 271 364 for (let i = start + 1; i < end; ++i) 272 - n.mulAdd(256, this.get(i)); 273 - return s + n.toString(); 365 + n = (n << 8n) | BigInt(this.get(i)); 366 + return s + n; 274 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 + */ 275 376 parseBitString(start, end, maxLength) { 276 - let unusedBits = this.get(start); 377 + const unusedBits = this.get(start); 277 378 if (unusedBits > 7) 278 379 throw new Error('Invalid BitString with unusedBits=' + unusedBits); 279 - let lenBit = ((end - start - 1) << 3) - unusedBits, 280 - s = ''; 380 + const lenBit = ((end - start - 1) << 3) - unusedBits; 381 + let s = ''; 281 382 for (let i = start + 1; i < end; ++i) { 282 383 let b = this.get(i), 283 384 skip = (i == end - 1) ? unusedBits : 0; ··· 288 389 } 289 390 return { size: lenBit, str: s }; 290 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 + */ 291 400 parseOctetString(start, end, maxLength) { 292 - let len = end - start, 293 - s; 294 401 try { 295 - s = this.parseStringUTF(start, end, maxLength); 402 + let s = this.parseStringUTF(start, end, maxLength); 296 403 checkPrintable(s.str); 297 404 return { size: end - start, str: s.str }; 298 405 } catch (ignore) { 299 - // ignore 406 + // If UTF-8 parsing fails, fall back to hexadecimal dump 300 407 } 408 + const len = end - start; 301 409 maxLength /= 2; // we work in bytes 302 410 if (len > maxLength) 303 411 end = start + maxLength; 304 - s = ''; 412 + let s = ''; 305 413 for (let i = start; i < end; ++i) 306 414 s += Stream.hexByte(this.get(i)); 307 415 if (len > maxLength) 308 416 s += ellipsis; 309 417 return { size: len, str: s }; 310 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 + */ 311 428 parseOID(start, end, maxLength, isRelative) { 312 429 let s = '', 313 - n = new Int10(), 430 + n = 0n, 314 431 bits = 0; 315 432 for (let i = start; i < end; ++i) { 316 433 let v = this.get(i); 317 - n.mulAdd(128, v & 0x7F); 434 + // Shift bits and add the lower 7 bits of the byte 435 + n = (n << 7n) | BigInt(v & 0x7F); 318 436 bits += 7; 437 + // If the most significant bit is 0, this is the last byte of the OID component 319 438 if (!(v & 0x80)) { // finished 439 + // If this is the first component, handle it specially 320 440 if (s === '') { 321 - n = n.simplify(); 322 441 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(); 442 + s = n.toString(); 327 443 } else { 328 - let m = n < 80 ? n < 40 ? 0 : 1 : 2; 329 - s = m + '.' + (n - m * 40); 444 + let m = n < 80 ? n < 40 ? 0n : 1n : 2n; 445 + s = m + '.' + (n - m * 40n); 330 446 } 331 447 } else 332 - s += '.' + n.toString(); 448 + s += '.' + n; 333 449 if (s.length > maxLength) 334 450 return stringCut(s, maxLength); 335 - n = new Int10(); 451 + n = 0n; 336 452 bits = 0; 337 453 } 338 454 } 339 455 if (bits > 0) 340 456 s += '.incomplete'; 457 + // If OIDs mapping is available and the OID is absolute, try to resolve it 341 458 if (typeof oids === 'object' && !isRelative) { 342 459 let oid = oids[s]; 343 460 if (oid) { ··· 348 465 } 349 466 return s; 350 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 + */ 351 476 parseRelativeOID(start, end, maxLength) { 352 477 return this.parseOID(start, end, maxLength, true); 353 478 } ··· 380 505 this.tagConstructed = ((buf & 0x20) !== 0); 381 506 this.tagNumber = buf & 0x1F; 382 507 if (this.tagNumber == 0x1F) { // long tag 383 - let n = new Int10(); 508 + let n = 0n; 384 509 do { 385 510 buf = stream.get(); 386 - n.mulAdd(128, buf & 0x7F); 511 + n = (n << 7n) | BigInt(buf & 0x7F); 387 512 } while (buf & 0x80); 388 - this.tagNumber = n.simplify(); 513 + this.tagNumber = n <= Number.MAX_SAFE_INTEGER ? Number(n) : n; 389 514 } 390 515 } 391 516 isUniversal() { ··· 396 521 } 397 522 } 398 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 + */ 399 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 + */ 400 538 constructor(stream, header, length, tag, tagLen, sub) { 401 539 if (!(tag instanceof ASN1Tag)) throw new Error('Invalid tag value.'); 402 540 this.stream = stream; ··· 406 544 this.tagLen = tagLen; 407 545 this.sub = sub; 408 546 } 547 + 548 + /** 549 + * Get the type name of the ASN.1 element. 550 + * @returns {string} The type name. 551 + */ 409 552 typeName() { 410 553 switch (this.tag.tagClass) { 411 554 case 0: // universal ··· 445 588 case 3: return 'Private_' + this.tag.tagNumber.toString(); 446 589 } 447 590 } 448 - /** A string preview of the content (intended for humans). */ 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 + */ 449 597 content(maxLength) { 450 598 if (this.tag === undefined) 451 599 return null; 452 600 if (maxLength === undefined) 453 601 maxLength = Infinity; 454 - let content = this.posContent(), 602 + const content = this.posContent(), 455 603 len = Math.abs(this.length); 456 604 if (!this.tag.isUniversal()) { 457 605 if (this.sub !== null) ··· 461 609 } 462 610 switch (this.tag.tagNumber) { 463 611 case 0x01: // BOOLEAN 464 - if (len === 0) return 'invalid length 0'; 612 + if (len != 1) return 'invalid length ' + len; 465 613 return (this.stream.get(content) === 0) ? 'false' : 'true'; 466 614 case 0x02: // INTEGER 467 - if (len === 0) return 'invalid length 0'; 615 + if (len < 1) return 'invalid length ' + len; 468 616 return this.stream.parseInteger(content, content + len); 469 617 case 0x03: { // BIT_STRING 470 618 let d = recurse(this, 'parseBitString', maxLength); 471 619 return '(' + d.size + ' bit)\n' + d.str; 472 620 } 473 621 case 0x04: { // OCTET_STRING 474 - if (len === 0) return 'invalid length 0'; 475 622 let d = recurse(this, 'parseOctetString', maxLength); 476 623 return '(' + d.size + ' byte)\n' + d.str; 477 624 } 478 625 //case 0x05: // NULL 479 626 case 0x06: // OBJECT_IDENTIFIER 627 + if (len < 1) return 'invalid length ' + len; // pgut001's dumpasn1.c enforces a minimum lenght of 3 480 628 return this.stream.parseOID(content, content + len, maxLength); 481 629 //case 0x07: // ObjectDescriptor 482 630 //case 0x08: // EXTERNAL ··· 513 661 } 514 662 return null; 515 663 } 664 + 665 + /** 666 + * Get a string representation of the ASN.1 element. 667 + * @returns {string} The string representation. 668 + */ 516 669 toString() { 517 670 return this.typeName() + '@' + this.stream.pos + '[header:' + this.header + ',length:' + this.length + ',sub:' + ((this.sub === null) ? 'null' : this.sub.length) + ']'; 518 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 + */ 519 678 toPrettyString(indent) { 520 679 if (indent === undefined) indent = ''; 521 680 let s = indent; ··· 546 705 } 547 706 return s; 548 707 } 708 + 709 + /** 710 + * Get the starting position of the element in the stream. 711 + * @returns {number} The starting position. 712 + */ 549 713 posStart() { 550 714 return this.stream.pos; 551 715 } 716 + 717 + /** 718 + * Get the position of the content in the stream. 719 + * @returns {number} The content position. 720 + */ 552 721 posContent() { 553 722 return this.stream.pos + this.header; 554 723 } 724 + 725 + /** 726 + * Get the ending position of the element in the stream. 727 + * @returns {number} The ending position. 728 + */ 555 729 posEnd() { 556 730 return this.stream.pos + this.header + Math.abs(this.length); 557 731 } 558 - /** Position of the length. */ 732 + 733 + /** 734 + * Get the position of the length in the stream. 735 + * @returns {number} The length position. 736 + */ 559 737 posLen() { 560 738 return this.stream.pos + this.tagLen; 561 739 } 562 - /** Hexadecimal dump of the node. 563 - * @param type 'raw', 'byte' or 'dump' */ 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 + */ 564 746 toHexString(type = 'raw') { 565 747 return this.stream.hexDump(this.posStart(), this.posEnd(), type); 566 748 } 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 - */ 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 + */ 570 755 toB64String(type = 'url') { 571 756 return this.stream.b64Dump(this.posStart(), this.posEnd(), type); 572 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 + */ 573 765 static decodeLength(stream) { 574 - let buf = stream.get(), 766 + const buf = stream.get(), 575 767 len = buf & 0x7F; 576 768 if (len == buf) // first bit was 0, short form 577 769 return len; 578 770 if (len === 0) // long form with length 0 is a special case 579 771 return null; // undefined length 580 - if (len > 6) // no reason to use Int10, as it would be a huge buffer anyways 772 + if (len > 6) // no reason to use BigInt, as it would be a huge buffer anyways 581 773 throw new Error('Length over 48 bits not supported at position ' + (stream.pos - 1)); 582 - buf = 0; 774 + let value = 0; 583 775 for (let i = 0; i < len; ++i) 584 - buf = (buf * 256) + stream.get(); 585 - return buf; 776 + value = (value << 8) | stream.get(); 777 + return value; 586 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 + */ 587 788 static decode(stream, offset, type = ASN1) { 588 789 if (!(type == ASN1 || type.prototype instanceof ASN1)) 589 790 throw new Error('Must pass a class that extends ASN1');
+1
defs.js
··· 140 140 [ 'PKCS#10 certification request', '1.2.840.113549.1.10.1.1', 'CertificationRequest' ], 141 141 [ 'CMP PKI Message', '1.3.6.1.5.5.7.0.16', 'PKIMessage' ], 142 142 [ 'LDAP Message', '1.3.6.1.1.18', 'LDAPMessage' ], 143 + [ 'Time Stamp Request', '1.3.6.1.5.5.7.0.13', 'TimeStampReq' ], 143 144 ].map(arr => ({ description: arr[0], ...Defs.moduleAndType(rfcdef[arr[1]], arr[2]) }));
+1 -7
eslint.config.js
··· 10 10 ...globals.node, 11 11 Uint8Array: 'readonly', 12 12 }, 13 - ecmaVersion: 2015, 13 + ecmaVersion: 2020, 14 14 }, 15 15 rules: { 16 16 indent: ['error', 4], ··· 26 26 'no-unused-vars': ['error', { 27 27 caughtErrorsIgnorePattern: 'ignore', 28 28 }], 29 - }, 30 - }, 31 - { 32 - files: ['defs.js'], 33 - languageOptions: { 34 - ecmaVersion: 2020, // by use of optional chaining operator (?.) and null coalesching operator (??) 35 29 }, 36 30 }, 37 31 {
+5
examples/timestamp-req.b64
··· 1 + RFC3161 TimeStamp Request 2 + 3 + begin-base64 644 timestamp-req.der 4 + ME4CAQEwLzALBglghkgBZQMEAgEEIEbUJK38SA8/2dz78XnG7DJfIYsSer3shYMmZa1VLFIRAhUA 5 + /1AduFa4EwRirIpvChE2VrV/JWYBAf8=
+1
index.html
··· 61 61 <option value="crl-rfc5280.b64">CRL example (RFC 5280)</option> 62 62 <option value="cmpv2.b64">CMP PKI message (RFC 4210)</option> 63 63 <option value="ldapmessage.b64">LDAP message (RFC 4511)</option> 64 + <option value="timestamp-req.b64">TimeStamp request (RFC 3161)</option> 64 65 </select> 65 66 <input id="butExample" type="button" value="load"><br> 66 67 </td></tr>
-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
··· 1 1 { 2 2 "name": "@lapo/asn1js", 3 - "version": "2.1.0", 3 + "version": "2.1.1", 4 4 "description": "Generic ASN.1 parser/decoder that can decode any valid ASN.1 DER or BER structures.", 5 5 "type": "module", 6 6 "main": "asn1.js", ··· 24 24 "asn1.js", 25 25 "base64.js", 26 26 "hex.js", 27 - "int10.js", 28 27 "dom.js", 29 28 "defs.js", 30 29 "oids.js", ··· 32 31 "dumpASN1.js" 33 32 ], 34 33 "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", 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", 36 35 "lint-action": "npx @action-validator/cli .github/workflows/node.js.yml", 37 36 "build": "vite build", 38 37 "serve": "npx -p local-web-server ws", ··· 48 47 "packageManager": "pnpm@7.33.7", 49 48 "devDependencies": { 50 49 "@eslint/eslintrc": "^3.3.1", 51 - "@eslint/js": "^9.32.0", 52 - "@rollup/wasm-node": "^4.46.2", 50 + "@eslint/js": "^9.38.0", 51 + "@rollup/wasm-node": "^4.52.5", 53 52 "diff": "^8.0.2", 54 - "eslint": "^9.32.0", 55 - "globals": "^16.3.0", 53 + "eslint": "^9.38.0", 54 + "globals": "^16.4.0", 56 55 "htmlparser2": "^9.1.0", 57 - "vite": "^5.4.19", 58 - "vite-plugin-dom": "^1.0.4", 56 + "vite": "^7.1.12", 57 + "vite-plugin-dom": "^1.0.5", 59 58 "vite-plugin-singlefile": "^2.3.0" 60 59 }, 61 60 "overrides": {
+718 -951
pnpm-lock.yaml
··· 1 - lockfileVersion: '9.0' 2 - 3 - settings: 4 - autoInstallPeers: true 5 - excludeLinksFromLockfile: false 1 + lockfileVersion: 5.4 6 2 7 3 overrides: 8 4 rollup: npm:@rollup/wasm-node 9 5 10 - importers: 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 11 17 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) 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 44 29 45 30 packages: 46 31 47 - '@esbuild/aix-ppc64@0.21.5': 48 - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 49 - engines: {node: '>=12'} 32 + /@esbuild/aix-ppc64/0.25.11: 33 + resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} 34 + engines: {node: '>=18'} 50 35 cpu: [ppc64] 51 36 os: [aix] 37 + requiresBuild: true 38 + dev: true 39 + optional: true 52 40 53 - '@esbuild/android-arm64@0.21.5': 54 - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 55 - engines: {node: '>=12'} 56 - cpu: [arm64] 41 + /@esbuild/android-arm/0.25.11: 42 + resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} 43 + engines: {node: '>=18'} 44 + cpu: [arm] 57 45 os: [android] 46 + requiresBuild: true 47 + dev: true 48 + optional: true 58 49 59 - '@esbuild/android-arm@0.21.5': 60 - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 61 - engines: {node: '>=12'} 62 - cpu: [arm] 50 + /@esbuild/android-arm64/0.25.11: 51 + resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} 52 + engines: {node: '>=18'} 53 + cpu: [arm64] 63 54 os: [android] 55 + requiresBuild: true 56 + dev: true 57 + optional: true 64 58 65 - '@esbuild/android-x64@0.21.5': 66 - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 67 - engines: {node: '>=12'} 59 + /@esbuild/android-x64/0.25.11: 60 + resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} 61 + engines: {node: '>=18'} 68 62 cpu: [x64] 69 63 os: [android] 64 + requiresBuild: true 65 + dev: true 66 + optional: true 70 67 71 - '@esbuild/darwin-arm64@0.21.5': 72 - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 73 - engines: {node: '>=12'} 68 + /@esbuild/darwin-arm64/0.25.11: 69 + resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} 70 + engines: {node: '>=18'} 74 71 cpu: [arm64] 75 72 os: [darwin] 73 + requiresBuild: true 74 + dev: true 75 + optional: true 76 76 77 - '@esbuild/darwin-x64@0.21.5': 78 - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 79 - engines: {node: '>=12'} 77 + /@esbuild/darwin-x64/0.25.11: 78 + resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} 79 + engines: {node: '>=18'} 80 80 cpu: [x64] 81 81 os: [darwin] 82 + requiresBuild: true 83 + dev: true 84 + optional: true 82 85 83 - '@esbuild/freebsd-arm64@0.21.5': 84 - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 85 - engines: {node: '>=12'} 86 + /@esbuild/freebsd-arm64/0.25.11: 87 + resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} 88 + engines: {node: '>=18'} 86 89 cpu: [arm64] 87 90 os: [freebsd] 91 + requiresBuild: true 92 + dev: true 93 + optional: true 88 94 89 - '@esbuild/freebsd-x64@0.21.5': 90 - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 91 - engines: {node: '>=12'} 95 + /@esbuild/freebsd-x64/0.25.11: 96 + resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} 97 + engines: {node: '>=18'} 92 98 cpu: [x64] 93 99 os: [freebsd] 100 + requiresBuild: true 101 + dev: true 102 + optional: true 94 103 95 - '@esbuild/linux-arm64@0.21.5': 96 - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 97 - engines: {node: '>=12'} 98 - cpu: [arm64] 104 + /@esbuild/linux-arm/0.25.11: 105 + resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} 106 + engines: {node: '>=18'} 107 + cpu: [arm] 99 108 os: [linux] 109 + requiresBuild: true 110 + dev: true 111 + optional: true 100 112 101 - '@esbuild/linux-arm@0.21.5': 102 - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 103 - engines: {node: '>=12'} 104 - cpu: [arm] 113 + /@esbuild/linux-arm64/0.25.11: 114 + resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} 115 + engines: {node: '>=18'} 116 + cpu: [arm64] 105 117 os: [linux] 118 + requiresBuild: true 119 + dev: true 120 + optional: true 106 121 107 - '@esbuild/linux-ia32@0.21.5': 108 - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 109 - engines: {node: '>=12'} 122 + /@esbuild/linux-ia32/0.25.11: 123 + resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} 124 + engines: {node: '>=18'} 110 125 cpu: [ia32] 111 126 os: [linux] 127 + requiresBuild: true 128 + dev: true 129 + optional: true 112 130 113 - '@esbuild/linux-loong64@0.21.5': 114 - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 115 - engines: {node: '>=12'} 131 + /@esbuild/linux-loong64/0.25.11: 132 + resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} 133 + engines: {node: '>=18'} 116 134 cpu: [loong64] 117 135 os: [linux] 136 + requiresBuild: true 137 + dev: true 138 + optional: true 118 139 119 - '@esbuild/linux-mips64el@0.21.5': 120 - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 121 - engines: {node: '>=12'} 140 + /@esbuild/linux-mips64el/0.25.11: 141 + resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} 142 + engines: {node: '>=18'} 122 143 cpu: [mips64el] 123 144 os: [linux] 145 + requiresBuild: true 146 + dev: true 147 + optional: true 124 148 125 - '@esbuild/linux-ppc64@0.21.5': 126 - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 127 - engines: {node: '>=12'} 149 + /@esbuild/linux-ppc64/0.25.11: 150 + resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} 151 + engines: {node: '>=18'} 128 152 cpu: [ppc64] 129 153 os: [linux] 154 + requiresBuild: true 155 + dev: true 156 + optional: true 130 157 131 - '@esbuild/linux-riscv64@0.21.5': 132 - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 133 - engines: {node: '>=12'} 158 + /@esbuild/linux-riscv64/0.25.11: 159 + resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} 160 + engines: {node: '>=18'} 134 161 cpu: [riscv64] 135 162 os: [linux] 163 + requiresBuild: true 164 + dev: true 165 + optional: true 136 166 137 - '@esbuild/linux-s390x@0.21.5': 138 - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 139 - engines: {node: '>=12'} 167 + /@esbuild/linux-s390x/0.25.11: 168 + resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} 169 + engines: {node: '>=18'} 140 170 cpu: [s390x] 141 171 os: [linux] 172 + requiresBuild: true 173 + dev: true 174 + optional: true 142 175 143 - '@esbuild/linux-x64@0.21.5': 144 - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 145 - engines: {node: '>=12'} 176 + /@esbuild/linux-x64/0.25.11: 177 + resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} 178 + engines: {node: '>=18'} 146 179 cpu: [x64] 147 180 os: [linux] 181 + requiresBuild: true 182 + dev: true 183 + optional: true 148 184 149 - '@esbuild/netbsd-x64@0.21.5': 150 - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 151 - engines: {node: '>=12'} 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'} 152 197 cpu: [x64] 153 198 os: [netbsd] 199 + requiresBuild: true 200 + dev: true 201 + optional: true 154 202 155 - '@esbuild/openbsd-x64@0.21.5': 156 - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 157 - engines: {node: '>=12'} 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'} 158 215 cpu: [x64] 159 216 os: [openbsd] 217 + requiresBuild: true 218 + dev: true 219 + optional: true 160 220 161 - '@esbuild/sunos-x64@0.21.5': 162 - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 163 - engines: {node: '>=12'} 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'} 164 233 cpu: [x64] 165 234 os: [sunos] 235 + requiresBuild: true 236 + dev: true 237 + optional: true 166 238 167 - '@esbuild/win32-arm64@0.21.5': 168 - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 169 - engines: {node: '>=12'} 239 + /@esbuild/win32-arm64/0.25.11: 240 + resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} 241 + engines: {node: '>=18'} 170 242 cpu: [arm64] 171 243 os: [win32] 244 + requiresBuild: true 245 + dev: true 246 + optional: true 172 247 173 - '@esbuild/win32-ia32@0.21.5': 174 - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 175 - engines: {node: '>=12'} 248 + /@esbuild/win32-ia32/0.25.11: 249 + resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} 250 + engines: {node: '>=18'} 176 251 cpu: [ia32] 177 252 os: [win32] 253 + requiresBuild: true 254 + dev: true 255 + optional: true 178 256 179 - '@esbuild/win32-x64@0.21.5': 180 - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 181 - engines: {node: '>=12'} 257 + /@esbuild/win32-x64/0.25.11: 258 + resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} 259 + engines: {node: '>=18'} 182 260 cpu: [x64] 183 261 os: [win32] 262 + requiresBuild: true 263 + dev: true 264 + optional: true 184 265 185 - '@eslint-community/eslint-utils@4.7.0': 186 - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} 266 + /@eslint-community/eslint-utils/4.9.0_eslint@9.38.0: 267 + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} 187 268 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 188 269 peerDependencies: 189 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 190 275 191 - '@eslint-community/regexpp@4.12.1': 192 - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 276 + /@eslint-community/regexpp/4.12.2: 277 + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} 193 278 engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 279 + dev: true 194 280 195 - '@eslint/config-array@0.21.0': 196 - resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} 281 + /@eslint/config-array/0.21.1: 282 + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} 197 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 198 291 199 - '@eslint/config-helpers@0.3.0': 200 - resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} 292 + /@eslint/config-helpers/0.4.2: 293 + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} 201 294 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 295 + dependencies: 296 + '@eslint/core': 0.17.0 297 + dev: true 202 298 203 - '@eslint/core@0.15.1': 204 - resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} 299 + /@eslint/core/0.16.0: 300 + resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==} 205 301 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 302 + dependencies: 303 + '@types/json-schema': 7.0.15 304 + dev: true 206 305 207 - '@eslint/eslintrc@3.3.1': 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: 208 314 resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 209 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 210 329 211 - '@eslint/js@9.32.0': 212 - resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} 330 + /@eslint/js/9.38.0: 331 + resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==} 213 332 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 333 + dev: true 214 334 215 - '@eslint/object-schema@2.1.6': 216 - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 335 + /@eslint/object-schema/2.1.7: 336 + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} 217 337 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 338 + dev: true 218 339 219 - '@eslint/plugin-kit@0.3.4': 220 - resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} 340 + /@eslint/plugin-kit/0.4.1: 341 + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} 221 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 222 347 223 - '@humanfs/core@0.19.1': 348 + /@humanfs/core/0.19.1: 224 349 resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 225 350 engines: {node: '>=18.18.0'} 351 + dev: true 226 352 227 - '@humanfs/node@0.16.6': 228 - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 353 + /@humanfs/node/0.16.7: 354 + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} 229 355 engines: {node: '>=18.18.0'} 356 + dependencies: 357 + '@humanfs/core': 0.19.1 358 + '@humanwhocodes/retry': 0.4.3 359 + dev: true 230 360 231 - '@humanwhocodes/module-importer@1.0.1': 361 + /@humanwhocodes/module-importer/1.0.1: 232 362 resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 233 363 engines: {node: '>=12.22'} 364 + dev: true 234 365 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': 366 + /@humanwhocodes/retry/0.4.3: 240 367 resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} 241 368 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] 369 + dev: true 247 370 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==} 371 + /@rollup/wasm-node/4.52.5: 372 + resolution: {integrity: sha512-ldY4tEzSMBHNwB8TfRpi7RRRjjyfKlwjdebw5pS1lu0xaY3g4RDc6ople2wEYulVOKVeH7ZJwRx0iw4pGtjMHg==} 345 373 engines: {node: '>=18.0.0', npm: '>=8.0.0'} 346 374 hasBin: true 375 + dependencies: 376 + '@types/estree': 1.0.8 377 + optionalDependencies: 378 + fsevents: 2.3.3 379 + dev: true 347 380 348 - '@types/estree@1.0.8': 381 + /@types/estree/1.0.8: 349 382 resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 383 + dev: true 350 384 351 - '@types/json-schema@7.0.15': 385 + /@types/json-schema/7.0.15: 352 386 resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 387 + dev: true 353 388 354 - acorn-jsx@5.3.2: 389 + /acorn-jsx/5.3.2_acorn@8.15.0: 355 390 resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 356 391 peerDependencies: 357 392 acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 393 + dependencies: 394 + acorn: 8.15.0 395 + dev: true 358 396 359 - acorn@8.15.0: 397 + /acorn/8.15.0: 360 398 resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} 361 399 engines: {node: '>=0.4.0'} 362 400 hasBin: true 401 + dev: true 363 402 364 - ajv@6.12.6: 403 + /ajv/6.12.6: 365 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 366 411 367 - ansi-styles@4.3.0: 412 + /ansi-styles/4.3.0: 368 413 resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 369 414 engines: {node: '>=8'} 415 + dependencies: 416 + color-convert: 2.0.1 417 + dev: true 370 418 371 - argparse@2.0.1: 419 + /argparse/2.0.1: 372 420 resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 421 + dev: true 373 422 374 - balanced-match@1.0.2: 423 + /balanced-match/1.0.2: 375 424 resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 425 + dev: true 376 426 377 - brace-expansion@1.1.12: 427 + /brace-expansion/1.1.12: 378 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 379 433 380 - braces@3.0.3: 434 + /braces/3.0.3: 381 435 resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 382 436 engines: {node: '>=8'} 437 + dependencies: 438 + fill-range: 7.1.1 439 + dev: true 383 440 384 - callsites@3.1.0: 441 + /callsites/3.1.0: 385 442 resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 386 443 engines: {node: '>=6'} 444 + dev: true 387 445 388 - chalk@4.1.2: 446 + /chalk/4.1.2: 389 447 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 390 448 engines: {node: '>=10'} 449 + dependencies: 450 + ansi-styles: 4.3.0 451 + supports-color: 7.2.0 452 + dev: true 391 453 392 - color-convert@2.0.1: 454 + /color-convert/2.0.1: 393 455 resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 394 456 engines: {node: '>=7.0.0'} 457 + dependencies: 458 + color-name: 1.1.4 459 + dev: true 395 460 396 - color-name@1.1.4: 461 + /color-name/1.1.4: 397 462 resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 463 + dev: true 398 464 399 - concat-map@0.0.1: 465 + /concat-map/0.0.1: 400 466 resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 467 + dev: true 401 468 402 - cross-spawn@7.0.6: 469 + /cross-spawn/7.0.6: 403 470 resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 404 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 405 477 406 - debug@4.4.1: 407 - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} 478 + /debug/4.4.3: 479 + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 408 480 engines: {node: '>=6.0'} 409 481 peerDependencies: 410 482 supports-color: '*' 411 483 peerDependenciesMeta: 412 484 supports-color: 413 485 optional: true 486 + dependencies: 487 + ms: 2.1.3 488 + dev: true 414 489 415 - deep-is@0.1.4: 490 + /deep-is/0.1.4: 416 491 resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 492 + dev: true 417 493 418 - diff@8.0.2: 494 + /diff/8.0.2: 419 495 resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} 420 496 engines: {node: '>=0.3.1'} 497 + dev: true 421 498 422 - dom-serializer@2.0.0: 499 + /dom-serializer/2.0.0: 423 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 424 506 425 - domelementtype@2.3.0: 507 + /domelementtype/2.3.0: 426 508 resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 509 + dev: true 427 510 428 - domhandler@5.0.3: 511 + /domhandler/5.0.3: 429 512 resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 430 513 engines: {node: '>= 4'} 514 + dependencies: 515 + domelementtype: 2.3.0 516 + dev: true 431 517 432 - domutils@3.2.2: 518 + /domutils/3.2.2: 433 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 434 525 435 - entities@4.5.0: 526 + /entities/4.5.0: 436 527 resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 437 528 engines: {node: '>=0.12'} 529 + dev: true 438 530 439 - esbuild@0.21.5: 440 - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 441 - engines: {node: '>=12'} 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'} 442 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 443 569 444 - escape-string-regexp@4.0.0: 570 + /escape-string-regexp/4.0.0: 445 571 resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 446 572 engines: {node: '>=10'} 573 + dev: true 447 574 448 - eslint-scope@8.4.0: 575 + /eslint-scope/8.4.0: 449 576 resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} 450 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 451 582 452 - eslint-visitor-keys@3.4.3: 583 + /eslint-visitor-keys/3.4.3: 453 584 resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 454 585 engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 586 + dev: true 455 587 456 - eslint-visitor-keys@4.2.1: 588 + /eslint-visitor-keys/4.2.1: 457 589 resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} 458 590 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 591 + dev: true 459 592 460 - eslint@9.32.0: 461 - resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} 593 + /eslint/9.38.0: 594 + resolution: {integrity: sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==} 462 595 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 463 596 hasBin: true 464 597 peerDependencies: ··· 466 599 peerDependenciesMeta: 467 600 jiti: 468 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 469 640 470 - espree@10.4.0: 641 + /espree/10.4.0: 471 642 resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} 472 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 473 649 474 - esquery@1.6.0: 650 + /esquery/1.6.0: 475 651 resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 476 652 engines: {node: '>=0.10'} 653 + dependencies: 654 + estraverse: 5.3.0 655 + dev: true 477 656 478 - esrecurse@4.3.0: 657 + /esrecurse/4.3.0: 479 658 resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 480 659 engines: {node: '>=4.0'} 660 + dependencies: 661 + estraverse: 5.3.0 662 + dev: true 481 663 482 - estraverse@5.3.0: 664 + /estraverse/5.3.0: 483 665 resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 484 666 engines: {node: '>=4.0'} 667 + dev: true 485 668 486 - esutils@2.0.3: 669 + /esutils/2.0.3: 487 670 resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 488 671 engines: {node: '>=0.10.0'} 672 + dev: true 489 673 490 - fast-deep-equal@3.1.3: 674 + /fast-deep-equal/3.1.3: 491 675 resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 676 + dev: true 492 677 493 - fast-json-stable-stringify@2.1.0: 678 + /fast-json-stable-stringify/2.1.0: 494 679 resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 680 + dev: true 495 681 496 - fast-levenshtein@2.0.6: 682 + /fast-levenshtein/2.0.6: 497 683 resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 684 + dev: true 498 685 499 - file-entry-cache@8.0.0: 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: 500 699 resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 501 700 engines: {node: '>=16.0.0'} 701 + dependencies: 702 + flat-cache: 4.0.1 703 + dev: true 502 704 503 - fill-range@7.1.1: 705 + /fill-range/7.1.1: 504 706 resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 505 707 engines: {node: '>=8'} 708 + dependencies: 709 + to-regex-range: 5.0.1 710 + dev: true 506 711 507 - find-up@5.0.0: 712 + /find-up/5.0.0: 508 713 resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 509 714 engines: {node: '>=10'} 715 + dependencies: 716 + locate-path: 6.0.0 717 + path-exists: 4.0.0 718 + dev: true 510 719 511 - flat-cache@4.0.1: 720 + /flat-cache/4.0.1: 512 721 resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 513 722 engines: {node: '>=16'} 723 + dependencies: 724 + flatted: 3.3.3 725 + keyv: 4.5.4 726 + dev: true 514 727 515 - flatted@3.3.3: 728 + /flatted/3.3.3: 516 729 resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 730 + dev: true 517 731 518 - fsevents@2.3.3: 732 + /fsevents/2.3.3: 519 733 resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 520 734 engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 521 735 os: [darwin] 736 + requiresBuild: true 737 + dev: true 738 + optional: true 522 739 523 - glob-parent@6.0.2: 740 + /glob-parent/6.0.2: 524 741 resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 525 742 engines: {node: '>=10.13.0'} 743 + dependencies: 744 + is-glob: 4.0.3 745 + dev: true 526 746 527 - globals@14.0.0: 747 + /globals/14.0.0: 528 748 resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 529 749 engines: {node: '>=18'} 750 + dev: true 530 751 531 - globals@16.3.0: 532 - resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==} 752 + /globals/16.4.0: 753 + resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} 533 754 engines: {node: '>=18'} 755 + dev: true 534 756 535 - has-flag@4.0.0: 757 + /has-flag/4.0.0: 536 758 resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 537 759 engines: {node: '>=8'} 760 + dev: true 538 761 539 - htmlparser2@9.1.0: 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: 540 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 541 779 542 - ignore@5.3.2: 780 + /ignore/5.3.2: 543 781 resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 544 782 engines: {node: '>= 4'} 783 + dev: true 545 784 546 - import-fresh@3.3.1: 785 + /import-fresh/3.3.1: 547 786 resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 548 787 engines: {node: '>=6'} 788 + dependencies: 789 + parent-module: 1.0.1 790 + resolve-from: 4.0.0 791 + dev: true 549 792 550 - imurmurhash@0.1.4: 793 + /imurmurhash/0.1.4: 551 794 resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 552 795 engines: {node: '>=0.8.19'} 796 + dev: true 553 797 554 - is-extglob@2.1.1: 798 + /is-extglob/2.1.1: 555 799 resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 556 800 engines: {node: '>=0.10.0'} 801 + dev: true 557 802 558 - is-glob@4.0.3: 803 + /is-glob/4.0.3: 559 804 resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 560 805 engines: {node: '>=0.10.0'} 806 + dependencies: 807 + is-extglob: 2.1.1 808 + dev: true 561 809 562 - is-number@7.0.0: 810 + /is-number/7.0.0: 563 811 resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 564 812 engines: {node: '>=0.12.0'} 813 + dev: true 565 814 566 - isexe@2.0.0: 815 + /isexe/2.0.0: 567 816 resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 817 + dev: true 568 818 569 - js-yaml@4.1.0: 819 + /js-yaml/4.1.0: 570 820 resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 571 821 hasBin: true 822 + dependencies: 823 + argparse: 2.0.1 824 + dev: true 572 825 573 - json-buffer@3.0.1: 826 + /json-buffer/3.0.1: 574 827 resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 828 + dev: true 575 829 576 - json-schema-traverse@0.4.1: 830 + /json-schema-traverse/0.4.1: 577 831 resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 832 + dev: true 578 833 579 - json-stable-stringify-without-jsonify@1.0.1: 834 + /json-stable-stringify-without-jsonify/1.0.1: 580 835 resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 836 + dev: true 581 837 582 - keyv@4.5.4: 838 + /keyv/4.5.4: 583 839 resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 840 + dependencies: 841 + json-buffer: 3.0.1 842 + dev: true 584 843 585 - levn@0.4.1: 844 + /levn/0.4.1: 586 845 resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 587 846 engines: {node: '>= 0.8.0'} 847 + dependencies: 848 + prelude-ls: 1.2.1 849 + type-check: 0.4.0 850 + dev: true 588 851 589 - locate-path@6.0.0: 852 + /locate-path/6.0.0: 590 853 resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 591 854 engines: {node: '>=10'} 855 + dependencies: 856 + p-locate: 5.0.0 857 + dev: true 592 858 593 - lodash.merge@4.6.2: 859 + /lodash.merge/4.6.2: 594 860 resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 861 + dev: true 595 862 596 - micromatch@4.0.8: 863 + /micromatch/4.0.8: 597 864 resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 598 865 engines: {node: '>=8.6'} 866 + dependencies: 867 + braces: 3.0.3 868 + picomatch: 2.3.1 869 + dev: true 599 870 600 - minimatch@3.1.2: 871 + /minimatch/3.1.2: 601 872 resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 873 + dependencies: 874 + brace-expansion: 1.1.12 875 + dev: true 602 876 603 - ms@2.1.3: 877 + /ms/2.1.3: 604 878 resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 879 + dev: true 605 880 606 - nanoid@3.3.11: 881 + /nanoid/3.3.11: 607 882 resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 608 883 engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 609 884 hasBin: true 885 + dev: true 610 886 611 - natural-compare@1.4.0: 887 + /natural-compare/1.4.0: 612 888 resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 889 + dev: true 613 890 614 - optionator@0.9.4: 891 + /optionator/0.9.4: 615 892 resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 616 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 617 902 618 - p-limit@3.1.0: 903 + /p-limit/3.1.0: 619 904 resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 620 905 engines: {node: '>=10'} 906 + dependencies: 907 + yocto-queue: 0.1.0 908 + dev: true 621 909 622 - p-locate@5.0.0: 910 + /p-locate/5.0.0: 623 911 resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 624 912 engines: {node: '>=10'} 913 + dependencies: 914 + p-limit: 3.1.0 915 + dev: true 625 916 626 - parent-module@1.0.1: 917 + /parent-module/1.0.1: 627 918 resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 628 919 engines: {node: '>=6'} 920 + dependencies: 921 + callsites: 3.1.0 922 + dev: true 629 923 630 - path-exists@4.0.0: 924 + /path-exists/4.0.0: 631 925 resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 632 926 engines: {node: '>=8'} 927 + dev: true 633 928 634 - path-key@3.1.1: 929 + /path-key/3.1.1: 635 930 resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 636 931 engines: {node: '>=8'} 932 + dev: true 637 933 638 - picocolors@1.1.1: 934 + /picocolors/1.1.1: 639 935 resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 936 + dev: true 640 937 641 - picomatch@2.3.1: 938 + /picomatch/2.3.1: 642 939 resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 643 940 engines: {node: '>=8.6'} 941 + dev: true 644 942 645 - postcss@8.5.6: 943 + /picomatch/4.0.3: 944 + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 945 + engines: {node: '>=12'} 946 + dev: true 947 + 948 + /postcss/8.5.6: 646 949 resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 647 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 648 956 649 - prelude-ls@1.2.1: 957 + /prelude-ls/1.2.1: 650 958 resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 651 959 engines: {node: '>= 0.8.0'} 960 + dev: true 652 961 653 - punycode@2.3.1: 962 + /punycode/2.3.1: 654 963 resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 655 964 engines: {node: '>=6'} 965 + dev: true 656 966 657 - resolve-from@4.0.0: 967 + /resolve-from/4.0.0: 658 968 resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 659 969 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 970 + dev: true 665 971 666 - shebang-command@2.0.0: 972 + /shebang-command/2.0.0: 667 973 resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 668 974 engines: {node: '>=8'} 975 + dependencies: 976 + shebang-regex: 3.0.0 977 + dev: true 669 978 670 - shebang-regex@3.0.0: 979 + /shebang-regex/3.0.0: 671 980 resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 672 981 engines: {node: '>=8'} 982 + dev: true 673 983 674 - source-map-js@1.2.1: 984 + /source-map-js/1.2.1: 675 985 resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 676 986 engines: {node: '>=0.10.0'} 987 + dev: true 677 988 678 - strip-json-comments@3.1.1: 989 + /strip-json-comments/3.1.1: 679 990 resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 680 991 engines: {node: '>=8'} 992 + dev: true 681 993 682 - supports-color@7.2.0: 994 + /supports-color/7.2.0: 683 995 resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 684 996 engines: {node: '>=8'} 997 + dependencies: 998 + has-flag: 4.0.0 999 + dev: true 685 1000 686 - to-regex-range@5.0.1: 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: 687 1010 resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 688 1011 engines: {node: '>=8.0'} 1012 + dependencies: 1013 + is-number: 7.0.0 1014 + dev: true 689 1015 690 - type-check@0.4.0: 1016 + /type-check/0.4.0: 691 1017 resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 692 1018 engines: {node: '>= 0.8.0'} 1019 + dependencies: 1020 + prelude-ls: 1.2.1 1021 + dev: true 693 1022 694 - uri-js@4.4.1: 1023 + /uri-js/4.4.1: 695 1024 resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1025 + dependencies: 1026 + punycode: 2.3.1 1027 + dev: true 696 1028 697 - vite-plugin-dom@1.0.4: 698 - resolution: {integrity: sha512-GkmDAsVDo0Aabb7RmGTGWZNDowV5K+IkrhmJfrgMpgjHdE7F8H1OsTk48DQmnQ/2llM5UvP4z5h0icdsnL/C/g==} 1029 + /vite-plugin-dom/1.0.5_vite@7.1.12: 1030 + resolution: {integrity: sha512-G3MbuH30FpBD800I26xlB6lUiDm7sCxvQkHPt9OAJyUEbyiO9UWrKADxVUhWbO65WqL/TGtH1OEez+w++TlfMw==} 699 1031 peerDependencies: 700 1032 vite: '>=4.0.0' 1033 + dependencies: 1034 + htmlparser2: 10.0.0 1035 + vite: 7.1.12 1036 + dev: true 701 1037 702 - vite-plugin-singlefile@2.3.0: 1038 + /vite-plugin-singlefile/2.3.0_vite@7.1.12: 703 1039 resolution: {integrity: sha512-DAcHzYypM0CasNLSz/WG0VdKOCxGHErfrjOoyIPiNxTPTGmO6rRD/te93n1YL/s+miXq66ipF1brMBikf99c6A==} 704 1040 engines: {node: '>18.0.0'} 705 1041 peerDependencies: 706 1042 rollup: ^4.44.1 707 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 708 1048 709 - vite@5.4.19: 710 - resolution: {integrity: sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==} 711 - engines: {node: ^18.0.0 || >=20.0.0} 1049 + /vite/7.1.12: 1050 + resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==} 1051 + engines: {node: ^20.19.0 || >=22.12.0} 712 1052 hasBin: true 713 1053 peerDependencies: 714 - '@types/node': ^18.0.0 || >=20.0.0 715 - less: '*' 1054 + '@types/node': ^20.19.0 || >=22.12.0 1055 + jiti: '>=1.21.0' 1056 + less: ^4.0.0 716 1057 lightningcss: ^1.21.0 717 - sass: '*' 718 - sass-embedded: '*' 719 - stylus: '*' 720 - sugarss: '*' 721 - terser: ^5.4.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 722 1065 peerDependenciesMeta: 723 1066 '@types/node': 1067 + optional: true 1068 + jiti: 724 1069 optional: true 725 1070 less: 726 1071 optional: true ··· 736 1081 optional: true 737 1082 terser: 738 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 739 1098 740 - which@2.0.2: 1099 + /which/2.0.2: 741 1100 resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 742 1101 engines: {node: '>= 8'} 743 1102 hasBin: true 1103 + dependencies: 1104 + isexe: 2.0.0 1105 + dev: true 744 1106 745 - word-wrap@1.2.5: 1107 + /word-wrap/1.2.5: 746 1108 resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 747 1109 engines: {node: '>=0.10.0'} 1110 + dev: true 748 1111 749 - yocto-queue@0.1.0: 1112 + /yocto-queue/0.1.0: 750 1113 resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 751 1114 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: {} 1115 + dev: true
+1 -1
release.sh
··· 1 1 #!/bin/sh 2 2 set -e 3 3 FILES=" 4 - asn1.js oids.js defs.js base64.js hex.js int10.js dom.js context.js theme.js 4 + asn1.js oids.js defs.js base64.js hex.js dom.js context.js theme.js 5 5 rfcdef.js test.js tags.js 6 6 index.html index.css index.js index-local.html 7 7 favicon.svg tree-icon-light.svg tree-icon-dark.svg
+1
tags.js
··· 1 1 export const tags = { 2 + "2.1.1": "2025-10-24", 2 3 "2.1.0": "2025-08-03", 3 4 "2.0.6": "2025-07-28", 4 5 "2.0.5": "2025-04-12",
+18 -25
test.js
··· 5 5 import { Defs } from './defs.js'; 6 6 import { Hex } from './hex.js'; 7 7 import { Base64 } from './base64.js'; 8 - import { Int10 } from './int10.js'; 9 8 import { createPatch } from 'diff'; 10 9 11 10 const all = (process.argv[2] == 'all'); ··· 78 77 */ 79 78 checkResult(result, expected, comment) { 80 79 ++stats.run; 81 - if (!result || result == expected) { 80 + if ((typeof expected != 'string' && !result) || result == expected) { 82 81 if (all) console.log('\x1B[1m\x1B[32mOK \x1B[39m\x1B[22m ' + comment); 83 82 } else { 84 83 ++stats.error; 85 84 console.log('\x1B[1m\x1B[31mERR\x1B[39m\x1B[22m ' + comment); 86 - if (result.length > 100) { 85 + if (!result) result = '(empty)'; 86 + if (typeof expected != 'string') { 87 + console.log(' ' + result); 88 + } else if (result.length > 100) { 87 89 console.log(' \x1B[1m\x1B[34mDIF\x1B[39m\x1B[22m ' + diff(result, expected.toString()).replace(/\n/g, '\n ')); 88 90 } else { 89 91 console.log(' \x1B[1m\x1B[34mEXP\x1B[39m\x1B[22m ' + expected.toString().replace(/\n/g, '\n ')); ··· 180 182 ['0D04C27B0302','8571.3.2', 'Relative OID from ISO/IEC 8825-1:2002 8.20.5'], 181 183 // UTF-8 182 184 ['0C0E4C61706FE280997320F09F9A972E', 'Lapoโ€™s ๐Ÿš—.', 'UTF-8 4-byte sequence'], 183 - // T-REC-X.690-201508 185 + // T-REC-X.690-202102 184 186 ['0307040A3B5F291CD0', '(44 bit)\n00001010001110110101111100101001000111001101', 'Example 8.6.4.2: bit string (primitive encoding)'], 185 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'], 186 200 // avoid past bugs 187 201 ['23800303000A3B230A0302005F030404291CD00000', '(44 bit)\n00001010001110110101111100101001000111001101', 'Bit string (recursive constructed)'], 188 202 ['0348003045022100DE601E573DAFB59BC551D58E3E7B9EDA0612DD0112805A2217B734759B884417022067C3FDE60780D41C1D7A3B90291F3D39C4DC2F206DCCBA2F982C06B67C09B232', '(568 bit)\n0011000001000101000000100010000100000000110111100110000000011110010101110011110110101111101101011001101111000101010100011101010110001110001111100111101110011110110110100000011000010010110111010000000100010010100000000101101000100010000101111011011100110100011101011001101110001000010001000001011100000010001000000110011111000011111111011110011000000111100000001101010000011100000111010111101000111011100100000010100100011111001111010011100111000100110111000010111100100000011011011100110010111010001011111001100000101100000001101011011001111100000010011011001000110010', 'not constructed, but contains structures'], ··· 236 250 'ABCDEFE=', 237 251 'ABCDEFGH', 238 252 '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 253 ])); 261 254 262 255 for (const t of tests)
+7 -1
vite.config.js
··· 16 16 }; 17 17 }; 18 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 + 19 25 export default defineConfig({ 20 26 plugins: [ 21 27 preventSVGEmit(), ··· 25 31 if (removeNodes.includes(node.attribs.id)) 26 32 DomUtils.removeElement(node); 27 33 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()); 34 + node.attribs.href = 'data:image/svg+xml,' + massageSVG(fs.readFileSync('favicon.svg', 'ascii').replace(/^([^<]+|<[^s]|<s[^v]|<sv[^g])+/, '').trim()); 29 35 }, 30 36 }), 31 37 viteSingleFile(),