├── .gitignore ├── _theme_files ├── about.html ├── css │ └── style.css ├── images │ └── logo.svg ├── index.html └── js │ └── script.js ├── assets ├── icons │ ├── Icon_16x16.png │ ├── Icon_256x256.png │ ├── Icon_32x32.png │ ├── Icon_512x512.png │ ├── linux │ │ ├── icon.ico │ │ └── icon.png │ ├── mac │ │ └── icon.icns │ └── win │ │ └── icon.ico └── screen.png ├── main.js ├── package-lock.json ├── package.json ├── preload.js ├── readme.md └── renderer ├── about.html ├── css └── style.css ├── images └── logo.svg ├── index.html └── js └── renderer.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store -------------------------------------------------------------------------------- /_theme_files/about.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 13 | 14 | 15 | Image Resizer 16 | 17 | 18 |
21 | ImageResizer 27 |

FileResizer App

28 |

Version 1.0.0

29 |

MIT License

30 |
31 | 32 | 33 | -------------------------------------------------------------------------------- /_theme_files/css/style.css: -------------------------------------------------------------------------------- 1 | /* 2 | ! tailwindcss v3.1.8 | MIT License | https://tailwindcss.com 3 | */ 4 | 5 | /* 6 | 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 7 | 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) 8 | */ 9 | 10 | *, 11 | ::before, 12 | ::after { 13 | box-sizing: border-box; 14 | /* 1 */ 15 | border-width: 0; 16 | /* 2 */ 17 | border-style: solid; 18 | /* 2 */ 19 | border-color: #e5e7eb; 20 | /* 2 */ 21 | } 22 | 23 | ::before, 24 | ::after { 25 | --tw-content: ''; 26 | } 27 | 28 | /* 29 | 1. Use a consistent sensible line-height in all browsers. 30 | 2. Prevent adjustments of font size after orientation changes in iOS. 31 | 3. Use a more readable tab size. 32 | 4. Use the user's configured `sans` font-family by default. 33 | */ 34 | 35 | html { 36 | line-height: 1.5; 37 | /* 1 */ 38 | -webkit-text-size-adjust: 100%; 39 | /* 2 */ 40 | -moz-tab-size: 4; 41 | /* 3 */ 42 | -o-tab-size: 4; 43 | tab-size: 4; 44 | /* 3 */ 45 | font-family: Poppins, sans-serif; 46 | /* 4 */ 47 | } 48 | 49 | /* 50 | 1. Remove the margin in all browsers. 51 | 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. 52 | */ 53 | 54 | body { 55 | margin: 0; 56 | /* 1 */ 57 | line-height: inherit; 58 | /* 2 */ 59 | overflow: hidden; 60 | } 61 | 62 | /* 63 | 1. Add the correct height in Firefox. 64 | 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 65 | 3. Ensure horizontal rules are visible by default. 66 | */ 67 | 68 | hr { 69 | height: 0; 70 | /* 1 */ 71 | color: inherit; 72 | /* 2 */ 73 | border-top-width: 1px; 74 | /* 3 */ 75 | } 76 | 77 | /* 78 | Add the correct text decoration in Chrome, Edge, and Safari. 79 | */ 80 | 81 | abbr:where([title]) { 82 | -webkit-text-decoration: underline dotted; 83 | text-decoration: underline dotted; 84 | } 85 | 86 | /* 87 | Remove the default font size and weight for headings. 88 | */ 89 | 90 | h1, 91 | h2, 92 | h3, 93 | h4, 94 | h5, 95 | h6 { 96 | font-size: inherit; 97 | font-weight: inherit; 98 | } 99 | 100 | /* 101 | Reset links to optimize for opt-in styling instead of opt-out. 102 | */ 103 | 104 | a { 105 | color: inherit; 106 | text-decoration: inherit; 107 | } 108 | 109 | /* 110 | Add the correct font weight in Edge and Safari. 111 | */ 112 | 113 | b, 114 | strong { 115 | font-weight: bolder; 116 | } 117 | 118 | /* 119 | 1. Use the user's configured `mono` font family by default. 120 | 2. Correct the odd `em` font sizing in all browsers. 121 | */ 122 | 123 | code, 124 | kbd, 125 | samp, 126 | pre { 127 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 128 | 'Liberation Mono', 'Courier New', monospace; 129 | /* 1 */ 130 | font-size: 1em; 131 | /* 2 */ 132 | } 133 | 134 | /* 135 | Add the correct font size in all browsers. 136 | */ 137 | 138 | small { 139 | font-size: 80%; 140 | } 141 | 142 | /* 143 | Prevent `sub` and `sup` elements from affecting the line height in all browsers. 144 | */ 145 | 146 | sub, 147 | sup { 148 | font-size: 75%; 149 | line-height: 0; 150 | position: relative; 151 | vertical-align: baseline; 152 | } 153 | 154 | sub { 155 | bottom: -0.25em; 156 | } 157 | 158 | sup { 159 | top: -0.5em; 160 | } 161 | 162 | /* 163 | 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 164 | 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 165 | 3. Remove gaps between table borders by default. 166 | */ 167 | 168 | table { 169 | text-indent: 0; 170 | /* 1 */ 171 | border-color: inherit; 172 | /* 2 */ 173 | border-collapse: collapse; 174 | /* 3 */ 175 | } 176 | 177 | /* 178 | 1. Change the font styles in all browsers. 179 | 2. Remove the margin in Firefox and Safari. 180 | 3. Remove default padding in all browsers. 181 | */ 182 | 183 | button, 184 | input, 185 | optgroup, 186 | select, 187 | textarea { 188 | font-family: inherit; 189 | /* 1 */ 190 | font-size: 100%; 191 | /* 1 */ 192 | font-weight: inherit; 193 | /* 1 */ 194 | line-height: inherit; 195 | /* 1 */ 196 | color: inherit; 197 | /* 1 */ 198 | margin: 0; 199 | /* 2 */ 200 | padding: 0; 201 | /* 3 */ 202 | } 203 | 204 | /* 205 | Remove the inheritance of text transform in Edge and Firefox. 206 | */ 207 | 208 | button, 209 | select { 210 | text-transform: none; 211 | } 212 | 213 | /* 214 | 1. Correct the inability to style clickable types in iOS and Safari. 215 | 2. Remove default button styles. 216 | */ 217 | 218 | button, 219 | [type='button'], 220 | [type='reset'], 221 | [type='submit'] { 222 | -webkit-appearance: button; 223 | /* 1 */ 224 | background-color: transparent; 225 | /* 2 */ 226 | background-image: none; 227 | /* 2 */ 228 | } 229 | 230 | /* 231 | Use the modern Firefox focus style for all focusable elements. 232 | */ 233 | 234 | :-moz-focusring { 235 | outline: auto; 236 | } 237 | 238 | /* 239 | Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) 240 | */ 241 | 242 | :-moz-ui-invalid { 243 | box-shadow: none; 244 | } 245 | 246 | /* 247 | Add the correct vertical alignment in Chrome and Firefox. 248 | */ 249 | 250 | progress { 251 | vertical-align: baseline; 252 | } 253 | 254 | /* 255 | Correct the cursor style of increment and decrement buttons in Safari. 256 | */ 257 | 258 | ::-webkit-inner-spin-button, 259 | ::-webkit-outer-spin-button { 260 | height: auto; 261 | } 262 | 263 | /* 264 | 1. Correct the odd appearance in Chrome and Safari. 265 | 2. Correct the outline style in Safari. 266 | */ 267 | 268 | [type='search'] { 269 | -webkit-appearance: textfield; 270 | /* 1 */ 271 | outline-offset: -2px; 272 | /* 2 */ 273 | } 274 | 275 | /* 276 | Remove the inner padding in Chrome and Safari on macOS. 277 | */ 278 | 279 | ::-webkit-search-decoration { 280 | -webkit-appearance: none; 281 | } 282 | 283 | /* 284 | 1. Correct the inability to style clickable types in iOS and Safari. 285 | 2. Change font properties to `inherit` in Safari. 286 | */ 287 | 288 | ::-webkit-file-upload-button { 289 | -webkit-appearance: button; 290 | /* 1 */ 291 | font: inherit; 292 | /* 2 */ 293 | } 294 | 295 | /* 296 | Add the correct display in Chrome and Safari. 297 | */ 298 | 299 | summary { 300 | display: list-item; 301 | } 302 | 303 | /* 304 | Removes the default spacing and border for appropriate elements. 305 | */ 306 | 307 | blockquote, 308 | dl, 309 | dd, 310 | h1, 311 | h2, 312 | h3, 313 | h4, 314 | h5, 315 | h6, 316 | hr, 317 | figure, 318 | p, 319 | pre { 320 | margin: 0; 321 | } 322 | 323 | fieldset { 324 | margin: 0; 325 | padding: 0; 326 | } 327 | 328 | legend { 329 | padding: 0; 330 | } 331 | 332 | ol, 333 | ul, 334 | menu { 335 | list-style: none; 336 | margin: 0; 337 | padding: 0; 338 | } 339 | 340 | /* 341 | Prevent resizing textareas horizontally by default. 342 | */ 343 | 344 | textarea { 345 | resize: vertical; 346 | } 347 | 348 | /* 349 | 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 350 | 2. Set the default placeholder color to the user's configured gray 400 color. 351 | */ 352 | 353 | input::-moz-placeholder, 354 | textarea::-moz-placeholder { 355 | opacity: 1; 356 | /* 1 */ 357 | color: #9ca3af; 358 | /* 2 */ 359 | } 360 | 361 | input::placeholder, 362 | textarea::placeholder { 363 | opacity: 1; 364 | /* 1 */ 365 | color: #9ca3af; 366 | /* 2 */ 367 | } 368 | 369 | /* 370 | Set the default cursor for buttons. 371 | */ 372 | 373 | button, 374 | [role='button'] { 375 | cursor: pointer; 376 | } 377 | 378 | /* 379 | Make sure disabled buttons don't get the pointer cursor. 380 | */ 381 | 382 | :disabled { 383 | cursor: default; 384 | } 385 | 386 | /* 387 | 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 388 | 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) 389 | This can trigger a poorly considered lint error in some tools but is included by design. 390 | */ 391 | 392 | img, 393 | svg, 394 | video, 395 | canvas, 396 | audio, 397 | iframe, 398 | embed, 399 | object { 400 | display: block; 401 | /* 1 */ 402 | vertical-align: middle; 403 | /* 2 */ 404 | } 405 | 406 | /* 407 | Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) 408 | */ 409 | 410 | img, 411 | video { 412 | max-width: 100%; 413 | height: auto; 414 | } 415 | 416 | *, 417 | ::before, 418 | ::after { 419 | --tw-border-spacing-x: 0; 420 | --tw-border-spacing-y: 0; 421 | --tw-translate-x: 0; 422 | --tw-translate-y: 0; 423 | --tw-rotate: 0; 424 | --tw-skew-x: 0; 425 | --tw-skew-y: 0; 426 | --tw-scale-x: 1; 427 | --tw-scale-y: 1; 428 | --tw-pan-x: ; 429 | --tw-pan-y: ; 430 | --tw-pinch-zoom: ; 431 | --tw-scroll-snap-strictness: proximity; 432 | --tw-ordinal: ; 433 | --tw-slashed-zero: ; 434 | --tw-numeric-figure: ; 435 | --tw-numeric-spacing: ; 436 | --tw-numeric-fraction: ; 437 | --tw-ring-inset: ; 438 | --tw-ring-offset-width: 0px; 439 | --tw-ring-offset-color: #fff; 440 | --tw-ring-color: rgb(59 130 246 / 0.5); 441 | --tw-ring-offset-shadow: 0 0 #0000; 442 | --tw-ring-shadow: 0 0 #0000; 443 | --tw-shadow: 0 0 #0000; 444 | --tw-shadow-colored: 0 0 #0000; 445 | --tw-blur: ; 446 | --tw-brightness: ; 447 | --tw-contrast: ; 448 | --tw-grayscale: ; 449 | --tw-hue-rotate: ; 450 | --tw-invert: ; 451 | --tw-saturate: ; 452 | --tw-sepia: ; 453 | --tw-drop-shadow: ; 454 | --tw-backdrop-blur: ; 455 | --tw-backdrop-brightness: ; 456 | --tw-backdrop-contrast: ; 457 | --tw-backdrop-grayscale: ; 458 | --tw-backdrop-hue-rotate: ; 459 | --tw-backdrop-invert: ; 460 | --tw-backdrop-opacity: ; 461 | --tw-backdrop-saturate: ; 462 | --tw-backdrop-sepia: ; 463 | } 464 | 465 | ::-webkit-backdrop { 466 | --tw-border-spacing-x: 0; 467 | --tw-border-spacing-y: 0; 468 | --tw-translate-x: 0; 469 | --tw-translate-y: 0; 470 | --tw-rotate: 0; 471 | --tw-skew-x: 0; 472 | --tw-skew-y: 0; 473 | --tw-scale-x: 1; 474 | --tw-scale-y: 1; 475 | --tw-pan-x: ; 476 | --tw-pan-y: ; 477 | --tw-pinch-zoom: ; 478 | --tw-scroll-snap-strictness: proximity; 479 | --tw-ordinal: ; 480 | --tw-slashed-zero: ; 481 | --tw-numeric-figure: ; 482 | --tw-numeric-spacing: ; 483 | --tw-numeric-fraction: ; 484 | --tw-ring-inset: ; 485 | --tw-ring-offset-width: 0px; 486 | --tw-ring-offset-color: #fff; 487 | --tw-ring-color: rgb(59 130 246 / 0.5); 488 | --tw-ring-offset-shadow: 0 0 #0000; 489 | --tw-ring-shadow: 0 0 #0000; 490 | --tw-shadow: 0 0 #0000; 491 | --tw-shadow-colored: 0 0 #0000; 492 | --tw-blur: ; 493 | --tw-brightness: ; 494 | --tw-contrast: ; 495 | --tw-grayscale: ; 496 | --tw-hue-rotate: ; 497 | --tw-invert: ; 498 | --tw-saturate: ; 499 | --tw-sepia: ; 500 | --tw-drop-shadow: ; 501 | --tw-backdrop-blur: ; 502 | --tw-backdrop-brightness: ; 503 | --tw-backdrop-contrast: ; 504 | --tw-backdrop-grayscale: ; 505 | --tw-backdrop-hue-rotate: ; 506 | --tw-backdrop-invert: ; 507 | --tw-backdrop-opacity: ; 508 | --tw-backdrop-saturate: ; 509 | --tw-backdrop-sepia: ; 510 | } 511 | 512 | ::backdrop { 513 | --tw-border-spacing-x: 0; 514 | --tw-border-spacing-y: 0; 515 | --tw-translate-x: 0; 516 | --tw-translate-y: 0; 517 | --tw-rotate: 0; 518 | --tw-skew-x: 0; 519 | --tw-skew-y: 0; 520 | --tw-scale-x: 1; 521 | --tw-scale-y: 1; 522 | --tw-pan-x: ; 523 | --tw-pan-y: ; 524 | --tw-pinch-zoom: ; 525 | --tw-scroll-snap-strictness: proximity; 526 | --tw-ordinal: ; 527 | --tw-slashed-zero: ; 528 | --tw-numeric-figure: ; 529 | --tw-numeric-spacing: ; 530 | --tw-numeric-fraction: ; 531 | --tw-ring-inset: ; 532 | --tw-ring-offset-width: 0px; 533 | --tw-ring-offset-color: #fff; 534 | --tw-ring-color: rgb(59 130 246 / 0.5); 535 | --tw-ring-offset-shadow: 0 0 #0000; 536 | --tw-ring-shadow: 0 0 #0000; 537 | --tw-shadow: 0 0 #0000; 538 | --tw-shadow-colored: 0 0 #0000; 539 | --tw-blur: ; 540 | --tw-brightness: ; 541 | --tw-contrast: ; 542 | --tw-grayscale: ; 543 | --tw-hue-rotate: ; 544 | --tw-invert: ; 545 | --tw-saturate: ; 546 | --tw-sepia: ; 547 | --tw-drop-shadow: ; 548 | --tw-backdrop-blur: ; 549 | --tw-backdrop-brightness: ; 550 | --tw-backdrop-contrast: ; 551 | --tw-backdrop-grayscale: ; 552 | --tw-backdrop-hue-rotate: ; 553 | --tw-backdrop-invert: ; 554 | --tw-backdrop-opacity: ; 555 | --tw-backdrop-saturate: ; 556 | --tw-backdrop-sepia: ; 557 | } 558 | 559 | .m-auto { 560 | margin: auto; 561 | } 562 | 563 | .mx-auto { 564 | margin-left: auto; 565 | margin-right: auto; 566 | } 567 | 568 | .mb-5 { 569 | margin-bottom: 1.25rem; 570 | } 571 | 572 | .mt-2 { 573 | margin-top: 0.5rem; 574 | } 575 | 576 | .mt-6 { 577 | margin-top: 1.5rem; 578 | } 579 | 580 | .mt-1 { 581 | margin-top: 0.25rem; 582 | } 583 | 584 | .mt-4 { 585 | margin-top: 1rem; 586 | } 587 | 588 | .block { 589 | display: block; 590 | } 591 | 592 | .flex { 593 | display: flex; 594 | } 595 | 596 | .hidden { 597 | display: none; 598 | } 599 | 600 | .h-screen { 601 | height: 100vh; 602 | } 603 | 604 | .w-full { 605 | width: 100%; 606 | } 607 | 608 | .w-64 { 609 | width: 16rem; 610 | } 611 | 612 | .w-80 { 613 | width: 20rem; 614 | } 615 | 616 | .max-w-xl { 617 | max-width: 36rem; 618 | } 619 | 620 | .cursor-pointer { 621 | cursor: pointer; 622 | } 623 | 624 | .resize { 625 | resize: both; 626 | } 627 | 628 | .flex-col { 629 | flex-direction: column; 630 | } 631 | 632 | .items-center { 633 | align-items: center; 634 | } 635 | 636 | .justify-center { 637 | justify-content: center; 638 | } 639 | 640 | .rounded-lg { 641 | border-radius: 0.5rem; 642 | } 643 | 644 | .rounded-md { 645 | border-radius: 0.375rem; 646 | } 647 | 648 | .border { 649 | border-width: 1px; 650 | } 651 | 652 | .border-gray-300 { 653 | --tw-border-opacity: 1; 654 | border-color: rgb(209 213 219 / var(--tw-border-opacity)); 655 | } 656 | 657 | .border-transparent { 658 | border-color: transparent; 659 | } 660 | 661 | .bg-teal-700 { 662 | --tw-bg-opacity: 1; 663 | background-color: rgb(15 118 110 / var(--tw-bg-opacity)); 664 | } 665 | 666 | .bg-white { 667 | --tw-bg-opacity: 1; 668 | background-color: rgb(255 255 255 / var(--tw-bg-opacity)); 669 | } 670 | 671 | .bg-teal-500 { 672 | --tw-bg-opacity: 1; 673 | background-color: rgb(20 184 166 / var(--tw-bg-opacity)); 674 | } 675 | 676 | .p-3 { 677 | padding: 0.75rem; 678 | } 679 | 680 | .px-4 { 681 | padding-left: 1rem; 682 | padding-right: 1rem; 683 | } 684 | 685 | .py-7 { 686 | padding-top: 1.75rem; 687 | padding-bottom: 1.75rem; 688 | } 689 | 690 | .py-2 { 691 | padding-top: 0.5rem; 692 | padding-bottom: 0.5rem; 693 | } 694 | 695 | .text-center { 696 | text-align: center; 697 | } 698 | 699 | .font-mono { 700 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 701 | 'Liberation Mono', 'Courier New', monospace; 702 | } 703 | 704 | .text-xl { 705 | font-size: 1.25rem; 706 | line-height: 1.75rem; 707 | } 708 | 709 | .text-sm { 710 | font-size: 0.875rem; 711 | line-height: 1.25rem; 712 | } 713 | 714 | .text-lg { 715 | font-size: 1.125rem; 716 | line-height: 1.75rem; 717 | } 718 | 719 | .font-medium { 720 | font-weight: 500; 721 | } 722 | 723 | .uppercase { 724 | text-transform: uppercase; 725 | } 726 | 727 | .leading-normal { 728 | line-height: 1.5; 729 | } 730 | 731 | .tracking-wide { 732 | letter-spacing: 0.025em; 733 | } 734 | 735 | .text-teal-100 { 736 | --tw-text-opacity: 1; 737 | color: rgb(204 251 241 / var(--tw-text-opacity)); 738 | } 739 | 740 | .text-teal-300 { 741 | --tw-text-opacity: 1; 742 | color: rgb(94 234 212 / var(--tw-text-opacity)); 743 | } 744 | 745 | .text-gray-500 { 746 | --tw-text-opacity: 1; 747 | color: rgb(107 114 128 / var(--tw-text-opacity)); 748 | } 749 | 750 | .text-white { 751 | --tw-text-opacity: 1; 752 | color: rgb(255 255 255 / var(--tw-text-opacity)); 753 | } 754 | 755 | .shadow-lg { 756 | --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 757 | 0 4px 6px -4px rgb(0 0 0 / 0.1); 758 | --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 759 | 0 4px 6px -4px var(--tw-shadow-color); 760 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), 761 | var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 762 | } 763 | 764 | .shadow-sm { 765 | --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); 766 | --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); 767 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), 768 | var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 769 | } 770 | 771 | .hover\:bg-teal-900:hover { 772 | --tw-bg-opacity: 1; 773 | background-color: rgb(19 78 74 / var(--tw-bg-opacity)); 774 | } 775 | 776 | .hover\:text-teal-800:hover { 777 | --tw-text-opacity: 1; 778 | color: rgb(17 94 89 / var(--tw-text-opacity)); 779 | } 780 | 781 | .focus\:outline-none:focus { 782 | outline: 2px solid transparent; 783 | outline-offset: 2px; 784 | } 785 | 786 | .focus\:ring-2:focus { 787 | --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 788 | var(--tw-ring-offset-width) var(--tw-ring-offset-color); 789 | --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 790 | calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); 791 | box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), 792 | var(--tw-shadow, 0 0 #0000); 793 | } 794 | 795 | .focus\:ring-blue-500:focus { 796 | --tw-ring-opacity: 1; 797 | --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)); 798 | } 799 | 800 | .focus\:ring-offset-2:focus { 801 | --tw-ring-offset-width: 2px; 802 | } 803 | -------------------------------------------------------------------------------- /_theme_files/images/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_theme_files/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 13 | 14 | 15 | Image Resizer 16 | 17 | 18 |
21 |
22 | 29 |
30 | 31 | 32 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /_theme_files/js/script.js: -------------------------------------------------------------------------------- 1 | // Some JavaScript to load the image and show the form. There is no actual backend functionality. This is just the UI 2 | 3 | const form = document.querySelector('#img-form'); 4 | 5 | function loadImage(e) { 6 | const file = e.target.files[0]; 7 | 8 | if (!isFileImage(file)) { 9 | alert('Please select an image file'); 10 | return; 11 | } 12 | 13 | form.style.display = 'block'; 14 | document.querySelector( 15 | '#filename' 16 | ).innerHTML = file.name; 17 | } 18 | 19 | function isFileImage(file) { 20 | const acceptedImageTypes = ['image/gif', 'image/jpeg', 'image/png']; 21 | return file && acceptedImageTypes.includes(file['type']) 22 | } 23 | 24 | document.querySelector('#img').addEventListener('change', loadImage); 25 | -------------------------------------------------------------------------------- /assets/icons/Icon_16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradtraversy/image-resizer-electron/a4181096ed97055256d1a6fe919303bec96ca01b/assets/icons/Icon_16x16.png -------------------------------------------------------------------------------- /assets/icons/Icon_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradtraversy/image-resizer-electron/a4181096ed97055256d1a6fe919303bec96ca01b/assets/icons/Icon_256x256.png -------------------------------------------------------------------------------- /assets/icons/Icon_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradtraversy/image-resizer-electron/a4181096ed97055256d1a6fe919303bec96ca01b/assets/icons/Icon_32x32.png -------------------------------------------------------------------------------- /assets/icons/Icon_512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradtraversy/image-resizer-electron/a4181096ed97055256d1a6fe919303bec96ca01b/assets/icons/Icon_512x512.png -------------------------------------------------------------------------------- /assets/icons/linux/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradtraversy/image-resizer-electron/a4181096ed97055256d1a6fe919303bec96ca01b/assets/icons/linux/icon.ico -------------------------------------------------------------------------------- /assets/icons/linux/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradtraversy/image-resizer-electron/a4181096ed97055256d1a6fe919303bec96ca01b/assets/icons/linux/icon.png -------------------------------------------------------------------------------- /assets/icons/mac/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradtraversy/image-resizer-electron/a4181096ed97055256d1a6fe919303bec96ca01b/assets/icons/mac/icon.icns -------------------------------------------------------------------------------- /assets/icons/win/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradtraversy/image-resizer-electron/a4181096ed97055256d1a6fe919303bec96ca01b/assets/icons/win/icon.ico -------------------------------------------------------------------------------- /assets/screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bradtraversy/image-resizer-electron/a4181096ed97055256d1a6fe919303bec96ca01b/assets/screen.png -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const os = require('os'); 3 | const fs = require('fs'); 4 | const resizeImg = require('resize-img'); 5 | const { app, BrowserWindow, Menu, ipcMain, shell } = require('electron'); 6 | 7 | const isDev = process.env.NODE_ENV !== 'production'; 8 | const isMac = process.platform === 'darwin'; 9 | 10 | let mainWindow; 11 | let aboutWindow; 12 | 13 | // Main Window 14 | function createMainWindow() { 15 | mainWindow = new BrowserWindow({ 16 | width: isDev ? 1000 : 500, 17 | height: 600, 18 | icon: `${__dirname}/assets/icons/Icon_256x256.png`, 19 | resizable: isDev, 20 | webPreferences: { 21 | nodeIntegration: true, 22 | contextIsolation: true, 23 | preload: path.join(__dirname, 'preload.js'), 24 | }, 25 | }); 26 | 27 | // Show devtools automatically if in development 28 | if (isDev) { 29 | mainWindow.webContents.openDevTools(); 30 | } 31 | 32 | // mainWindow.loadURL(`file://${__dirname}/renderer/index.html`); 33 | mainWindow.loadFile(path.join(__dirname, './renderer/index.html')); 34 | } 35 | 36 | // About Window 37 | function createAboutWindow() { 38 | aboutWindow = new BrowserWindow({ 39 | width: 300, 40 | height: 300, 41 | title: 'About Electron', 42 | icon: `${__dirname}/assets/icons/Icon_256x256.png`, 43 | }); 44 | 45 | aboutWindow.loadFile(path.join(__dirname, './renderer/about.html')); 46 | } 47 | 48 | // When the app is ready, create the window 49 | app.on('ready', () => { 50 | createMainWindow(); 51 | 52 | const mainMenu = Menu.buildFromTemplate(menu); 53 | Menu.setApplicationMenu(mainMenu); 54 | 55 | // Remove variable from memory 56 | mainWindow.on('closed', () => (mainWindow = null)); 57 | }); 58 | 59 | // Menu template 60 | const menu = [ 61 | ...(isMac 62 | ? [ 63 | { 64 | label: app.name, 65 | submenu: [ 66 | { 67 | label: 'About', 68 | click: createAboutWindow, 69 | }, 70 | ], 71 | }, 72 | ] 73 | : []), 74 | { 75 | role: 'fileMenu', 76 | }, 77 | ...(!isMac 78 | ? [ 79 | { 80 | label: 'Help', 81 | submenu: [ 82 | { 83 | label: 'About', 84 | click: createAboutWindow, 85 | }, 86 | ], 87 | }, 88 | ] 89 | : []), 90 | // { 91 | // label: 'File', 92 | // submenu: [ 93 | // { 94 | // label: 'Quit', 95 | // click: () => app.quit(), 96 | // accelerator: 'CmdOrCtrl+W', 97 | // }, 98 | // ], 99 | // }, 100 | ...(isDev 101 | ? [ 102 | { 103 | label: 'Developer', 104 | submenu: [ 105 | { role: 'reload' }, 106 | { role: 'forcereload' }, 107 | { type: 'separator' }, 108 | { role: 'toggledevtools' }, 109 | ], 110 | }, 111 | ] 112 | : []), 113 | ]; 114 | 115 | // Respond to the resize image event 116 | ipcMain.on('image:resize', (e, options) => { 117 | // console.log(options); 118 | options.dest = path.join(os.homedir(), 'imageresizer'); 119 | resizeImage(options); 120 | }); 121 | 122 | // Resize and save image 123 | async function resizeImage({ imgPath, height, width, dest }) { 124 | try { 125 | // console.log(imgPath, height, width, dest); 126 | 127 | // Resize image 128 | const newPath = await resizeImg(fs.readFileSync(imgPath), { 129 | width: +width, 130 | height: +height, 131 | }); 132 | 133 | // Get filename 134 | const filename = path.basename(imgPath); 135 | 136 | // Create destination folder if it doesn't exist 137 | if (!fs.existsSync(dest)) { 138 | fs.mkdirSync(dest); 139 | } 140 | 141 | // Write the file to the destination folder 142 | fs.writeFileSync(path.join(dest, filename), newPath); 143 | 144 | // Send success to renderer 145 | mainWindow.webContents.send('image:done'); 146 | 147 | // Open the folder in the file explorer 148 | shell.openPath(dest); 149 | } catch (err) { 150 | console.log(err); 151 | } 152 | } 153 | 154 | // Quit when all windows are closed. 155 | app.on('window-all-closed', () => { 156 | if (!isMac) app.quit(); 157 | }); 158 | 159 | // Open a window if none are open (macOS) 160 | app.on('activate', () => { 161 | if (BrowserWindow.getAllWindows().length === 0) createMainWindow(); 162 | }); 163 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "imageshrink", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "imageshrink", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "resize-img": "^2.0.0", 13 | "toastify-js": "^1.12.0" 14 | }, 15 | "devDependencies": { 16 | "electron": "^20.2.0" 17 | } 18 | }, 19 | "node_modules/@electron/get": { 20 | "version": "1.14.1", 21 | "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz", 22 | "integrity": "sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==", 23 | "dev": true, 24 | "dependencies": { 25 | "debug": "^4.1.1", 26 | "env-paths": "^2.2.0", 27 | "fs-extra": "^8.1.0", 28 | "got": "^9.6.0", 29 | "progress": "^2.0.3", 30 | "semver": "^6.2.0", 31 | "sumchecker": "^3.0.1" 32 | }, 33 | "engines": { 34 | "node": ">=8.6" 35 | }, 36 | "optionalDependencies": { 37 | "global-agent": "^3.0.0", 38 | "global-tunnel-ng": "^2.7.1" 39 | } 40 | }, 41 | "node_modules/@jimp/bmp": { 42 | "version": "0.8.5", 43 | "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.8.5.tgz", 44 | "integrity": "sha512-o/23j1RODQGGjvb2xg+9ZQCHc9uXa5XIoJuXHN8kh8AJBGD7JZYiHMwNHaxJRJvadimCKUeA5udZUJAoaPwrYg==", 45 | "dependencies": { 46 | "@jimp/utils": "^0.8.5", 47 | "bmp-js": "^0.1.0", 48 | "core-js": "^2.5.7" 49 | }, 50 | "peerDependencies": { 51 | "@jimp/custom": ">=0.3.5" 52 | } 53 | }, 54 | "node_modules/@jimp/core": { 55 | "version": "0.8.5", 56 | "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.8.5.tgz", 57 | "integrity": "sha512-Jto1IdL5HYg7uE15rpQjK6dfZJ6d6gRjUsVCPW50nIfXgWizaTibFEov90W9Bj+irwKrX2ntG3e3pZUyOC0COg==", 58 | "dependencies": { 59 | "@jimp/utils": "^0.8.5", 60 | "any-base": "^1.1.0", 61 | "buffer": "^5.2.0", 62 | "core-js": "^2.5.7", 63 | "exif-parser": "^0.1.12", 64 | "file-type": "^9.0.0", 65 | "load-bmfont": "^1.3.1", 66 | "mkdirp": "0.5.1", 67 | "phin": "^2.9.1", 68 | "pixelmatch": "^4.0.2", 69 | "tinycolor2": "^1.4.1" 70 | } 71 | }, 72 | "node_modules/@jimp/core/node_modules/file-type": { 73 | "version": "9.0.0", 74 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", 75 | "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==", 76 | "engines": { 77 | "node": ">=6" 78 | } 79 | }, 80 | "node_modules/@jimp/custom": { 81 | "version": "0.8.5", 82 | "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.8.5.tgz", 83 | "integrity": "sha512-hS4qHOcOIL+N93IprsIhFgr8F4XnC2oYd+lRaOKEOg3ptS2vQnceSTtcXsC0//mhq8AV6lNjpbfs1iseEZuTqg==", 84 | "dependencies": { 85 | "@jimp/core": "^0.8.5", 86 | "core-js": "^2.5.7" 87 | } 88 | }, 89 | "node_modules/@jimp/gif": { 90 | "version": "0.8.5", 91 | "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.8.5.tgz", 92 | "integrity": "sha512-Mj8jmv4AS76OY+Hx/Xoyihj02SUZ2ELk+O5x89pODz1+NeGtSWHHjZjnSam9HYAjycvVI/lGJdk/7w0nWIV/yQ==", 93 | "dependencies": { 94 | "@jimp/utils": "^0.8.5", 95 | "core-js": "^2.5.7", 96 | "omggif": "^1.0.9" 97 | }, 98 | "peerDependencies": { 99 | "@jimp/custom": ">=0.3.5" 100 | } 101 | }, 102 | "node_modules/@jimp/jpeg": { 103 | "version": "0.8.5", 104 | "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.8.5.tgz", 105 | "integrity": "sha512-7kjTY0BiCpwRywk+oPfpLto7cLI+9G0mf4N1bv1Hn+VLQwcXFy2fHyl4qjqLbbY6u4cyZgqN+R8Pg6GRRzv0kw==", 106 | "dependencies": { 107 | "@jimp/utils": "^0.8.5", 108 | "core-js": "^2.5.7", 109 | "jpeg-js": "^0.3.4" 110 | }, 111 | "peerDependencies": { 112 | "@jimp/custom": ">=0.3.5" 113 | } 114 | }, 115 | "node_modules/@jimp/plugin-blit": { 116 | "version": "0.8.5", 117 | "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.8.5.tgz", 118 | "integrity": "sha512-r8Z1CwazaJwZCRbucQgrfprlGyH91tX7GubUsbWr+zy5/dRJAAgaPj/hcoHDwbh3zyiXp5BECKKzKW0x4reL4w==", 119 | "dependencies": { 120 | "@jimp/utils": "^0.8.5", 121 | "core-js": "^2.5.7" 122 | }, 123 | "peerDependencies": { 124 | "@jimp/custom": ">=0.3.5" 125 | } 126 | }, 127 | "node_modules/@jimp/plugin-blur": { 128 | "version": "0.8.5", 129 | "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.8.5.tgz", 130 | "integrity": "sha512-UH5ywpV4YooUh9HXEsrNKDtojLCvIAAV0gywqn8EQeFyzwBJyXAvRNARJp7zr5OPLr9uGXkRLDCO9YyzdlXZng==", 131 | "dependencies": { 132 | "@jimp/utils": "^0.8.5", 133 | "core-js": "^2.5.7" 134 | }, 135 | "peerDependencies": { 136 | "@jimp/custom": ">=0.3.5" 137 | } 138 | }, 139 | "node_modules/@jimp/plugin-color": { 140 | "version": "0.8.5", 141 | "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.8.5.tgz", 142 | "integrity": "sha512-7XHqcTQ8Y1zto1b9P1y8m1dzSjnOpBsD9OZG0beTpeJ5bgPX+hF5ZLmvcM6c5ljkINw5EUF1it07BYbkCxiGQA==", 143 | "dependencies": { 144 | "@jimp/utils": "^0.8.5", 145 | "core-js": "^2.5.7", 146 | "tinycolor2": "^1.4.1" 147 | }, 148 | "peerDependencies": { 149 | "@jimp/custom": ">=0.3.5" 150 | } 151 | }, 152 | "node_modules/@jimp/plugin-contain": { 153 | "version": "0.8.5", 154 | "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.8.5.tgz", 155 | "integrity": "sha512-ZkiPFx9L0yITiKtYTYLWyBsSIdxo/NARhNPRZXyVF9HmTWSLDUw1c2c1uvETKxDZTAVK+souYT14DwFWWdhsYA==", 156 | "dependencies": { 157 | "@jimp/utils": "^0.8.5", 158 | "core-js": "^2.5.7" 159 | }, 160 | "peerDependencies": { 161 | "@jimp/custom": ">=0.3.5", 162 | "@jimp/plugin-blit": ">=0.3.5", 163 | "@jimp/plugin-resize": ">=0.3.5", 164 | "@jimp/plugin-scale": ">=0.3.5" 165 | } 166 | }, 167 | "node_modules/@jimp/plugin-cover": { 168 | "version": "0.8.5", 169 | "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.8.5.tgz", 170 | "integrity": "sha512-OdT4YAopLOhbhTUQV3R1v5ZZqIaUt3n3vJi/OfTbsak1t9UkPBVdmYPyhoont8zJdtdkF5dW16Ro1FTshytcww==", 171 | "dependencies": { 172 | "@jimp/utils": "^0.8.5", 173 | "core-js": "^2.5.7" 174 | }, 175 | "peerDependencies": { 176 | "@jimp/custom": ">=0.3.5", 177 | "@jimp/plugin-crop": ">=0.3.5", 178 | "@jimp/plugin-resize": ">=0.3.5", 179 | "@jimp/plugin-scale": ">=0.3.5" 180 | } 181 | }, 182 | "node_modules/@jimp/plugin-crop": { 183 | "version": "0.8.5", 184 | "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.8.5.tgz", 185 | "integrity": "sha512-E1Hb+gfu2k74Gkqh96apAyVljsP5MjCH4TY6lECAAEcYKGH/XRhz6lY2dSEjCYE7KtiqjTZzWwYkgAvkwojj9Q==", 186 | "dependencies": { 187 | "@jimp/utils": "^0.8.5", 188 | "core-js": "^2.5.7" 189 | }, 190 | "peerDependencies": { 191 | "@jimp/custom": ">=0.3.5" 192 | } 193 | }, 194 | "node_modules/@jimp/plugin-displace": { 195 | "version": "0.8.5", 196 | "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.8.5.tgz", 197 | "integrity": "sha512-fVgVYTS1HZzAXkg8Lg06PuirSUG5oXYaYYGL+3ZU4tmZn1pyZ+mZyfejpwtymETEYZnmymHoCT4xto19E/IRvA==", 198 | "dependencies": { 199 | "@jimp/utils": "^0.8.5", 200 | "core-js": "^2.5.7" 201 | }, 202 | "peerDependencies": { 203 | "@jimp/custom": ">=0.3.5" 204 | } 205 | }, 206 | "node_modules/@jimp/plugin-dither": { 207 | "version": "0.8.5", 208 | "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.8.5.tgz", 209 | "integrity": "sha512-KSj2y8E3yK7tldjT/8ejqAWw5HFBjtWW6QkcxfW7FdV4c/nsXZXDkMbhqMZ7FkDuSYoAPeWUFeddrH4yipC5iA==", 210 | "dependencies": { 211 | "@jimp/utils": "^0.8.5", 212 | "core-js": "^2.5.7" 213 | }, 214 | "peerDependencies": { 215 | "@jimp/custom": ">=0.3.5" 216 | } 217 | }, 218 | "node_modules/@jimp/plugin-flip": { 219 | "version": "0.8.5", 220 | "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.8.5.tgz", 221 | "integrity": "sha512-2QbGDkurPNAXZUeHLo/UA3tjh+AbAXWZKSdtoa1ArlASovRz8rqtA45YIRIkKrMH82TA3PZk8bgP2jaLKLrzww==", 222 | "dependencies": { 223 | "@jimp/utils": "^0.8.5", 224 | "core-js": "^2.5.7" 225 | }, 226 | "peerDependencies": { 227 | "@jimp/custom": ">=0.3.5", 228 | "@jimp/plugin-rotate": ">=0.3.5" 229 | } 230 | }, 231 | "node_modules/@jimp/plugin-gaussian": { 232 | "version": "0.8.5", 233 | "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.8.5.tgz", 234 | "integrity": "sha512-2zReC5GJcVAXtf3UgzFcHSYN277i02K9Yrhc1xJf3mti00s43uD++B5Ho7/mIo+HrntVvWhxqar7PARdq0lVIg==", 235 | "dependencies": { 236 | "@jimp/utils": "^0.8.5", 237 | "core-js": "^2.5.7" 238 | }, 239 | "peerDependencies": { 240 | "@jimp/custom": ">=0.3.5" 241 | } 242 | }, 243 | "node_modules/@jimp/plugin-invert": { 244 | "version": "0.8.5", 245 | "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.8.5.tgz", 246 | "integrity": "sha512-GyMXPGheHdS14xfDceuZ9hrGm6gE9UG3PfTEjQbJmHMWippLC6yf8kombSudJlUf8q72YYSSXsSFKGgkHa67vA==", 247 | "dependencies": { 248 | "@jimp/utils": "^0.8.5", 249 | "core-js": "^2.5.7" 250 | }, 251 | "peerDependencies": { 252 | "@jimp/custom": ">=0.3.5" 253 | } 254 | }, 255 | "node_modules/@jimp/plugin-mask": { 256 | "version": "0.8.5", 257 | "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.8.5.tgz", 258 | "integrity": "sha512-inD/++XO+MkmwXl9JGYQ8X2deyOZuq9i+dmugH/557p16B9Q6tvUQt5X1Yg5w7hhkLZ00BKOAJI9XoyCC1NFvQ==", 259 | "dependencies": { 260 | "@jimp/utils": "^0.8.5", 261 | "core-js": "^2.5.7" 262 | }, 263 | "peerDependencies": { 264 | "@jimp/custom": ">=0.3.5" 265 | } 266 | }, 267 | "node_modules/@jimp/plugin-normalize": { 268 | "version": "0.8.5", 269 | "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.8.5.tgz", 270 | "integrity": "sha512-8YRWJWBT4NoSAbPhnjQJXGeaeWVrJAlGDv39A54oNH8Ry47fHcE0EN6zogQNpBuM34M6hRnZl4rOv1FIisaWdg==", 271 | "dependencies": { 272 | "@jimp/utils": "^0.8.5", 273 | "core-js": "^2.5.7" 274 | }, 275 | "peerDependencies": { 276 | "@jimp/custom": ">=0.3.5" 277 | } 278 | }, 279 | "node_modules/@jimp/plugin-print": { 280 | "version": "0.8.5", 281 | "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.8.5.tgz", 282 | "integrity": "sha512-BviNpCiA/fEieOqsrWr1FkqyFuiG2izdyyg7zUqyeUTHPwqrTLvXO9cfP/ThG4hZpu5wMQ5QClWSqhZu1fAwxA==", 283 | "dependencies": { 284 | "@jimp/utils": "^0.8.5", 285 | "core-js": "^2.5.7", 286 | "load-bmfont": "^1.4.0" 287 | }, 288 | "peerDependencies": { 289 | "@jimp/custom": ">=0.3.5", 290 | "@jimp/plugin-blit": ">=0.3.5" 291 | } 292 | }, 293 | "node_modules/@jimp/plugin-resize": { 294 | "version": "0.8.5", 295 | "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.8.5.tgz", 296 | "integrity": "sha512-gIdmISuNmZQ1QwprnRC5VXVWQfKIiWineVQGebpMAG/aoFOLDXrVl939Irg7Fb/uOlSFTzpAbt1zpJ8YG/Mi2w==", 297 | "dependencies": { 298 | "@jimp/utils": "^0.8.5", 299 | "core-js": "^2.5.7" 300 | }, 301 | "peerDependencies": { 302 | "@jimp/custom": ">=0.3.5" 303 | } 304 | }, 305 | "node_modules/@jimp/plugin-rotate": { 306 | "version": "0.8.5", 307 | "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.8.5.tgz", 308 | "integrity": "sha512-8T9wnL3gb+Z0ogMZmtyI6h3y7TuqW2a5SpFbzFUVF+lTZoAabXjEfX3CAozizCLaT+Duc5H2FJVemAHiyr+Dbw==", 309 | "dependencies": { 310 | "@jimp/utils": "^0.8.5", 311 | "core-js": "^2.5.7" 312 | }, 313 | "peerDependencies": { 314 | "@jimp/custom": ">=0.3.5", 315 | "@jimp/plugin-blit": ">=0.3.5", 316 | "@jimp/plugin-crop": ">=0.3.5", 317 | "@jimp/plugin-resize": ">=0.3.5" 318 | } 319 | }, 320 | "node_modules/@jimp/plugin-scale": { 321 | "version": "0.8.5", 322 | "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.8.5.tgz", 323 | "integrity": "sha512-G+CDH9s7BsxJ4b+mKZ5SsiXwTAynBJ+7/9SwZFnICZJJvLd79Tws6VPXfSaKJZuWnGIX++L8jTGmFORCfLNkdg==", 324 | "dependencies": { 325 | "@jimp/utils": "^0.8.5", 326 | "core-js": "^2.5.7" 327 | }, 328 | "peerDependencies": { 329 | "@jimp/custom": ">=0.3.5", 330 | "@jimp/plugin-resize": ">=0.3.5" 331 | } 332 | }, 333 | "node_modules/@jimp/plugins": { 334 | "version": "0.8.5", 335 | "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.8.5.tgz", 336 | "integrity": "sha512-52na0wqfQ3uItIA+C9cJ1EXffhSmABgK7ETClDseUh9oGtynHzxZ97smnFf1ydLjXLrF89Gt+YBxWLyiBGgiZQ==", 337 | "dependencies": { 338 | "@jimp/plugin-blit": "^0.8.5", 339 | "@jimp/plugin-blur": "^0.8.5", 340 | "@jimp/plugin-color": "^0.8.5", 341 | "@jimp/plugin-contain": "^0.8.5", 342 | "@jimp/plugin-cover": "^0.8.5", 343 | "@jimp/plugin-crop": "^0.8.5", 344 | "@jimp/plugin-displace": "^0.8.5", 345 | "@jimp/plugin-dither": "^0.8.5", 346 | "@jimp/plugin-flip": "^0.8.5", 347 | "@jimp/plugin-gaussian": "^0.8.5", 348 | "@jimp/plugin-invert": "^0.8.5", 349 | "@jimp/plugin-mask": "^0.8.5", 350 | "@jimp/plugin-normalize": "^0.8.5", 351 | "@jimp/plugin-print": "^0.8.5", 352 | "@jimp/plugin-resize": "^0.8.5", 353 | "@jimp/plugin-rotate": "^0.8.5", 354 | "@jimp/plugin-scale": "^0.8.5", 355 | "core-js": "^2.5.7", 356 | "timm": "^1.6.1" 357 | }, 358 | "peerDependencies": { 359 | "@jimp/custom": ">=0.3.5" 360 | } 361 | }, 362 | "node_modules/@jimp/png": { 363 | "version": "0.8.5", 364 | "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.8.5.tgz", 365 | "integrity": "sha512-zT89ucu8I2rsD3FIMIPLgr1OyKn4neD+5umwD3MY8AOB8+6tX5bFtnmTm3FzGJaJuibkK0wFl87eiaxnb+Megw==", 366 | "dependencies": { 367 | "@jimp/utils": "^0.8.5", 368 | "core-js": "^2.5.7", 369 | "pngjs": "^3.3.3" 370 | }, 371 | "peerDependencies": { 372 | "@jimp/custom": ">=0.3.5" 373 | } 374 | }, 375 | "node_modules/@jimp/tiff": { 376 | "version": "0.8.5", 377 | "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.8.5.tgz", 378 | "integrity": "sha512-Z7uzDcbHuwDg+hy2+UJQ2s5O6sqYXmv6H1fmSf/2dxBrlGMzl8yTc2/BxLrGREeoidDDMcKmXYGAOp4uCsdJjw==", 379 | "dependencies": { 380 | "core-js": "^2.5.7", 381 | "utif": "^2.0.1" 382 | }, 383 | "peerDependencies": { 384 | "@jimp/custom": ">=0.3.5" 385 | } 386 | }, 387 | "node_modules/@jimp/types": { 388 | "version": "0.8.5", 389 | "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.8.5.tgz", 390 | "integrity": "sha512-XUvpyebZGd1vyFiJyxUT4H9A3mKD7MV2MxjXnay3fNTrcow0UJJspmFw/w+G3TP/1dgrVC4K++gntjR6QWTzvg==", 391 | "dependencies": { 392 | "@jimp/bmp": "^0.8.5", 393 | "@jimp/gif": "^0.8.5", 394 | "@jimp/jpeg": "^0.8.5", 395 | "@jimp/png": "^0.8.5", 396 | "@jimp/tiff": "^0.8.5", 397 | "core-js": "^2.5.7", 398 | "timm": "^1.6.1" 399 | }, 400 | "peerDependencies": { 401 | "@jimp/custom": ">=0.3.5" 402 | } 403 | }, 404 | "node_modules/@jimp/utils": { 405 | "version": "0.8.5", 406 | "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.8.5.tgz", 407 | "integrity": "sha512-D3+H4BiopDkhUKvKkZTPPJ53voqOkfMuk3r7YZNcLtXGLkchjjukC4056lNo7B0DzjBgowTYsQM3JjKnYNIYeg==", 408 | "dependencies": { 409 | "core-js": "^2.5.7" 410 | } 411 | }, 412 | "node_modules/@sindresorhus/is": { 413 | "version": "0.14.0", 414 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 415 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 416 | "dev": true, 417 | "engines": { 418 | "node": ">=6" 419 | } 420 | }, 421 | "node_modules/@szmarczak/http-timer": { 422 | "version": "1.1.2", 423 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 424 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 425 | "dev": true, 426 | "dependencies": { 427 | "defer-to-connect": "^1.0.1" 428 | }, 429 | "engines": { 430 | "node": ">=6" 431 | } 432 | }, 433 | "node_modules/@types/node": { 434 | "version": "16.11.59", 435 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.59.tgz", 436 | "integrity": "sha512-6u+36Dj3aDzhfBVUf/mfmc92OEdzQ2kx2jcXGdigfl70E/neV21ZHE6UCz4MDzTRcVqGAM27fk+DLXvyDsn3Jw==", 437 | "dev": true 438 | }, 439 | "node_modules/@types/yauzl": { 440 | "version": "2.10.0", 441 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", 442 | "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", 443 | "dev": true, 444 | "optional": true, 445 | "dependencies": { 446 | "@types/node": "*" 447 | } 448 | }, 449 | "node_modules/any-base": { 450 | "version": "1.1.0", 451 | "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", 452 | "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" 453 | }, 454 | "node_modules/base64-js": { 455 | "version": "1.5.1", 456 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 457 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 458 | "funding": [ 459 | { 460 | "type": "github", 461 | "url": "https://github.com/sponsors/feross" 462 | }, 463 | { 464 | "type": "patreon", 465 | "url": "https://www.patreon.com/feross" 466 | }, 467 | { 468 | "type": "consulting", 469 | "url": "https://feross.org/support" 470 | } 471 | ] 472 | }, 473 | "node_modules/bmp-js": { 474 | "version": "0.1.0", 475 | "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", 476 | "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==" 477 | }, 478 | "node_modules/boolean": { 479 | "version": "3.2.0", 480 | "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", 481 | "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", 482 | "dev": true, 483 | "optional": true 484 | }, 485 | "node_modules/buffer": { 486 | "version": "5.7.1", 487 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 488 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 489 | "funding": [ 490 | { 491 | "type": "github", 492 | "url": "https://github.com/sponsors/feross" 493 | }, 494 | { 495 | "type": "patreon", 496 | "url": "https://www.patreon.com/feross" 497 | }, 498 | { 499 | "type": "consulting", 500 | "url": "https://feross.org/support" 501 | } 502 | ], 503 | "dependencies": { 504 | "base64-js": "^1.3.1", 505 | "ieee754": "^1.1.13" 506 | } 507 | }, 508 | "node_modules/buffer-crc32": { 509 | "version": "0.2.13", 510 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 511 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 512 | "dev": true, 513 | "engines": { 514 | "node": "*" 515 | } 516 | }, 517 | "node_modules/buffer-equal": { 518 | "version": "0.0.1", 519 | "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", 520 | "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", 521 | "engines": { 522 | "node": ">=0.4.0" 523 | } 524 | }, 525 | "node_modules/cacheable-request": { 526 | "version": "6.1.0", 527 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 528 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 529 | "dev": true, 530 | "dependencies": { 531 | "clone-response": "^1.0.2", 532 | "get-stream": "^5.1.0", 533 | "http-cache-semantics": "^4.0.0", 534 | "keyv": "^3.0.0", 535 | "lowercase-keys": "^2.0.0", 536 | "normalize-url": "^4.1.0", 537 | "responselike": "^1.0.2" 538 | }, 539 | "engines": { 540 | "node": ">=8" 541 | } 542 | }, 543 | "node_modules/cacheable-request/node_modules/lowercase-keys": { 544 | "version": "2.0.0", 545 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 546 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 547 | "dev": true, 548 | "engines": { 549 | "node": ">=8" 550 | } 551 | }, 552 | "node_modules/clone-response": { 553 | "version": "1.0.3", 554 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", 555 | "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", 556 | "dev": true, 557 | "dependencies": { 558 | "mimic-response": "^1.0.0" 559 | }, 560 | "funding": { 561 | "url": "https://github.com/sponsors/sindresorhus" 562 | } 563 | }, 564 | "node_modules/config-chain": { 565 | "version": "1.1.13", 566 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", 567 | "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", 568 | "dev": true, 569 | "optional": true, 570 | "dependencies": { 571 | "ini": "^1.3.4", 572 | "proto-list": "~1.2.1" 573 | } 574 | }, 575 | "node_modules/core-js": { 576 | "version": "2.6.12", 577 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", 578 | "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", 579 | "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", 580 | "hasInstallScript": true 581 | }, 582 | "node_modules/debug": { 583 | "version": "4.3.4", 584 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 585 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 586 | "dev": true, 587 | "dependencies": { 588 | "ms": "2.1.2" 589 | }, 590 | "engines": { 591 | "node": ">=6.0" 592 | }, 593 | "peerDependenciesMeta": { 594 | "supports-color": { 595 | "optional": true 596 | } 597 | } 598 | }, 599 | "node_modules/decompress-response": { 600 | "version": "3.3.0", 601 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 602 | "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", 603 | "dev": true, 604 | "dependencies": { 605 | "mimic-response": "^1.0.0" 606 | }, 607 | "engines": { 608 | "node": ">=4" 609 | } 610 | }, 611 | "node_modules/defer-to-connect": { 612 | "version": "1.1.3", 613 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", 614 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", 615 | "dev": true 616 | }, 617 | "node_modules/define-properties": { 618 | "version": "1.1.4", 619 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", 620 | "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", 621 | "dev": true, 622 | "optional": true, 623 | "dependencies": { 624 | "has-property-descriptors": "^1.0.0", 625 | "object-keys": "^1.1.1" 626 | }, 627 | "engines": { 628 | "node": ">= 0.4" 629 | }, 630 | "funding": { 631 | "url": "https://github.com/sponsors/ljharb" 632 | } 633 | }, 634 | "node_modules/detect-node": { 635 | "version": "2.1.0", 636 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", 637 | "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", 638 | "dev": true, 639 | "optional": true 640 | }, 641 | "node_modules/dom-walk": { 642 | "version": "0.1.2", 643 | "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", 644 | "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" 645 | }, 646 | "node_modules/duplexer3": { 647 | "version": "0.1.5", 648 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", 649 | "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", 650 | "dev": true 651 | }, 652 | "node_modules/electron": { 653 | "version": "20.2.0", 654 | "resolved": "https://registry.npmjs.org/electron/-/electron-20.2.0.tgz", 655 | "integrity": "sha512-qw92PfXaC+fGoqJfQ2U5tVF8ux5HyVwgt1AxAtx6uz+dYcgtPBvfBN1jb+uzZVR+QVd+wCJ8Sqt6TD1ctwTauw==", 656 | "dev": true, 657 | "hasInstallScript": true, 658 | "dependencies": { 659 | "@electron/get": "^1.14.1", 660 | "@types/node": "^16.11.26", 661 | "extract-zip": "^2.0.1" 662 | }, 663 | "bin": { 664 | "electron": "cli.js" 665 | }, 666 | "engines": { 667 | "node": ">= 10.17.0" 668 | } 669 | }, 670 | "node_modules/encodeurl": { 671 | "version": "1.0.2", 672 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 673 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 674 | "dev": true, 675 | "optional": true, 676 | "engines": { 677 | "node": ">= 0.8" 678 | } 679 | }, 680 | "node_modules/end-of-stream": { 681 | "version": "1.4.4", 682 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 683 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 684 | "dev": true, 685 | "dependencies": { 686 | "once": "^1.4.0" 687 | } 688 | }, 689 | "node_modules/env-paths": { 690 | "version": "2.2.1", 691 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 692 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 693 | "dev": true, 694 | "engines": { 695 | "node": ">=6" 696 | } 697 | }, 698 | "node_modules/es6-error": { 699 | "version": "4.1.1", 700 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", 701 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", 702 | "dev": true, 703 | "optional": true 704 | }, 705 | "node_modules/escape-string-regexp": { 706 | "version": "4.0.0", 707 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 708 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 709 | "dev": true, 710 | "optional": true, 711 | "engines": { 712 | "node": ">=10" 713 | }, 714 | "funding": { 715 | "url": "https://github.com/sponsors/sindresorhus" 716 | } 717 | }, 718 | "node_modules/exif-parser": { 719 | "version": "0.1.12", 720 | "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", 721 | "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==" 722 | }, 723 | "node_modules/extract-zip": { 724 | "version": "2.0.1", 725 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 726 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 727 | "dev": true, 728 | "dependencies": { 729 | "debug": "^4.1.1", 730 | "get-stream": "^5.1.0", 731 | "yauzl": "^2.10.0" 732 | }, 733 | "bin": { 734 | "extract-zip": "cli.js" 735 | }, 736 | "engines": { 737 | "node": ">= 10.17.0" 738 | }, 739 | "optionalDependencies": { 740 | "@types/yauzl": "^2.9.1" 741 | } 742 | }, 743 | "node_modules/fd-slicer": { 744 | "version": "1.1.0", 745 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 746 | "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", 747 | "dev": true, 748 | "dependencies": { 749 | "pend": "~1.2.0" 750 | } 751 | }, 752 | "node_modules/file-type": { 753 | "version": "12.4.2", 754 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", 755 | "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", 756 | "engines": { 757 | "node": ">=8" 758 | } 759 | }, 760 | "node_modules/fs-extra": { 761 | "version": "8.1.0", 762 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 763 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 764 | "dev": true, 765 | "dependencies": { 766 | "graceful-fs": "^4.2.0", 767 | "jsonfile": "^4.0.0", 768 | "universalify": "^0.1.0" 769 | }, 770 | "engines": { 771 | "node": ">=6 <7 || >=8" 772 | } 773 | }, 774 | "node_modules/function-bind": { 775 | "version": "1.1.1", 776 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 777 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 778 | "dev": true, 779 | "optional": true 780 | }, 781 | "node_modules/get-intrinsic": { 782 | "version": "1.1.3", 783 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", 784 | "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", 785 | "dev": true, 786 | "optional": true, 787 | "dependencies": { 788 | "function-bind": "^1.1.1", 789 | "has": "^1.0.3", 790 | "has-symbols": "^1.0.3" 791 | }, 792 | "funding": { 793 | "url": "https://github.com/sponsors/ljharb" 794 | } 795 | }, 796 | "node_modules/get-stream": { 797 | "version": "5.2.0", 798 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 799 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 800 | "dev": true, 801 | "dependencies": { 802 | "pump": "^3.0.0" 803 | }, 804 | "engines": { 805 | "node": ">=8" 806 | }, 807 | "funding": { 808 | "url": "https://github.com/sponsors/sindresorhus" 809 | } 810 | }, 811 | "node_modules/global": { 812 | "version": "4.4.0", 813 | "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", 814 | "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", 815 | "dependencies": { 816 | "min-document": "^2.19.0", 817 | "process": "^0.11.10" 818 | } 819 | }, 820 | "node_modules/global-agent": { 821 | "version": "3.0.0", 822 | "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", 823 | "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", 824 | "dev": true, 825 | "optional": true, 826 | "dependencies": { 827 | "boolean": "^3.0.1", 828 | "es6-error": "^4.1.1", 829 | "matcher": "^3.0.0", 830 | "roarr": "^2.15.3", 831 | "semver": "^7.3.2", 832 | "serialize-error": "^7.0.1" 833 | }, 834 | "engines": { 835 | "node": ">=10.0" 836 | } 837 | }, 838 | "node_modules/global-agent/node_modules/semver": { 839 | "version": "7.3.7", 840 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", 841 | "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", 842 | "dev": true, 843 | "optional": true, 844 | "dependencies": { 845 | "lru-cache": "^6.0.0" 846 | }, 847 | "bin": { 848 | "semver": "bin/semver.js" 849 | }, 850 | "engines": { 851 | "node": ">=10" 852 | } 853 | }, 854 | "node_modules/global-tunnel-ng": { 855 | "version": "2.7.1", 856 | "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", 857 | "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", 858 | "dev": true, 859 | "optional": true, 860 | "dependencies": { 861 | "encodeurl": "^1.0.2", 862 | "lodash": "^4.17.10", 863 | "npm-conf": "^1.1.3", 864 | "tunnel": "^0.0.6" 865 | }, 866 | "engines": { 867 | "node": ">=0.10" 868 | } 869 | }, 870 | "node_modules/globalthis": { 871 | "version": "1.0.3", 872 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", 873 | "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", 874 | "dev": true, 875 | "optional": true, 876 | "dependencies": { 877 | "define-properties": "^1.1.3" 878 | }, 879 | "engines": { 880 | "node": ">= 0.4" 881 | }, 882 | "funding": { 883 | "url": "https://github.com/sponsors/ljharb" 884 | } 885 | }, 886 | "node_modules/got": { 887 | "version": "9.6.0", 888 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 889 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 890 | "dev": true, 891 | "dependencies": { 892 | "@sindresorhus/is": "^0.14.0", 893 | "@szmarczak/http-timer": "^1.1.2", 894 | "cacheable-request": "^6.0.0", 895 | "decompress-response": "^3.3.0", 896 | "duplexer3": "^0.1.4", 897 | "get-stream": "^4.1.0", 898 | "lowercase-keys": "^1.0.1", 899 | "mimic-response": "^1.0.1", 900 | "p-cancelable": "^1.0.0", 901 | "to-readable-stream": "^1.0.0", 902 | "url-parse-lax": "^3.0.0" 903 | }, 904 | "engines": { 905 | "node": ">=8.6" 906 | } 907 | }, 908 | "node_modules/got/node_modules/get-stream": { 909 | "version": "4.1.0", 910 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 911 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 912 | "dev": true, 913 | "dependencies": { 914 | "pump": "^3.0.0" 915 | }, 916 | "engines": { 917 | "node": ">=6" 918 | } 919 | }, 920 | "node_modules/graceful-fs": { 921 | "version": "4.2.10", 922 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 923 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 924 | "dev": true 925 | }, 926 | "node_modules/has": { 927 | "version": "1.0.3", 928 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 929 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 930 | "dev": true, 931 | "optional": true, 932 | "dependencies": { 933 | "function-bind": "^1.1.1" 934 | }, 935 | "engines": { 936 | "node": ">= 0.4.0" 937 | } 938 | }, 939 | "node_modules/has-property-descriptors": { 940 | "version": "1.0.0", 941 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", 942 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", 943 | "dev": true, 944 | "optional": true, 945 | "dependencies": { 946 | "get-intrinsic": "^1.1.1" 947 | }, 948 | "funding": { 949 | "url": "https://github.com/sponsors/ljharb" 950 | } 951 | }, 952 | "node_modules/has-symbols": { 953 | "version": "1.0.3", 954 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 955 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 956 | "dev": true, 957 | "optional": true, 958 | "engines": { 959 | "node": ">= 0.4" 960 | }, 961 | "funding": { 962 | "url": "https://github.com/sponsors/ljharb" 963 | } 964 | }, 965 | "node_modules/http-cache-semantics": { 966 | "version": "4.1.0", 967 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", 968 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", 969 | "dev": true 970 | }, 971 | "node_modules/ieee754": { 972 | "version": "1.2.1", 973 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 974 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 975 | "funding": [ 976 | { 977 | "type": "github", 978 | "url": "https://github.com/sponsors/feross" 979 | }, 980 | { 981 | "type": "patreon", 982 | "url": "https://www.patreon.com/feross" 983 | }, 984 | { 985 | "type": "consulting", 986 | "url": "https://feross.org/support" 987 | } 988 | ] 989 | }, 990 | "node_modules/ini": { 991 | "version": "1.3.8", 992 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 993 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 994 | "dev": true, 995 | "optional": true 996 | }, 997 | "node_modules/is-function": { 998 | "version": "1.0.2", 999 | "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", 1000 | "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" 1001 | }, 1002 | "node_modules/jimp": { 1003 | "version": "0.8.5", 1004 | "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.8.5.tgz", 1005 | "integrity": "sha512-BW7t/+TCgKpqZw/wHFwqF/A/Tyk43RmzRHyMBdqfOepqunUrajt0RTqowdWyFo4CS2FmD8pFiYfefWjpXFWrCA==", 1006 | "dependencies": { 1007 | "@jimp/custom": "^0.8.5", 1008 | "@jimp/plugins": "^0.8.5", 1009 | "@jimp/types": "^0.8.5", 1010 | "core-js": "^2.5.7", 1011 | "regenerator-runtime": "^0.13.3" 1012 | } 1013 | }, 1014 | "node_modules/jpeg-js": { 1015 | "version": "0.3.7", 1016 | "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz", 1017 | "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==" 1018 | }, 1019 | "node_modules/json-buffer": { 1020 | "version": "3.0.0", 1021 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 1022 | "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", 1023 | "dev": true 1024 | }, 1025 | "node_modules/json-stringify-safe": { 1026 | "version": "5.0.1", 1027 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1028 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", 1029 | "dev": true, 1030 | "optional": true 1031 | }, 1032 | "node_modules/jsonfile": { 1033 | "version": "4.0.0", 1034 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 1035 | "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 1036 | "dev": true, 1037 | "optionalDependencies": { 1038 | "graceful-fs": "^4.1.6" 1039 | } 1040 | }, 1041 | "node_modules/keyv": { 1042 | "version": "3.1.0", 1043 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 1044 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 1045 | "dev": true, 1046 | "dependencies": { 1047 | "json-buffer": "3.0.0" 1048 | } 1049 | }, 1050 | "node_modules/load-bmfont": { 1051 | "version": "1.4.1", 1052 | "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", 1053 | "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", 1054 | "dependencies": { 1055 | "buffer-equal": "0.0.1", 1056 | "mime": "^1.3.4", 1057 | "parse-bmfont-ascii": "^1.0.3", 1058 | "parse-bmfont-binary": "^1.0.5", 1059 | "parse-bmfont-xml": "^1.1.4", 1060 | "phin": "^2.9.1", 1061 | "xhr": "^2.0.1", 1062 | "xtend": "^4.0.0" 1063 | } 1064 | }, 1065 | "node_modules/lodash": { 1066 | "version": "4.17.21", 1067 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1068 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1069 | "dev": true, 1070 | "optional": true 1071 | }, 1072 | "node_modules/lowercase-keys": { 1073 | "version": "1.0.1", 1074 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 1075 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 1076 | "dev": true, 1077 | "engines": { 1078 | "node": ">=0.10.0" 1079 | } 1080 | }, 1081 | "node_modules/lru-cache": { 1082 | "version": "6.0.0", 1083 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1084 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1085 | "dev": true, 1086 | "optional": true, 1087 | "dependencies": { 1088 | "yallist": "^4.0.0" 1089 | }, 1090 | "engines": { 1091 | "node": ">=10" 1092 | } 1093 | }, 1094 | "node_modules/matcher": { 1095 | "version": "3.0.0", 1096 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", 1097 | "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", 1098 | "dev": true, 1099 | "optional": true, 1100 | "dependencies": { 1101 | "escape-string-regexp": "^4.0.0" 1102 | }, 1103 | "engines": { 1104 | "node": ">=10" 1105 | } 1106 | }, 1107 | "node_modules/mime": { 1108 | "version": "1.6.0", 1109 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1110 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 1111 | "bin": { 1112 | "mime": "cli.js" 1113 | }, 1114 | "engines": { 1115 | "node": ">=4" 1116 | } 1117 | }, 1118 | "node_modules/mimic-response": { 1119 | "version": "1.0.1", 1120 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 1121 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 1122 | "dev": true, 1123 | "engines": { 1124 | "node": ">=4" 1125 | } 1126 | }, 1127 | "node_modules/min-document": { 1128 | "version": "2.19.0", 1129 | "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", 1130 | "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", 1131 | "dependencies": { 1132 | "dom-walk": "^0.1.0" 1133 | } 1134 | }, 1135 | "node_modules/minimist": { 1136 | "version": "0.0.8", 1137 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1138 | "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==" 1139 | }, 1140 | "node_modules/mkdirp": { 1141 | "version": "0.5.1", 1142 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1143 | "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", 1144 | "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", 1145 | "dependencies": { 1146 | "minimist": "0.0.8" 1147 | }, 1148 | "bin": { 1149 | "mkdirp": "bin/cmd.js" 1150 | } 1151 | }, 1152 | "node_modules/ms": { 1153 | "version": "2.1.2", 1154 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1155 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1156 | "dev": true 1157 | }, 1158 | "node_modules/normalize-url": { 1159 | "version": "4.5.1", 1160 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", 1161 | "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", 1162 | "dev": true, 1163 | "engines": { 1164 | "node": ">=8" 1165 | } 1166 | }, 1167 | "node_modules/npm-conf": { 1168 | "version": "1.1.3", 1169 | "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", 1170 | "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", 1171 | "dev": true, 1172 | "optional": true, 1173 | "dependencies": { 1174 | "config-chain": "^1.1.11", 1175 | "pify": "^3.0.0" 1176 | }, 1177 | "engines": { 1178 | "node": ">=4" 1179 | } 1180 | }, 1181 | "node_modules/object-keys": { 1182 | "version": "1.1.1", 1183 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1184 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1185 | "dev": true, 1186 | "optional": true, 1187 | "engines": { 1188 | "node": ">= 0.4" 1189 | } 1190 | }, 1191 | "node_modules/omggif": { 1192 | "version": "1.0.10", 1193 | "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", 1194 | "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" 1195 | }, 1196 | "node_modules/once": { 1197 | "version": "1.4.0", 1198 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1199 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1200 | "dev": true, 1201 | "dependencies": { 1202 | "wrappy": "1" 1203 | } 1204 | }, 1205 | "node_modules/p-cancelable": { 1206 | "version": "1.1.0", 1207 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 1208 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 1209 | "dev": true, 1210 | "engines": { 1211 | "node": ">=6" 1212 | } 1213 | }, 1214 | "node_modules/pako": { 1215 | "version": "1.0.11", 1216 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", 1217 | "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" 1218 | }, 1219 | "node_modules/parse-bmfont-ascii": { 1220 | "version": "1.0.6", 1221 | "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", 1222 | "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==" 1223 | }, 1224 | "node_modules/parse-bmfont-binary": { 1225 | "version": "1.0.6", 1226 | "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", 1227 | "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==" 1228 | }, 1229 | "node_modules/parse-bmfont-xml": { 1230 | "version": "1.1.4", 1231 | "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", 1232 | "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", 1233 | "dependencies": { 1234 | "xml-parse-from-string": "^1.0.0", 1235 | "xml2js": "^0.4.5" 1236 | } 1237 | }, 1238 | "node_modules/parse-headers": { 1239 | "version": "2.0.5", 1240 | "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", 1241 | "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" 1242 | }, 1243 | "node_modules/pend": { 1244 | "version": "1.2.0", 1245 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 1246 | "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", 1247 | "dev": true 1248 | }, 1249 | "node_modules/phin": { 1250 | "version": "2.9.3", 1251 | "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", 1252 | "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" 1253 | }, 1254 | "node_modules/pify": { 1255 | "version": "3.0.0", 1256 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1257 | "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", 1258 | "dev": true, 1259 | "optional": true, 1260 | "engines": { 1261 | "node": ">=4" 1262 | } 1263 | }, 1264 | "node_modules/pixelmatch": { 1265 | "version": "4.0.2", 1266 | "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", 1267 | "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==", 1268 | "dependencies": { 1269 | "pngjs": "^3.0.0" 1270 | }, 1271 | "bin": { 1272 | "pixelmatch": "bin/pixelmatch" 1273 | } 1274 | }, 1275 | "node_modules/pngjs": { 1276 | "version": "3.4.0", 1277 | "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", 1278 | "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", 1279 | "engines": { 1280 | "node": ">=4.0.0" 1281 | } 1282 | }, 1283 | "node_modules/prepend-http": { 1284 | "version": "2.0.0", 1285 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 1286 | "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", 1287 | "dev": true, 1288 | "engines": { 1289 | "node": ">=4" 1290 | } 1291 | }, 1292 | "node_modules/process": { 1293 | "version": "0.11.10", 1294 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 1295 | "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", 1296 | "engines": { 1297 | "node": ">= 0.6.0" 1298 | } 1299 | }, 1300 | "node_modules/progress": { 1301 | "version": "2.0.3", 1302 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1303 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1304 | "dev": true, 1305 | "engines": { 1306 | "node": ">=0.4.0" 1307 | } 1308 | }, 1309 | "node_modules/proto-list": { 1310 | "version": "1.2.4", 1311 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", 1312 | "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", 1313 | "dev": true, 1314 | "optional": true 1315 | }, 1316 | "node_modules/pump": { 1317 | "version": "3.0.0", 1318 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1319 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1320 | "dev": true, 1321 | "dependencies": { 1322 | "end-of-stream": "^1.1.0", 1323 | "once": "^1.3.1" 1324 | } 1325 | }, 1326 | "node_modules/regenerator-runtime": { 1327 | "version": "0.13.9", 1328 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", 1329 | "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" 1330 | }, 1331 | "node_modules/resize-img": { 1332 | "version": "2.0.0", 1333 | "resolved": "https://registry.npmjs.org/resize-img/-/resize-img-2.0.0.tgz", 1334 | "integrity": "sha512-im2Kn4CY0c7JGdYXwL7g77T8AUi15YQeEBmmpWuglrcPFq4Di53tIvLXlbasW7UKed9GaZCza/OSxOJrmB0jbg==", 1335 | "dependencies": { 1336 | "file-type": "^12.3.0", 1337 | "jimp": "^0.8.3" 1338 | }, 1339 | "engines": { 1340 | "node": ">=10" 1341 | } 1342 | }, 1343 | "node_modules/responselike": { 1344 | "version": "1.0.2", 1345 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 1346 | "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", 1347 | "dev": true, 1348 | "dependencies": { 1349 | "lowercase-keys": "^1.0.0" 1350 | } 1351 | }, 1352 | "node_modules/roarr": { 1353 | "version": "2.15.4", 1354 | "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", 1355 | "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", 1356 | "dev": true, 1357 | "optional": true, 1358 | "dependencies": { 1359 | "boolean": "^3.0.1", 1360 | "detect-node": "^2.0.4", 1361 | "globalthis": "^1.0.1", 1362 | "json-stringify-safe": "^5.0.1", 1363 | "semver-compare": "^1.0.0", 1364 | "sprintf-js": "^1.1.2" 1365 | }, 1366 | "engines": { 1367 | "node": ">=8.0" 1368 | } 1369 | }, 1370 | "node_modules/sax": { 1371 | "version": "1.2.4", 1372 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 1373 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 1374 | }, 1375 | "node_modules/semver": { 1376 | "version": "6.3.0", 1377 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1378 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1379 | "dev": true, 1380 | "bin": { 1381 | "semver": "bin/semver.js" 1382 | } 1383 | }, 1384 | "node_modules/semver-compare": { 1385 | "version": "1.0.0", 1386 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 1387 | "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", 1388 | "dev": true, 1389 | "optional": true 1390 | }, 1391 | "node_modules/serialize-error": { 1392 | "version": "7.0.1", 1393 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", 1394 | "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", 1395 | "dev": true, 1396 | "optional": true, 1397 | "dependencies": { 1398 | "type-fest": "^0.13.1" 1399 | }, 1400 | "engines": { 1401 | "node": ">=10" 1402 | }, 1403 | "funding": { 1404 | "url": "https://github.com/sponsors/sindresorhus" 1405 | } 1406 | }, 1407 | "node_modules/sprintf-js": { 1408 | "version": "1.1.2", 1409 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", 1410 | "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", 1411 | "dev": true, 1412 | "optional": true 1413 | }, 1414 | "node_modules/sumchecker": { 1415 | "version": "3.0.1", 1416 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", 1417 | "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", 1418 | "dev": true, 1419 | "dependencies": { 1420 | "debug": "^4.1.0" 1421 | }, 1422 | "engines": { 1423 | "node": ">= 8.0" 1424 | } 1425 | }, 1426 | "node_modules/timm": { 1427 | "version": "1.7.1", 1428 | "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", 1429 | "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" 1430 | }, 1431 | "node_modules/tinycolor2": { 1432 | "version": "1.4.2", 1433 | "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", 1434 | "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", 1435 | "engines": { 1436 | "node": "*" 1437 | } 1438 | }, 1439 | "node_modules/to-readable-stream": { 1440 | "version": "1.0.0", 1441 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 1442 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 1443 | "dev": true, 1444 | "engines": { 1445 | "node": ">=6" 1446 | } 1447 | }, 1448 | "node_modules/toastify-js": { 1449 | "version": "1.12.0", 1450 | "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.12.0.tgz", 1451 | "integrity": "sha512-HeMHCO9yLPvP9k0apGSdPUWrUbLnxUKNFzgUoZp1PHCLploIX/4DSQ7V8H25ef+h4iO9n0he7ImfcndnN6nDrQ==" 1452 | }, 1453 | "node_modules/tunnel": { 1454 | "version": "0.0.6", 1455 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 1456 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 1457 | "dev": true, 1458 | "optional": true, 1459 | "engines": { 1460 | "node": ">=0.6.11 <=0.7.0 || >=0.7.3" 1461 | } 1462 | }, 1463 | "node_modules/type-fest": { 1464 | "version": "0.13.1", 1465 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", 1466 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", 1467 | "dev": true, 1468 | "optional": true, 1469 | "engines": { 1470 | "node": ">=10" 1471 | }, 1472 | "funding": { 1473 | "url": "https://github.com/sponsors/sindresorhus" 1474 | } 1475 | }, 1476 | "node_modules/universalify": { 1477 | "version": "0.1.2", 1478 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 1479 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 1480 | "dev": true, 1481 | "engines": { 1482 | "node": ">= 4.0.0" 1483 | } 1484 | }, 1485 | "node_modules/url-parse-lax": { 1486 | "version": "3.0.0", 1487 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 1488 | "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", 1489 | "dev": true, 1490 | "dependencies": { 1491 | "prepend-http": "^2.0.0" 1492 | }, 1493 | "engines": { 1494 | "node": ">=4" 1495 | } 1496 | }, 1497 | "node_modules/utif": { 1498 | "version": "2.0.1", 1499 | "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", 1500 | "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", 1501 | "dependencies": { 1502 | "pako": "^1.0.5" 1503 | } 1504 | }, 1505 | "node_modules/wrappy": { 1506 | "version": "1.0.2", 1507 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1508 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1509 | "dev": true 1510 | }, 1511 | "node_modules/xhr": { 1512 | "version": "2.6.0", 1513 | "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", 1514 | "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", 1515 | "dependencies": { 1516 | "global": "~4.4.0", 1517 | "is-function": "^1.0.1", 1518 | "parse-headers": "^2.0.0", 1519 | "xtend": "^4.0.0" 1520 | } 1521 | }, 1522 | "node_modules/xml-parse-from-string": { 1523 | "version": "1.0.1", 1524 | "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", 1525 | "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==" 1526 | }, 1527 | "node_modules/xml2js": { 1528 | "version": "0.4.23", 1529 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", 1530 | "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", 1531 | "dependencies": { 1532 | "sax": ">=0.6.0", 1533 | "xmlbuilder": "~11.0.0" 1534 | }, 1535 | "engines": { 1536 | "node": ">=4.0.0" 1537 | } 1538 | }, 1539 | "node_modules/xmlbuilder": { 1540 | "version": "11.0.1", 1541 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 1542 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", 1543 | "engines": { 1544 | "node": ">=4.0" 1545 | } 1546 | }, 1547 | "node_modules/xtend": { 1548 | "version": "4.0.2", 1549 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1550 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1551 | "engines": { 1552 | "node": ">=0.4" 1553 | } 1554 | }, 1555 | "node_modules/yallist": { 1556 | "version": "4.0.0", 1557 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1558 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1559 | "dev": true, 1560 | "optional": true 1561 | }, 1562 | "node_modules/yauzl": { 1563 | "version": "2.10.0", 1564 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 1565 | "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", 1566 | "dev": true, 1567 | "dependencies": { 1568 | "buffer-crc32": "~0.2.3", 1569 | "fd-slicer": "~1.1.0" 1570 | } 1571 | } 1572 | }, 1573 | "dependencies": { 1574 | "@electron/get": { 1575 | "version": "1.14.1", 1576 | "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz", 1577 | "integrity": "sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==", 1578 | "dev": true, 1579 | "requires": { 1580 | "debug": "^4.1.1", 1581 | "env-paths": "^2.2.0", 1582 | "fs-extra": "^8.1.0", 1583 | "global-agent": "^3.0.0", 1584 | "global-tunnel-ng": "^2.7.1", 1585 | "got": "^9.6.0", 1586 | "progress": "^2.0.3", 1587 | "semver": "^6.2.0", 1588 | "sumchecker": "^3.0.1" 1589 | } 1590 | }, 1591 | "@jimp/bmp": { 1592 | "version": "0.8.5", 1593 | "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.8.5.tgz", 1594 | "integrity": "sha512-o/23j1RODQGGjvb2xg+9ZQCHc9uXa5XIoJuXHN8kh8AJBGD7JZYiHMwNHaxJRJvadimCKUeA5udZUJAoaPwrYg==", 1595 | "requires": { 1596 | "@jimp/utils": "^0.8.5", 1597 | "bmp-js": "^0.1.0", 1598 | "core-js": "^2.5.7" 1599 | } 1600 | }, 1601 | "@jimp/core": { 1602 | "version": "0.8.5", 1603 | "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.8.5.tgz", 1604 | "integrity": "sha512-Jto1IdL5HYg7uE15rpQjK6dfZJ6d6gRjUsVCPW50nIfXgWizaTibFEov90W9Bj+irwKrX2ntG3e3pZUyOC0COg==", 1605 | "requires": { 1606 | "@jimp/utils": "^0.8.5", 1607 | "any-base": "^1.1.0", 1608 | "buffer": "^5.2.0", 1609 | "core-js": "^2.5.7", 1610 | "exif-parser": "^0.1.12", 1611 | "file-type": "^9.0.0", 1612 | "load-bmfont": "^1.3.1", 1613 | "mkdirp": "0.5.1", 1614 | "phin": "^2.9.1", 1615 | "pixelmatch": "^4.0.2", 1616 | "tinycolor2": "^1.4.1" 1617 | }, 1618 | "dependencies": { 1619 | "file-type": { 1620 | "version": "9.0.0", 1621 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", 1622 | "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" 1623 | } 1624 | } 1625 | }, 1626 | "@jimp/custom": { 1627 | "version": "0.8.5", 1628 | "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.8.5.tgz", 1629 | "integrity": "sha512-hS4qHOcOIL+N93IprsIhFgr8F4XnC2oYd+lRaOKEOg3ptS2vQnceSTtcXsC0//mhq8AV6lNjpbfs1iseEZuTqg==", 1630 | "requires": { 1631 | "@jimp/core": "^0.8.5", 1632 | "core-js": "^2.5.7" 1633 | } 1634 | }, 1635 | "@jimp/gif": { 1636 | "version": "0.8.5", 1637 | "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.8.5.tgz", 1638 | "integrity": "sha512-Mj8jmv4AS76OY+Hx/Xoyihj02SUZ2ELk+O5x89pODz1+NeGtSWHHjZjnSam9HYAjycvVI/lGJdk/7w0nWIV/yQ==", 1639 | "requires": { 1640 | "@jimp/utils": "^0.8.5", 1641 | "core-js": "^2.5.7", 1642 | "omggif": "^1.0.9" 1643 | } 1644 | }, 1645 | "@jimp/jpeg": { 1646 | "version": "0.8.5", 1647 | "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.8.5.tgz", 1648 | "integrity": "sha512-7kjTY0BiCpwRywk+oPfpLto7cLI+9G0mf4N1bv1Hn+VLQwcXFy2fHyl4qjqLbbY6u4cyZgqN+R8Pg6GRRzv0kw==", 1649 | "requires": { 1650 | "@jimp/utils": "^0.8.5", 1651 | "core-js": "^2.5.7", 1652 | "jpeg-js": "^0.3.4" 1653 | } 1654 | }, 1655 | "@jimp/plugin-blit": { 1656 | "version": "0.8.5", 1657 | "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.8.5.tgz", 1658 | "integrity": "sha512-r8Z1CwazaJwZCRbucQgrfprlGyH91tX7GubUsbWr+zy5/dRJAAgaPj/hcoHDwbh3zyiXp5BECKKzKW0x4reL4w==", 1659 | "requires": { 1660 | "@jimp/utils": "^0.8.5", 1661 | "core-js": "^2.5.7" 1662 | } 1663 | }, 1664 | "@jimp/plugin-blur": { 1665 | "version": "0.8.5", 1666 | "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.8.5.tgz", 1667 | "integrity": "sha512-UH5ywpV4YooUh9HXEsrNKDtojLCvIAAV0gywqn8EQeFyzwBJyXAvRNARJp7zr5OPLr9uGXkRLDCO9YyzdlXZng==", 1668 | "requires": { 1669 | "@jimp/utils": "^0.8.5", 1670 | "core-js": "^2.5.7" 1671 | } 1672 | }, 1673 | "@jimp/plugin-color": { 1674 | "version": "0.8.5", 1675 | "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.8.5.tgz", 1676 | "integrity": "sha512-7XHqcTQ8Y1zto1b9P1y8m1dzSjnOpBsD9OZG0beTpeJ5bgPX+hF5ZLmvcM6c5ljkINw5EUF1it07BYbkCxiGQA==", 1677 | "requires": { 1678 | "@jimp/utils": "^0.8.5", 1679 | "core-js": "^2.5.7", 1680 | "tinycolor2": "^1.4.1" 1681 | } 1682 | }, 1683 | "@jimp/plugin-contain": { 1684 | "version": "0.8.5", 1685 | "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.8.5.tgz", 1686 | "integrity": "sha512-ZkiPFx9L0yITiKtYTYLWyBsSIdxo/NARhNPRZXyVF9HmTWSLDUw1c2c1uvETKxDZTAVK+souYT14DwFWWdhsYA==", 1687 | "requires": { 1688 | "@jimp/utils": "^0.8.5", 1689 | "core-js": "^2.5.7" 1690 | } 1691 | }, 1692 | "@jimp/plugin-cover": { 1693 | "version": "0.8.5", 1694 | "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.8.5.tgz", 1695 | "integrity": "sha512-OdT4YAopLOhbhTUQV3R1v5ZZqIaUt3n3vJi/OfTbsak1t9UkPBVdmYPyhoont8zJdtdkF5dW16Ro1FTshytcww==", 1696 | "requires": { 1697 | "@jimp/utils": "^0.8.5", 1698 | "core-js": "^2.5.7" 1699 | } 1700 | }, 1701 | "@jimp/plugin-crop": { 1702 | "version": "0.8.5", 1703 | "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.8.5.tgz", 1704 | "integrity": "sha512-E1Hb+gfu2k74Gkqh96apAyVljsP5MjCH4TY6lECAAEcYKGH/XRhz6lY2dSEjCYE7KtiqjTZzWwYkgAvkwojj9Q==", 1705 | "requires": { 1706 | "@jimp/utils": "^0.8.5", 1707 | "core-js": "^2.5.7" 1708 | } 1709 | }, 1710 | "@jimp/plugin-displace": { 1711 | "version": "0.8.5", 1712 | "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.8.5.tgz", 1713 | "integrity": "sha512-fVgVYTS1HZzAXkg8Lg06PuirSUG5oXYaYYGL+3ZU4tmZn1pyZ+mZyfejpwtymETEYZnmymHoCT4xto19E/IRvA==", 1714 | "requires": { 1715 | "@jimp/utils": "^0.8.5", 1716 | "core-js": "^2.5.7" 1717 | } 1718 | }, 1719 | "@jimp/plugin-dither": { 1720 | "version": "0.8.5", 1721 | "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.8.5.tgz", 1722 | "integrity": "sha512-KSj2y8E3yK7tldjT/8ejqAWw5HFBjtWW6QkcxfW7FdV4c/nsXZXDkMbhqMZ7FkDuSYoAPeWUFeddrH4yipC5iA==", 1723 | "requires": { 1724 | "@jimp/utils": "^0.8.5", 1725 | "core-js": "^2.5.7" 1726 | } 1727 | }, 1728 | "@jimp/plugin-flip": { 1729 | "version": "0.8.5", 1730 | "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.8.5.tgz", 1731 | "integrity": "sha512-2QbGDkurPNAXZUeHLo/UA3tjh+AbAXWZKSdtoa1ArlASovRz8rqtA45YIRIkKrMH82TA3PZk8bgP2jaLKLrzww==", 1732 | "requires": { 1733 | "@jimp/utils": "^0.8.5", 1734 | "core-js": "^2.5.7" 1735 | } 1736 | }, 1737 | "@jimp/plugin-gaussian": { 1738 | "version": "0.8.5", 1739 | "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.8.5.tgz", 1740 | "integrity": "sha512-2zReC5GJcVAXtf3UgzFcHSYN277i02K9Yrhc1xJf3mti00s43uD++B5Ho7/mIo+HrntVvWhxqar7PARdq0lVIg==", 1741 | "requires": { 1742 | "@jimp/utils": "^0.8.5", 1743 | "core-js": "^2.5.7" 1744 | } 1745 | }, 1746 | "@jimp/plugin-invert": { 1747 | "version": "0.8.5", 1748 | "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.8.5.tgz", 1749 | "integrity": "sha512-GyMXPGheHdS14xfDceuZ9hrGm6gE9UG3PfTEjQbJmHMWippLC6yf8kombSudJlUf8q72YYSSXsSFKGgkHa67vA==", 1750 | "requires": { 1751 | "@jimp/utils": "^0.8.5", 1752 | "core-js": "^2.5.7" 1753 | } 1754 | }, 1755 | "@jimp/plugin-mask": { 1756 | "version": "0.8.5", 1757 | "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.8.5.tgz", 1758 | "integrity": "sha512-inD/++XO+MkmwXl9JGYQ8X2deyOZuq9i+dmugH/557p16B9Q6tvUQt5X1Yg5w7hhkLZ00BKOAJI9XoyCC1NFvQ==", 1759 | "requires": { 1760 | "@jimp/utils": "^0.8.5", 1761 | "core-js": "^2.5.7" 1762 | } 1763 | }, 1764 | "@jimp/plugin-normalize": { 1765 | "version": "0.8.5", 1766 | "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.8.5.tgz", 1767 | "integrity": "sha512-8YRWJWBT4NoSAbPhnjQJXGeaeWVrJAlGDv39A54oNH8Ry47fHcE0EN6zogQNpBuM34M6hRnZl4rOv1FIisaWdg==", 1768 | "requires": { 1769 | "@jimp/utils": "^0.8.5", 1770 | "core-js": "^2.5.7" 1771 | } 1772 | }, 1773 | "@jimp/plugin-print": { 1774 | "version": "0.8.5", 1775 | "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.8.5.tgz", 1776 | "integrity": "sha512-BviNpCiA/fEieOqsrWr1FkqyFuiG2izdyyg7zUqyeUTHPwqrTLvXO9cfP/ThG4hZpu5wMQ5QClWSqhZu1fAwxA==", 1777 | "requires": { 1778 | "@jimp/utils": "^0.8.5", 1779 | "core-js": "^2.5.7", 1780 | "load-bmfont": "^1.4.0" 1781 | } 1782 | }, 1783 | "@jimp/plugin-resize": { 1784 | "version": "0.8.5", 1785 | "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.8.5.tgz", 1786 | "integrity": "sha512-gIdmISuNmZQ1QwprnRC5VXVWQfKIiWineVQGebpMAG/aoFOLDXrVl939Irg7Fb/uOlSFTzpAbt1zpJ8YG/Mi2w==", 1787 | "requires": { 1788 | "@jimp/utils": "^0.8.5", 1789 | "core-js": "^2.5.7" 1790 | } 1791 | }, 1792 | "@jimp/plugin-rotate": { 1793 | "version": "0.8.5", 1794 | "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.8.5.tgz", 1795 | "integrity": "sha512-8T9wnL3gb+Z0ogMZmtyI6h3y7TuqW2a5SpFbzFUVF+lTZoAabXjEfX3CAozizCLaT+Duc5H2FJVemAHiyr+Dbw==", 1796 | "requires": { 1797 | "@jimp/utils": "^0.8.5", 1798 | "core-js": "^2.5.7" 1799 | } 1800 | }, 1801 | "@jimp/plugin-scale": { 1802 | "version": "0.8.5", 1803 | "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.8.5.tgz", 1804 | "integrity": "sha512-G+CDH9s7BsxJ4b+mKZ5SsiXwTAynBJ+7/9SwZFnICZJJvLd79Tws6VPXfSaKJZuWnGIX++L8jTGmFORCfLNkdg==", 1805 | "requires": { 1806 | "@jimp/utils": "^0.8.5", 1807 | "core-js": "^2.5.7" 1808 | } 1809 | }, 1810 | "@jimp/plugins": { 1811 | "version": "0.8.5", 1812 | "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.8.5.tgz", 1813 | "integrity": "sha512-52na0wqfQ3uItIA+C9cJ1EXffhSmABgK7ETClDseUh9oGtynHzxZ97smnFf1ydLjXLrF89Gt+YBxWLyiBGgiZQ==", 1814 | "requires": { 1815 | "@jimp/plugin-blit": "^0.8.5", 1816 | "@jimp/plugin-blur": "^0.8.5", 1817 | "@jimp/plugin-color": "^0.8.5", 1818 | "@jimp/plugin-contain": "^0.8.5", 1819 | "@jimp/plugin-cover": "^0.8.5", 1820 | "@jimp/plugin-crop": "^0.8.5", 1821 | "@jimp/plugin-displace": "^0.8.5", 1822 | "@jimp/plugin-dither": "^0.8.5", 1823 | "@jimp/plugin-flip": "^0.8.5", 1824 | "@jimp/plugin-gaussian": "^0.8.5", 1825 | "@jimp/plugin-invert": "^0.8.5", 1826 | "@jimp/plugin-mask": "^0.8.5", 1827 | "@jimp/plugin-normalize": "^0.8.5", 1828 | "@jimp/plugin-print": "^0.8.5", 1829 | "@jimp/plugin-resize": "^0.8.5", 1830 | "@jimp/plugin-rotate": "^0.8.5", 1831 | "@jimp/plugin-scale": "^0.8.5", 1832 | "core-js": "^2.5.7", 1833 | "timm": "^1.6.1" 1834 | } 1835 | }, 1836 | "@jimp/png": { 1837 | "version": "0.8.5", 1838 | "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.8.5.tgz", 1839 | "integrity": "sha512-zT89ucu8I2rsD3FIMIPLgr1OyKn4neD+5umwD3MY8AOB8+6tX5bFtnmTm3FzGJaJuibkK0wFl87eiaxnb+Megw==", 1840 | "requires": { 1841 | "@jimp/utils": "^0.8.5", 1842 | "core-js": "^2.5.7", 1843 | "pngjs": "^3.3.3" 1844 | } 1845 | }, 1846 | "@jimp/tiff": { 1847 | "version": "0.8.5", 1848 | "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.8.5.tgz", 1849 | "integrity": "sha512-Z7uzDcbHuwDg+hy2+UJQ2s5O6sqYXmv6H1fmSf/2dxBrlGMzl8yTc2/BxLrGREeoidDDMcKmXYGAOp4uCsdJjw==", 1850 | "requires": { 1851 | "core-js": "^2.5.7", 1852 | "utif": "^2.0.1" 1853 | } 1854 | }, 1855 | "@jimp/types": { 1856 | "version": "0.8.5", 1857 | "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.8.5.tgz", 1858 | "integrity": "sha512-XUvpyebZGd1vyFiJyxUT4H9A3mKD7MV2MxjXnay3fNTrcow0UJJspmFw/w+G3TP/1dgrVC4K++gntjR6QWTzvg==", 1859 | "requires": { 1860 | "@jimp/bmp": "^0.8.5", 1861 | "@jimp/gif": "^0.8.5", 1862 | "@jimp/jpeg": "^0.8.5", 1863 | "@jimp/png": "^0.8.5", 1864 | "@jimp/tiff": "^0.8.5", 1865 | "core-js": "^2.5.7", 1866 | "timm": "^1.6.1" 1867 | } 1868 | }, 1869 | "@jimp/utils": { 1870 | "version": "0.8.5", 1871 | "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.8.5.tgz", 1872 | "integrity": "sha512-D3+H4BiopDkhUKvKkZTPPJ53voqOkfMuk3r7YZNcLtXGLkchjjukC4056lNo7B0DzjBgowTYsQM3JjKnYNIYeg==", 1873 | "requires": { 1874 | "core-js": "^2.5.7" 1875 | } 1876 | }, 1877 | "@sindresorhus/is": { 1878 | "version": "0.14.0", 1879 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", 1880 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", 1881 | "dev": true 1882 | }, 1883 | "@szmarczak/http-timer": { 1884 | "version": "1.1.2", 1885 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", 1886 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", 1887 | "dev": true, 1888 | "requires": { 1889 | "defer-to-connect": "^1.0.1" 1890 | } 1891 | }, 1892 | "@types/node": { 1893 | "version": "16.11.59", 1894 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.59.tgz", 1895 | "integrity": "sha512-6u+36Dj3aDzhfBVUf/mfmc92OEdzQ2kx2jcXGdigfl70E/neV21ZHE6UCz4MDzTRcVqGAM27fk+DLXvyDsn3Jw==", 1896 | "dev": true 1897 | }, 1898 | "@types/yauzl": { 1899 | "version": "2.10.0", 1900 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", 1901 | "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", 1902 | "dev": true, 1903 | "optional": true, 1904 | "requires": { 1905 | "@types/node": "*" 1906 | } 1907 | }, 1908 | "any-base": { 1909 | "version": "1.1.0", 1910 | "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", 1911 | "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" 1912 | }, 1913 | "base64-js": { 1914 | "version": "1.5.1", 1915 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 1916 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 1917 | }, 1918 | "bmp-js": { 1919 | "version": "0.1.0", 1920 | "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", 1921 | "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==" 1922 | }, 1923 | "boolean": { 1924 | "version": "3.2.0", 1925 | "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", 1926 | "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", 1927 | "dev": true, 1928 | "optional": true 1929 | }, 1930 | "buffer": { 1931 | "version": "5.7.1", 1932 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 1933 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 1934 | "requires": { 1935 | "base64-js": "^1.3.1", 1936 | "ieee754": "^1.1.13" 1937 | } 1938 | }, 1939 | "buffer-crc32": { 1940 | "version": "0.2.13", 1941 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 1942 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 1943 | "dev": true 1944 | }, 1945 | "buffer-equal": { 1946 | "version": "0.0.1", 1947 | "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", 1948 | "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==" 1949 | }, 1950 | "cacheable-request": { 1951 | "version": "6.1.0", 1952 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", 1953 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", 1954 | "dev": true, 1955 | "requires": { 1956 | "clone-response": "^1.0.2", 1957 | "get-stream": "^5.1.0", 1958 | "http-cache-semantics": "^4.0.0", 1959 | "keyv": "^3.0.0", 1960 | "lowercase-keys": "^2.0.0", 1961 | "normalize-url": "^4.1.0", 1962 | "responselike": "^1.0.2" 1963 | }, 1964 | "dependencies": { 1965 | "lowercase-keys": { 1966 | "version": "2.0.0", 1967 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", 1968 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", 1969 | "dev": true 1970 | } 1971 | } 1972 | }, 1973 | "clone-response": { 1974 | "version": "1.0.3", 1975 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", 1976 | "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", 1977 | "dev": true, 1978 | "requires": { 1979 | "mimic-response": "^1.0.0" 1980 | } 1981 | }, 1982 | "config-chain": { 1983 | "version": "1.1.13", 1984 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", 1985 | "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", 1986 | "dev": true, 1987 | "optional": true, 1988 | "requires": { 1989 | "ini": "^1.3.4", 1990 | "proto-list": "~1.2.1" 1991 | } 1992 | }, 1993 | "core-js": { 1994 | "version": "2.6.12", 1995 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", 1996 | "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" 1997 | }, 1998 | "debug": { 1999 | "version": "4.3.4", 2000 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2001 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2002 | "dev": true, 2003 | "requires": { 2004 | "ms": "2.1.2" 2005 | } 2006 | }, 2007 | "decompress-response": { 2008 | "version": "3.3.0", 2009 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 2010 | "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", 2011 | "dev": true, 2012 | "requires": { 2013 | "mimic-response": "^1.0.0" 2014 | } 2015 | }, 2016 | "defer-to-connect": { 2017 | "version": "1.1.3", 2018 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", 2019 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", 2020 | "dev": true 2021 | }, 2022 | "define-properties": { 2023 | "version": "1.1.4", 2024 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", 2025 | "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", 2026 | "dev": true, 2027 | "optional": true, 2028 | "requires": { 2029 | "has-property-descriptors": "^1.0.0", 2030 | "object-keys": "^1.1.1" 2031 | } 2032 | }, 2033 | "detect-node": { 2034 | "version": "2.1.0", 2035 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", 2036 | "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", 2037 | "dev": true, 2038 | "optional": true 2039 | }, 2040 | "dom-walk": { 2041 | "version": "0.1.2", 2042 | "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", 2043 | "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" 2044 | }, 2045 | "duplexer3": { 2046 | "version": "0.1.5", 2047 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", 2048 | "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", 2049 | "dev": true 2050 | }, 2051 | "electron": { 2052 | "version": "20.2.0", 2053 | "resolved": "https://registry.npmjs.org/electron/-/electron-20.2.0.tgz", 2054 | "integrity": "sha512-qw92PfXaC+fGoqJfQ2U5tVF8ux5HyVwgt1AxAtx6uz+dYcgtPBvfBN1jb+uzZVR+QVd+wCJ8Sqt6TD1ctwTauw==", 2055 | "dev": true, 2056 | "requires": { 2057 | "@electron/get": "^1.14.1", 2058 | "@types/node": "^16.11.26", 2059 | "extract-zip": "^2.0.1" 2060 | } 2061 | }, 2062 | "encodeurl": { 2063 | "version": "1.0.2", 2064 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 2065 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 2066 | "dev": true, 2067 | "optional": true 2068 | }, 2069 | "end-of-stream": { 2070 | "version": "1.4.4", 2071 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 2072 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 2073 | "dev": true, 2074 | "requires": { 2075 | "once": "^1.4.0" 2076 | } 2077 | }, 2078 | "env-paths": { 2079 | "version": "2.2.1", 2080 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 2081 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 2082 | "dev": true 2083 | }, 2084 | "es6-error": { 2085 | "version": "4.1.1", 2086 | "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", 2087 | "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", 2088 | "dev": true, 2089 | "optional": true 2090 | }, 2091 | "escape-string-regexp": { 2092 | "version": "4.0.0", 2093 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2094 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2095 | "dev": true, 2096 | "optional": true 2097 | }, 2098 | "exif-parser": { 2099 | "version": "0.1.12", 2100 | "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", 2101 | "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==" 2102 | }, 2103 | "extract-zip": { 2104 | "version": "2.0.1", 2105 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 2106 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 2107 | "dev": true, 2108 | "requires": { 2109 | "@types/yauzl": "^2.9.1", 2110 | "debug": "^4.1.1", 2111 | "get-stream": "^5.1.0", 2112 | "yauzl": "^2.10.0" 2113 | } 2114 | }, 2115 | "fd-slicer": { 2116 | "version": "1.1.0", 2117 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 2118 | "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", 2119 | "dev": true, 2120 | "requires": { 2121 | "pend": "~1.2.0" 2122 | } 2123 | }, 2124 | "file-type": { 2125 | "version": "12.4.2", 2126 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", 2127 | "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==" 2128 | }, 2129 | "fs-extra": { 2130 | "version": "8.1.0", 2131 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 2132 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", 2133 | "dev": true, 2134 | "requires": { 2135 | "graceful-fs": "^4.2.0", 2136 | "jsonfile": "^4.0.0", 2137 | "universalify": "^0.1.0" 2138 | } 2139 | }, 2140 | "function-bind": { 2141 | "version": "1.1.1", 2142 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2143 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 2144 | "dev": true, 2145 | "optional": true 2146 | }, 2147 | "get-intrinsic": { 2148 | "version": "1.1.3", 2149 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", 2150 | "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", 2151 | "dev": true, 2152 | "optional": true, 2153 | "requires": { 2154 | "function-bind": "^1.1.1", 2155 | "has": "^1.0.3", 2156 | "has-symbols": "^1.0.3" 2157 | } 2158 | }, 2159 | "get-stream": { 2160 | "version": "5.2.0", 2161 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 2162 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 2163 | "dev": true, 2164 | "requires": { 2165 | "pump": "^3.0.0" 2166 | } 2167 | }, 2168 | "global": { 2169 | "version": "4.4.0", 2170 | "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", 2171 | "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", 2172 | "requires": { 2173 | "min-document": "^2.19.0", 2174 | "process": "^0.11.10" 2175 | } 2176 | }, 2177 | "global-agent": { 2178 | "version": "3.0.0", 2179 | "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", 2180 | "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", 2181 | "dev": true, 2182 | "optional": true, 2183 | "requires": { 2184 | "boolean": "^3.0.1", 2185 | "es6-error": "^4.1.1", 2186 | "matcher": "^3.0.0", 2187 | "roarr": "^2.15.3", 2188 | "semver": "^7.3.2", 2189 | "serialize-error": "^7.0.1" 2190 | }, 2191 | "dependencies": { 2192 | "semver": { 2193 | "version": "7.3.7", 2194 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", 2195 | "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", 2196 | "dev": true, 2197 | "optional": true, 2198 | "requires": { 2199 | "lru-cache": "^6.0.0" 2200 | } 2201 | } 2202 | } 2203 | }, 2204 | "global-tunnel-ng": { 2205 | "version": "2.7.1", 2206 | "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", 2207 | "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", 2208 | "dev": true, 2209 | "optional": true, 2210 | "requires": { 2211 | "encodeurl": "^1.0.2", 2212 | "lodash": "^4.17.10", 2213 | "npm-conf": "^1.1.3", 2214 | "tunnel": "^0.0.6" 2215 | } 2216 | }, 2217 | "globalthis": { 2218 | "version": "1.0.3", 2219 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", 2220 | "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", 2221 | "dev": true, 2222 | "optional": true, 2223 | "requires": { 2224 | "define-properties": "^1.1.3" 2225 | } 2226 | }, 2227 | "got": { 2228 | "version": "9.6.0", 2229 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", 2230 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", 2231 | "dev": true, 2232 | "requires": { 2233 | "@sindresorhus/is": "^0.14.0", 2234 | "@szmarczak/http-timer": "^1.1.2", 2235 | "cacheable-request": "^6.0.0", 2236 | "decompress-response": "^3.3.0", 2237 | "duplexer3": "^0.1.4", 2238 | "get-stream": "^4.1.0", 2239 | "lowercase-keys": "^1.0.1", 2240 | "mimic-response": "^1.0.1", 2241 | "p-cancelable": "^1.0.0", 2242 | "to-readable-stream": "^1.0.0", 2243 | "url-parse-lax": "^3.0.0" 2244 | }, 2245 | "dependencies": { 2246 | "get-stream": { 2247 | "version": "4.1.0", 2248 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 2249 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 2250 | "dev": true, 2251 | "requires": { 2252 | "pump": "^3.0.0" 2253 | } 2254 | } 2255 | } 2256 | }, 2257 | "graceful-fs": { 2258 | "version": "4.2.10", 2259 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 2260 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 2261 | "dev": true 2262 | }, 2263 | "has": { 2264 | "version": "1.0.3", 2265 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2266 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2267 | "dev": true, 2268 | "optional": true, 2269 | "requires": { 2270 | "function-bind": "^1.1.1" 2271 | } 2272 | }, 2273 | "has-property-descriptors": { 2274 | "version": "1.0.0", 2275 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", 2276 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", 2277 | "dev": true, 2278 | "optional": true, 2279 | "requires": { 2280 | "get-intrinsic": "^1.1.1" 2281 | } 2282 | }, 2283 | "has-symbols": { 2284 | "version": "1.0.3", 2285 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 2286 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 2287 | "dev": true, 2288 | "optional": true 2289 | }, 2290 | "http-cache-semantics": { 2291 | "version": "4.1.0", 2292 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", 2293 | "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", 2294 | "dev": true 2295 | }, 2296 | "ieee754": { 2297 | "version": "1.2.1", 2298 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 2299 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 2300 | }, 2301 | "ini": { 2302 | "version": "1.3.8", 2303 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 2304 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 2305 | "dev": true, 2306 | "optional": true 2307 | }, 2308 | "is-function": { 2309 | "version": "1.0.2", 2310 | "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", 2311 | "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" 2312 | }, 2313 | "jimp": { 2314 | "version": "0.8.5", 2315 | "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.8.5.tgz", 2316 | "integrity": "sha512-BW7t/+TCgKpqZw/wHFwqF/A/Tyk43RmzRHyMBdqfOepqunUrajt0RTqowdWyFo4CS2FmD8pFiYfefWjpXFWrCA==", 2317 | "requires": { 2318 | "@jimp/custom": "^0.8.5", 2319 | "@jimp/plugins": "^0.8.5", 2320 | "@jimp/types": "^0.8.5", 2321 | "core-js": "^2.5.7", 2322 | "regenerator-runtime": "^0.13.3" 2323 | } 2324 | }, 2325 | "jpeg-js": { 2326 | "version": "0.3.7", 2327 | "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz", 2328 | "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==" 2329 | }, 2330 | "json-buffer": { 2331 | "version": "3.0.0", 2332 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 2333 | "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", 2334 | "dev": true 2335 | }, 2336 | "json-stringify-safe": { 2337 | "version": "5.0.1", 2338 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 2339 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", 2340 | "dev": true, 2341 | "optional": true 2342 | }, 2343 | "jsonfile": { 2344 | "version": "4.0.0", 2345 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 2346 | "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", 2347 | "dev": true, 2348 | "requires": { 2349 | "graceful-fs": "^4.1.6" 2350 | } 2351 | }, 2352 | "keyv": { 2353 | "version": "3.1.0", 2354 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", 2355 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", 2356 | "dev": true, 2357 | "requires": { 2358 | "json-buffer": "3.0.0" 2359 | } 2360 | }, 2361 | "load-bmfont": { 2362 | "version": "1.4.1", 2363 | "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", 2364 | "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", 2365 | "requires": { 2366 | "buffer-equal": "0.0.1", 2367 | "mime": "^1.3.4", 2368 | "parse-bmfont-ascii": "^1.0.3", 2369 | "parse-bmfont-binary": "^1.0.5", 2370 | "parse-bmfont-xml": "^1.1.4", 2371 | "phin": "^2.9.1", 2372 | "xhr": "^2.0.1", 2373 | "xtend": "^4.0.0" 2374 | } 2375 | }, 2376 | "lodash": { 2377 | "version": "4.17.21", 2378 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2379 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 2380 | "dev": true, 2381 | "optional": true 2382 | }, 2383 | "lowercase-keys": { 2384 | "version": "1.0.1", 2385 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 2386 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 2387 | "dev": true 2388 | }, 2389 | "lru-cache": { 2390 | "version": "6.0.0", 2391 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2392 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2393 | "dev": true, 2394 | "optional": true, 2395 | "requires": { 2396 | "yallist": "^4.0.0" 2397 | } 2398 | }, 2399 | "matcher": { 2400 | "version": "3.0.0", 2401 | "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", 2402 | "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", 2403 | "dev": true, 2404 | "optional": true, 2405 | "requires": { 2406 | "escape-string-regexp": "^4.0.0" 2407 | } 2408 | }, 2409 | "mime": { 2410 | "version": "1.6.0", 2411 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 2412 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 2413 | }, 2414 | "mimic-response": { 2415 | "version": "1.0.1", 2416 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 2417 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 2418 | "dev": true 2419 | }, 2420 | "min-document": { 2421 | "version": "2.19.0", 2422 | "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", 2423 | "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", 2424 | "requires": { 2425 | "dom-walk": "^0.1.0" 2426 | } 2427 | }, 2428 | "minimist": { 2429 | "version": "0.0.8", 2430 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 2431 | "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==" 2432 | }, 2433 | "mkdirp": { 2434 | "version": "0.5.1", 2435 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 2436 | "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", 2437 | "requires": { 2438 | "minimist": "0.0.8" 2439 | } 2440 | }, 2441 | "ms": { 2442 | "version": "2.1.2", 2443 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2444 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2445 | "dev": true 2446 | }, 2447 | "normalize-url": { 2448 | "version": "4.5.1", 2449 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", 2450 | "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", 2451 | "dev": true 2452 | }, 2453 | "npm-conf": { 2454 | "version": "1.1.3", 2455 | "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", 2456 | "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", 2457 | "dev": true, 2458 | "optional": true, 2459 | "requires": { 2460 | "config-chain": "^1.1.11", 2461 | "pify": "^3.0.0" 2462 | } 2463 | }, 2464 | "object-keys": { 2465 | "version": "1.1.1", 2466 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2467 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 2468 | "dev": true, 2469 | "optional": true 2470 | }, 2471 | "omggif": { 2472 | "version": "1.0.10", 2473 | "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", 2474 | "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" 2475 | }, 2476 | "once": { 2477 | "version": "1.4.0", 2478 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2479 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2480 | "dev": true, 2481 | "requires": { 2482 | "wrappy": "1" 2483 | } 2484 | }, 2485 | "p-cancelable": { 2486 | "version": "1.1.0", 2487 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", 2488 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", 2489 | "dev": true 2490 | }, 2491 | "pako": { 2492 | "version": "1.0.11", 2493 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", 2494 | "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" 2495 | }, 2496 | "parse-bmfont-ascii": { 2497 | "version": "1.0.6", 2498 | "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", 2499 | "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==" 2500 | }, 2501 | "parse-bmfont-binary": { 2502 | "version": "1.0.6", 2503 | "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", 2504 | "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==" 2505 | }, 2506 | "parse-bmfont-xml": { 2507 | "version": "1.1.4", 2508 | "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", 2509 | "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", 2510 | "requires": { 2511 | "xml-parse-from-string": "^1.0.0", 2512 | "xml2js": "^0.4.5" 2513 | } 2514 | }, 2515 | "parse-headers": { 2516 | "version": "2.0.5", 2517 | "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", 2518 | "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" 2519 | }, 2520 | "pend": { 2521 | "version": "1.2.0", 2522 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 2523 | "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", 2524 | "dev": true 2525 | }, 2526 | "phin": { 2527 | "version": "2.9.3", 2528 | "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", 2529 | "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" 2530 | }, 2531 | "pify": { 2532 | "version": "3.0.0", 2533 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 2534 | "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", 2535 | "dev": true, 2536 | "optional": true 2537 | }, 2538 | "pixelmatch": { 2539 | "version": "4.0.2", 2540 | "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", 2541 | "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==", 2542 | "requires": { 2543 | "pngjs": "^3.0.0" 2544 | } 2545 | }, 2546 | "pngjs": { 2547 | "version": "3.4.0", 2548 | "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", 2549 | "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" 2550 | }, 2551 | "prepend-http": { 2552 | "version": "2.0.0", 2553 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 2554 | "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", 2555 | "dev": true 2556 | }, 2557 | "process": { 2558 | "version": "0.11.10", 2559 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 2560 | "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" 2561 | }, 2562 | "progress": { 2563 | "version": "2.0.3", 2564 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 2565 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 2566 | "dev": true 2567 | }, 2568 | "proto-list": { 2569 | "version": "1.2.4", 2570 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", 2571 | "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", 2572 | "dev": true, 2573 | "optional": true 2574 | }, 2575 | "pump": { 2576 | "version": "3.0.0", 2577 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 2578 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 2579 | "dev": true, 2580 | "requires": { 2581 | "end-of-stream": "^1.1.0", 2582 | "once": "^1.3.1" 2583 | } 2584 | }, 2585 | "regenerator-runtime": { 2586 | "version": "0.13.9", 2587 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", 2588 | "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" 2589 | }, 2590 | "resize-img": { 2591 | "version": "2.0.0", 2592 | "resolved": "https://registry.npmjs.org/resize-img/-/resize-img-2.0.0.tgz", 2593 | "integrity": "sha512-im2Kn4CY0c7JGdYXwL7g77T8AUi15YQeEBmmpWuglrcPFq4Di53tIvLXlbasW7UKed9GaZCza/OSxOJrmB0jbg==", 2594 | "requires": { 2595 | "file-type": "^12.3.0", 2596 | "jimp": "^0.8.3" 2597 | } 2598 | }, 2599 | "responselike": { 2600 | "version": "1.0.2", 2601 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 2602 | "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", 2603 | "dev": true, 2604 | "requires": { 2605 | "lowercase-keys": "^1.0.0" 2606 | } 2607 | }, 2608 | "roarr": { 2609 | "version": "2.15.4", 2610 | "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", 2611 | "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", 2612 | "dev": true, 2613 | "optional": true, 2614 | "requires": { 2615 | "boolean": "^3.0.1", 2616 | "detect-node": "^2.0.4", 2617 | "globalthis": "^1.0.1", 2618 | "json-stringify-safe": "^5.0.1", 2619 | "semver-compare": "^1.0.0", 2620 | "sprintf-js": "^1.1.2" 2621 | } 2622 | }, 2623 | "sax": { 2624 | "version": "1.2.4", 2625 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 2626 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 2627 | }, 2628 | "semver": { 2629 | "version": "6.3.0", 2630 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2631 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 2632 | "dev": true 2633 | }, 2634 | "semver-compare": { 2635 | "version": "1.0.0", 2636 | "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", 2637 | "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", 2638 | "dev": true, 2639 | "optional": true 2640 | }, 2641 | "serialize-error": { 2642 | "version": "7.0.1", 2643 | "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", 2644 | "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", 2645 | "dev": true, 2646 | "optional": true, 2647 | "requires": { 2648 | "type-fest": "^0.13.1" 2649 | } 2650 | }, 2651 | "sprintf-js": { 2652 | "version": "1.1.2", 2653 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", 2654 | "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", 2655 | "dev": true, 2656 | "optional": true 2657 | }, 2658 | "sumchecker": { 2659 | "version": "3.0.1", 2660 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", 2661 | "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", 2662 | "dev": true, 2663 | "requires": { 2664 | "debug": "^4.1.0" 2665 | } 2666 | }, 2667 | "timm": { 2668 | "version": "1.7.1", 2669 | "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", 2670 | "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" 2671 | }, 2672 | "tinycolor2": { 2673 | "version": "1.4.2", 2674 | "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", 2675 | "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" 2676 | }, 2677 | "to-readable-stream": { 2678 | "version": "1.0.0", 2679 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", 2680 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", 2681 | "dev": true 2682 | }, 2683 | "toastify-js": { 2684 | "version": "1.12.0", 2685 | "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.12.0.tgz", 2686 | "integrity": "sha512-HeMHCO9yLPvP9k0apGSdPUWrUbLnxUKNFzgUoZp1PHCLploIX/4DSQ7V8H25ef+h4iO9n0he7ImfcndnN6nDrQ==" 2687 | }, 2688 | "tunnel": { 2689 | "version": "0.0.6", 2690 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 2691 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 2692 | "dev": true, 2693 | "optional": true 2694 | }, 2695 | "type-fest": { 2696 | "version": "0.13.1", 2697 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", 2698 | "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", 2699 | "dev": true, 2700 | "optional": true 2701 | }, 2702 | "universalify": { 2703 | "version": "0.1.2", 2704 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 2705 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", 2706 | "dev": true 2707 | }, 2708 | "url-parse-lax": { 2709 | "version": "3.0.0", 2710 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 2711 | "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", 2712 | "dev": true, 2713 | "requires": { 2714 | "prepend-http": "^2.0.0" 2715 | } 2716 | }, 2717 | "utif": { 2718 | "version": "2.0.1", 2719 | "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", 2720 | "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", 2721 | "requires": { 2722 | "pako": "^1.0.5" 2723 | } 2724 | }, 2725 | "wrappy": { 2726 | "version": "1.0.2", 2727 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2728 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2729 | "dev": true 2730 | }, 2731 | "xhr": { 2732 | "version": "2.6.0", 2733 | "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", 2734 | "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", 2735 | "requires": { 2736 | "global": "~4.4.0", 2737 | "is-function": "^1.0.1", 2738 | "parse-headers": "^2.0.0", 2739 | "xtend": "^4.0.0" 2740 | } 2741 | }, 2742 | "xml-parse-from-string": { 2743 | "version": "1.0.1", 2744 | "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", 2745 | "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==" 2746 | }, 2747 | "xml2js": { 2748 | "version": "0.4.23", 2749 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", 2750 | "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", 2751 | "requires": { 2752 | "sax": ">=0.6.0", 2753 | "xmlbuilder": "~11.0.0" 2754 | } 2755 | }, 2756 | "xmlbuilder": { 2757 | "version": "11.0.1", 2758 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 2759 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" 2760 | }, 2761 | "xtend": { 2762 | "version": "4.0.2", 2763 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 2764 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 2765 | }, 2766 | "yallist": { 2767 | "version": "4.0.0", 2768 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2769 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 2770 | "dev": true, 2771 | "optional": true 2772 | }, 2773 | "yauzl": { 2774 | "version": "2.10.0", 2775 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 2776 | "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", 2777 | "dev": true, 2778 | "requires": { 2779 | "buffer-crc32": "~0.2.3", 2780 | "fd-slicer": "~1.1.0" 2781 | } 2782 | } 2783 | } 2784 | } 2785 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "imageresizer", 3 | "productName":"ImageResizer", 4 | "version": "1.0.0", 5 | "description": "", 6 | "main": "main.js", 7 | "scripts": { 8 | "start": "electron ." 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "devDependencies": { 14 | "electron": "^20.2.0" 15 | }, 16 | "dependencies": { 17 | "resize-img": "^2.0.0", 18 | "toastify-js": "^1.12.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /preload.js: -------------------------------------------------------------------------------- 1 | const os = require('os'); 2 | const path = require('path'); 3 | const { contextBridge, ipcRenderer } = require('electron'); 4 | const Toastify = require('toastify-js'); 5 | 6 | contextBridge.exposeInMainWorld('os', { 7 | homedir: () => os.homedir(), 8 | }); 9 | 10 | contextBridge.exposeInMainWorld('path', { 11 | join: (...args) => path.join(...args), 12 | }); 13 | 14 | contextBridge.exposeInMainWorld('ipcRenderer', { 15 | send: (channel, data) => ipcRenderer.send(channel, data), 16 | on: (channel, func) => 17 | ipcRenderer.on(channel, (event, ...args) => func(...args)), 18 | }); 19 | 20 | contextBridge.exposeInMainWorld('Toastify', { 21 | toast: (options) => Toastify(options).showToast(), 22 | }); 23 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Image Resizer 2 | 3 | Electron application that allows you to select an image and easily change the width and/or height. 4 | 5 |
6 | 7 |
8 | 9 | ## Usage 10 | 11 | Install dependencies: 12 | 13 | ```bash 14 | 15 | npm install 16 | ``` 17 | 18 | Run: 19 | 20 | ```bash 21 | npm start 22 | ``` 23 | 24 | You can also use `Electronmon` to constantly run and not have to reload after making changes 25 | 26 | ```bash 27 | npx electronmon . 28 | ``` 29 | 30 | ## Packaging 31 | 32 | There are multiple ways to package Electron apps. I would suggest [Electron Forge](https://www.electronforge.io/). I did not implement any packaging into this app. 33 | 34 | ## Developer Mode 35 | 36 | If your `NODE_ENV` is set to `development` then you will have the dev tools enabled and available in the menu bar. It will also open them by default. 37 | 38 | When set to `production`, the dev tools will not be available. -------------------------------------------------------------------------------- /renderer/about.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | About ImageShrink 12 | 13 | 14 |
17 | ImageResizer 23 |

FileResizer App

24 |

Version 1.0.0

25 |

MIT License

26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /renderer/css/style.css: -------------------------------------------------------------------------------- 1 | /* 2 | ! tailwindcss v3.1.8 | MIT License | https://tailwindcss.com 3 | */ 4 | 5 | /* 6 | 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 7 | 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) 8 | */ 9 | 10 | *, 11 | ::before, 12 | ::after { 13 | box-sizing: border-box; 14 | /* 1 */ 15 | border-width: 0; 16 | /* 2 */ 17 | border-style: solid; 18 | /* 2 */ 19 | border-color: #e5e7eb; 20 | /* 2 */ 21 | } 22 | 23 | ::before, 24 | ::after { 25 | --tw-content: ''; 26 | } 27 | 28 | /* 29 | 1. Use a consistent sensible line-height in all browsers. 30 | 2. Prevent adjustments of font size after orientation changes in iOS. 31 | 3. Use a more readable tab size. 32 | 4. Use the user's configured `sans` font-family by default. 33 | */ 34 | 35 | html { 36 | line-height: 1.5; 37 | /* 1 */ 38 | -webkit-text-size-adjust: 100%; 39 | /* 2 */ 40 | -moz-tab-size: 4; 41 | /* 3 */ 42 | -o-tab-size: 4; 43 | tab-size: 4; 44 | /* 3 */ 45 | font-family: Poppins, sans-serif; 46 | /* 4 */ 47 | } 48 | 49 | /* 50 | 1. Remove the margin in all browsers. 51 | 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. 52 | */ 53 | 54 | body { 55 | margin: 0; 56 | /* 1 */ 57 | line-height: inherit; 58 | /* 2 */ 59 | overflow: hidden; 60 | } 61 | 62 | /* 63 | 1. Add the correct height in Firefox. 64 | 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 65 | 3. Ensure horizontal rules are visible by default. 66 | */ 67 | 68 | hr { 69 | height: 0; 70 | /* 1 */ 71 | color: inherit; 72 | /* 2 */ 73 | border-top-width: 1px; 74 | /* 3 */ 75 | } 76 | 77 | /* 78 | Add the correct text decoration in Chrome, Edge, and Safari. 79 | */ 80 | 81 | abbr:where([title]) { 82 | -webkit-text-decoration: underline dotted; 83 | text-decoration: underline dotted; 84 | } 85 | 86 | /* 87 | Remove the default font size and weight for headings. 88 | */ 89 | 90 | h1, 91 | h2, 92 | h3, 93 | h4, 94 | h5, 95 | h6 { 96 | font-size: inherit; 97 | font-weight: inherit; 98 | } 99 | 100 | /* 101 | Reset links to optimize for opt-in styling instead of opt-out. 102 | */ 103 | 104 | a { 105 | color: inherit; 106 | text-decoration: inherit; 107 | } 108 | 109 | /* 110 | Add the correct font weight in Edge and Safari. 111 | */ 112 | 113 | b, 114 | strong { 115 | font-weight: bolder; 116 | } 117 | 118 | /* 119 | 1. Use the user's configured `mono` font family by default. 120 | 2. Correct the odd `em` font sizing in all browsers. 121 | */ 122 | 123 | code, 124 | kbd, 125 | samp, 126 | pre { 127 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 128 | 'Liberation Mono', 'Courier New', monospace; 129 | /* 1 */ 130 | font-size: 1em; 131 | /* 2 */ 132 | } 133 | 134 | /* 135 | Add the correct font size in all browsers. 136 | */ 137 | 138 | small { 139 | font-size: 80%; 140 | } 141 | 142 | /* 143 | Prevent `sub` and `sup` elements from affecting the line height in all browsers. 144 | */ 145 | 146 | sub, 147 | sup { 148 | font-size: 75%; 149 | line-height: 0; 150 | position: relative; 151 | vertical-align: baseline; 152 | } 153 | 154 | sub { 155 | bottom: -0.25em; 156 | } 157 | 158 | sup { 159 | top: -0.5em; 160 | } 161 | 162 | /* 163 | 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 164 | 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 165 | 3. Remove gaps between table borders by default. 166 | */ 167 | 168 | table { 169 | text-indent: 0; 170 | /* 1 */ 171 | border-color: inherit; 172 | /* 2 */ 173 | border-collapse: collapse; 174 | /* 3 */ 175 | } 176 | 177 | /* 178 | 1. Change the font styles in all browsers. 179 | 2. Remove the margin in Firefox and Safari. 180 | 3. Remove default padding in all browsers. 181 | */ 182 | 183 | button, 184 | input, 185 | optgroup, 186 | select, 187 | textarea { 188 | font-family: inherit; 189 | /* 1 */ 190 | font-size: 100%; 191 | /* 1 */ 192 | font-weight: inherit; 193 | /* 1 */ 194 | line-height: inherit; 195 | /* 1 */ 196 | color: inherit; 197 | /* 1 */ 198 | margin: 0; 199 | /* 2 */ 200 | padding: 0; 201 | /* 3 */ 202 | } 203 | 204 | /* 205 | Remove the inheritance of text transform in Edge and Firefox. 206 | */ 207 | 208 | button, 209 | select { 210 | text-transform: none; 211 | } 212 | 213 | /* 214 | 1. Correct the inability to style clickable types in iOS and Safari. 215 | 2. Remove default button styles. 216 | */ 217 | 218 | button, 219 | [type='button'], 220 | [type='reset'], 221 | [type='submit'] { 222 | -webkit-appearance: button; 223 | /* 1 */ 224 | background-color: transparent; 225 | /* 2 */ 226 | background-image: none; 227 | /* 2 */ 228 | } 229 | 230 | /* 231 | Use the modern Firefox focus style for all focusable elements. 232 | */ 233 | 234 | :-moz-focusring { 235 | outline: auto; 236 | } 237 | 238 | /* 239 | Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) 240 | */ 241 | 242 | :-moz-ui-invalid { 243 | box-shadow: none; 244 | } 245 | 246 | /* 247 | Add the correct vertical alignment in Chrome and Firefox. 248 | */ 249 | 250 | progress { 251 | vertical-align: baseline; 252 | } 253 | 254 | /* 255 | Correct the cursor style of increment and decrement buttons in Safari. 256 | */ 257 | 258 | ::-webkit-inner-spin-button, 259 | ::-webkit-outer-spin-button { 260 | height: auto; 261 | } 262 | 263 | /* 264 | 1. Correct the odd appearance in Chrome and Safari. 265 | 2. Correct the outline style in Safari. 266 | */ 267 | 268 | [type='search'] { 269 | -webkit-appearance: textfield; 270 | /* 1 */ 271 | outline-offset: -2px; 272 | /* 2 */ 273 | } 274 | 275 | /* 276 | Remove the inner padding in Chrome and Safari on macOS. 277 | */ 278 | 279 | ::-webkit-search-decoration { 280 | -webkit-appearance: none; 281 | } 282 | 283 | /* 284 | 1. Correct the inability to style clickable types in iOS and Safari. 285 | 2. Change font properties to `inherit` in Safari. 286 | */ 287 | 288 | ::-webkit-file-upload-button { 289 | -webkit-appearance: button; 290 | /* 1 */ 291 | font: inherit; 292 | /* 2 */ 293 | } 294 | 295 | /* 296 | Add the correct display in Chrome and Safari. 297 | */ 298 | 299 | summary { 300 | display: list-item; 301 | } 302 | 303 | /* 304 | Removes the default spacing and border for appropriate elements. 305 | */ 306 | 307 | blockquote, 308 | dl, 309 | dd, 310 | h1, 311 | h2, 312 | h3, 313 | h4, 314 | h5, 315 | h6, 316 | hr, 317 | figure, 318 | p, 319 | pre { 320 | margin: 0; 321 | } 322 | 323 | fieldset { 324 | margin: 0; 325 | padding: 0; 326 | } 327 | 328 | legend { 329 | padding: 0; 330 | } 331 | 332 | ol, 333 | ul, 334 | menu { 335 | list-style: none; 336 | margin: 0; 337 | padding: 0; 338 | } 339 | 340 | /* 341 | Prevent resizing textareas horizontally by default. 342 | */ 343 | 344 | textarea { 345 | resize: vertical; 346 | } 347 | 348 | /* 349 | 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 350 | 2. Set the default placeholder color to the user's configured gray 400 color. 351 | */ 352 | 353 | input::-moz-placeholder, 354 | textarea::-moz-placeholder { 355 | opacity: 1; 356 | /* 1 */ 357 | color: #9ca3af; 358 | /* 2 */ 359 | } 360 | 361 | input::placeholder, 362 | textarea::placeholder { 363 | opacity: 1; 364 | /* 1 */ 365 | color: #9ca3af; 366 | /* 2 */ 367 | } 368 | 369 | /* 370 | Set the default cursor for buttons. 371 | */ 372 | 373 | button, 374 | [role='button'] { 375 | cursor: pointer; 376 | } 377 | 378 | /* 379 | Make sure disabled buttons don't get the pointer cursor. 380 | */ 381 | 382 | :disabled { 383 | cursor: default; 384 | } 385 | 386 | /* 387 | 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 388 | 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) 389 | This can trigger a poorly considered lint error in some tools but is included by design. 390 | */ 391 | 392 | img, 393 | svg, 394 | video, 395 | canvas, 396 | audio, 397 | iframe, 398 | embed, 399 | object { 400 | display: block; 401 | /* 1 */ 402 | vertical-align: middle; 403 | /* 2 */ 404 | } 405 | 406 | /* 407 | Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) 408 | */ 409 | 410 | img, 411 | video { 412 | max-width: 100%; 413 | height: auto; 414 | } 415 | 416 | *, 417 | ::before, 418 | ::after { 419 | --tw-border-spacing-x: 0; 420 | --tw-border-spacing-y: 0; 421 | --tw-translate-x: 0; 422 | --tw-translate-y: 0; 423 | --tw-rotate: 0; 424 | --tw-skew-x: 0; 425 | --tw-skew-y: 0; 426 | --tw-scale-x: 1; 427 | --tw-scale-y: 1; 428 | --tw-pan-x: ; 429 | --tw-pan-y: ; 430 | --tw-pinch-zoom: ; 431 | --tw-scroll-snap-strictness: proximity; 432 | --tw-ordinal: ; 433 | --tw-slashed-zero: ; 434 | --tw-numeric-figure: ; 435 | --tw-numeric-spacing: ; 436 | --tw-numeric-fraction: ; 437 | --tw-ring-inset: ; 438 | --tw-ring-offset-width: 0px; 439 | --tw-ring-offset-color: #fff; 440 | --tw-ring-color: rgb(59 130 246 / 0.5); 441 | --tw-ring-offset-shadow: 0 0 #0000; 442 | --tw-ring-shadow: 0 0 #0000; 443 | --tw-shadow: 0 0 #0000; 444 | --tw-shadow-colored: 0 0 #0000; 445 | --tw-blur: ; 446 | --tw-brightness: ; 447 | --tw-contrast: ; 448 | --tw-grayscale: ; 449 | --tw-hue-rotate: ; 450 | --tw-invert: ; 451 | --tw-saturate: ; 452 | --tw-sepia: ; 453 | --tw-drop-shadow: ; 454 | --tw-backdrop-blur: ; 455 | --tw-backdrop-brightness: ; 456 | --tw-backdrop-contrast: ; 457 | --tw-backdrop-grayscale: ; 458 | --tw-backdrop-hue-rotate: ; 459 | --tw-backdrop-invert: ; 460 | --tw-backdrop-opacity: ; 461 | --tw-backdrop-saturate: ; 462 | --tw-backdrop-sepia: ; 463 | } 464 | 465 | ::-webkit-backdrop { 466 | --tw-border-spacing-x: 0; 467 | --tw-border-spacing-y: 0; 468 | --tw-translate-x: 0; 469 | --tw-translate-y: 0; 470 | --tw-rotate: 0; 471 | --tw-skew-x: 0; 472 | --tw-skew-y: 0; 473 | --tw-scale-x: 1; 474 | --tw-scale-y: 1; 475 | --tw-pan-x: ; 476 | --tw-pan-y: ; 477 | --tw-pinch-zoom: ; 478 | --tw-scroll-snap-strictness: proximity; 479 | --tw-ordinal: ; 480 | --tw-slashed-zero: ; 481 | --tw-numeric-figure: ; 482 | --tw-numeric-spacing: ; 483 | --tw-numeric-fraction: ; 484 | --tw-ring-inset: ; 485 | --tw-ring-offset-width: 0px; 486 | --tw-ring-offset-color: #fff; 487 | --tw-ring-color: rgb(59 130 246 / 0.5); 488 | --tw-ring-offset-shadow: 0 0 #0000; 489 | --tw-ring-shadow: 0 0 #0000; 490 | --tw-shadow: 0 0 #0000; 491 | --tw-shadow-colored: 0 0 #0000; 492 | --tw-blur: ; 493 | --tw-brightness: ; 494 | --tw-contrast: ; 495 | --tw-grayscale: ; 496 | --tw-hue-rotate: ; 497 | --tw-invert: ; 498 | --tw-saturate: ; 499 | --tw-sepia: ; 500 | --tw-drop-shadow: ; 501 | --tw-backdrop-blur: ; 502 | --tw-backdrop-brightness: ; 503 | --tw-backdrop-contrast: ; 504 | --tw-backdrop-grayscale: ; 505 | --tw-backdrop-hue-rotate: ; 506 | --tw-backdrop-invert: ; 507 | --tw-backdrop-opacity: ; 508 | --tw-backdrop-saturate: ; 509 | --tw-backdrop-sepia: ; 510 | } 511 | 512 | ::backdrop { 513 | --tw-border-spacing-x: 0; 514 | --tw-border-spacing-y: 0; 515 | --tw-translate-x: 0; 516 | --tw-translate-y: 0; 517 | --tw-rotate: 0; 518 | --tw-skew-x: 0; 519 | --tw-skew-y: 0; 520 | --tw-scale-x: 1; 521 | --tw-scale-y: 1; 522 | --tw-pan-x: ; 523 | --tw-pan-y: ; 524 | --tw-pinch-zoom: ; 525 | --tw-scroll-snap-strictness: proximity; 526 | --tw-ordinal: ; 527 | --tw-slashed-zero: ; 528 | --tw-numeric-figure: ; 529 | --tw-numeric-spacing: ; 530 | --tw-numeric-fraction: ; 531 | --tw-ring-inset: ; 532 | --tw-ring-offset-width: 0px; 533 | --tw-ring-offset-color: #fff; 534 | --tw-ring-color: rgb(59 130 246 / 0.5); 535 | --tw-ring-offset-shadow: 0 0 #0000; 536 | --tw-ring-shadow: 0 0 #0000; 537 | --tw-shadow: 0 0 #0000; 538 | --tw-shadow-colored: 0 0 #0000; 539 | --tw-blur: ; 540 | --tw-brightness: ; 541 | --tw-contrast: ; 542 | --tw-grayscale: ; 543 | --tw-hue-rotate: ; 544 | --tw-invert: ; 545 | --tw-saturate: ; 546 | --tw-sepia: ; 547 | --tw-drop-shadow: ; 548 | --tw-backdrop-blur: ; 549 | --tw-backdrop-brightness: ; 550 | --tw-backdrop-contrast: ; 551 | --tw-backdrop-grayscale: ; 552 | --tw-backdrop-hue-rotate: ; 553 | --tw-backdrop-invert: ; 554 | --tw-backdrop-opacity: ; 555 | --tw-backdrop-saturate: ; 556 | --tw-backdrop-sepia: ; 557 | } 558 | 559 | .m-auto { 560 | margin: auto; 561 | } 562 | 563 | .mx-auto { 564 | margin-left: auto; 565 | margin-right: auto; 566 | } 567 | 568 | .mb-5 { 569 | margin-bottom: 1.25rem; 570 | } 571 | 572 | .mt-2 { 573 | margin-top: 0.5rem; 574 | } 575 | 576 | .mt-6 { 577 | margin-top: 1.5rem; 578 | } 579 | 580 | .mt-1 { 581 | margin-top: 0.25rem; 582 | } 583 | 584 | .mt-4 { 585 | margin-top: 1rem; 586 | } 587 | 588 | .block { 589 | display: block; 590 | } 591 | 592 | .flex { 593 | display: flex; 594 | } 595 | 596 | .hidden { 597 | display: none; 598 | } 599 | 600 | .h-screen { 601 | height: 100vh; 602 | } 603 | 604 | .w-full { 605 | width: 100%; 606 | } 607 | 608 | .w-64 { 609 | width: 16rem; 610 | } 611 | 612 | .w-80 { 613 | width: 20rem; 614 | } 615 | 616 | .max-w-xl { 617 | max-width: 36rem; 618 | } 619 | 620 | .cursor-pointer { 621 | cursor: pointer; 622 | } 623 | 624 | .resize { 625 | resize: both; 626 | } 627 | 628 | .flex-col { 629 | flex-direction: column; 630 | } 631 | 632 | .items-center { 633 | align-items: center; 634 | } 635 | 636 | .justify-center { 637 | justify-content: center; 638 | } 639 | 640 | .rounded-lg { 641 | border-radius: 0.5rem; 642 | } 643 | 644 | .rounded-md { 645 | border-radius: 0.375rem; 646 | } 647 | 648 | .border { 649 | border-width: 1px; 650 | } 651 | 652 | .border-gray-300 { 653 | --tw-border-opacity: 1; 654 | border-color: rgb(209 213 219 / var(--tw-border-opacity)); 655 | } 656 | 657 | .border-transparent { 658 | border-color: transparent; 659 | } 660 | 661 | .bg-teal-700 { 662 | --tw-bg-opacity: 1; 663 | background-color: rgb(15 118 110 / var(--tw-bg-opacity)); 664 | } 665 | 666 | .bg-white { 667 | --tw-bg-opacity: 1; 668 | background-color: rgb(255 255 255 / var(--tw-bg-opacity)); 669 | } 670 | 671 | .bg-teal-500 { 672 | --tw-bg-opacity: 1; 673 | background-color: rgb(20 184 166 / var(--tw-bg-opacity)); 674 | } 675 | 676 | .p-3 { 677 | padding: 0.75rem; 678 | } 679 | 680 | .px-4 { 681 | padding-left: 1rem; 682 | padding-right: 1rem; 683 | } 684 | 685 | .py-7 { 686 | padding-top: 1.75rem; 687 | padding-bottom: 1.75rem; 688 | } 689 | 690 | .py-2 { 691 | padding-top: 0.5rem; 692 | padding-bottom: 0.5rem; 693 | } 694 | 695 | .text-center { 696 | text-align: center; 697 | } 698 | 699 | .font-mono { 700 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 701 | 'Liberation Mono', 'Courier New', monospace; 702 | } 703 | 704 | .text-xl { 705 | font-size: 1.25rem; 706 | line-height: 1.75rem; 707 | } 708 | 709 | .text-sm { 710 | font-size: 0.875rem; 711 | line-height: 1.25rem; 712 | } 713 | 714 | .text-lg { 715 | font-size: 1.125rem; 716 | line-height: 1.75rem; 717 | } 718 | 719 | .font-medium { 720 | font-weight: 500; 721 | } 722 | 723 | .uppercase { 724 | text-transform: uppercase; 725 | } 726 | 727 | .leading-normal { 728 | line-height: 1.5; 729 | } 730 | 731 | .tracking-wide { 732 | letter-spacing: 0.025em; 733 | } 734 | 735 | .text-teal-100 { 736 | --tw-text-opacity: 1; 737 | color: rgb(204 251 241 / var(--tw-text-opacity)); 738 | } 739 | 740 | .text-teal-300 { 741 | --tw-text-opacity: 1; 742 | color: rgb(94 234 212 / var(--tw-text-opacity)); 743 | } 744 | 745 | .text-gray-500 { 746 | --tw-text-opacity: 1; 747 | color: rgb(107 114 128 / var(--tw-text-opacity)); 748 | } 749 | 750 | .text-white { 751 | --tw-text-opacity: 1; 752 | color: rgb(255 255 255 / var(--tw-text-opacity)); 753 | } 754 | 755 | .shadow-lg { 756 | --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 757 | 0 4px 6px -4px rgb(0 0 0 / 0.1); 758 | --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 759 | 0 4px 6px -4px var(--tw-shadow-color); 760 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), 761 | var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 762 | } 763 | 764 | .shadow-sm { 765 | --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05); 766 | --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color); 767 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), 768 | var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 769 | } 770 | 771 | .hover\:bg-teal-900:hover { 772 | --tw-bg-opacity: 1; 773 | background-color: rgb(19 78 74 / var(--tw-bg-opacity)); 774 | } 775 | 776 | .hover\:text-teal-800:hover { 777 | --tw-text-opacity: 1; 778 | color: rgb(17 94 89 / var(--tw-text-opacity)); 779 | } 780 | 781 | .focus\:outline-none:focus { 782 | outline: 2px solid transparent; 783 | outline-offset: 2px; 784 | } 785 | 786 | .focus\:ring-2:focus { 787 | --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 788 | var(--tw-ring-offset-width) var(--tw-ring-offset-color); 789 | --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 790 | calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); 791 | box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), 792 | var(--tw-shadow, 0 0 #0000); 793 | } 794 | 795 | .focus\:ring-blue-500:focus { 796 | --tw-ring-opacity: 1; 797 | --tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity)); 798 | } 799 | 800 | .focus\:ring-offset-2:focus { 801 | --tw-ring-offset-width: 2px; 802 | } 803 | -------------------------------------------------------------------------------- /renderer/images/logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /renderer/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 14 | 15 | 16 | ImageResizer 17 | 18 | 19 |
22 |
23 | 30 |
31 | 32 | 33 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /renderer/js/renderer.js: -------------------------------------------------------------------------------- 1 | const form = document.querySelector('#img-form'); 2 | const img = document.querySelector('#img'); 3 | const outputPath = document.querySelector('#output-path'); 4 | const filename = document.querySelector('#filename'); 5 | const heightInput = document.querySelector('#height'); 6 | const widthInput = document.querySelector('#width'); 7 | 8 | // Load image and show form 9 | function loadImage(e) { 10 | const file = e.target.files[0]; 11 | 12 | // Check if file is an image 13 | if (!isFileImage(file)) { 14 | alertError('Please select an image'); 15 | return; 16 | } 17 | 18 | // Add current height and width to form using the URL API 19 | const image = new Image(); 20 | image.src = URL.createObjectURL(file); 21 | image.onload = function () { 22 | widthInput.value = this.width; 23 | heightInput.value = this.height; 24 | }; 25 | 26 | // Show form, image name and output path 27 | form.style.display = 'block'; 28 | filename.innerHTML = img.files[0].name; 29 | outputPath.innerText = path.join(os.homedir(), 'imageresizer'); 30 | } 31 | 32 | // Make sure file is an image 33 | function isFileImage(file) { 34 | const acceptedImageTypes = ['image/gif', 'image/jpeg', 'image/png']; 35 | return file && acceptedImageTypes.includes(file['type']); 36 | } 37 | 38 | // Resize image 39 | function resizeImage(e) { 40 | e.preventDefault(); 41 | 42 | if (!img.files[0]) { 43 | alertError('Please upload an image'); 44 | return; 45 | } 46 | 47 | if (widthInput.value === '' || heightInput.value === '') { 48 | alertError('Please enter a width and height'); 49 | return; 50 | } 51 | 52 | // Electron adds a bunch of extra properties to the file object including the path 53 | const imgPath = img.files[0].path; 54 | const width = widthInput.value; 55 | const height = heightInput.value; 56 | 57 | ipcRenderer.send('image:resize', { 58 | imgPath, 59 | height, 60 | width, 61 | }); 62 | } 63 | 64 | // When done, show message 65 | ipcRenderer.on('image:done', () => 66 | alertSuccess(`Image resized to ${heightInput.value} x ${widthInput.value}`) 67 | ); 68 | 69 | function alertSuccess(message) { 70 | Toastify.toast({ 71 | text: message, 72 | duration: 5000, 73 | close: false, 74 | style: { 75 | background: 'green', 76 | color: 'white', 77 | textAlign: 'center', 78 | }, 79 | }); 80 | } 81 | 82 | function alertError(message) { 83 | Toastify.toast({ 84 | text: message, 85 | duration: 5000, 86 | close: false, 87 | style: { 88 | background: 'red', 89 | color: 'white', 90 | textAlign: 'center', 91 | }, 92 | }); 93 | } 94 | 95 | // File select listener 96 | img.addEventListener('change', loadImage); 97 | // Form submit listener 98 | form.addEventListener('submit', resizeImage); 99 | --------------------------------------------------------------------------------