├── .DS_Store ├── .clj-kondo └── .cache │ └── v1 │ └── lock ├── .github ├── FUNDING.yml └── workflows │ └── publish.yml ├── .gitignore ├── FileUtils.ts ├── LICENSE.md ├── README.md ├── dist ├── index.b006dbc7.js └── index.html ├── docs ├── README.md └── logseq-github.gif ├── icon.png ├── index.html ├── index.ts ├── logseq-github.gif ├── package.json ├── pnpm-lock.yaml └── tsconfig.json /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mandpd/logseq-plugin-github-get/282c39d7e281623ecca549bd320bebbb3e6e225a/.DS_Store -------------------------------------------------------------------------------- /.clj-kondo/.cache/v1/lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mandpd/logseq-plugin-github-get/282c39d7e281623ecca549bd320bebbb3e6e225a/.clj-kondo/.cache/v1/lock -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: mandpd 2 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Build plugin 2 | 3 | on: 4 | push: 5 | # Sequence of patterns matched against refs/tags 6 | tags: 7 | - "*" # Push events to matching any tag format, i.e. 1.0, 20.15.10 8 | 9 | env: 10 | PLUGIN_NAME: ${{ github.event.repository.name }} 11 | 12 | jobs: 13 | build: 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - uses: actions/checkout@v2 18 | - name: Use Node.js 19 | uses: actions/setup-node@v1 20 | with: 21 | node-version: "16.x" # You might need to adjust this value to your own version 22 | - name: Build 23 | id: build 24 | run: | 25 | npm i && npm run build 26 | mkdir ${{ env.PLUGIN_NAME }} 27 | cp README.md package.json icon.png logseq-github.gif ${{ env.PLUGIN_NAME }} 28 | mv dist ${{ env.PLUGIN_NAME }} 29 | zip -r ${{ env.PLUGIN_NAME }}.zip ${{ env.PLUGIN_NAME }} 30 | ls 31 | echo "::set-output name=tag_name::$(git tag --sort version:refname | tail -n 1)" 32 | - name: Create Release 33 | uses: ncipollo/release-action@v1 34 | id: create_release 35 | env: 36 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 37 | VERSION: ${{ github.ref }} 38 | with: 39 | allowUpdates: true 40 | draft: false 41 | prerelease: false 42 | 43 | - name: Upload zip file 44 | id: upload_zip 45 | uses: actions/upload-release-asset@v1 46 | env: 47 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 48 | with: 49 | upload_url: ${{ steps.create_release.outputs.upload_url }} 50 | asset_path: ./${{ env.PLUGIN_NAME }}.zip 51 | asset_name: ${{ env.PLUGIN_NAME }}-${{ steps.build.outputs.tag_name }}.zip 52 | asset_content_type: application/zip 53 | 54 | - name: Upload package.json 55 | id: upload_metadata 56 | uses: actions/upload-release-asset@v1 57 | env: 58 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 59 | with: 60 | upload_url: ${{ steps.create_release.outputs.upload_url }} 61 | asset_path: ./package.json 62 | asset_name: package.json 63 | asset_content_type: application/json 64 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .parcel-cache/ 3 | .lsp/ 4 | .vscode/ 5 | samples/ 6 | .pnpm-debug.log -------------------------------------------------------------------------------- /FileUtils.ts: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | import "@logseq/libs"; 3 | 4 | const decode = (str: string): string => 5 | Buffer.from(str, "base64").toString("binary"); 6 | const contents = "/contents/"; 7 | let commit_id = ""; 8 | let commit_message = ""; 9 | 10 | export interface CodeType { 11 | ext: string; 12 | type: string; 13 | } 14 | /** 15 | * Extensions that correspond to the supported file types - autogenerated from CodeMirror modeInfo 16 | **/ 17 | const CodeTypes = [ 18 | { 19 | ext: "dyalog", 20 | type: "apl", 21 | }, 22 | { 23 | ext: "apl", 24 | type: "apl", 25 | }, 26 | { 27 | ext: "asc", 28 | type: "asciiarmor", 29 | }, 30 | { 31 | ext: "pgp", 32 | type: "asciiarmor", 33 | }, 34 | { 35 | ext: "sig", 36 | type: "asciiarmor", 37 | }, 38 | { 39 | ext: "asn", 40 | type: "asn.1", 41 | }, 42 | { 43 | ext: "asn1", 44 | type: "asn.1", 45 | }, 46 | { 47 | ext: "b", 48 | type: "brainfuck", 49 | }, 50 | { 51 | ext: "bf", 52 | type: "brainfuck", 53 | }, 54 | { 55 | ext: "c", 56 | type: "clike", 57 | }, 58 | { 59 | ext: "h", 60 | type: "clike", 61 | }, 62 | { 63 | ext: "ino", 64 | type: "clike", 65 | }, 66 | { 67 | ext: "cpp", 68 | type: "clike", 69 | }, 70 | { 71 | ext: "c++", 72 | type: "clike", 73 | }, 74 | { 75 | ext: "cc", 76 | type: "clike", 77 | }, 78 | { 79 | ext: "cxx", 80 | type: "clike", 81 | }, 82 | { 83 | ext: "hpp", 84 | type: "clike", 85 | }, 86 | { 87 | ext: "h++", 88 | type: "clike", 89 | }, 90 | { 91 | ext: "hh", 92 | type: "clike", 93 | }, 94 | { 95 | ext: "hxx", 96 | type: "clike", 97 | }, 98 | { 99 | ext: "cob", 100 | type: "cobol", 101 | }, 102 | { 103 | ext: "cpy", 104 | type: "cobol", 105 | }, 106 | { 107 | ext: "cbl", 108 | type: "cobol", 109 | }, 110 | { 111 | ext: "cs", 112 | type: "clike", 113 | }, 114 | { 115 | ext: "clj", 116 | type: "clojure", 117 | }, 118 | { 119 | ext: "cljc", 120 | type: "clojure", 121 | }, 122 | { 123 | ext: "cljx", 124 | type: "clojure", 125 | }, 126 | { 127 | ext: "cljs", 128 | type: "clojure", 129 | }, 130 | { 131 | ext: "gss", 132 | type: "css", 133 | }, 134 | { 135 | ext: "cmake", 136 | type: "cmake", 137 | }, 138 | { 139 | ext: "cmake.in", 140 | type: "cmake", 141 | }, 142 | { 143 | ext: "coffee", 144 | type: "coffeescript", 145 | }, 146 | { 147 | ext: "cl", 148 | type: "commonlisp", 149 | }, 150 | { 151 | ext: "lisp", 152 | type: "commonlisp", 153 | }, 154 | { 155 | ext: "el", 156 | type: "commonlisp", 157 | }, 158 | { 159 | ext: "cyp", 160 | type: "cypher", 161 | }, 162 | { 163 | ext: "cypher", 164 | type: "cypher", 165 | }, 166 | { 167 | ext: "pyx", 168 | type: "python", 169 | }, 170 | { 171 | ext: "pxd", 172 | type: "python", 173 | }, 174 | { 175 | ext: "pxi", 176 | type: "python", 177 | }, 178 | { 179 | ext: "cr", 180 | type: "crystal", 181 | }, 182 | { 183 | ext: "css", 184 | type: "css", 185 | }, 186 | { 187 | ext: "cql", 188 | type: "sql", 189 | }, 190 | { 191 | ext: "d", 192 | type: "d", 193 | }, 194 | { 195 | ext: "dart", 196 | type: "dart", 197 | }, 198 | { 199 | ext: "diff", 200 | type: "diff", 201 | }, 202 | { 203 | ext: "patch", 204 | type: "diff", 205 | }, 206 | { 207 | ext: "dtd", 208 | type: "dtd", 209 | }, 210 | { 211 | ext: "dylan", 212 | type: "dylan", 213 | }, 214 | { 215 | ext: "dyl", 216 | type: "dylan", 217 | }, 218 | { 219 | ext: "intr", 220 | type: "dylan", 221 | }, 222 | { 223 | ext: "ecl", 224 | type: "ecl", 225 | }, 226 | { 227 | ext: "edn", 228 | type: "clojure", 229 | }, 230 | { 231 | ext: "e", 232 | type: "eiffel", 233 | }, 234 | { 235 | ext: "elm", 236 | type: "elm", 237 | }, 238 | { 239 | ext: "ejs", 240 | type: "htmlembedded", 241 | }, 242 | { 243 | ext: "erb", 244 | type: "htmlembedded", 245 | }, 246 | { 247 | ext: "erl", 248 | type: "erlang", 249 | }, 250 | { 251 | ext: "factor", 252 | type: "factor", 253 | }, 254 | { 255 | ext: "forth", 256 | type: "forth", 257 | }, 258 | { 259 | ext: "fth", 260 | type: "forth", 261 | }, 262 | { 263 | ext: "4th", 264 | type: "forth", 265 | }, 266 | { 267 | ext: "f", 268 | type: "fortran", 269 | }, 270 | { 271 | ext: "for", 272 | type: "fortran", 273 | }, 274 | { 275 | ext: "f77", 276 | type: "fortran", 277 | }, 278 | { 279 | ext: "f90", 280 | type: "fortran", 281 | }, 282 | { 283 | ext: "f95", 284 | type: "fortran", 285 | }, 286 | { 287 | ext: "fs", 288 | type: "mllike", 289 | }, 290 | { 291 | ext: "s", 292 | type: "gas", 293 | }, 294 | { 295 | ext: "feature", 296 | type: "gherkin", 297 | }, 298 | { 299 | ext: "go", 300 | type: "go", 301 | }, 302 | { 303 | ext: "groovy", 304 | type: "groovy", 305 | }, 306 | { 307 | ext: "gradle", 308 | type: "groovy", 309 | }, 310 | { 311 | ext: "haml", 312 | type: "haml", 313 | }, 314 | { 315 | ext: "hs", 316 | type: "haskell", 317 | }, 318 | { 319 | ext: "lhs", 320 | type: "haskell-literate", 321 | }, 322 | { 323 | ext: "hx", 324 | type: "haxe", 325 | }, 326 | { 327 | ext: "hxml", 328 | type: "haxe", 329 | }, 330 | { 331 | ext: "aspx", 332 | type: "htmlembedded", 333 | }, 334 | { 335 | ext: "html", 336 | type: "htmlmixed", 337 | }, 338 | { 339 | ext: "htm", 340 | type: "htmlmixed", 341 | }, 342 | { 343 | ext: "handlebars", 344 | type: "htmlmixed", 345 | }, 346 | { 347 | ext: "hbs", 348 | type: "htmlmixed", 349 | }, 350 | { 351 | ext: "pro", 352 | type: "idl", 353 | }, 354 | { 355 | ext: "jade", 356 | type: "pug", 357 | }, 358 | { 359 | ext: "pug", 360 | type: "pug", 361 | }, 362 | { 363 | ext: "java", 364 | type: "clike", 365 | }, 366 | { 367 | ext: "jsp", 368 | type: "htmlembedded", 369 | }, 370 | { 371 | ext: "js", 372 | type: "javascript", 373 | }, 374 | { 375 | ext: "json", 376 | type: "javascript", 377 | }, 378 | { 379 | ext: "map", 380 | type: "javascript", 381 | }, 382 | { 383 | ext: "jsonld", 384 | type: "javascript", 385 | }, 386 | { 387 | ext: "jsx", 388 | type: "jsx", 389 | }, 390 | { 391 | ext: "j2", 392 | type: "jinja2", 393 | }, 394 | { 395 | ext: "jinja", 396 | type: "jinja2", 397 | }, 398 | { 399 | ext: "jinja2", 400 | type: "jinja2", 401 | }, 402 | { 403 | ext: "jl", 404 | type: "julia", 405 | }, 406 | { 407 | ext: "kt", 408 | type: "clike", 409 | }, 410 | { 411 | ext: "less", 412 | type: "css", 413 | }, 414 | { 415 | ext: "ls", 416 | type: "livescript", 417 | }, 418 | { 419 | ext: "lua", 420 | type: "lua", 421 | }, 422 | { 423 | ext: "markdown", 424 | type: "markdown", 425 | }, 426 | { 427 | ext: "md", 428 | type: "markdown", 429 | }, 430 | { 431 | ext: "mkd", 432 | type: "markdown", 433 | }, 434 | { 435 | ext: "m", 436 | type: "mathematica", 437 | }, 438 | { 439 | ext: "nb", 440 | type: "mathematica", 441 | }, 442 | { 443 | ext: "wl", 444 | type: "mathematica", 445 | }, 446 | { 447 | ext: "wls", 448 | type: "mathematica", 449 | }, 450 | { 451 | ext: "mo", 452 | type: "modelica", 453 | }, 454 | { 455 | ext: "mps", 456 | type: "mumps", 457 | }, 458 | { 459 | ext: "mbox", 460 | type: "mbox", 461 | }, 462 | { 463 | ext: "nsh", 464 | type: "nsis", 465 | }, 466 | { 467 | ext: "nsi", 468 | type: "nsis", 469 | }, 470 | { 471 | ext: "nt", 472 | type: "ntriples", 473 | }, 474 | { 475 | ext: "nq", 476 | type: "ntriples", 477 | }, 478 | { 479 | ext: "m", 480 | type: "clike", 481 | }, 482 | { 483 | ext: "mm", 484 | type: "clike", 485 | }, 486 | { 487 | ext: "ml", 488 | type: "mllike", 489 | }, 490 | { 491 | ext: "mli", 492 | type: "mllike", 493 | }, 494 | { 495 | ext: "mll", 496 | type: "mllike", 497 | }, 498 | { 499 | ext: "mly", 500 | type: "mllike", 501 | }, 502 | { 503 | ext: "m", 504 | type: "octave", 505 | }, 506 | { 507 | ext: "oz", 508 | type: "oz", 509 | }, 510 | { 511 | ext: "p", 512 | type: "pascal", 513 | }, 514 | { 515 | ext: "pas", 516 | type: "pascal", 517 | }, 518 | { 519 | ext: "jsonld", 520 | type: "pegjs", 521 | }, 522 | { 523 | ext: "pl", 524 | type: "perl", 525 | }, 526 | { 527 | ext: "pm", 528 | type: "perl", 529 | }, 530 | { 531 | ext: "php", 532 | type: "php", 533 | }, 534 | { 535 | ext: "php3", 536 | type: "php", 537 | }, 538 | { 539 | ext: "php4", 540 | type: "php", 541 | }, 542 | { 543 | ext: "php5", 544 | type: "php", 545 | }, 546 | { 547 | ext: "php7", 548 | type: "php", 549 | }, 550 | { 551 | ext: "phtml", 552 | type: "php", 553 | }, 554 | { 555 | ext: "pig", 556 | type: "pig", 557 | }, 558 | { 559 | ext: "txt", 560 | type: "null", 561 | }, 562 | { 563 | ext: "text", 564 | type: "null", 565 | }, 566 | { 567 | ext: "conf", 568 | type: "null", 569 | }, 570 | { 571 | ext: "def", 572 | type: "null", 573 | }, 574 | { 575 | ext: "list", 576 | type: "null", 577 | }, 578 | { 579 | ext: "log", 580 | type: "null", 581 | }, 582 | { 583 | ext: "pls", 584 | type: "sql", 585 | }, 586 | { 587 | ext: "ps1", 588 | type: "powershell", 589 | }, 590 | { 591 | ext: "psd1", 592 | type: "powershell", 593 | }, 594 | { 595 | ext: "psm1", 596 | type: "powershell", 597 | }, 598 | { 599 | ext: "properties", 600 | type: "properties", 601 | }, 602 | { 603 | ext: "ini", 604 | type: "properties", 605 | }, 606 | { 607 | ext: "in", 608 | type: "properties", 609 | }, 610 | { 611 | ext: "proto", 612 | type: "protobuf", 613 | }, 614 | { 615 | ext: "BUILD", 616 | type: "python", 617 | }, 618 | { 619 | ext: "bzl", 620 | type: "python", 621 | }, 622 | { 623 | ext: "py", 624 | type: "python", 625 | }, 626 | { 627 | ext: "pyw", 628 | type: "python", 629 | }, 630 | { 631 | ext: "pp", 632 | type: "puppet", 633 | }, 634 | { 635 | ext: "q", 636 | type: "q", 637 | }, 638 | { 639 | ext: "r", 640 | type: "r", 641 | }, 642 | { 643 | ext: "R", 644 | type: "r", 645 | }, 646 | { 647 | ext: "rst", 648 | type: "rst", 649 | }, 650 | { 651 | ext: "spec", 652 | type: "rpm", 653 | }, 654 | { 655 | ext: "rb", 656 | type: "ruby", 657 | }, 658 | { 659 | ext: "rs", 660 | type: "rust", 661 | }, 662 | { 663 | ext: "sas", 664 | type: "sas", 665 | }, 666 | { 667 | ext: "sass", 668 | type: "sass", 669 | }, 670 | { 671 | ext: "scala", 672 | type: "clike", 673 | }, 674 | { 675 | ext: "scm", 676 | type: "scheme", 677 | }, 678 | { 679 | ext: "ss", 680 | type: "scheme", 681 | }, 682 | { 683 | ext: "scss", 684 | type: "css", 685 | }, 686 | { 687 | ext: "sh", 688 | type: "shell", 689 | }, 690 | { 691 | ext: "ksh", 692 | type: "shell", 693 | }, 694 | { 695 | ext: "bash", 696 | type: "shell", 697 | }, 698 | { 699 | ext: "siv", 700 | type: "sieve", 701 | }, 702 | { 703 | ext: "sieve", 704 | type: "sieve", 705 | }, 706 | { 707 | ext: "slim", 708 | type: "slim", 709 | }, 710 | { 711 | ext: "st", 712 | type: "smalltalk", 713 | }, 714 | { 715 | ext: "tpl", 716 | type: "smarty", 717 | }, 718 | { 719 | ext: "sml", 720 | type: "mllike", 721 | }, 722 | { 723 | ext: "sig", 724 | type: "mllike", 725 | }, 726 | { 727 | ext: "fun", 728 | type: "mllike", 729 | }, 730 | { 731 | ext: "smackspec", 732 | type: "mllike", 733 | }, 734 | { 735 | ext: "soy", 736 | type: "soy", 737 | }, 738 | { 739 | ext: "rq", 740 | type: "sparql", 741 | }, 742 | { 743 | ext: "sparql", 744 | type: "sparql", 745 | }, 746 | { 747 | ext: "sql", 748 | type: "sql", 749 | }, 750 | { 751 | ext: "nut", 752 | type: "clike", 753 | }, 754 | { 755 | ext: "styl", 756 | type: "stylus", 757 | }, 758 | { 759 | ext: "swift", 760 | type: "swift", 761 | }, 762 | { 763 | ext: "text", 764 | type: "stex", 765 | }, 766 | { 767 | ext: "ltx", 768 | type: "stex", 769 | }, 770 | { 771 | ext: "tex", 772 | type: "stex", 773 | }, 774 | { 775 | ext: "v", 776 | type: "verilog", 777 | }, 778 | { 779 | ext: "sv", 780 | type: "verilog", 781 | }, 782 | { 783 | ext: "svh", 784 | type: "verilog", 785 | }, 786 | { 787 | ext: "tcl", 788 | type: "tcl", 789 | }, 790 | { 791 | ext: "textile", 792 | type: "textile", 793 | }, 794 | { 795 | ext: "toml", 796 | type: "toml", 797 | }, 798 | { 799 | ext: "1", 800 | type: "troff", 801 | }, 802 | { 803 | ext: "2", 804 | type: "troff", 805 | }, 806 | { 807 | ext: "3", 808 | type: "troff", 809 | }, 810 | { 811 | ext: "4", 812 | type: "troff", 813 | }, 814 | { 815 | ext: "5", 816 | type: "troff", 817 | }, 818 | { 819 | ext: "6", 820 | type: "troff", 821 | }, 822 | { 823 | ext: "7", 824 | type: "troff", 825 | }, 826 | { 827 | ext: "8", 828 | type: "troff", 829 | }, 830 | { 831 | ext: "9", 832 | type: "troff", 833 | }, 834 | { 835 | ext: "ttcn", 836 | type: "ttcn", 837 | }, 838 | { 839 | ext: "ttcn3", 840 | type: "ttcn", 841 | }, 842 | { 843 | ext: "ttcnpp", 844 | type: "ttcn", 845 | }, 846 | { 847 | ext: "cfg", 848 | type: "ttcn-cfg", 849 | }, 850 | { 851 | ext: "ttl", 852 | type: "turtle", 853 | }, 854 | { 855 | ext: "ts", 856 | type: "javascript", 857 | }, 858 | { 859 | ext: "tsx", 860 | type: "jsx", 861 | }, 862 | { 863 | ext: "webidl", 864 | type: "webidl", 865 | }, 866 | { 867 | ext: "vb", 868 | type: "vb", 869 | }, 870 | { 871 | ext: "vbs", 872 | type: "vbscript", 873 | }, 874 | { 875 | ext: "vtl", 876 | type: "velocity", 877 | }, 878 | { 879 | ext: "v", 880 | type: "verilog", 881 | }, 882 | { 883 | ext: "vhd", 884 | type: "vhdl", 885 | }, 886 | { 887 | ext: "vhdl", 888 | type: "vhdl", 889 | }, 890 | { 891 | ext: "vue", 892 | type: "vue", 893 | }, 894 | { 895 | ext: "xml", 896 | type: "xml", 897 | }, 898 | { 899 | ext: "xsl", 900 | type: "xml", 901 | }, 902 | { 903 | ext: "xsd", 904 | type: "xml", 905 | }, 906 | { 907 | ext: "svg", 908 | type: "xml", 909 | }, 910 | { 911 | ext: "xy", 912 | type: "xquery", 913 | }, 914 | { 915 | ext: "xquery", 916 | type: "xquery", 917 | }, 918 | { 919 | ext: "ys", 920 | type: "yacas", 921 | }, 922 | { 923 | ext: "yaml", 924 | type: "yaml", 925 | }, 926 | { 927 | ext: "yml", 928 | type: "yaml", 929 | }, 930 | { 931 | ext: "z80", 932 | type: "z80", 933 | }, 934 | { 935 | ext: "mscgen", 936 | type: "mscgen", 937 | }, 938 | { 939 | ext: "mscin", 940 | type: "mscgen", 941 | }, 942 | { 943 | ext: "msc", 944 | type: "mscgen", 945 | }, 946 | { 947 | ext: "xu", 948 | type: "mscgen", 949 | }, 950 | { 951 | ext: "msgenny", 952 | type: "mscgen", 953 | }, 954 | { 955 | ext: "wat", 956 | type: "wast", 957 | }, 958 | { 959 | ext: "wast", 960 | type: "wast", 961 | }, 962 | ]; 963 | 964 | /** 965 | * Internal structure for passing code file contents 966 | */ 967 | interface CodeFile { 968 | content: string; 969 | type: string | undefined; 970 | commit_id?: string; 971 | commit_message?: string; 972 | } 973 | 974 | interface CommitListEntry { 975 | id: string; 976 | date: Date; 977 | message: string; 978 | } 979 | 980 | interface RepoListEntry { 981 | name: string; 982 | description: string; 983 | } 984 | 985 | let repoCommitsList: { 986 | account: string; 987 | repo: string; 988 | commits: CommitListEntry[]; 989 | }[] = []; 990 | 991 | export const parseFilePath = (filePath: string): string[] => { 992 | let account = logseq!.settings!.githubAccount 993 | ? logseq!.settings!.githubAccount 994 | : ""; 995 | let repo = logseq!.settings!.githubRepo ? logseq!.settings!.githubRepo : ""; 996 | 997 | // Parse filepath for Github account name 998 | let parts = filePath.split("::"); 999 | if (parts.length == 2) { 1000 | // Parse the path for the account name 1001 | account = parts[0]; 1002 | filePath = parts[1]; 1003 | } 1004 | 1005 | // Parse filePath for repo name 1006 | parts = filePath.split(":"); 1007 | if (parts.length == 2) { 1008 | repo = parts[0]; 1009 | filePath = parts[1]; 1010 | } 1011 | 1012 | return [account, repo, filePath]; 1013 | }; 1014 | 1015 | /** 1016 | * 1017 | * @param filePath 1018 | * @returns Promise for the codefile structure for the requested file. 1019 | * 1020 | * Attempts to retrieve the requested file from VS code via the live server on port 5500. 1021 | */ 1022 | 1023 | export async function getFile(filePath: string): Promise { 1024 | //Retrieve github settings 1025 | const githubURL = "https://api.github.com/repos/"; 1026 | 1027 | const token = logseq!.settings!.githubPat; 1028 | try { 1029 | let [account, repo, file] = parseFilePath(filePath); 1030 | // Abort if no account provided 1031 | if (account == "") { 1032 | logseq.App.showMsg( 1033 | `No GitHub account name provided and no default set.`, 1034 | "error" 1035 | ); 1036 | return { 1037 | content: "No Github account name provided and do default set.", 1038 | type: "error", 1039 | }; 1040 | } 1041 | 1042 | // Abort if no repo provided 1043 | if (repo == "") { 1044 | logseq.App.showMsg(`No repository name provided.`, "error"); 1045 | return { 1046 | content: "No repository name provided", 1047 | type: "error", 1048 | }; 1049 | } 1050 | 1051 | await getCommits(account, repo, file); 1052 | 1053 | // Update commit_id to latest commit 1054 | const repoCommits = repoCommitsList.find((rcl) => { 1055 | return rcl.repo == repo && rcl.account == account; 1056 | })?.commits; 1057 | const latestRepo = repoCommits!.sort( 1058 | (a, b) => b.date.getMilliseconds() - a.date.getMilliseconds() 1059 | )[0]; 1060 | commit_id = latestRepo?.id; 1061 | commit_message = latestRepo?.message; 1062 | 1063 | const endpoint = 1064 | githubURL + account + "/" + repo + contents + file + "?ref=" + commit_id; 1065 | let bits = file.split("."); 1066 | 1067 | let response = await axios.get(endpoint, { 1068 | headers: { 1069 | Authorization: `token ${token}`, 1070 | }, 1071 | }); 1072 | 1073 | let fileType: string = bits.length > 1 ? bits[bits.length - 1] : "txt"; // Set files with no extension to extension txt. 1074 | 1075 | // Look for type 1076 | let codeType = CodeTypes.find((c) => { 1077 | return c.ext == fileType; 1078 | }); 1079 | 1080 | if (codeType == undefined) codeType = { ext: "unknown", type: "null" }; 1081 | 1082 | let myText = decode(response.data.content); 1083 | myText.replace(/\n/g, "\r"); 1084 | return { 1085 | content: myText, 1086 | type: codeType.type == "null" ? "" : codeType.type, // Set files with unknown extension to extension txt 1087 | commit_id: commit_id, 1088 | commit_message: commit_message, 1089 | }; 1090 | } catch (err) { 1091 | if ((err.message = "Failed to fetch")) { 1092 | logseq.App.showMsg( 1093 | `The file was not found. Github is case sensitive so check the case of the path you provided.`, 1094 | "error" 1095 | ); 1096 | return { 1097 | content: err.message, 1098 | type: "error", 1099 | }; 1100 | } else { 1101 | logseq.App.showMsg(`error is ${err.message}`, "error"); 1102 | return { 1103 | content: err.message, 1104 | type: "error", 1105 | }; 1106 | } 1107 | } 1108 | } 1109 | 1110 | export async function getRepos(): Promise { 1111 | //Retrieve github settings 1112 | const endpoint = "https://api.github.com/user/repos?per_page=100"; 1113 | const token = logseq!.settings!.githubPat; 1114 | 1115 | let response = await axios.get(endpoint, { 1116 | headers: { 1117 | Authorization: `token ${token}`, 1118 | }, 1119 | }); 1120 | const repoList: RepoListEntry[] = []; 1121 | response.data.forEach((repo) => { 1122 | repoList.push({ 1123 | name: repo.name, 1124 | description: repo.description, 1125 | }); 1126 | }); 1127 | return repoList; 1128 | } 1129 | 1130 | export async function getCommits( 1131 | account: string, 1132 | repo: string, 1133 | file: string 1134 | ): Promise { 1135 | //Retrieve github settings 1136 | const githubURL = "https://api.github.com/repos/" + account + "/"; 1137 | const token = logseq!.settings!.githubPat; 1138 | 1139 | // Check if the commit list already exists 1140 | let arIndex = repoCommitsList.findIndex((a) => { 1141 | return a.repo == repo && a.account == account; 1142 | }); 1143 | 1144 | //Update commit list 1145 | const endpoint = githubURL + repo + "/commits"; 1146 | 1147 | let response = await axios.get(endpoint, { 1148 | headers: { 1149 | Authorization: `token ${token}`, 1150 | }, 1151 | }); 1152 | const commitList: { 1153 | account: string; 1154 | repo: string; 1155 | commits: CommitListEntry[]; 1156 | } = { 1157 | account: account, 1158 | repo: repo, 1159 | commits: [], 1160 | }; 1161 | response.data.forEach((commit) => { 1162 | commitList.commits.push({ 1163 | message: commit.commit.message.replace(/\n/g, " ").replace(/\r/g, " "), 1164 | date: new Date(commit.commit.author.date), 1165 | id: commit.url.split("/").pop(), 1166 | }); 1167 | }); 1168 | // Add or Update 1169 | if (arIndex >= 0) { 1170 | repoCommitsList[arIndex] = commitList; 1171 | } else { 1172 | repoCommitsList.push(commitList); 1173 | } 1174 | 1175 | return; 1176 | } 1177 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 mandpd 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Github File Getter (logseq-plugin-github-get) 2 | 3 | ## Overview 4 | 5 | This plugin allows the user to easily import the contents of files from any Github repository that the Github user has access to. 6 | The main goal is to enhance the ability to document code development and final code using [Logseq](https://docs.logseq.com). 7 | 8 | ## Suggested Use 9 | 10 | Create a new logseq graph in the root of your code repository under a `/docs` folder. 11 | The logseq Journal can be used to document the day-by-day development progress. 12 | As code is developed and pushed to Github, the code can be retrieved and inserted into a Logseq page block using this plugin. 13 | The code can then be documented using Logseq's extensive note taking capabilities. 14 | 15 | As a code file is updated and the changes pushed to Github, the code in Logseq can be immediately updated to the latest version using the `refresh` icon at the top of the code block. 16 | 17 | ## Example 18 | 19 | This example shows how to embed a file from a repository which is synced to Github. The repository is cloned locally and open in VS Code. The Github account name and repository name have been entered in the plugin settings as default, so only the relative path of the file needs to be entered. 20 | 21 | ![gif file](logseq-github.gif) 22 | 23 | ## One-Time Configuration 24 | 25 | 1. Ensure you are running [logseq version 0.6.5](https://github.com/logseq/logseq/releases) or later. 26 | 2. Open the logseq settings menu. 27 | 3. Select `Plugin Settings` and click on the `Github File Getter` tab. 28 | 4. _Required_: Enter a personal access token with full repository access rights in the field labeled `githubPat`. For more information on how to generate a personal access token, look [here](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token). 29 | 5. Optional: Enter the default github account name that your repository resides in. Use your `username` (not your email address) in the field labeled `githubAccount`. If this is left empty you must provide the account for every repository file that you wish to retrieve. See the section `Running the Github Command` below for the correct URL to use. 30 | 6. Optional: Enter the name of the repository where your files reside. If this is left empty you must provide the account for every repository file that you wish to retrieve. See the section `Running the Github Command` below for the correct URL to use. 31 | 32 | ## Using Logseq as a code documentation tool 33 | 34 | 1. Open the local version of the repository that you want to document within your IDE (VS Code is used in the example given above). 35 | 2. Create a root directory called `docs`. 36 | 3. Open Logseq and select `Add a graph` from the left sidebar graph menu item. 37 | 4. Navigate to the docs `folder` that you have just created. 38 | 5. Use Logseq to document your development process. 39 | 6. When you are ready to document specific code in the repository, follow the `Running the Github Command` process described below. 40 | 41 | ## Running the Github Command 42 | 43 | ### Using with files in the default repository 44 | 45 | 1. Ensure that the account name and the repository name are provided in the plugin settings. See the `One-Time Configuration` section above. 46 | 2. Ensure that the file is pushed to your Github repository. The plugin will retrieve the most recent version of the file. (A later version of this plugin will allow you to get a specific commit version of the file) 47 | 3. Select the file within your IDE that you wish to embed within LogSeq. 48 | 4. Copy the relative path of the file from the root of the local copy. (You can obtain this in VS Code by right-clicking on the file in the Explorer and selecting `Copy Relative Path` from the context menu). 49 | 5. Select an empty block in LogSeq where you want to import the file. Paste the relative path of the file. e.g. `src/package.json` 50 | 6. Run the `Get Github File` command by entering `/Get Github File` after the file path. 51 | 7. If the configuration and file path are correctly entered the code should appear immediately below the selected block. 52 | 53 | ### Using with files in another Github repository and/or account 54 | 55 | Step 4 should be amended as follows: 56 | 57 | 1. If the file is not in the default repository, enter the name of repository, followed by a colon ':', before the relative path. e.g. `another-repo:src/package-json` 58 | 2. If the file is not in the default account nor the default repository, enter the name of the account, followed by a double-colon '::', the name of the repository, followed by a colon ':', before the relative path. `another-account::yet-another-repo:src/package.json` 59 | 60 | The general URL format is `:::` 61 | 62 | ## Refreshing the code 63 | 64 | 1. Once a file has been retrieved frm Github the block's parent shows the filename, the commit id, and a `refresh` icon. To retrieve the latest version of the code simply click on the filename or the `refresh` icon. **NOTE** This will overwrite the existing version of the code. 65 | 2. To guard against accidental refresh, click on the commit id. This will toggle a `pin` icon. When the pin icon is visible the refresh button is disabled. 66 | 3. To re-enable refresh, click the commit id again. The pin icon will disappear. 67 | 68 | ## Installing the Plugin Manually 69 | 70 | 1. Clone the [plugin repo](https://github.com/mandpd/logseq-plugin-github-get) to a local folder. 71 | 2. In logseq, open `Logseq→Settings`, enable developer mode. 72 | 3. Open `Logseq→Plugins`, choose `Load unpacked plugin`, and select the location where you saved the source code. 73 | 4. Follow the configuration steps given above. 74 | 5. The `Get Github File` command should now be installed and active. 75 | 76 | ## Supported file types 77 | 78 | The file types supported by [Code Mirror](https://codemirror.net/mode/index.html) will be recognized and the appropriate code parser selected for the code block. 79 | -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | VS Code Ref -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # Github File Getter (logseq-plugin-github-get) 2 | 3 | ## Overview 4 | 5 | This plugin allows the user to easily import the contents of files from any Github repository that the Github user has access to. 6 | The main goal is to enhance the ability to document code development and final code using [Logseq](https://docs.logseq.com). 7 | 8 | ## Suggested Use 9 | 10 | Create a new logseq graph in the root of your code repository under a `/docs` folder. 11 | The logseq Journal can be used to document the day-by-day development progress. 12 | As code is developed and pushed to Github, the code can be retrieved and inserted into a Logseq page block using this plugin. 13 | The code can then be documented using Logseq's extensive note taking capabilities. 14 | 15 | As a code file is updated and the changes pushed to Github, the code in Logseq can be immediately updated to the latest version using the `refresh` icon at the top of the code block. 16 | 17 | ## Example 18 | 19 | This example shows how to embed a file from a repository which is synced to Github. The repository is cloned locally and open in VS Code. The Github account name and repository name have been entered in the plugin settings as default, so only the relative path of the file needs to be entered. 20 | 21 | ![gif file](logseq-github.gif) 22 | 23 | ## One-Time Configuration 24 | 25 | 1. Ensure you are running [logseq version 0.6.5](https://github.com/logseq/logseq/releases) or later. 26 | 2. Open the logseq settings menu. 27 | 3. Select `Plugin Settings` and click on the `Github File Getter` tab. 28 | 4. _Required_: Enter a personal access token with full repository access rights in the field labeled `githubPat`. For more information on how to generate a personal access token, look [here](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token). 29 | 5. Optional: Enter the default github account name that your repository resides in. Use your `username` (not your email address) in the field labeled `githubAccount`. If this is left empty you must provide the account for every repository file that you wish to retrieve. See the section `Running the Github Command` below for the correct URL to use. 30 | 6. Optional: Enter the name of the repository where your files reside. If this is left empty you must provide the account for every repository file that you wish to retrieve. See the section `Running the Github Command` below for the correct URL to use. 31 | 32 | ## Using Logseq as a code documentation tool 33 | 34 | 1. Open the local version of the repository that you want to document within your IDE (VS Code is used in the example given above). 35 | 2. Create a root directory called `docs`. 36 | 3. Open Logseq and select `Add a graph` from the left sidebar graph menu item. 37 | 4. Navigate to the docs `folder` that you have just created. 38 | 5. Use Logseq to document your development process. 39 | 6. When you are ready to document specific code in the repository, follow the `Running the Github Command` process described below. 40 | 41 | ## Running the Github Command 42 | 43 | ### Using with files in the default repository 44 | 45 | 1. Ensure that the account name and the repository name are provided in the plugin settings. See the `One-Time Configuration` section above. 46 | 2. Ensure that the file is pushed to your Github repository. The plugin will retrieve the most recent version of the file. (A later version of this plugin will allow you to get a specific commit version of the file) 47 | 3. Select the file within your IDE that you wish to embed within LogSeq. 48 | 4. Copy the relative path of the file from the root of the local copy. (You can obtain this in VS Code by right-clicking on the file in the Explorer and selecting `Copy Relative Path` from the context menu). 49 | 5. Select an empty block in LogSeq where you want to import the file. Paste the relative path of the file. e.g. `src/package.json` 50 | 6. Run the `Get Github File` command by entering `/Get Github File` after the file path. 51 | 7. If the configuration and file path are correctly entered the code should appear immediately below the selected block. 52 | 53 | ### Using with files in another Github repository and/or account 54 | 55 | Step 4 should be amended as follows: 56 | 57 | 1. If the file is not in the default repository, enter the name of repository, followed by a colon ':', before the relative path. e.g. `another-repo:src/package-json` 58 | 2. If the file is not in the default account nor the default repository, enter the name of the account, followed by a double-colon '::', the name of the repository, followed by a colon ':', before the relative path. `another-account::yet-another-repo:src/package.json` 59 | 60 | The general URL format is `:::` 61 | 62 | ## Refreshing the code 63 | 64 | 1. Once a file has been retrieved frm Github the block's parent shows the filename, the commit id, and a `refresh` icon. To retrieve the latest version of the code simply click on the filename or the `refresh` icon. **NOTE** This will overwrite the existing version of the code. 65 | 2. To guard against accidental refresh, click on the commit id. This will toggle a `pin` icon. When the pin icon is visible the refresh button is disabled. 66 | 3. To re-enable refresh, click the commit id again. The pin icon will disappear. 67 | 68 | ## Installing the Plugin Manually 69 | 70 | 1. Clone the [plugin repo](https://github.com/mandpd/logseq-plugin-github-get) to a local folder. 71 | 2. In logseq, open `Logseq→Settings`, enable developer mode. 72 | 3. Open `Logseq→Plugins`, choose `Load unpacked plugin`, and select the location where you saved the source code. 73 | 4. Follow the configuration steps given above. 74 | 5. The `Get Github File` command should now be installed and active. 75 | 76 | ## Supported file types 77 | 78 | The file types supported by [Code Mirror](https://codemirror.net/mode/index.html) will be recognized and the appropriate code parser selected for the code block. 79 | -------------------------------------------------------------------------------- /docs/logseq-github.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mandpd/logseq-plugin-github-get/282c39d7e281623ecca549bd320bebbb3e6e225a/docs/logseq-github.gif -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mandpd/logseq-plugin-github-get/282c39d7e281623ecca549bd320bebbb3e6e225a/icon.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | VS Code Ref 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | import "@logseq/libs"; 2 | import { BlockEntity } from "@logseq/libs/dist/LSPlugin.user"; 3 | import { 4 | getFile, 5 | CodeType, 6 | getCommits, 7 | getRepos, 8 | parseFilePath, 9 | } from "./FileUtils"; 10 | 11 | const settingsTemplate = [ 12 | { 13 | key: "githubPat", 14 | type: "string", 15 | default: "", 16 | title: "Required: Your Personal Access Token", 17 | description: 18 | "The plugin requires a personal access token with full repo rights. For details on how to set this up for your github account, see the README notes for more details.", 19 | }, 20 | { 21 | key: "githubAccount", 22 | type: "string", 23 | default: "", 24 | title: "Optional: Default Github Account", 25 | description: 26 | "Your default github account username. For private repositories, it must have access to the repo that contains the code to be retrieved. See the README notes for more details.", 27 | }, 28 | { 29 | key: "githubRepo", 30 | type: "string", 31 | optional: true, 32 | default: "", 33 | title: "Optional: Your default repository name", 34 | description: 35 | "You can enter a default repository name to be used when none is explicitly provided in the file path. See the README notes for more details.", 36 | }, 37 | ]; 38 | logseq.useSettingsSchema(settingsTemplate); 39 | 40 | const checkSettings = (): boolean => { 41 | let initialSettings = logseq!.settings; 42 | if (logseq.settings) { 43 | if (logseq.settings.githubPat) return true; 44 | } 45 | 46 | logseq.App.showMsg( 47 | "Please enter your access token in the plugin settings.", 48 | "error" 49 | ); 50 | return false; 51 | }; 52 | 53 | const genRandomStr = () => 54 | Math.random() 55 | .toString(36) 56 | .replace(/[^a-z]+/g, "") 57 | .substr(0, 5); 58 | 59 | const refreshCode = async (blockId: string, filePath?: string) => { 60 | const block = await logseq.Editor.getBlock(blockId, { 61 | includeChildren: true, 62 | }); 63 | if ( 64 | block === null || 65 | block.children === undefined || 66 | block.children?.length === 0 67 | ) { 68 | return; 69 | } 70 | // Abort if commit is pinned 71 | if (block.content.includes("true}}")) { 72 | logseq.App.showMsg( 73 | `Cannot refresh a pinned file. Click on pin then try again.` 74 | ); 75 | return; 76 | } 77 | 78 | const existingBlock = await logseq.Editor.getBlock( 79 | (block?.children![0] as BlockEntity).id 80 | ); 81 | 82 | // Delete existing code block 83 | if (existingBlock) await logseq.Editor.removeBlock(existingBlock.uuid); 84 | 85 | // Call update to refresh code 86 | getCode(blockId, filePath); 87 | }; 88 | 89 | /** 90 | * 91 | * @param blockId 92 | * @returns Void 93 | * 94 | * Called when logseq is intialized or plugin is loaded. 95 | */ 96 | 97 | const getCode = async (blockId: string, filePath?: string) => { 98 | // Get Current Block 99 | const block = await logseq.Editor.getBlock(blockId, { 100 | includeChildren: true, 101 | }); 102 | if ( 103 | block === null || 104 | block.children === undefined || 105 | block.children?.length !== 0 106 | ) { 107 | return; 108 | } 109 | 110 | const _filePath = filePath ? filePath : block!.content; 111 | 112 | // Get the file from Github 113 | const contents = await getFile(_filePath); 114 | 115 | if (contents.type == "error") { 116 | return; 117 | } 118 | 119 | // Escape any '```' in the body of the text as this breaks codemirror 120 | if (contents.content.includes("```")) { 121 | contents.content = contents.content.split("```").join("\\`\\`\\`"); 122 | } 123 | 124 | // Insert the code block 125 | let targetBlock = await logseq.Editor.insertBlock( 126 | block!.uuid, 127 | `\`\`\`${contents.type}\r\n${contents.content}\r\n\`\`\``, 128 | { 129 | sibling: false, 130 | before: false, 131 | } 132 | ); 133 | 134 | insertRefreshBtn(blockId, contents.commit_id, contents.commit_message); 135 | // Exit editor 136 | logseq.Editor.exitEditingMode(); 137 | }; 138 | 139 | const insertRefreshBtn = async ( 140 | blockId: string, 141 | commit_id?: string, 142 | commit_message?: string, 143 | pin = true 144 | ) => { 145 | const block = await logseq.Editor.getBlock(blockId, { 146 | includeChildren: true, 147 | }); 148 | // Insert recycle button 149 | if (!block!.content.includes("renderer :github")) { 150 | let [account, repo, file] = parseFilePath(block!.content); 151 | logseq.Editor.updateBlock( 152 | blockId, 153 | `{{renderer :github_${genRandomStr()}, ${ 154 | account + "::" + repo + ":" + file 155 | }${commit_id ? ", " + commit_id : ""}${ 156 | commit_message ? ", " + commit_message : "" 157 | }${pin ? ", true" : ", false"}}}` 158 | ); 159 | } else { 160 | //update commit id 161 | let bits = block!.content.split(","); 162 | bits[2] = commit_id ? commit_id : bits[2]; 163 | bits[3] = commit_message ? commit_message : bits[3]; 164 | let replacement = bits.join(","); 165 | logseq.Editor.updateBlock(blockId, replacement); 166 | } 167 | }; 168 | 169 | // Called when logseq is first loaded 170 | logseq 171 | .ready(() => { 172 | console.log("logseq-plugin-github-get loaded"); 173 | 174 | logseq.Editor.registerSlashCommand("Get Github File", async (e) => { 175 | if (!checkSettings()) return; 176 | 177 | getCode(e.uuid); 178 | }); 179 | logseq.Editor.registerBlockContextMenuItem("Get Github File", async (e) => { 180 | if (!checkSettings()) return; 181 | insertRefreshBtn(e.uuid); 182 | getCode(e.uuid); 183 | }); 184 | 185 | logseq.setMainUIInlineStyle({ 186 | position: "fixed", 187 | width: "290px", 188 | zIndex: 999, 189 | transform: "translateX(-50%)", 190 | }); 191 | 192 | logseq.App.onMacroRendererSlotted(({ slot, payload }) => { 193 | let [type, filePath, commit_id, commit_message, pin] = payload.arguments; 194 | 195 | let [account, repo, file] = parseFilePath(filePath); 196 | 197 | if (!type?.startsWith(":github_")) return; 198 | 199 | // models 200 | logseq.provideModel({ 201 | async refreshGithub(e: any) { 202 | if (!checkSettings()) return; 203 | refreshCode(e.dataset.blockUuid, e.dataset.filePath); 204 | }, 205 | async togglePin(e: any) { 206 | if (!checkSettings()) return; 207 | const block = await logseq.Editor.getBlock(e.dataset.blockUuid, { 208 | includeChildren: false, 209 | }); 210 | // Toggle Pin setting 211 | let updatedContent = ""; 212 | if (block?.content.includes("false")) { 213 | updatedContent = block?.content.replace("false", "true"); 214 | const { rect } = e; 215 | logseq.toggleMainUI(); 216 | } 217 | if (block?.content.includes("true")) { 218 | updatedContent = block?.content.replace("true", "false"); 219 | } 220 | 221 | // Update recycle button 222 | logseq.Editor.updateBlock(e.dataset.blockUuid, updatedContent); 223 | }, 224 | }); 225 | 226 | logseq.provideStyle(` 227 | .github-refresh-btn { 228 | border: 1px solid var(--ls-border-color); 229 | white-space: initial; 230 | padding: 2px 4px; 231 | border-radius: 4px; 232 | user-select: none; 233 | cursor: default; 234 | display: flex; 235 | align-content: center; 236 | } 237 | 238 | .github-refresh-btn:hover { 239 | opacity: .8; 240 | background-color: #92a8d1; 241 | color: white; 242 | } 243 | 244 | .github-commit-id { 245 | border: 1px solid var(--ls-border-color); 246 | white-space: initial; 247 | padding: 2px 4px; 248 | border-radius: 4px; 249 | user-select: none; 250 | cursor: default; 251 | display: flex; 252 | align-content: center; 253 | color: #c9c8c5; 254 | } 255 | 256 | .github-commit-id:hover { 257 | opacity: .8; 258 | background-color: #92a8d1; 259 | color: white; 260 | } 261 | 262 | 263 | 264 | `); 265 | 266 | logseq.provideUI({ 267 | key: "github_refresh_mounted", 268 | slot, 269 | reset: true, 270 | template: ` 271 | 279 | 285 | `, 286 | }); 287 | }); 288 | }) 289 | .catch((err) => { 290 | console.log(`VS Code Error: ${err.message}`); 291 | }); 292 | -------------------------------------------------------------------------------- /logseq-github.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mandpd/logseq-plugin-github-get/282c39d7e281623ecca549bd320bebbb3e6e225a/logseq-github.gif -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "logseq-plugin-github-get", 3 | "version": "1.0.2", 4 | "description": "Get a file from a github repo", 5 | "main": "dist/index.html", 6 | "targets": { 7 | "main": false 8 | }, 9 | "keywords": [ 10 | "logseq" 11 | ], 12 | "scripts": { 13 | "dev": "parcel ./index.html --public-url ./", 14 | "build": "parcel build --no-source-maps index.html --public-url ./" 15 | }, 16 | "author": "p4th", 17 | "logseq": { 18 | "id": "logseq-github-get-ref", 19 | "icon": "./icon.png" 20 | }, 21 | "dependencies": { 22 | "@logseq/libs": "0.0.1-alpha.35", 23 | "axios": "^0.26.0" 24 | }, 25 | "devDependencies": { 26 | "buffer": "^6.0.3", 27 | "parcel": "2.0.0", 28 | "typescript": "4.4.3" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | '@logseq/libs': 0.0.1-alpha.35 5 | axios: ^0.26.0 6 | buffer: ^6.0.3 7 | parcel: 2.0.0 8 | typescript: 4.4.3 9 | 10 | dependencies: 11 | '@logseq/libs': 0.0.1-alpha.35 12 | axios: 0.26.0 13 | 14 | devDependencies: 15 | buffer: 6.0.3 16 | parcel: 2.0.0 17 | typescript: 4.4.3 18 | 19 | packages: 20 | 21 | /@babel/code-frame/7.16.7: 22 | resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} 23 | engines: {node: '>=6.9.0'} 24 | dependencies: 25 | '@babel/highlight': 7.16.10 26 | dev: true 27 | 28 | /@babel/helper-validator-identifier/7.16.7: 29 | resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} 30 | engines: {node: '>=6.9.0'} 31 | dev: true 32 | 33 | /@babel/highlight/7.16.10: 34 | resolution: {integrity: sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==} 35 | engines: {node: '>=6.9.0'} 36 | dependencies: 37 | '@babel/helper-validator-identifier': 7.16.7 38 | chalk: 2.4.2 39 | js-tokens: 4.0.0 40 | dev: true 41 | 42 | /@logseq/libs/0.0.1-alpha.35: 43 | resolution: {integrity: sha512-KikcqgolrTFqlEWoiprAdRsz9kwUX3XwcjzWa9usBGLwgGCpq6E/1UvvhQweJJAXAGDUVUHIzdJ6Cm6pvuOBWQ==} 44 | dependencies: 45 | csstype: 3.0.8 46 | debug: 4.3.1 47 | dompurify: 2.3.1 48 | eventemitter3: 4.0.7 49 | fast-deep-equal: 3.1.3 50 | lodash-es: 4.17.21 51 | path: 0.12.7 52 | snake-case: 3.0.4 53 | transitivePeerDependencies: 54 | - supports-color 55 | dev: false 56 | 57 | /@parcel/bundler-default/2.3.2_@parcel+core@2.3.2: 58 | resolution: {integrity: sha512-JUrto4mjSD0ic9dEqRp0loL5o3HVYHja1ZIYSq+rBl2UWRV6/9cGTb07lXOCqqm0BWE+hQ4krUxB76qWaF0Lqw==} 59 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 60 | dependencies: 61 | '@parcel/diagnostic': 2.3.2 62 | '@parcel/hash': 2.3.2 63 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 64 | '@parcel/utils': 2.3.2 65 | nullthrows: 1.1.1 66 | transitivePeerDependencies: 67 | - '@parcel/core' 68 | dev: true 69 | 70 | /@parcel/cache/2.3.2_@parcel+core@2.3.2: 71 | resolution: {integrity: sha512-Xxq+ekgcFEme6Fn1v7rEOBkyMOUOUu7eNqQw0l6HQS+INZ2Q7YzzfdW7pI8rEOAAICVg5BWKpmBQZpgJlT+HxQ==} 72 | engines: {node: '>= 12.0.0'} 73 | peerDependencies: 74 | '@parcel/core': ^2.3.2 75 | dependencies: 76 | '@parcel/core': 2.3.2 77 | '@parcel/fs': 2.3.2_@parcel+core@2.3.2 78 | '@parcel/logger': 2.3.2 79 | '@parcel/utils': 2.3.2 80 | lmdb: 2.2.1 81 | dev: true 82 | 83 | /@parcel/codeframe/2.3.2: 84 | resolution: {integrity: sha512-ireQALcxxrTdIEpzTOoMo/GpfbFm1qlyezeGl3Hce3PMvHLg3a5S6u/Vcy7SAjdld5GfhHEqVY+blME6Z4CyXQ==} 85 | engines: {node: '>= 12.0.0'} 86 | dependencies: 87 | chalk: 4.1.2 88 | dev: true 89 | 90 | /@parcel/compressor-raw/2.3.2_@parcel+core@2.3.2: 91 | resolution: {integrity: sha512-8dIoFwinYK6bOTpnZOAwwIv0v73y0ezsctPmfMnIqVQPn7wJwfhw/gbKVcmK5AkgQMkyid98hlLZoaZtGF1Mdg==} 92 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 93 | dependencies: 94 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 95 | transitivePeerDependencies: 96 | - '@parcel/core' 97 | dev: true 98 | 99 | /@parcel/config-default/2.3.2_@parcel+core@2.3.2: 100 | resolution: {integrity: sha512-E7/iA7fGCYvXU3u6zF9nxjeDVsgjCN6MVvDjymjaxYMoDWTIsPV245SBEXqzgtmzbMAV+VAl4rVWLMB4pzMt9g==} 101 | peerDependencies: 102 | '@parcel/core': ^2.3.2 103 | dependencies: 104 | '@parcel/bundler-default': 2.3.2_@parcel+core@2.3.2 105 | '@parcel/compressor-raw': 2.3.2_@parcel+core@2.3.2 106 | '@parcel/core': 2.3.2 107 | '@parcel/namer-default': 2.3.2_@parcel+core@2.3.2 108 | '@parcel/optimizer-cssnano': 2.3.2_@parcel+core@2.3.2 109 | '@parcel/optimizer-htmlnano': 2.3.2_@parcel+core@2.3.2 110 | '@parcel/optimizer-image': 2.3.2_@parcel+core@2.3.2 111 | '@parcel/optimizer-svgo': 2.3.2_@parcel+core@2.3.2 112 | '@parcel/optimizer-terser': 2.3.2_@parcel+core@2.3.2 113 | '@parcel/packager-css': 2.3.2_@parcel+core@2.3.2 114 | '@parcel/packager-html': 2.3.2_@parcel+core@2.3.2 115 | '@parcel/packager-js': 2.3.2_@parcel+core@2.3.2 116 | '@parcel/packager-raw': 2.3.2_@parcel+core@2.3.2 117 | '@parcel/packager-svg': 2.3.2_@parcel+core@2.3.2 118 | '@parcel/reporter-dev-server': 2.3.2_@parcel+core@2.3.2 119 | '@parcel/resolver-default': 2.3.2_@parcel+core@2.3.2 120 | '@parcel/runtime-browser-hmr': 2.3.2_@parcel+core@2.3.2 121 | '@parcel/runtime-js': 2.3.2_@parcel+core@2.3.2 122 | '@parcel/runtime-react-refresh': 2.3.2_@parcel+core@2.3.2 123 | '@parcel/runtime-service-worker': 2.3.2_@parcel+core@2.3.2 124 | '@parcel/transformer-babel': 2.3.2_@parcel+core@2.3.2 125 | '@parcel/transformer-css': 2.3.2_@parcel+core@2.3.2 126 | '@parcel/transformer-html': 2.3.2_@parcel+core@2.3.2 127 | '@parcel/transformer-image': 2.3.2_@parcel+core@2.3.2 128 | '@parcel/transformer-js': 2.3.2_@parcel+core@2.3.2 129 | '@parcel/transformer-json': 2.3.2_@parcel+core@2.3.2 130 | '@parcel/transformer-postcss': 2.3.2_@parcel+core@2.3.2 131 | '@parcel/transformer-posthtml': 2.3.2_@parcel+core@2.3.2 132 | '@parcel/transformer-raw': 2.3.2_@parcel+core@2.3.2 133 | '@parcel/transformer-react-refresh-wrap': 2.3.2_@parcel+core@2.3.2 134 | '@parcel/transformer-svg': 2.3.2_@parcel+core@2.3.2 135 | transitivePeerDependencies: 136 | - acorn 137 | - cssnano 138 | - postcss 139 | - purgecss 140 | - relateurl 141 | - srcset 142 | - terser 143 | - uncss 144 | dev: true 145 | 146 | /@parcel/core/2.3.2: 147 | resolution: {integrity: sha512-gdJzpsgeUhv9H8T0UKVmyuptiXdduEfKIUx0ci+/PGhq8cCoiFnlnuhW6H7oLr79OUc+YJStabDJuG4U2A6ysw==} 148 | engines: {node: '>= 12.0.0'} 149 | dependencies: 150 | '@parcel/cache': 2.3.2_@parcel+core@2.3.2 151 | '@parcel/diagnostic': 2.3.2 152 | '@parcel/events': 2.3.2 153 | '@parcel/fs': 2.3.2_@parcel+core@2.3.2 154 | '@parcel/graph': 2.3.2 155 | '@parcel/hash': 2.3.2 156 | '@parcel/logger': 2.3.2 157 | '@parcel/package-manager': 2.3.2_@parcel+core@2.3.2 158 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 159 | '@parcel/source-map': 2.0.2 160 | '@parcel/types': 2.3.2_@parcel+core@2.3.2 161 | '@parcel/utils': 2.3.2 162 | '@parcel/workers': 2.3.2_@parcel+core@2.3.2 163 | abortcontroller-polyfill: 1.7.3 164 | base-x: 3.0.9 165 | browserslist: 4.19.3 166 | clone: 2.1.2 167 | dotenv: 7.0.0 168 | dotenv-expand: 5.1.0 169 | json-source-map: 0.6.1 170 | json5: 2.2.0 171 | msgpackr: 1.5.4 172 | nullthrows: 1.1.1 173 | semver: 5.7.1 174 | dev: true 175 | 176 | /@parcel/diagnostic/2.3.2: 177 | resolution: {integrity: sha512-/xW93Az4AOiifuYW/c4CDbUcu3lx5FcUDAj9AGiR9NSTsF/ROC/RqnxvQ3AGtqa14R7vido4MXEpY3JEp6FsqA==} 178 | engines: {node: '>= 12.0.0'} 179 | dependencies: 180 | json-source-map: 0.6.1 181 | nullthrows: 1.1.1 182 | dev: true 183 | 184 | /@parcel/events/2.3.2: 185 | resolution: {integrity: sha512-WiYIwXMo4Vd+pi58vRoHkul8TPE5VEfMY+3FYwVCKPl/LYqSD+vz6wMx9uG18mEbB1d/ofefv5ZFQNtPGKO4tQ==} 186 | engines: {node: '>= 12.0.0'} 187 | dev: true 188 | 189 | /@parcel/fs-search/2.3.2: 190 | resolution: {integrity: sha512-u3DTEFnPtKuZvEtgGzfVjQUytegSSn3POi7WfwMwPIaeDPfYcyyhfl+c96z7VL9Gk/pqQ99/cGyAwFdFsnxxXA==} 191 | engines: {node: '>= 12.0.0'} 192 | dependencies: 193 | detect-libc: 1.0.3 194 | dev: true 195 | 196 | /@parcel/fs/2.3.2_@parcel+core@2.3.2: 197 | resolution: {integrity: sha512-XV+OsnRpN01QKU37lBN0TFKvv7uPKfQGbqFqYOrMbXH++Ae8rBU0Ykz+Yu4tv2h7shMlde+AMKgRnRTAJZpWEQ==} 198 | engines: {node: '>= 12.0.0'} 199 | peerDependencies: 200 | '@parcel/core': ^2.3.2 201 | dependencies: 202 | '@parcel/core': 2.3.2 203 | '@parcel/fs-search': 2.3.2 204 | '@parcel/types': 2.3.2_@parcel+core@2.3.2 205 | '@parcel/utils': 2.3.2 206 | '@parcel/watcher': 2.0.5 207 | '@parcel/workers': 2.3.2_@parcel+core@2.3.2 208 | dev: true 209 | 210 | /@parcel/graph/2.3.2: 211 | resolution: {integrity: sha512-ltTBM3IEqumgmy4ABBFETT8NtAwSsjD9mY3WCyJ5P8rUshfVCg093rvBPbpuJYMaH/TV1AHVaWfZqaZ4JQDIQQ==} 212 | engines: {node: '>= 12.0.0'} 213 | dependencies: 214 | '@parcel/utils': 2.3.2 215 | nullthrows: 1.1.1 216 | dev: true 217 | 218 | /@parcel/hash/2.3.2: 219 | resolution: {integrity: sha512-SMtYTsHihws/wqdVnOr0QAGyGYsW9rJSJkkoRujUxo8l2ctnBN1ztv89eOUrdtgHsmcnj/oz1yw6sN38X+BUng==} 220 | engines: {node: '>= 12.0.0'} 221 | dependencies: 222 | detect-libc: 1.0.3 223 | xxhash-wasm: 0.4.2 224 | dev: true 225 | 226 | /@parcel/logger/2.3.2: 227 | resolution: {integrity: sha512-jIWd8TXDQf+EnNWSa7Q10lSQ6C1LSH8OZkTlaINrfVIw7s+3tVxO3I4pjp7/ARw7RX2gdNPlw6fH4Gn/HvvYbw==} 228 | engines: {node: '>= 12.0.0'} 229 | dependencies: 230 | '@parcel/diagnostic': 2.3.2 231 | '@parcel/events': 2.3.2 232 | dev: true 233 | 234 | /@parcel/markdown-ansi/2.3.2: 235 | resolution: {integrity: sha512-l01ggmag5QScCk9mYA0xHh5TWSffR84uPFP2KvaAMQQ9NLNufcFiU0mn/Mtr3pCb5L5dSzmJ+Oo9s7P1Kh/Fmg==} 236 | engines: {node: '>= 12.0.0'} 237 | dependencies: 238 | chalk: 4.1.2 239 | dev: true 240 | 241 | /@parcel/namer-default/2.3.2_@parcel+core@2.3.2: 242 | resolution: {integrity: sha512-3QUMC0+5+3KMKfoAxYAbpZtuRqTgyZKsGDWzOpuqwemqp6P8ahAvNPwSCi6QSkGcTmvtYwBu9/NHPSONxIFOfg==} 243 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 244 | dependencies: 245 | '@parcel/diagnostic': 2.3.2 246 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 247 | nullthrows: 1.1.1 248 | transitivePeerDependencies: 249 | - '@parcel/core' 250 | dev: true 251 | 252 | /@parcel/node-resolver-core/2.3.2: 253 | resolution: {integrity: sha512-wmrnMNzJN4GuHw2Ftho+BWgSWR6UCkW3XoMdphqcxpw/ieAdS2a+xYSosYkZgQZ6lGutSvLyJ1CkVvP6RLIdQQ==} 254 | engines: {node: '>= 12.0.0'} 255 | dependencies: 256 | '@parcel/diagnostic': 2.3.2 257 | '@parcel/utils': 2.3.2 258 | nullthrows: 1.1.1 259 | dev: true 260 | 261 | /@parcel/optimizer-cssnano/2.3.2_@parcel+core@2.3.2: 262 | resolution: {integrity: sha512-wTBOxMiBI38NAB9XIlQZRCjS59+EWjWR9M04D3TWyxl+dL5gYMc1cl4GNynUnmcPdz+3s1UbOdo5/8V90wjiiw==} 263 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 264 | dependencies: 265 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 266 | '@parcel/source-map': 2.0.2 267 | cssnano: 5.0.17_postcss@8.4.6 268 | postcss: 8.4.6 269 | transitivePeerDependencies: 270 | - '@parcel/core' 271 | dev: true 272 | 273 | /@parcel/optimizer-htmlnano/2.3.2_@parcel+core@2.3.2: 274 | resolution: {integrity: sha512-U8C0TDSxsx8HmHaLW0Zc7ha1fXQynzhvBjCRMGYnOiLiw0MOfLQxzQ2WKVSeCotmdlF63ayCwxWsd6BuqStiKQ==} 275 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 276 | dependencies: 277 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 278 | htmlnano: 2.0.0_svgo@2.8.0 279 | nullthrows: 1.1.1 280 | posthtml: 0.16.5 281 | svgo: 2.8.0 282 | transitivePeerDependencies: 283 | - '@parcel/core' 284 | - cssnano 285 | - postcss 286 | - purgecss 287 | - relateurl 288 | - srcset 289 | - terser 290 | - uncss 291 | dev: true 292 | 293 | /@parcel/optimizer-image/2.3.2_@parcel+core@2.3.2: 294 | resolution: {integrity: sha512-HOk3r5qdvY/PmI7Q3i2qEgFH3kP2QWG4Wq3wmC4suaF1+c2gpiQc+HKHWp4QvfbH3jhT00c5NxQyqPhbXeNI9Q==} 295 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 296 | dependencies: 297 | '@parcel/diagnostic': 2.3.2 298 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 299 | '@parcel/utils': 2.3.2 300 | '@parcel/workers': 2.3.2_@parcel+core@2.3.2 301 | detect-libc: 1.0.3 302 | transitivePeerDependencies: 303 | - '@parcel/core' 304 | dev: true 305 | 306 | /@parcel/optimizer-svgo/2.3.2_@parcel+core@2.3.2: 307 | resolution: {integrity: sha512-l7WvZ5+e7D1mVmLUxMVaSb29cviXzuvSY2OpQs0ukdPACDqag+C65hWMzwTiOSSRGPMIu96kQKpeVru2YjibhA==} 308 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 309 | dependencies: 310 | '@parcel/diagnostic': 2.3.2 311 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 312 | '@parcel/utils': 2.3.2 313 | svgo: 2.8.0 314 | transitivePeerDependencies: 315 | - '@parcel/core' 316 | dev: true 317 | 318 | /@parcel/optimizer-terser/2.3.2_@parcel+core@2.3.2: 319 | resolution: {integrity: sha512-dOapHhfy0xiNZa2IoEyHGkhhla07xsja79NPem14e5jCqY6Oi40jKNV4ab5uu5u1elWUjJuw69tiYbkDZWbKQw==} 320 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 321 | dependencies: 322 | '@parcel/diagnostic': 2.3.2 323 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 324 | '@parcel/source-map': 2.0.2 325 | '@parcel/utils': 2.3.2 326 | nullthrows: 1.1.1 327 | terser: 5.10.0 328 | transitivePeerDependencies: 329 | - '@parcel/core' 330 | - acorn 331 | dev: true 332 | 333 | /@parcel/package-manager/2.3.2_@parcel+core@2.3.2: 334 | resolution: {integrity: sha512-pAQfywKVORY8Ee+NHAyKzzQrKbnz8otWRejps7urwhDaTVLfAd5C/1ZV64ATZ9ALYP9jyoQ8bTaxVd4opcSuwg==} 335 | engines: {node: '>= 12.0.0'} 336 | peerDependencies: 337 | '@parcel/core': ^2.3.2 338 | dependencies: 339 | '@parcel/core': 2.3.2 340 | '@parcel/diagnostic': 2.3.2 341 | '@parcel/fs': 2.3.2_@parcel+core@2.3.2 342 | '@parcel/logger': 2.3.2 343 | '@parcel/types': 2.3.2_@parcel+core@2.3.2 344 | '@parcel/utils': 2.3.2 345 | '@parcel/workers': 2.3.2_@parcel+core@2.3.2 346 | semver: 5.7.1 347 | dev: true 348 | 349 | /@parcel/packager-css/2.3.2_@parcel+core@2.3.2: 350 | resolution: {integrity: sha512-ByuF9xDnQnpVL1Hdu9aY6SpxOuZowd3TH7joh1qdRPLeMHTEvUywHBXoiAyNdrhnLGum8uPEdY8Ra5Xuo1U7kg==} 351 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 352 | dependencies: 353 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 354 | '@parcel/source-map': 2.0.2 355 | '@parcel/utils': 2.3.2 356 | nullthrows: 1.1.1 357 | transitivePeerDependencies: 358 | - '@parcel/core' 359 | dev: true 360 | 361 | /@parcel/packager-html/2.3.2_@parcel+core@2.3.2: 362 | resolution: {integrity: sha512-YqAptdU+uqfgwSii76mRGcA/3TpuC6yHr8xG+11brqj/tEFLsurmX0naombzd7FgmrTE9w+kb0HUIMl2vRBn0A==} 363 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 364 | dependencies: 365 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 366 | '@parcel/types': 2.3.2_@parcel+core@2.3.2 367 | '@parcel/utils': 2.3.2 368 | nullthrows: 1.1.1 369 | posthtml: 0.16.5 370 | transitivePeerDependencies: 371 | - '@parcel/core' 372 | dev: true 373 | 374 | /@parcel/packager-js/2.3.2_@parcel+core@2.3.2: 375 | resolution: {integrity: sha512-3OP0Ro9M1J+PIKZK4Ec2N5hjIPiqk++B2kMFeiUqvaNZjJgKrPPEICBhjS52rma4IE/NgmIMB3aI5pWqE/KwNA==} 376 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 377 | dependencies: 378 | '@parcel/diagnostic': 2.3.2 379 | '@parcel/hash': 2.3.2 380 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 381 | '@parcel/source-map': 2.0.2 382 | '@parcel/utils': 2.3.2 383 | globals: 13.12.1 384 | nullthrows: 1.1.1 385 | transitivePeerDependencies: 386 | - '@parcel/core' 387 | dev: true 388 | 389 | /@parcel/packager-raw/2.3.2_@parcel+core@2.3.2: 390 | resolution: {integrity: sha512-RnoZ7WgNAFWkEPrEefvyDqus7xfv9XGprHyTbfLittPaVAZpl+4eAv43nXyMfzk77Cgds6KcNpkosj3acEpNIQ==} 391 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 392 | dependencies: 393 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 394 | transitivePeerDependencies: 395 | - '@parcel/core' 396 | dev: true 397 | 398 | /@parcel/packager-svg/2.3.2_@parcel+core@2.3.2: 399 | resolution: {integrity: sha512-iIC0VeczOXynS7M5jCi3naMBRyAznBVJ3iMg92/GaI9duxPlUMGAlHzLAKNtoXkc00HMXDH7rrmMb04VX6FYSg==} 400 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 401 | dependencies: 402 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 403 | '@parcel/types': 2.3.2_@parcel+core@2.3.2 404 | '@parcel/utils': 2.3.2 405 | posthtml: 0.16.5 406 | transitivePeerDependencies: 407 | - '@parcel/core' 408 | dev: true 409 | 410 | /@parcel/plugin/2.3.2_@parcel+core@2.3.2: 411 | resolution: {integrity: sha512-SaLZAJX4KH+mrAmqmcy9KJN+V7L+6YNTlgyqYmfKlNiHu7aIjLL+3prX8QRcgGtjAYziCxvPj0cl1CCJssaiGg==} 412 | engines: {node: '>= 12.0.0'} 413 | dependencies: 414 | '@parcel/types': 2.3.2_@parcel+core@2.3.2 415 | transitivePeerDependencies: 416 | - '@parcel/core' 417 | dev: true 418 | 419 | /@parcel/reporter-cli/2.3.2_@parcel+core@2.3.2: 420 | resolution: {integrity: sha512-VYetmTXqW83npsvVvqlQZTbF3yVL3k/FCCl3kSWvOr9LZA0lmyqJWPjMHq37yIIOszQN/p5guLtgCjsP0UQw1Q==} 421 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 422 | dependencies: 423 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 424 | '@parcel/types': 2.3.2_@parcel+core@2.3.2 425 | '@parcel/utils': 2.3.2 426 | chalk: 4.1.2 427 | transitivePeerDependencies: 428 | - '@parcel/core' 429 | dev: true 430 | 431 | /@parcel/reporter-dev-server/2.3.2_@parcel+core@2.3.2: 432 | resolution: {integrity: sha512-E7LtnjAX4iiWMw2qKUyFBi3+bDz0UGjqgHoPQylUYYLi6opXjJz/oC+cCcCy4e3RZlkrl187XonvagS59YjDxA==} 433 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 434 | dependencies: 435 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 436 | '@parcel/utils': 2.3.2 437 | transitivePeerDependencies: 438 | - '@parcel/core' 439 | dev: true 440 | 441 | /@parcel/resolver-default/2.3.2_@parcel+core@2.3.2: 442 | resolution: {integrity: sha512-y3r+xOwWsATrNGUWuZ6soA7q24f8E5tY1AZ9lHCufnkK2cdKZJ5O1cyd7ohkAiKZx2/pMd+FgmVZ/J3oxetXkA==} 443 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 444 | dependencies: 445 | '@parcel/node-resolver-core': 2.3.2 446 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 447 | transitivePeerDependencies: 448 | - '@parcel/core' 449 | dev: true 450 | 451 | /@parcel/runtime-browser-hmr/2.3.2_@parcel+core@2.3.2: 452 | resolution: {integrity: sha512-nRD6uOyF1+HGylP9GASbYmvUDOsDaNwvaxuGTSh8+5M0mmCgib+hVBiPEKbwdmKjGbUPt9wRFPyMa/JpeQZsIQ==} 453 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 454 | dependencies: 455 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 456 | '@parcel/utils': 2.3.2 457 | transitivePeerDependencies: 458 | - '@parcel/core' 459 | dev: true 460 | 461 | /@parcel/runtime-js/2.3.2_@parcel+core@2.3.2: 462 | resolution: {integrity: sha512-SJepcHvYO/7CEe/Q85sngk+smcJ6TypuPh4D2R8kN+cAJPi5WvbQEe7+x5BEgbN+5Jumi/Uo3FfOOE5mYh+F6g==} 463 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 464 | dependencies: 465 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 466 | '@parcel/utils': 2.3.2 467 | nullthrows: 1.1.1 468 | transitivePeerDependencies: 469 | - '@parcel/core' 470 | dev: true 471 | 472 | /@parcel/runtime-react-refresh/2.3.2_@parcel+core@2.3.2: 473 | resolution: {integrity: sha512-P+GRPO2XVDSBQ4HmRSj2xfbHSQvL9+ahTE/AB74IJExLTITv5l4SHAV3VsiKohuHYUAYHW3A/Oe7tEFCAb6Cug==} 474 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 475 | dependencies: 476 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 477 | '@parcel/utils': 2.3.2 478 | react-refresh: 0.9.0 479 | transitivePeerDependencies: 480 | - '@parcel/core' 481 | dev: true 482 | 483 | /@parcel/runtime-service-worker/2.3.2_@parcel+core@2.3.2: 484 | resolution: {integrity: sha512-iREHj/eapphC4uS/zGUkiTJvG57q+CVbTrfE42kB8ECtf/RYNo5YC9htdvPZjRSXDPrEPc5NCoKp4X09ENNikw==} 485 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 486 | dependencies: 487 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 488 | '@parcel/utils': 2.3.2 489 | nullthrows: 1.1.1 490 | transitivePeerDependencies: 491 | - '@parcel/core' 492 | dev: true 493 | 494 | /@parcel/source-map/2.0.2: 495 | resolution: {integrity: sha512-NnUrPYLpYB6qyx2v6bcRPn/gVigmGG6M6xL8wIg/i0dP1GLkuY1nf+Hqdf63FzPTqqT7K3k6eE5yHPQVMO5jcA==} 496 | engines: {node: ^12.18.3 || >=14} 497 | dependencies: 498 | detect-libc: 1.0.3 499 | dev: true 500 | 501 | /@parcel/transformer-babel/2.3.2_@parcel+core@2.3.2: 502 | resolution: {integrity: sha512-QpWfH2V6jJ+kcUBIMM/uBBG8dGFvNaOGS+8jD6b+eTP+1owzm83RoWgqhRV2D/hhv2qMXEQzIljoc/wg2y+X4g==} 503 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 504 | dependencies: 505 | '@parcel/diagnostic': 2.3.2 506 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 507 | '@parcel/source-map': 2.0.2 508 | '@parcel/utils': 2.3.2 509 | browserslist: 4.19.3 510 | json5: 2.2.0 511 | nullthrows: 1.1.1 512 | semver: 5.7.1 513 | transitivePeerDependencies: 514 | - '@parcel/core' 515 | dev: true 516 | 517 | /@parcel/transformer-css/2.3.2_@parcel+core@2.3.2: 518 | resolution: {integrity: sha512-8lzvDny+78DIAqhcXam2Bf9FyaUoqzHdUQdNFn+PuXTHroG/QGPvln1kvqngJjn4/cpJS9vYmAPVXe+nai3P8g==} 519 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 520 | dependencies: 521 | '@parcel/hash': 2.3.2 522 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 523 | '@parcel/source-map': 2.0.2 524 | '@parcel/utils': 2.3.2 525 | nullthrows: 1.1.1 526 | postcss: 8.4.6 527 | postcss-value-parser: 4.2.0 528 | semver: 5.7.1 529 | transitivePeerDependencies: 530 | - '@parcel/core' 531 | dev: true 532 | 533 | /@parcel/transformer-html/2.3.2_@parcel+core@2.3.2: 534 | resolution: {integrity: sha512-idT1I/8WM65IFYBqzRwpwT7sf0xGur4EDQDHhuPX1w+pIVZnh0lkLMAnEqs6ar1SPRMys4chzkuDNnqh0d76hg==} 535 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 536 | dependencies: 537 | '@parcel/diagnostic': 2.3.2 538 | '@parcel/hash': 2.3.2 539 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 540 | nullthrows: 1.1.1 541 | posthtml: 0.16.5 542 | posthtml-parser: 0.10.2 543 | posthtml-render: 3.0.0 544 | semver: 5.7.1 545 | transitivePeerDependencies: 546 | - '@parcel/core' 547 | dev: true 548 | 549 | /@parcel/transformer-image/2.3.2_@parcel+core@2.3.2: 550 | resolution: {integrity: sha512-0K7cJHXysli6hZsUz/zVGO7WCoaaIeVdzAxKpLA1Yl3LKw/ODiMyXKt08LiV/ljQ2xT5qb9EsXUWDRvcZ0b96A==} 551 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 552 | dependencies: 553 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 554 | '@parcel/workers': 2.3.2_@parcel+core@2.3.2 555 | nullthrows: 1.1.1 556 | transitivePeerDependencies: 557 | - '@parcel/core' 558 | dev: true 559 | 560 | /@parcel/transformer-js/2.3.2_@parcel+core@2.3.2: 561 | resolution: {integrity: sha512-U1fbIoAoqR5P49S+DMhH8BUd9IHRPwrTTv6ARYGsYnhuNsjTFhNYE0kkfRYboe/e0z7vEbeJICZXjnZ7eQDw5A==} 562 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 563 | dependencies: 564 | '@parcel/diagnostic': 2.3.2 565 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 566 | '@parcel/source-map': 2.0.2 567 | '@parcel/utils': 2.3.2 568 | '@parcel/workers': 2.3.2_@parcel+core@2.3.2 569 | '@swc/helpers': 0.2.14 570 | browserslist: 4.19.3 571 | detect-libc: 1.0.3 572 | nullthrows: 1.1.1 573 | regenerator-runtime: 0.13.9 574 | semver: 5.7.1 575 | transitivePeerDependencies: 576 | - '@parcel/core' 577 | dev: true 578 | 579 | /@parcel/transformer-json/2.3.2_@parcel+core@2.3.2: 580 | resolution: {integrity: sha512-Pv2iPaxKINtFwOk5fDbHjQlSm2Vza/NLimQY896FLxiXPNAJxWGvMwdutgOPEBKksxRx9LZPyIOHiRVZ0KcA3w==} 581 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 582 | dependencies: 583 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 584 | json5: 2.2.0 585 | transitivePeerDependencies: 586 | - '@parcel/core' 587 | dev: true 588 | 589 | /@parcel/transformer-postcss/2.3.2_@parcel+core@2.3.2: 590 | resolution: {integrity: sha512-Rpdxc1rt2aJFCh/y/ccaBc9J1crDjNY5o44xYoOemBoUNDMREsmg5sR5iO81qKKO5GxfoosGb2zh59aeTmywcg==} 591 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 592 | dependencies: 593 | '@parcel/hash': 2.3.2 594 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 595 | '@parcel/utils': 2.3.2 596 | clone: 2.1.2 597 | nullthrows: 1.1.1 598 | postcss-value-parser: 4.2.0 599 | semver: 5.7.1 600 | transitivePeerDependencies: 601 | - '@parcel/core' 602 | dev: true 603 | 604 | /@parcel/transformer-posthtml/2.3.2_@parcel+core@2.3.2: 605 | resolution: {integrity: sha512-tMdVExfdM+1G8A9KSHDsjg+S9xEGbhH5mApF2NslPnNZ4ciLKRNuHU2sSV/v8i0a6kacKvDTrwQXYBQJGOodBw==} 606 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 607 | dependencies: 608 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 609 | '@parcel/utils': 2.3.2 610 | nullthrows: 1.1.1 611 | posthtml: 0.16.5 612 | posthtml-parser: 0.10.2 613 | posthtml-render: 3.0.0 614 | semver: 5.7.1 615 | transitivePeerDependencies: 616 | - '@parcel/core' 617 | dev: true 618 | 619 | /@parcel/transformer-raw/2.3.2_@parcel+core@2.3.2: 620 | resolution: {integrity: sha512-lY7eOCaALZ90+GH+4PZRmAPGQRXoZ66NakSdhEtH6JSSAYOmZKDvNLGTMRo/vK1oELzWMuAHGdqvbcPDtNLLVw==} 621 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 622 | dependencies: 623 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 624 | transitivePeerDependencies: 625 | - '@parcel/core' 626 | dev: true 627 | 628 | /@parcel/transformer-react-refresh-wrap/2.3.2_@parcel+core@2.3.2: 629 | resolution: {integrity: sha512-FZaderyCExn0SBZ6D+zHPWc8JSn9YDcbfibv0wkCl+D7sYfeWZ22i7MRp5NwCe/TZ21WuxDWySCggEp/Waz2xg==} 630 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 631 | dependencies: 632 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 633 | '@parcel/utils': 2.3.2 634 | react-refresh: 0.9.0 635 | transitivePeerDependencies: 636 | - '@parcel/core' 637 | dev: true 638 | 639 | /@parcel/transformer-svg/2.3.2_@parcel+core@2.3.2: 640 | resolution: {integrity: sha512-k9My6bePsaGgUh+tidDjFbbVgKPTzwCAQfoloZRMt7y396KgUbvCfqDruk04k6k+cJn7Jl1o/5lUpTEruBze7g==} 641 | engines: {node: '>= 12.0.0', parcel: ^2.3.2} 642 | dependencies: 643 | '@parcel/diagnostic': 2.3.2 644 | '@parcel/hash': 2.3.2 645 | '@parcel/plugin': 2.3.2_@parcel+core@2.3.2 646 | nullthrows: 1.1.1 647 | posthtml: 0.16.5 648 | posthtml-parser: 0.10.2 649 | posthtml-render: 3.0.0 650 | semver: 5.7.1 651 | transitivePeerDependencies: 652 | - '@parcel/core' 653 | dev: true 654 | 655 | /@parcel/types/2.3.2: 656 | resolution: {integrity: sha512-C77Ct1xNM7LWjPTfe/dQ/9rq1efdsX5VJu2o8/TVi6qoFh64Wp/c5/vCHwKInOTBZUTchVO6z4PGJNIZoUVJuA==} 657 | dependencies: 658 | '@parcel/cache': 2.3.2_@parcel+core@2.3.2 659 | '@parcel/diagnostic': 2.3.2 660 | '@parcel/fs': 2.3.2_@parcel+core@2.3.2 661 | '@parcel/package-manager': 2.3.2_@parcel+core@2.3.2 662 | '@parcel/source-map': 2.0.2 663 | '@parcel/workers': 2.3.2_@parcel+core@2.3.2 664 | utility-types: 3.10.0 665 | dev: true 666 | 667 | /@parcel/types/2.3.2_@parcel+core@2.3.2: 668 | resolution: {integrity: sha512-C77Ct1xNM7LWjPTfe/dQ/9rq1efdsX5VJu2o8/TVi6qoFh64Wp/c5/vCHwKInOTBZUTchVO6z4PGJNIZoUVJuA==} 669 | dependencies: 670 | '@parcel/cache': 2.3.2_@parcel+core@2.3.2 671 | '@parcel/diagnostic': 2.3.2 672 | '@parcel/fs': 2.3.2_@parcel+core@2.3.2 673 | '@parcel/package-manager': 2.3.2_@parcel+core@2.3.2 674 | '@parcel/source-map': 2.0.2 675 | '@parcel/workers': 2.3.2_@parcel+core@2.3.2 676 | utility-types: 3.10.0 677 | transitivePeerDependencies: 678 | - '@parcel/core' 679 | dev: true 680 | 681 | /@parcel/utils/2.3.2: 682 | resolution: {integrity: sha512-xzZ+0vWhrXlLzGoz7WlANaO5IPtyWGeCZruGtepUL3yheRWb1UU4zFN9xz7Z+j++Dmf1Fgkc3qdk/t4O8u9HLQ==} 683 | engines: {node: '>= 12.0.0'} 684 | dependencies: 685 | '@parcel/codeframe': 2.3.2 686 | '@parcel/diagnostic': 2.3.2 687 | '@parcel/hash': 2.3.2 688 | '@parcel/logger': 2.3.2 689 | '@parcel/markdown-ansi': 2.3.2 690 | '@parcel/source-map': 2.0.2 691 | chalk: 4.1.2 692 | dev: true 693 | 694 | /@parcel/watcher/2.0.5: 695 | resolution: {integrity: sha512-x0hUbjv891omnkcHD7ZOhiyyUqUUR6MNjq89JhEI3BxppeKWAm6NPQsqqRrAkCJBogdT/o/My21sXtTI9rJIsw==} 696 | engines: {node: '>= 10.0.0'} 697 | requiresBuild: true 698 | dependencies: 699 | node-addon-api: 3.2.1 700 | node-gyp-build: 4.3.0 701 | dev: true 702 | 703 | /@parcel/workers/2.3.2_@parcel+core@2.3.2: 704 | resolution: {integrity: sha512-JbOm+Ceuyymd1SuKGgodC2EXAiPuFRpaNUSJpz3NAsS3lVIt2TDAPMOWBivS7sML/KltspUfl/Q9YwO0TPUFNw==} 705 | engines: {node: '>= 12.0.0'} 706 | peerDependencies: 707 | '@parcel/core': ^2.3.2 708 | dependencies: 709 | '@parcel/core': 2.3.2 710 | '@parcel/diagnostic': 2.3.2 711 | '@parcel/logger': 2.3.2 712 | '@parcel/types': 2.3.2 713 | '@parcel/utils': 2.3.2 714 | chrome-trace-event: 1.0.3 715 | nullthrows: 1.1.1 716 | dev: true 717 | 718 | /@swc/helpers/0.2.14: 719 | resolution: {integrity: sha512-wpCQMhf5p5GhNg2MmGKXzUNwxe7zRiCsmqYsamez2beP7mKPCSiu+BjZcdN95yYSzO857kr0VfQewmGpS77nqA==} 720 | dev: true 721 | 722 | /@trysound/sax/0.2.0: 723 | resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} 724 | engines: {node: '>=10.13.0'} 725 | dev: true 726 | 727 | /@types/parse-json/4.0.0: 728 | resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} 729 | dev: true 730 | 731 | /abortcontroller-polyfill/1.7.3: 732 | resolution: {integrity: sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==} 733 | dev: true 734 | 735 | /ansi-styles/3.2.1: 736 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 737 | engines: {node: '>=4'} 738 | dependencies: 739 | color-convert: 1.9.3 740 | dev: true 741 | 742 | /ansi-styles/4.3.0: 743 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 744 | engines: {node: '>=8'} 745 | dependencies: 746 | color-convert: 2.0.1 747 | dev: true 748 | 749 | /axios/0.26.0: 750 | resolution: {integrity: sha512-lKoGLMYtHvFrPVt3r+RBMp9nh34N0M8zEfCWqdWZx6phynIEhQqAdydpyBAAG211zlhX9Rgu08cOamy6XjE5Og==} 751 | dependencies: 752 | follow-redirects: 1.14.9 753 | transitivePeerDependencies: 754 | - debug 755 | dev: false 756 | 757 | /base-x/3.0.9: 758 | resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} 759 | dependencies: 760 | safe-buffer: 5.2.1 761 | dev: true 762 | 763 | /base64-js/1.5.1: 764 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 765 | dev: true 766 | 767 | /boolbase/1.0.0: 768 | resolution: {integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24=} 769 | dev: true 770 | 771 | /browserslist/4.19.3: 772 | resolution: {integrity: sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==} 773 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 774 | hasBin: true 775 | dependencies: 776 | caniuse-lite: 1.0.30001312 777 | electron-to-chromium: 1.4.71 778 | escalade: 3.1.1 779 | node-releases: 2.0.2 780 | picocolors: 1.0.0 781 | dev: true 782 | 783 | /buffer-from/1.1.2: 784 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 785 | dev: true 786 | 787 | /buffer/6.0.3: 788 | resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 789 | dependencies: 790 | base64-js: 1.5.1 791 | ieee754: 1.2.1 792 | dev: true 793 | 794 | /callsites/3.1.0: 795 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 796 | engines: {node: '>=6'} 797 | dev: true 798 | 799 | /caniuse-api/3.0.0: 800 | resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} 801 | dependencies: 802 | browserslist: 4.19.3 803 | caniuse-lite: 1.0.30001312 804 | lodash.memoize: 4.1.2 805 | lodash.uniq: 4.5.0 806 | dev: true 807 | 808 | /caniuse-lite/1.0.30001312: 809 | resolution: {integrity: sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==} 810 | dev: true 811 | 812 | /chalk/2.4.2: 813 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 814 | engines: {node: '>=4'} 815 | dependencies: 816 | ansi-styles: 3.2.1 817 | escape-string-regexp: 1.0.5 818 | supports-color: 5.5.0 819 | dev: true 820 | 821 | /chalk/4.1.2: 822 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 823 | engines: {node: '>=10'} 824 | dependencies: 825 | ansi-styles: 4.3.0 826 | supports-color: 7.2.0 827 | dev: true 828 | 829 | /chrome-trace-event/1.0.3: 830 | resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} 831 | engines: {node: '>=6.0'} 832 | dev: true 833 | 834 | /clone/2.1.2: 835 | resolution: {integrity: sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=} 836 | engines: {node: '>=0.8'} 837 | dev: true 838 | 839 | /color-convert/1.9.3: 840 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 841 | dependencies: 842 | color-name: 1.1.3 843 | dev: true 844 | 845 | /color-convert/2.0.1: 846 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 847 | engines: {node: '>=7.0.0'} 848 | dependencies: 849 | color-name: 1.1.4 850 | dev: true 851 | 852 | /color-name/1.1.3: 853 | resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} 854 | dev: true 855 | 856 | /color-name/1.1.4: 857 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 858 | dev: true 859 | 860 | /colord/2.9.2: 861 | resolution: {integrity: sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==} 862 | dev: true 863 | 864 | /commander/2.20.3: 865 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 866 | dev: true 867 | 868 | /commander/7.2.0: 869 | resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} 870 | engines: {node: '>= 10'} 871 | dev: true 872 | 873 | /cosmiconfig/7.0.1: 874 | resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} 875 | engines: {node: '>=10'} 876 | dependencies: 877 | '@types/parse-json': 4.0.0 878 | import-fresh: 3.3.0 879 | parse-json: 5.2.0 880 | path-type: 4.0.0 881 | yaml: 1.10.2 882 | dev: true 883 | 884 | /css-declaration-sorter/6.1.4_postcss@8.4.6: 885 | resolution: {integrity: sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==} 886 | engines: {node: '>= 10'} 887 | peerDependencies: 888 | postcss: ^8.0.9 889 | dependencies: 890 | postcss: 8.4.6 891 | timsort: 0.3.0 892 | dev: true 893 | 894 | /css-select/4.2.1: 895 | resolution: {integrity: sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==} 896 | dependencies: 897 | boolbase: 1.0.0 898 | css-what: 5.1.0 899 | domhandler: 4.3.0 900 | domutils: 2.8.0 901 | nth-check: 2.0.1 902 | dev: true 903 | 904 | /css-tree/1.1.3: 905 | resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} 906 | engines: {node: '>=8.0.0'} 907 | dependencies: 908 | mdn-data: 2.0.14 909 | source-map: 0.6.1 910 | dev: true 911 | 912 | /css-what/5.1.0: 913 | resolution: {integrity: sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==} 914 | engines: {node: '>= 6'} 915 | dev: true 916 | 917 | /cssesc/3.0.0: 918 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 919 | engines: {node: '>=4'} 920 | hasBin: true 921 | dev: true 922 | 923 | /cssnano-preset-default/5.1.12_postcss@8.4.6: 924 | resolution: {integrity: sha512-rO/JZYyjW1QNkWBxMGV28DW7d98UDLaF759frhli58QFehZ+D/LSmwQ2z/ylBAe2hUlsIWTq6NYGfQPq65EF9w==} 925 | engines: {node: ^10 || ^12 || >=14.0} 926 | peerDependencies: 927 | postcss: ^8.2.15 928 | dependencies: 929 | css-declaration-sorter: 6.1.4_postcss@8.4.6 930 | cssnano-utils: 3.0.2_postcss@8.4.6 931 | postcss: 8.4.6 932 | postcss-calc: 8.2.4_postcss@8.4.6 933 | postcss-colormin: 5.2.5_postcss@8.4.6 934 | postcss-convert-values: 5.0.4_postcss@8.4.6 935 | postcss-discard-comments: 5.0.3_postcss@8.4.6 936 | postcss-discard-duplicates: 5.0.3_postcss@8.4.6 937 | postcss-discard-empty: 5.0.3_postcss@8.4.6 938 | postcss-discard-overridden: 5.0.4_postcss@8.4.6 939 | postcss-merge-longhand: 5.0.6_postcss@8.4.6 940 | postcss-merge-rules: 5.0.6_postcss@8.4.6 941 | postcss-minify-font-values: 5.0.4_postcss@8.4.6 942 | postcss-minify-gradients: 5.0.6_postcss@8.4.6 943 | postcss-minify-params: 5.0.5_postcss@8.4.6 944 | postcss-minify-selectors: 5.1.3_postcss@8.4.6 945 | postcss-normalize-charset: 5.0.3_postcss@8.4.6 946 | postcss-normalize-display-values: 5.0.3_postcss@8.4.6 947 | postcss-normalize-positions: 5.0.4_postcss@8.4.6 948 | postcss-normalize-repeat-style: 5.0.4_postcss@8.4.6 949 | postcss-normalize-string: 5.0.4_postcss@8.4.6 950 | postcss-normalize-timing-functions: 5.0.3_postcss@8.4.6 951 | postcss-normalize-unicode: 5.0.4_postcss@8.4.6 952 | postcss-normalize-url: 5.0.5_postcss@8.4.6 953 | postcss-normalize-whitespace: 5.0.4_postcss@8.4.6 954 | postcss-ordered-values: 5.0.5_postcss@8.4.6 955 | postcss-reduce-initial: 5.0.3_postcss@8.4.6 956 | postcss-reduce-transforms: 5.0.4_postcss@8.4.6 957 | postcss-svgo: 5.0.4_postcss@8.4.6 958 | postcss-unique-selectors: 5.0.4_postcss@8.4.6 959 | dev: true 960 | 961 | /cssnano-utils/3.0.2_postcss@8.4.6: 962 | resolution: {integrity: sha512-KhprijuQv2sP4kT92sSQwhlK3SJTbDIsxcfIEySB0O+3m9esFOai7dP9bMx5enHAh2MwarVIcnwiWoOm01RIbQ==} 963 | engines: {node: ^10 || ^12 || >=14.0} 964 | peerDependencies: 965 | postcss: ^8.2.15 966 | dependencies: 967 | postcss: 8.4.6 968 | dev: true 969 | 970 | /cssnano/5.0.17_postcss@8.4.6: 971 | resolution: {integrity: sha512-fmjLP7k8kL18xSspeXTzRhaFtRI7DL9b8IcXR80JgtnWBpvAzHT7sCR/6qdn0tnxIaINUN6OEQu83wF57Gs3Xw==} 972 | engines: {node: ^10 || ^12 || >=14.0} 973 | peerDependencies: 974 | postcss: ^8.2.15 975 | dependencies: 976 | cssnano-preset-default: 5.1.12_postcss@8.4.6 977 | lilconfig: 2.0.4 978 | postcss: 8.4.6 979 | yaml: 1.10.2 980 | dev: true 981 | 982 | /csso/4.2.0: 983 | resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} 984 | engines: {node: '>=8.0.0'} 985 | dependencies: 986 | css-tree: 1.1.3 987 | dev: true 988 | 989 | /csstype/3.0.8: 990 | resolution: {integrity: sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==} 991 | dev: false 992 | 993 | /debug/4.3.1: 994 | resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} 995 | engines: {node: '>=6.0'} 996 | peerDependencies: 997 | supports-color: '*' 998 | peerDependenciesMeta: 999 | supports-color: 1000 | optional: true 1001 | dependencies: 1002 | ms: 2.1.2 1003 | dev: false 1004 | 1005 | /detect-libc/1.0.3: 1006 | resolution: {integrity: sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=} 1007 | engines: {node: '>=0.10'} 1008 | hasBin: true 1009 | dev: true 1010 | 1011 | /dom-serializer/1.3.2: 1012 | resolution: {integrity: sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==} 1013 | dependencies: 1014 | domelementtype: 2.2.0 1015 | domhandler: 4.3.0 1016 | entities: 2.2.0 1017 | dev: true 1018 | 1019 | /domelementtype/2.2.0: 1020 | resolution: {integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==} 1021 | dev: true 1022 | 1023 | /domhandler/4.3.0: 1024 | resolution: {integrity: sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==} 1025 | engines: {node: '>= 4'} 1026 | dependencies: 1027 | domelementtype: 2.2.0 1028 | dev: true 1029 | 1030 | /dompurify/2.3.1: 1031 | resolution: {integrity: sha512-xGWt+NHAQS+4tpgbOAI08yxW0Pr256Gu/FNE2frZVTbgrBUn8M7tz7/ktS/LZ2MHeGqz6topj0/xY+y8R5FBFw==} 1032 | dev: false 1033 | 1034 | /domutils/2.8.0: 1035 | resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} 1036 | dependencies: 1037 | dom-serializer: 1.3.2 1038 | domelementtype: 2.2.0 1039 | domhandler: 4.3.0 1040 | dev: true 1041 | 1042 | /dot-case/3.0.4: 1043 | resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} 1044 | dependencies: 1045 | no-case: 3.0.4 1046 | tslib: 2.3.1 1047 | dev: false 1048 | 1049 | /dotenv-expand/5.1.0: 1050 | resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} 1051 | dev: true 1052 | 1053 | /dotenv/7.0.0: 1054 | resolution: {integrity: sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==} 1055 | engines: {node: '>=6'} 1056 | dev: true 1057 | 1058 | /electron-to-chromium/1.4.71: 1059 | resolution: {integrity: sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==} 1060 | dev: true 1061 | 1062 | /entities/2.2.0: 1063 | resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} 1064 | dev: true 1065 | 1066 | /entities/3.0.1: 1067 | resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} 1068 | engines: {node: '>=0.12'} 1069 | dev: true 1070 | 1071 | /error-ex/1.3.2: 1072 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1073 | dependencies: 1074 | is-arrayish: 0.2.1 1075 | dev: true 1076 | 1077 | /escalade/3.1.1: 1078 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1079 | engines: {node: '>=6'} 1080 | dev: true 1081 | 1082 | /escape-string-regexp/1.0.5: 1083 | resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} 1084 | engines: {node: '>=0.8.0'} 1085 | dev: true 1086 | 1087 | /eventemitter3/4.0.7: 1088 | resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} 1089 | dev: false 1090 | 1091 | /fast-deep-equal/3.1.3: 1092 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1093 | dev: false 1094 | 1095 | /follow-redirects/1.14.9: 1096 | resolution: {integrity: sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==} 1097 | engines: {node: '>=4.0'} 1098 | peerDependencies: 1099 | debug: '*' 1100 | peerDependenciesMeta: 1101 | debug: 1102 | optional: true 1103 | dev: false 1104 | 1105 | /get-port/4.2.0: 1106 | resolution: {integrity: sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==} 1107 | engines: {node: '>=6'} 1108 | dev: true 1109 | 1110 | /globals/13.12.1: 1111 | resolution: {integrity: sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==} 1112 | engines: {node: '>=8'} 1113 | dependencies: 1114 | type-fest: 0.20.2 1115 | dev: true 1116 | 1117 | /has-flag/3.0.0: 1118 | resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} 1119 | engines: {node: '>=4'} 1120 | dev: true 1121 | 1122 | /has-flag/4.0.0: 1123 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1124 | engines: {node: '>=8'} 1125 | dev: true 1126 | 1127 | /htmlnano/2.0.0_svgo@2.8.0: 1128 | resolution: {integrity: sha512-thKQfhcp2xgtsWNE27A2bliEeqVL5xjAgGn0wajyttvFFsvFWWah1ntV9aEX61gz0T6MBQ5xK/1lXuEumhJTcg==} 1129 | peerDependencies: 1130 | cssnano: ^5.0.11 1131 | postcss: ^8.3.11 1132 | purgecss: ^4.0.3 1133 | relateurl: ^0.2.7 1134 | srcset: ^5.0.0 1135 | svgo: ^2.8.0 1136 | terser: ^5.10.0 1137 | uncss: ^0.17.3 1138 | peerDependenciesMeta: 1139 | cssnano: 1140 | optional: true 1141 | postcss: 1142 | optional: true 1143 | purgecss: 1144 | optional: true 1145 | relateurl: 1146 | optional: true 1147 | srcset: 1148 | optional: true 1149 | svgo: 1150 | optional: true 1151 | terser: 1152 | optional: true 1153 | uncss: 1154 | optional: true 1155 | dependencies: 1156 | cosmiconfig: 7.0.1 1157 | posthtml: 0.16.5 1158 | svgo: 2.8.0 1159 | timsort: 0.3.0 1160 | dev: true 1161 | 1162 | /htmlparser2/7.2.0: 1163 | resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} 1164 | dependencies: 1165 | domelementtype: 2.2.0 1166 | domhandler: 4.3.0 1167 | domutils: 2.8.0 1168 | entities: 3.0.1 1169 | dev: true 1170 | 1171 | /ieee754/1.2.1: 1172 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 1173 | dev: true 1174 | 1175 | /import-fresh/3.3.0: 1176 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1177 | engines: {node: '>=6'} 1178 | dependencies: 1179 | parent-module: 1.0.1 1180 | resolve-from: 4.0.0 1181 | dev: true 1182 | 1183 | /inherits/2.0.3: 1184 | resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=} 1185 | dev: false 1186 | 1187 | /is-arrayish/0.2.1: 1188 | resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} 1189 | dev: true 1190 | 1191 | /is-json/2.0.1: 1192 | resolution: {integrity: sha1-a+Fm0USCihMdaGiRuYPfYsOUkf8=} 1193 | dev: true 1194 | 1195 | /js-tokens/4.0.0: 1196 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1197 | dev: true 1198 | 1199 | /json-parse-even-better-errors/2.3.1: 1200 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1201 | dev: true 1202 | 1203 | /json-source-map/0.6.1: 1204 | resolution: {integrity: sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==} 1205 | dev: true 1206 | 1207 | /json5/2.2.0: 1208 | resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==} 1209 | engines: {node: '>=6'} 1210 | hasBin: true 1211 | dependencies: 1212 | minimist: 1.2.5 1213 | dev: true 1214 | 1215 | /lilconfig/2.0.4: 1216 | resolution: {integrity: sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==} 1217 | engines: {node: '>=10'} 1218 | dev: true 1219 | 1220 | /lines-and-columns/1.2.4: 1221 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1222 | dev: true 1223 | 1224 | /lmdb/2.2.1: 1225 | resolution: {integrity: sha512-tUlIjyJvbd4mqdotI9Xe+3PZt/jqPx70VKFDrKMYu09MtBWOT3y2PbuTajX+bJFDjbgLkQC0cTx2n6dithp/zQ==} 1226 | requiresBuild: true 1227 | dependencies: 1228 | msgpackr: 1.5.4 1229 | nan: 2.15.0 1230 | node-gyp-build: 4.3.0 1231 | ordered-binary: 1.2.4 1232 | weak-lru-cache: 1.2.2 1233 | dev: true 1234 | 1235 | /lodash-es/4.17.21: 1236 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} 1237 | dev: false 1238 | 1239 | /lodash.memoize/4.1.2: 1240 | resolution: {integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=} 1241 | dev: true 1242 | 1243 | /lodash.uniq/4.5.0: 1244 | resolution: {integrity: sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=} 1245 | dev: true 1246 | 1247 | /lower-case/2.0.2: 1248 | resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} 1249 | dependencies: 1250 | tslib: 2.3.1 1251 | dev: false 1252 | 1253 | /mdn-data/2.0.14: 1254 | resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} 1255 | dev: true 1256 | 1257 | /minimist/1.2.5: 1258 | resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} 1259 | dev: true 1260 | 1261 | /ms/2.1.2: 1262 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1263 | dev: false 1264 | 1265 | /msgpackr-extract/1.0.16: 1266 | resolution: {integrity: sha512-fxdRfQUxPrL/TizyfYfMn09dK58e+d65bRD/fcaVH4052vj30QOzzqxcQIS7B0NsqlypEQ/6Du3QmP2DhWFfCA==} 1267 | requiresBuild: true 1268 | dependencies: 1269 | nan: 2.15.0 1270 | node-gyp-build: 4.3.0 1271 | dev: true 1272 | optional: true 1273 | 1274 | /msgpackr/1.5.4: 1275 | resolution: {integrity: sha512-Z7w5Jg+2Q9z9gJxeM68d7tSuWZZGnFIRhZnyqcZCa/1dKkhOCNvR1TUV3zzJ3+vj78vlwKRzUgVDlW4jiSOeDA==} 1276 | optionalDependencies: 1277 | msgpackr-extract: 1.0.16 1278 | dev: true 1279 | 1280 | /nan/2.15.0: 1281 | resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==} 1282 | dev: true 1283 | 1284 | /nanoid/3.3.1: 1285 | resolution: {integrity: sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==} 1286 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1287 | hasBin: true 1288 | dev: true 1289 | 1290 | /no-case/3.0.4: 1291 | resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} 1292 | dependencies: 1293 | lower-case: 2.0.2 1294 | tslib: 2.3.1 1295 | dev: false 1296 | 1297 | /node-addon-api/3.2.1: 1298 | resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} 1299 | dev: true 1300 | 1301 | /node-gyp-build/4.3.0: 1302 | resolution: {integrity: sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==} 1303 | hasBin: true 1304 | dev: true 1305 | 1306 | /node-releases/2.0.2: 1307 | resolution: {integrity: sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==} 1308 | dev: true 1309 | 1310 | /normalize-url/6.1.0: 1311 | resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} 1312 | engines: {node: '>=10'} 1313 | dev: true 1314 | 1315 | /nth-check/2.0.1: 1316 | resolution: {integrity: sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==} 1317 | dependencies: 1318 | boolbase: 1.0.0 1319 | dev: true 1320 | 1321 | /nullthrows/1.1.1: 1322 | resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} 1323 | dev: true 1324 | 1325 | /ordered-binary/1.2.4: 1326 | resolution: {integrity: sha512-A/csN0d3n+igxBPfUrjbV5GC69LWj2pjZzAAeeHXLukQ4+fytfP4T1Lg0ju7MSPSwq7KtHkGaiwO8URZN5IpLg==} 1327 | dev: true 1328 | 1329 | /parcel/2.0.0: 1330 | resolution: {integrity: sha512-vALKLDWz9DF3YD4oGcG1UpMR32TXHr3wj0OZTCo0nLuP8LqNNhG7Twf+ZIpVf2r1b5Glex5eUl0vcx/x2xY6pw==} 1331 | engines: {node: '>= 12.0.0'} 1332 | hasBin: true 1333 | dependencies: 1334 | '@parcel/config-default': 2.3.2_@parcel+core@2.3.2 1335 | '@parcel/core': 2.3.2 1336 | '@parcel/diagnostic': 2.3.2 1337 | '@parcel/events': 2.3.2 1338 | '@parcel/fs': 2.3.2_@parcel+core@2.3.2 1339 | '@parcel/logger': 2.3.2 1340 | '@parcel/package-manager': 2.3.2_@parcel+core@2.3.2 1341 | '@parcel/reporter-cli': 2.3.2_@parcel+core@2.3.2 1342 | '@parcel/reporter-dev-server': 2.3.2_@parcel+core@2.3.2 1343 | '@parcel/utils': 2.3.2 1344 | chalk: 4.1.2 1345 | commander: 7.2.0 1346 | get-port: 4.2.0 1347 | v8-compile-cache: 2.3.0 1348 | transitivePeerDependencies: 1349 | - acorn 1350 | - cssnano 1351 | - postcss 1352 | - purgecss 1353 | - relateurl 1354 | - srcset 1355 | - terser 1356 | - uncss 1357 | dev: true 1358 | 1359 | /parent-module/1.0.1: 1360 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1361 | engines: {node: '>=6'} 1362 | dependencies: 1363 | callsites: 3.1.0 1364 | dev: true 1365 | 1366 | /parse-json/5.2.0: 1367 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1368 | engines: {node: '>=8'} 1369 | dependencies: 1370 | '@babel/code-frame': 7.16.7 1371 | error-ex: 1.3.2 1372 | json-parse-even-better-errors: 2.3.1 1373 | lines-and-columns: 1.2.4 1374 | dev: true 1375 | 1376 | /path-type/4.0.0: 1377 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1378 | engines: {node: '>=8'} 1379 | dev: true 1380 | 1381 | /path/0.12.7: 1382 | resolution: {integrity: sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=} 1383 | dependencies: 1384 | process: 0.11.10 1385 | util: 0.10.4 1386 | dev: false 1387 | 1388 | /picocolors/1.0.0: 1389 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1390 | dev: true 1391 | 1392 | /postcss-calc/8.2.4_postcss@8.4.6: 1393 | resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} 1394 | peerDependencies: 1395 | postcss: ^8.2.2 1396 | dependencies: 1397 | postcss: 8.4.6 1398 | postcss-selector-parser: 6.0.9 1399 | postcss-value-parser: 4.2.0 1400 | dev: true 1401 | 1402 | /postcss-colormin/5.2.5_postcss@8.4.6: 1403 | resolution: {integrity: sha512-+X30aDaGYq81mFqwyPpnYInsZQnNpdxMX0ajlY7AExCexEFkPVV+KrO7kXwayqEWL2xwEbNQ4nUO0ZsRWGnevg==} 1404 | engines: {node: ^10 || ^12 || >=14.0} 1405 | peerDependencies: 1406 | postcss: ^8.2.15 1407 | dependencies: 1408 | browserslist: 4.19.3 1409 | caniuse-api: 3.0.0 1410 | colord: 2.9.2 1411 | postcss: 8.4.6 1412 | postcss-value-parser: 4.2.0 1413 | dev: true 1414 | 1415 | /postcss-convert-values/5.0.4_postcss@8.4.6: 1416 | resolution: {integrity: sha512-bugzSAyjIexdObovsPZu/sBCTHccImJxLyFgeV0MmNBm/Lw5h5XnjfML6gzEmJ3A6nyfCW7hb1JXzcsA4Zfbdw==} 1417 | engines: {node: ^10 || ^12 || >=14.0} 1418 | peerDependencies: 1419 | postcss: ^8.2.15 1420 | dependencies: 1421 | postcss: 8.4.6 1422 | postcss-value-parser: 4.2.0 1423 | dev: true 1424 | 1425 | /postcss-discard-comments/5.0.3_postcss@8.4.6: 1426 | resolution: {integrity: sha512-6W5BemziRoqIdAKT+1QjM4bNcJAQ7z7zk073730NHg4cUXh3/rQHHj7pmYxUB9aGhuRhBiUf0pXvIHkRwhQP0Q==} 1427 | engines: {node: ^10 || ^12 || >=14.0} 1428 | peerDependencies: 1429 | postcss: ^8.2.15 1430 | dependencies: 1431 | postcss: 8.4.6 1432 | dev: true 1433 | 1434 | /postcss-discard-duplicates/5.0.3_postcss@8.4.6: 1435 | resolution: {integrity: sha512-vPtm1Mf+kp7iAENTG7jI1MN1lk+fBqL5y+qxyi4v3H+lzsXEdfS3dwUZD45KVhgzDEgduur8ycB4hMegyMTeRw==} 1436 | engines: {node: ^10 || ^12 || >=14.0} 1437 | peerDependencies: 1438 | postcss: ^8.2.15 1439 | dependencies: 1440 | postcss: 8.4.6 1441 | dev: true 1442 | 1443 | /postcss-discard-empty/5.0.3_postcss@8.4.6: 1444 | resolution: {integrity: sha512-xGJugpaXKakwKI7sSdZjUuN4V3zSzb2Y0LOlmTajFbNinEjTfVs9PFW2lmKBaC/E64WwYppfqLD03P8l9BuueA==} 1445 | engines: {node: ^10 || ^12 || >=14.0} 1446 | peerDependencies: 1447 | postcss: ^8.2.15 1448 | dependencies: 1449 | postcss: 8.4.6 1450 | dev: true 1451 | 1452 | /postcss-discard-overridden/5.0.4_postcss@8.4.6: 1453 | resolution: {integrity: sha512-3j9QH0Qh1KkdxwiZOW82cId7zdwXVQv/gRXYDnwx5pBtR1sTkU4cXRK9lp5dSdiM0r0OICO/L8J6sV1/7m0kHg==} 1454 | engines: {node: ^10 || ^12 || >=14.0} 1455 | peerDependencies: 1456 | postcss: ^8.2.15 1457 | dependencies: 1458 | postcss: 8.4.6 1459 | dev: true 1460 | 1461 | /postcss-merge-longhand/5.0.6_postcss@8.4.6: 1462 | resolution: {integrity: sha512-rkmoPwQO6ymJSmWsX6l2hHeEBQa7C4kJb9jyi5fZB1sE8nSCv7sqchoYPixRwX/yvLoZP2y6FA5kcjiByeJqDg==} 1463 | engines: {node: ^10 || ^12 || >=14.0} 1464 | peerDependencies: 1465 | postcss: ^8.2.15 1466 | dependencies: 1467 | postcss: 8.4.6 1468 | postcss-value-parser: 4.2.0 1469 | stylehacks: 5.0.3_postcss@8.4.6 1470 | dev: true 1471 | 1472 | /postcss-merge-rules/5.0.6_postcss@8.4.6: 1473 | resolution: {integrity: sha512-nzJWJ9yXWp8AOEpn/HFAW72WKVGD2bsLiAmgw4hDchSij27bt6TF+sIK0cJUBAYT3SGcjtGGsOR89bwkkMuMgQ==} 1474 | engines: {node: ^10 || ^12 || >=14.0} 1475 | peerDependencies: 1476 | postcss: ^8.2.15 1477 | dependencies: 1478 | browserslist: 4.19.3 1479 | caniuse-api: 3.0.0 1480 | cssnano-utils: 3.0.2_postcss@8.4.6 1481 | postcss: 8.4.6 1482 | postcss-selector-parser: 6.0.9 1483 | dev: true 1484 | 1485 | /postcss-minify-font-values/5.0.4_postcss@8.4.6: 1486 | resolution: {integrity: sha512-RN6q3tyuEesvyCYYFCRGJ41J1XFvgV+dvYGHr0CeHv8F00yILlN8Slf4t8XW4IghlfZYCeyRrANO6HpJ948ieA==} 1487 | engines: {node: ^10 || ^12 || >=14.0} 1488 | peerDependencies: 1489 | postcss: ^8.2.15 1490 | dependencies: 1491 | postcss: 8.4.6 1492 | postcss-value-parser: 4.2.0 1493 | dev: true 1494 | 1495 | /postcss-minify-gradients/5.0.6_postcss@8.4.6: 1496 | resolution: {integrity: sha512-E/dT6oVxB9nLGUTiY/rG5dX9taugv9cbLNTFad3dKxOO+BQg25Q/xo2z2ddG+ZB1CbkZYaVwx5blY8VC7R/43A==} 1497 | engines: {node: ^10 || ^12 || >=14.0} 1498 | peerDependencies: 1499 | postcss: ^8.2.15 1500 | dependencies: 1501 | colord: 2.9.2 1502 | cssnano-utils: 3.0.2_postcss@8.4.6 1503 | postcss: 8.4.6 1504 | postcss-value-parser: 4.2.0 1505 | dev: true 1506 | 1507 | /postcss-minify-params/5.0.5_postcss@8.4.6: 1508 | resolution: {integrity: sha512-YBNuq3Rz5LfLFNHb9wrvm6t859b8qIqfXsWeK7wROm3jSKNpO1Y5e8cOyBv6Acji15TgSrAwb3JkVNCqNyLvBg==} 1509 | engines: {node: ^10 || ^12 || >=14.0} 1510 | peerDependencies: 1511 | postcss: ^8.2.15 1512 | dependencies: 1513 | browserslist: 4.19.3 1514 | cssnano-utils: 3.0.2_postcss@8.4.6 1515 | postcss: 8.4.6 1516 | postcss-value-parser: 4.2.0 1517 | dev: true 1518 | 1519 | /postcss-minify-selectors/5.1.3_postcss@8.4.6: 1520 | resolution: {integrity: sha512-9RJfTiQEKA/kZhMaEXND893nBqmYQ8qYa/G+uPdVnXF6D/FzpfI6kwBtWEcHx5FqDbA79O9n6fQJfrIj6M8jvQ==} 1521 | engines: {node: ^10 || ^12 || >=14.0} 1522 | peerDependencies: 1523 | postcss: ^8.2.15 1524 | dependencies: 1525 | postcss: 8.4.6 1526 | postcss-selector-parser: 6.0.9 1527 | dev: true 1528 | 1529 | /postcss-normalize-charset/5.0.3_postcss@8.4.6: 1530 | resolution: {integrity: sha512-iKEplDBco9EfH7sx4ut7R2r/dwTnUqyfACf62Unc9UiyFuI7uUqZZtY+u+qp7g8Qszl/U28HIfcsI3pEABWFfA==} 1531 | engines: {node: ^10 || ^12 || >=14.0} 1532 | peerDependencies: 1533 | postcss: ^8.2.15 1534 | dependencies: 1535 | postcss: 8.4.6 1536 | dev: true 1537 | 1538 | /postcss-normalize-display-values/5.0.3_postcss@8.4.6: 1539 | resolution: {integrity: sha512-FIV5FY/qs4Ja32jiDb5mVj5iWBlS3N8tFcw2yg98+8MkRgyhtnBgSC0lxU+16AMHbjX5fbSJgw5AXLMolonuRQ==} 1540 | engines: {node: ^10 || ^12 || >=14.0} 1541 | peerDependencies: 1542 | postcss: ^8.2.15 1543 | dependencies: 1544 | postcss: 8.4.6 1545 | postcss-value-parser: 4.2.0 1546 | dev: true 1547 | 1548 | /postcss-normalize-positions/5.0.4_postcss@8.4.6: 1549 | resolution: {integrity: sha512-qynirjBX0Lc73ROomZE3lzzmXXTu48/QiEzKgMeqh28+MfuHLsuqC9po4kj84igZqqFGovz8F8hf44hA3dPYmQ==} 1550 | engines: {node: ^10 || ^12 || >=14.0} 1551 | peerDependencies: 1552 | postcss: ^8.2.15 1553 | dependencies: 1554 | postcss: 8.4.6 1555 | postcss-value-parser: 4.2.0 1556 | dev: true 1557 | 1558 | /postcss-normalize-repeat-style/5.0.4_postcss@8.4.6: 1559 | resolution: {integrity: sha512-Innt+wctD7YpfeDR7r5Ik6krdyppyAg2HBRpX88fo5AYzC1Ut/l3xaxACG0KsbX49cO2n5EB13clPwuYVt8cMA==} 1560 | engines: {node: ^10 || ^12 || >=14.0} 1561 | peerDependencies: 1562 | postcss: ^8.2.15 1563 | dependencies: 1564 | postcss: 8.4.6 1565 | postcss-value-parser: 4.2.0 1566 | dev: true 1567 | 1568 | /postcss-normalize-string/5.0.4_postcss@8.4.6: 1569 | resolution: {integrity: sha512-Dfk42l0+A1CDnVpgE606ENvdmksttLynEqTQf5FL3XGQOyqxjbo25+pglCUvziicTxjtI2NLUR6KkxyUWEVubQ==} 1570 | engines: {node: ^10 || ^12 || >=14.0} 1571 | peerDependencies: 1572 | postcss: ^8.2.15 1573 | dependencies: 1574 | postcss: 8.4.6 1575 | postcss-value-parser: 4.2.0 1576 | dev: true 1577 | 1578 | /postcss-normalize-timing-functions/5.0.3_postcss@8.4.6: 1579 | resolution: {integrity: sha512-QRfjvFh11moN4PYnJ7hia4uJXeFotyK3t2jjg8lM9mswleGsNw2Lm3I5wO+l4k1FzK96EFwEVn8X8Ojrp2gP4g==} 1580 | engines: {node: ^10 || ^12 || >=14.0} 1581 | peerDependencies: 1582 | postcss: ^8.2.15 1583 | dependencies: 1584 | postcss: 8.4.6 1585 | postcss-value-parser: 4.2.0 1586 | dev: true 1587 | 1588 | /postcss-normalize-unicode/5.0.4_postcss@8.4.6: 1589 | resolution: {integrity: sha512-W79Regn+a+eXTzB+oV/8XJ33s3pDyFTND2yDuUCo0Xa3QSy1HtNIfRVPXNubHxjhlqmMFADr3FSCHT84ITW3ig==} 1590 | engines: {node: ^10 || ^12 || >=14.0} 1591 | peerDependencies: 1592 | postcss: ^8.2.15 1593 | dependencies: 1594 | browserslist: 4.19.3 1595 | postcss: 8.4.6 1596 | postcss-value-parser: 4.2.0 1597 | dev: true 1598 | 1599 | /postcss-normalize-url/5.0.5_postcss@8.4.6: 1600 | resolution: {integrity: sha512-Ws3tX+PcekYlXh+ycAt0wyzqGthkvVtZ9SZLutMVvHARxcpu4o7vvXcNoiNKyjKuWecnjS6HDI3fjBuDr5MQxQ==} 1601 | engines: {node: ^10 || ^12 || >=14.0} 1602 | peerDependencies: 1603 | postcss: ^8.2.15 1604 | dependencies: 1605 | normalize-url: 6.1.0 1606 | postcss: 8.4.6 1607 | postcss-value-parser: 4.2.0 1608 | dev: true 1609 | 1610 | /postcss-normalize-whitespace/5.0.4_postcss@8.4.6: 1611 | resolution: {integrity: sha512-wsnuHolYZjMwWZJoTC9jeI2AcjA67v4UuidDrPN9RnX8KIZfE+r2Nd6XZRwHVwUiHmRvKQtxiqo64K+h8/imaw==} 1612 | engines: {node: ^10 || ^12 || >=14.0} 1613 | peerDependencies: 1614 | postcss: ^8.2.15 1615 | dependencies: 1616 | postcss: 8.4.6 1617 | postcss-value-parser: 4.2.0 1618 | dev: true 1619 | 1620 | /postcss-ordered-values/5.0.5_postcss@8.4.6: 1621 | resolution: {integrity: sha512-mfY7lXpq+8bDEHfP+muqibDPhZ5eP9zgBEF9XRvoQgXcQe2Db3G1wcvjbnfjXG6wYsl+0UIjikqq4ym1V2jGMQ==} 1622 | engines: {node: ^10 || ^12 || >=14.0} 1623 | peerDependencies: 1624 | postcss: ^8.2.15 1625 | dependencies: 1626 | cssnano-utils: 3.0.2_postcss@8.4.6 1627 | postcss: 8.4.6 1628 | postcss-value-parser: 4.2.0 1629 | dev: true 1630 | 1631 | /postcss-reduce-initial/5.0.3_postcss@8.4.6: 1632 | resolution: {integrity: sha512-c88TkSnQ/Dnwgb4OZbKPOBbCaauwEjbECP5uAuFPOzQ+XdjNjRH7SG0dteXrpp1LlIFEKK76iUGgmw2V0xeieA==} 1633 | engines: {node: ^10 || ^12 || >=14.0} 1634 | peerDependencies: 1635 | postcss: ^8.2.15 1636 | dependencies: 1637 | browserslist: 4.19.3 1638 | caniuse-api: 3.0.0 1639 | postcss: 8.4.6 1640 | dev: true 1641 | 1642 | /postcss-reduce-transforms/5.0.4_postcss@8.4.6: 1643 | resolution: {integrity: sha512-VIJB9SFSaL8B/B7AXb7KHL6/GNNbbCHslgdzS9UDfBZYIA2nx8NLY7iD/BXFSO/1sRUILzBTfHCoW5inP37C5g==} 1644 | engines: {node: ^10 || ^12 || >=14.0} 1645 | peerDependencies: 1646 | postcss: ^8.2.15 1647 | dependencies: 1648 | postcss: 8.4.6 1649 | postcss-value-parser: 4.2.0 1650 | dev: true 1651 | 1652 | /postcss-selector-parser/6.0.9: 1653 | resolution: {integrity: sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==} 1654 | engines: {node: '>=4'} 1655 | dependencies: 1656 | cssesc: 3.0.0 1657 | util-deprecate: 1.0.2 1658 | dev: true 1659 | 1660 | /postcss-svgo/5.0.4_postcss@8.4.6: 1661 | resolution: {integrity: sha512-yDKHvULbnZtIrRqhZoA+rxreWpee28JSRH/gy9727u0UCgtpv1M/9WEWY3xySlFa0zQJcqf6oCBJPR5NwkmYpg==} 1662 | engines: {node: ^10 || ^12 || >=14.0} 1663 | peerDependencies: 1664 | postcss: ^8.2.15 1665 | dependencies: 1666 | postcss: 8.4.6 1667 | postcss-value-parser: 4.2.0 1668 | svgo: 2.8.0 1669 | dev: true 1670 | 1671 | /postcss-unique-selectors/5.0.4_postcss@8.4.6: 1672 | resolution: {integrity: sha512-5ampwoSDJCxDPoANBIlMgoBcYUHnhaiuLYJR5pj1DLnYQvMRVyFuTA5C3Bvt+aHtiqWpJkD/lXT50Vo1D0ZsAQ==} 1673 | engines: {node: ^10 || ^12 || >=14.0} 1674 | peerDependencies: 1675 | postcss: ^8.2.15 1676 | dependencies: 1677 | postcss: 8.4.6 1678 | postcss-selector-parser: 6.0.9 1679 | dev: true 1680 | 1681 | /postcss-value-parser/4.2.0: 1682 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1683 | dev: true 1684 | 1685 | /postcss/8.4.6: 1686 | resolution: {integrity: sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==} 1687 | engines: {node: ^10 || ^12 || >=14} 1688 | dependencies: 1689 | nanoid: 3.3.1 1690 | picocolors: 1.0.0 1691 | source-map-js: 1.0.2 1692 | dev: true 1693 | 1694 | /posthtml-parser/0.10.2: 1695 | resolution: {integrity: sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==} 1696 | engines: {node: '>=12'} 1697 | dependencies: 1698 | htmlparser2: 7.2.0 1699 | dev: true 1700 | 1701 | /posthtml-render/3.0.0: 1702 | resolution: {integrity: sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==} 1703 | engines: {node: '>=12'} 1704 | dependencies: 1705 | is-json: 2.0.1 1706 | dev: true 1707 | 1708 | /posthtml/0.16.5: 1709 | resolution: {integrity: sha512-1qOuPsywVlvymhTFIBniDXwUDwvlDri5KUQuBqjmCc8Jj4b/HDSVWU//P6rTWke5rzrk+vj7mms2w8e1vD0nnw==} 1710 | engines: {node: '>=12.0.0'} 1711 | dependencies: 1712 | posthtml-parser: 0.10.2 1713 | posthtml-render: 3.0.0 1714 | dev: true 1715 | 1716 | /process/0.11.10: 1717 | resolution: {integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI=} 1718 | engines: {node: '>= 0.6.0'} 1719 | dev: false 1720 | 1721 | /react-refresh/0.9.0: 1722 | resolution: {integrity: sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==} 1723 | engines: {node: '>=0.10.0'} 1724 | dev: true 1725 | 1726 | /regenerator-runtime/0.13.9: 1727 | resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} 1728 | dev: true 1729 | 1730 | /resolve-from/4.0.0: 1731 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1732 | engines: {node: '>=4'} 1733 | dev: true 1734 | 1735 | /safe-buffer/5.2.1: 1736 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1737 | dev: true 1738 | 1739 | /semver/5.7.1: 1740 | resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} 1741 | hasBin: true 1742 | dev: true 1743 | 1744 | /snake-case/3.0.4: 1745 | resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} 1746 | dependencies: 1747 | dot-case: 3.0.4 1748 | tslib: 2.3.1 1749 | dev: false 1750 | 1751 | /source-map-js/1.0.2: 1752 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1753 | engines: {node: '>=0.10.0'} 1754 | dev: true 1755 | 1756 | /source-map-support/0.5.21: 1757 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 1758 | dependencies: 1759 | buffer-from: 1.1.2 1760 | source-map: 0.6.1 1761 | dev: true 1762 | 1763 | /source-map/0.6.1: 1764 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1765 | engines: {node: '>=0.10.0'} 1766 | dev: true 1767 | 1768 | /source-map/0.7.3: 1769 | resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} 1770 | engines: {node: '>= 8'} 1771 | dev: true 1772 | 1773 | /stable/0.1.8: 1774 | resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} 1775 | dev: true 1776 | 1777 | /stylehacks/5.0.3_postcss@8.4.6: 1778 | resolution: {integrity: sha512-ENcUdpf4yO0E1rubu8rkxI+JGQk4CgjchynZ4bDBJDfqdy+uhTRSWb8/F3Jtu+Bw5MW45Po3/aQGeIyyxgQtxg==} 1779 | engines: {node: ^10 || ^12 || >=14.0} 1780 | peerDependencies: 1781 | postcss: ^8.2.15 1782 | dependencies: 1783 | browserslist: 4.19.3 1784 | postcss: 8.4.6 1785 | postcss-selector-parser: 6.0.9 1786 | dev: true 1787 | 1788 | /supports-color/5.5.0: 1789 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1790 | engines: {node: '>=4'} 1791 | dependencies: 1792 | has-flag: 3.0.0 1793 | dev: true 1794 | 1795 | /supports-color/7.2.0: 1796 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1797 | engines: {node: '>=8'} 1798 | dependencies: 1799 | has-flag: 4.0.0 1800 | dev: true 1801 | 1802 | /svgo/2.8.0: 1803 | resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} 1804 | engines: {node: '>=10.13.0'} 1805 | hasBin: true 1806 | dependencies: 1807 | '@trysound/sax': 0.2.0 1808 | commander: 7.2.0 1809 | css-select: 4.2.1 1810 | css-tree: 1.1.3 1811 | csso: 4.2.0 1812 | picocolors: 1.0.0 1813 | stable: 0.1.8 1814 | dev: true 1815 | 1816 | /terser/5.10.0: 1817 | resolution: {integrity: sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==} 1818 | engines: {node: '>=10'} 1819 | hasBin: true 1820 | peerDependencies: 1821 | acorn: ^8.5.0 1822 | peerDependenciesMeta: 1823 | acorn: 1824 | optional: true 1825 | dependencies: 1826 | commander: 2.20.3 1827 | source-map: 0.7.3 1828 | source-map-support: 0.5.21 1829 | dev: true 1830 | 1831 | /timsort/0.3.0: 1832 | resolution: {integrity: sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=} 1833 | dev: true 1834 | 1835 | /tslib/2.3.1: 1836 | resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} 1837 | dev: false 1838 | 1839 | /type-fest/0.20.2: 1840 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1841 | engines: {node: '>=10'} 1842 | dev: true 1843 | 1844 | /typescript/4.4.3: 1845 | resolution: {integrity: sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==} 1846 | engines: {node: '>=4.2.0'} 1847 | hasBin: true 1848 | dev: true 1849 | 1850 | /util-deprecate/1.0.2: 1851 | resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} 1852 | dev: true 1853 | 1854 | /util/0.10.4: 1855 | resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} 1856 | dependencies: 1857 | inherits: 2.0.3 1858 | dev: false 1859 | 1860 | /utility-types/3.10.0: 1861 | resolution: {integrity: sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==} 1862 | engines: {node: '>= 4'} 1863 | dev: true 1864 | 1865 | /v8-compile-cache/2.3.0: 1866 | resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} 1867 | dev: true 1868 | 1869 | /weak-lru-cache/1.2.2: 1870 | resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==} 1871 | dev: true 1872 | 1873 | /xxhash-wasm/0.4.2: 1874 | resolution: {integrity: sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==} 1875 | dev: true 1876 | 1877 | /yaml/1.10.2: 1878 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 1879 | engines: {node: '>= 6'} 1880 | dev: true 1881 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "strictNullChecks": true 4 | } 5 | } --------------------------------------------------------------------------------