├── .gitignore ├── .nvmrc ├── LICENSE.md ├── README.md ├── build ├── background.png ├── background@2x.png ├── icon.icns ├── icon.ico └── icon.png ├── package.json ├── packages ├── app │ ├── .eslintignore │ ├── .eslintrc.json │ ├── .nvmrc │ ├── .prettierignore │ ├── .prettierrc.json │ ├── jsconfig.js │ ├── package.json │ ├── src │ │ ├── config.ts │ │ ├── main │ │ │ ├── events.ts │ │ │ ├── main.ts │ │ │ ├── shortcuts.ts │ │ │ ├── updater.ts │ │ │ └── window.ts │ │ ├── menu.ts │ │ ├── preload.ts │ │ └── utils │ │ │ └── screen-recorder.ts │ ├── tsconfig.build.json │ ├── tsconfig.json │ └── yarn.lock └── renderer │ ├── app.css │ └── renderer.js ├── test └── test.js └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | .idea 5 | npm-debug.log* 6 | 7 | # Runtime data 8 | pids 9 | *.pid 10 | *.seed 11 | 12 | # Directory for instrumented libs generated by jscoverage/JSCover 13 | lib-cov 14 | 15 | # Coverage directory used by tools like istanbul 16 | coverage 17 | 18 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 19 | .grunt 20 | 21 | # node-waf configuration 22 | .lock-wscript 23 | 24 | # Compiled binary addons (http://nodejs.org/api/addons.html) 25 | build/Release 26 | 27 | # Dependency directory 28 | node_modules 29 | 30 | # Optional npm cache directory 31 | .npm 32 | 33 | # Optional REPL history 34 | .node_repl_history 35 | 36 | .DS_Store 37 | dist 38 | 39 | .env.local 40 | .secrets 41 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v20.10 2 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | {one line to give the program's name and a brief idea of what it does.} 635 | Copyright (C) {year} {name of author} 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | {project} Copyright (C) {year} {fullname} 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | # Playcode 5 | > Desktop client for PLAYCODE Javascript Playground 6 | 7 | 8 | [Javascript Playground (Sandbox, Repl)](https://playcode.io) 9 | 10 | [Javascript Online Compiler (Editor)](https://playcode.io/javascript-online) 11 | 12 | [Typescript Playground](https://playcode.io/typescript-playground) 13 | 14 | [Online HTML Editor](https://playcode.io/online-html-editor) 15 | 16 | ## Development 17 | 18 | ``` 19 | $ git clone https://github.com/playcode/playcode-desktop.git 20 | $ cd Playcode-desktop 21 | $ npm install 22 | $ npm start 23 | $ npm run dist 24 | ``` 25 | 26 | ## License 27 | 28 | This program is free software: you can redistribute it and/or modify 29 | it under the terms of the GNU General Public License as published by 30 | the Free Software Foundation, either version 3 of the License, or 31 | (at your option) any later version. 32 | 33 | This program is distributed in the hope that it will be useful, 34 | but WITHOUT ANY WARRANTY; without even the implied warranty of 35 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 36 | GNU General Public License for more details. 37 | 38 | You should have received a copy of the GNU General Public License 39 | along with this program. If not, see . 40 | -------------------------------------------------------------------------------- /build/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/playcode/playcode-desktop/8427383069990369715c0b19c21a3e144c332374/build/background.png -------------------------------------------------------------------------------- /build/background@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/playcode/playcode-desktop/8427383069990369715c0b19c21a3e144c332374/build/background@2x.png -------------------------------------------------------------------------------- /build/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/playcode/playcode-desktop/8427383069990369715c0b19c21a3e144c332374/build/icon.icns -------------------------------------------------------------------------------- /build/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/playcode/playcode-desktop/8427383069990369715c0b19c21a3e144c332374/build/icon.ico -------------------------------------------------------------------------------- /build/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/playcode/playcode-desktop/8427383069990369715c0b19c21a3e144c332374/build/icon.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "playcode", 3 | "productName": "PLAYCODE", 4 | "version": "2024.9.17", 5 | "description": "JavaScript Playground", 6 | "license": "GNU General Public License", 7 | "homepage": "https://github.com/playcode/playcode-desktop/", 8 | "keywords": [ 9 | "JvasSript Online Compiler", 10 | "JavaScript Playground", 11 | "JavaScript Desktop", 12 | "JavaScript Sandbox", 13 | "Electron", 14 | "PlayCode", 15 | "Desktop Client", 16 | "Developer Tools" 17 | ], 18 | "bugs": { 19 | "url": "https://github.com/playcode/playcode-desktop/issues/" 20 | }, 21 | "repository": { 22 | "type": "git", 23 | "url": "https://github.com/playcode/playcode-desktop.git" 24 | }, 25 | "author": { 26 | "name": "playcode" 27 | }, 28 | "private": true, 29 | "type": "module", 30 | "main": "./packages/app/dist/main/main.js", 31 | "scripts": { 32 | "postinstall": "install-app-deps", 33 | "start": "yarn compile && electron ./packages/app/dist/main/main.js", 34 | "compile": "rimraf packages/app/dist && tsc -p packages/app", 35 | "pack": "yarn compile && electron-builder --dir", 36 | "dist:all": "yarn compile && electron-builder -mwl", 37 | "dist:w": "yarn compile && electron-builder -m", 38 | "release": "yarn compile && op run --env-file=\"./.env.local\" -- electron-builder -mwl" 39 | }, 40 | "build": { 41 | "appId": "xyz.playcode.PLAYCODE", 42 | "productName": "PLAYCODE", 43 | "files": [ 44 | "packages/**/*" 45 | ], 46 | "mac": { 47 | "category": "public.app-category.developer-tools", 48 | "darkModeSupport": true, 49 | "target": { 50 | "target": "default", 51 | "arch": "universal" 52 | } 53 | }, 54 | "dmg": { 55 | "artifactName": "${productName}-${version}-${arch}.${ext}", 56 | "contents": [ 57 | { 58 | "x": 410, 59 | "y": 180, 60 | "type": "link", 61 | "path": "/Applications" 62 | }, 63 | { 64 | "x": 130, 65 | "y": 180, 66 | "type": "file" 67 | } 68 | ] 69 | }, 70 | "win": { 71 | "target": "nsis", 72 | "publish": [ 73 | { 74 | "provider": "github", 75 | "owner": "playcode", 76 | "repo": "playcode-desktop" 77 | } 78 | ] 79 | }, 80 | "linux": { 81 | "target": [ 82 | "AppImage" 83 | ] 84 | } 85 | }, 86 | "devDependencies": { 87 | "electron": "^32.1.0", 88 | "electron-builder": "^25.0.5", 89 | "mocha": "10.7.3", 90 | "rimraf": "^6.0.1", 91 | "spectron": "^19.0.0", 92 | "xo": "^0.59.3" 93 | }, 94 | "xo": { 95 | "envs": [ 96 | "node", 97 | "mocha" 98 | ], 99 | "esnext": true, 100 | "semicolon": false, 101 | "space": 2 102 | }, 103 | "packageIgnore": [ 104 | "LICENSE.md", 105 | "README.md", 106 | ".DS_Store", 107 | ".travis.yml", 108 | "appveyor.yml", 109 | "test", 110 | "dist", 111 | "build/Screenshot.png" 112 | ], 113 | "dependencies": { 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /packages/app/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | bin 3 | -------------------------------------------------------------------------------- /packages/app/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "node": true, 4 | "jest": true 5 | }, 6 | "extends": [ 7 | "airbnb-base", 8 | "plugin:@typescript-eslint/recommended", 9 | "plugin:@typescript-eslint/recommended-requiring-type-checking", 10 | "plugin:prettier/recommended" 11 | ], 12 | "plugins": [ 13 | "jest", 14 | "security", 15 | "@typescript-eslint", 16 | "import" 17 | ], 18 | "parser": "@typescript-eslint/parser", 19 | "parserOptions": { 20 | "ecmaVersion": 2022, 21 | "project": "./tsconfig.json", 22 | "tsconfigRootDir": "./" 23 | }, 24 | "rules": { 25 | "comma-dangle": [ 26 | "warn", 27 | "always-multiline" 28 | ], 29 | "semi": [ 30 | "warn", 31 | "never" 32 | ], 33 | "no-console": "off", 34 | "func-names": "off", 35 | "max-classes-per-file": "off", 36 | "no-use-before-define": "off", 37 | "lines-between-class-members": "off", 38 | "no-underscore-dangle": "off", 39 | "consistent-return": "off", 40 | "jest/expect-expect": "off", 41 | "no-empty-function": "off", 42 | "no-useless-constructor": "off", 43 | "class-methods-use-this": "off", 44 | "spaced-comment": "warn", 45 | "prefer-const": "warn", 46 | "no-var": "warn", 47 | "camelcase": "off", 48 | "prefer-destructuring": "warn", 49 | "no-param-reassign": "warn", 50 | "import/no-named-as-default": "warn", 51 | "import/extensions": "off", 52 | "import/no-extraneous-dependencies": "warn", 53 | "import/prefer-default-export": "off", 54 | "@typescript-eslint/no-explicit-any": "off", 55 | "@typescript-eslint/no-unused-vars": "warn", 56 | "@typescript-eslint/ban-ts-comment": "off", 57 | "@typescript-eslint/no-this-alias": "off", 58 | "@typescript-eslint/require-await": "warn", 59 | "@typescript-eslint/no-unsafe-return": "off", 60 | "@typescript-eslint/no-unsafe-assignment": "off", 61 | "@typescript-eslint/no-var-requires": "warn", 62 | "@typescript-eslint/no-unsafe-call": "off", 63 | "@typescript-eslint/no-misused-promises": "warn", 64 | "@typescript-eslint/no-unsafe-argument": "off", 65 | "@typescript-eslint/no-unsafe-member-access": "off", 66 | "security/detect-object-injection": "off", 67 | "no-restricted-syntax": [ 68 | "error", 69 | "LabeledStatement", 70 | "WithStatement" 71 | ], 72 | "no-void": [ 73 | "error", 74 | { 75 | "allowAsStatement": true 76 | } 77 | ] 78 | }, 79 | "settings": { 80 | "import/resolver": { 81 | "typescript": {} 82 | }, 83 | "import/order": "off", 84 | "import/newline-after-import": [ 85 | "warn", 86 | { 87 | "count": 1 88 | } 89 | ] 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /packages/app/.nvmrc: -------------------------------------------------------------------------------- 1 | v20.10 -------------------------------------------------------------------------------- /packages/app/.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | coverage 3 | dist 4 | public 5 | -------------------------------------------------------------------------------- /packages/app/.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "importOrder": [ 3 | "^@electron/(.*)$", 4 | "^electron(.*)$", 5 | "", 6 | "^@/(.*)$", 7 | "^\\./entities/(.*)$", 8 | "^\\./dto/(.*)$", 9 | "^[./]" 10 | ], 11 | "singleQuote": true, 12 | "semi": false, 13 | "printWidth": 125, 14 | "trailingComma": "all", 15 | "importOrderGroupNamespaceSpecifiers": true, 16 | "importOrderSeparation": true, 17 | "importOrderSortSpecifiers": true, 18 | "importOrderParserPlugins": [ 19 | "typescript", 20 | "decorators-legacy" 21 | ], 22 | "plugins": [ 23 | "@trivago/prettier-plugin-sort-imports" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /packages/app/jsconfig.js: -------------------------------------------------------------------------------- 1 | System.config({ 2 | paths: { 3 | '@/*': './src/*', 4 | }, 5 | }) 6 | -------------------------------------------------------------------------------- /packages/app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": false, 3 | "main": "./dist/main/main.js", 4 | "type": "module", 5 | "scripts": {}, 6 | "dependencies": { 7 | "@electron/remote": "^2.0.9", 8 | "@trivago/prettier-plugin-sort-imports": "^4.3.0", 9 | "@typescript-eslint/eslint-plugin": "^6.15.0", 10 | "@typescript-eslint/parser": "^6.15.0", 11 | "electron-config": "^2.0.0", 12 | "electron-context-menu": "^4.0.4", 13 | "electron-is-dev": "^3.0.1", 14 | "electron-log": "^5.2.0", 15 | "electron-store": "^10.0.0", 16 | "electron-updater": "^6.3.4", 17 | "eslint": "^8.57.0", 18 | "eslint-config-airbnb-base": "^14.2.1", 19 | "eslint-config-prettier": "^9.1.0", 20 | "eslint-import-resolver-typescript": "^3.6.1", 21 | "eslint-plugin-import": "^2.29.1", 22 | "eslint-plugin-jest": "^28.2.0", 23 | "eslint-plugin-prettier": "^5.1.3", 24 | "eslint-plugin-react": "^7.34.1", 25 | "eslint-plugin-security": "^3.0.0", 26 | "prettier": "^3.2.5", 27 | "ts-node": "10.9.2", 28 | "tsconfig-paths": "4.2.0" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /packages/app/src/config.ts: -------------------------------------------------------------------------------- 1 | import { Rectangle } from 'electron' 2 | import Store from 'electron-store' 3 | 4 | interface ConfigSchema { 5 | lastWindowState?: Rectangle 6 | } 7 | 8 | const store = new Store() 9 | 10 | export default store 11 | -------------------------------------------------------------------------------- /packages/app/src/main/events.ts: -------------------------------------------------------------------------------- 1 | // src/main/events.ts 2 | import { BrowserWindow, Event as ElectronEvent, app } from 'electron' 3 | 4 | import appConfig from '../config.js' 5 | 6 | interface CreateWindowFn { 7 | (): BrowserWindow 8 | } 9 | 10 | interface RegisterShortcutsFn { 11 | (getMainWindow: () => BrowserWindow | null): void 12 | } 13 | 14 | interface UnregisterShortcutsFn { 15 | (): void 16 | } 17 | 18 | function handleAppEvents( 19 | createWindow: CreateWindowFn, 20 | registerShortcuts: RegisterShortcutsFn, 21 | unregisterShortcuts: UnregisterShortcutsFn, 22 | ) { 23 | let mainWindow: BrowserWindow | null = null 24 | let isQuitting = false 25 | 26 | // App ready event 27 | app.on('ready', () => { 28 | mainWindow = createWindow() 29 | 30 | // Register global shortcuts 31 | registerShortcuts(() => mainWindow) 32 | 33 | // Additional setup if needed 34 | // Handle window close events 35 | mainWindow.on('close', (e: ElectronEvent) => { 36 | if (!isQuitting) { 37 | // Assuming you set app.quitting elsewhere 38 | e.preventDefault() 39 | if (process.platform === 'darwin') { 40 | app.hide() 41 | } else { 42 | app.quit() 43 | } 44 | } 45 | }) 46 | }) 47 | 48 | // Handle all windows closed 49 | app.on('window-all-closed', () => { 50 | if (process.platform !== 'darwin') { 51 | app.quit() 52 | } 53 | }) 54 | 55 | // Handle app activation (macOS) 56 | app.on('activate', () => { 57 | if (mainWindow) { 58 | mainWindow.show() 59 | } else { 60 | mainWindow = createWindow() 61 | } 62 | }) 63 | 64 | // Handle before-quit to set the quitting flag and save window state 65 | app.on('before-quit', () => { 66 | isQuitting = true 67 | 68 | if (mainWindow && !mainWindow.isFullScreen()) { 69 | appConfig.set('lastWindowState', mainWindow.getBounds()) 70 | } 71 | }) 72 | 73 | // Handle will-quit to unregister all global shortcuts 74 | app.on('will-quit', () => { 75 | unregisterShortcuts() 76 | }) 77 | } 78 | 79 | export { handleAppEvents } 80 | -------------------------------------------------------------------------------- /packages/app/src/main/main.ts: -------------------------------------------------------------------------------- 1 | import remoteMain from '@electron/remote/main/index.js' 2 | 3 | import { Menu } from 'electron' 4 | import contextMenu from 'electron-context-menu' 5 | 6 | import menuTemplate from '../menu.js' 7 | import { handleAppEvents } from './events.js' 8 | import { registerGlobalShortcuts, unregisterAllShortcuts } from './shortcuts.js' 9 | import { AppUpdater } from './updater.js' 10 | import { createMainWindow } from './window.js' 11 | 12 | // Initialize context menu 13 | contextMenu() 14 | 15 | // Initialize @electron/remote 16 | remoteMain.initialize() 17 | 18 | // Set application menu 19 | Menu.setApplicationMenu(menuTemplate) 20 | 21 | // Initialize AppUpdater 22 | void new AppUpdater() 23 | 24 | // Handle app lifecycle events 25 | handleAppEvents(createMainWindow, registerGlobalShortcuts, unregisterAllShortcuts) 26 | -------------------------------------------------------------------------------- /packages/app/src/main/shortcuts.ts: -------------------------------------------------------------------------------- 1 | // src/main/shortcuts.ts 2 | import { BrowserWindow, globalShortcut } from 'electron' 3 | 4 | import screenRecorder from '../utils/screen-recorder.js' 5 | 6 | function registerGlobalShortcuts(getMainWindow: () => BrowserWindow | null) { 7 | // Reload shortcut 8 | globalShortcut.register('CmdOrCtrl+R', () => { 9 | const mainWindow = getMainWindow() 10 | mainWindow?.webContents.reload() 11 | }) 12 | 13 | // Register screen recorder global shortcuts 14 | screenRecorder.registerGlobalShortcut(() => getMainWindow() as BrowserWindow) 15 | } 16 | 17 | function unregisterAllShortcuts() { 18 | globalShortcut.unregisterAll() 19 | } 20 | 21 | export { registerGlobalShortcuts, unregisterAllShortcuts } 22 | -------------------------------------------------------------------------------- /packages/app/src/main/updater.ts: -------------------------------------------------------------------------------- 1 | import { BrowserWindow } from 'electron' 2 | import logger from 'electron-log' 3 | import autoUpdaterPkg, { UpdateInfo } from 'electron-updater' 4 | 5 | const { autoUpdater } = autoUpdaterPkg 6 | 7 | class AppUpdater { 8 | constructor(private mainWindow: BrowserWindow | null = null) { 9 | // Configure logger 10 | logger.transports.file.level = 'info' 11 | logger.transports.console.level = 'info' 12 | autoUpdater.logger = logger 13 | autoUpdater.disableWebInstaller = true 14 | autoUpdater.autoInstallOnAppQuit = true 15 | 16 | // Listen for the 'update-downloaded' event 17 | autoUpdater.on('update-downloaded', this.onUpdateDownloaded.bind(this)) 18 | 19 | // Check for updates upon initialization 20 | void this.checkForUpdates() 21 | } 22 | 23 | private async onUpdateDownloaded(info: UpdateInfo) { 24 | logger.info('Update downloaded:', info) 25 | 26 | if (this.mainWindow) { 27 | const isConfirmed = await this.mainWindow.webContents.executeJavaScript(`confirm('Update downloaded. Restart now?')`) 28 | 29 | if (isConfirmed) { 30 | autoUpdater.quitAndInstall() 31 | } 32 | } 33 | } 34 | 35 | public async checkForUpdates() { 36 | try { 37 | await autoUpdater.checkForUpdatesAndNotify({ 38 | title: 'Update Downloaded', 39 | body: 'A new update has been downloaded. Would you like to restart the application to apply the updates?', 40 | }) 41 | } catch (error) { 42 | logger.error('Failed to check for updates:', error) 43 | } 44 | } 45 | } 46 | 47 | export { AppUpdater } 48 | -------------------------------------------------------------------------------- /packages/app/src/main/window.ts: -------------------------------------------------------------------------------- 1 | import remoteMain from '@electron/remote/main/index.js' 2 | 3 | import { BrowserWindow, Event as ElectronEvent, Menu, WebContents, app, shell } from 'electron' 4 | 5 | import fs from 'fs' 6 | import path from 'path' 7 | 8 | import appConfig from '../config.js' 9 | import { AppUpdater } from './updater.js' 10 | 11 | const isDev = !app.isPackaged 12 | const appTitle: string = app.getName() 13 | 14 | export function createMainWindow(): BrowserWindow { 15 | const lastWindowState = appConfig.get('lastWindowState') 16 | 17 | const appView = new BrowserWindow({ 18 | title: appTitle, 19 | x: lastWindowState?.x, 20 | y: lastWindowState?.y, 21 | width: lastWindowState?.width || 1024, 22 | height: lastWindowState?.height || 800, 23 | backgroundColor: '#15222e', 24 | transparent: process.platform !== 'linux', 25 | frame: process.platform === 'linux', 26 | center: true, 27 | movable: true, 28 | resizable: true, 29 | fullscreenable: true, 30 | webPreferences: { 31 | // Maybe other day we will add whitelist for preload 32 | // preload: path.join(app.getAppPath(), '../preload.js'), 33 | nodeIntegration: true, 34 | contextIsolation: false, 35 | // If you need to enable remote module, ensure it's handled securely 36 | // enableRemoteModule: true, // Deprecated in newer Electron versions 37 | }, 38 | }) 39 | 40 | // Enable @electron/remote 41 | remoteMain.enable(appView.webContents) 42 | 43 | // Load the appropriate URL based on the environment 44 | if (isDev) { 45 | void appView.loadURL('http://localhost:8000/new') 46 | // Alternatively, you can load other development URLs as needed 47 | // appView.loadURL('http://localhost:7000/new'); 48 | // appView.loadURL('https://playcode.io/new'); 49 | // appView.loadURL(`file://${__dirname}/dist/index.html`); 50 | } else { 51 | void appView.loadURL('https://playcode.io/new') 52 | } 53 | 54 | // Initialize the app updater 55 | // eslint-disable-next-line no-new 56 | new AppUpdater(appView) 57 | 58 | // Handle fullscreen events 59 | appView.on('enter-full-screen', () => { 60 | void appView.webContents.executeJavaScript(`document.dispatchEvent(new Event("electronEnteredFullscreen"));`) 61 | }) 62 | 63 | appView.on('leave-full-screen', () => { 64 | void appView.webContents.executeJavaScript(`document.dispatchEvent(new Event("electronLeavedFullscreen"));`) 65 | }) 66 | 67 | // Open DevTools if in development mode 68 | if (isDev) { 69 | appView.webContents.openDevTools() 70 | } 71 | 72 | const appPage: WebContents = appView.webContents 73 | 74 | // Handle DOM ready event 75 | appPage.on('dom-ready', () => { 76 | const version = app.getVersion() 77 | 78 | // Dispatch a custom event with the Electron version 79 | void appPage.executeJavaScript( 80 | `document.dispatchEvent(new CustomEvent('setElectronVersion', { detail: { version: '${version}' } }));`, 81 | ) 82 | 83 | // Insert global CSS 84 | const appCSSPath = path.join(app.getAppPath(), '../../../renderer/app.css') 85 | const appCSS = fs.readFileSync(appCSSPath, 'utf8') 86 | void appPage.insertCSS(appCSS) 87 | 88 | // Execute global JavaScript 89 | const rendererJSPath = path.join(app.getAppPath(), '../../../renderer/renderer.js') 90 | const rendererJS = fs.readFileSync(rendererJSPath, 'utf8') 91 | void appPage.executeJavaScript(rendererJS) 92 | 93 | // Show the main window 94 | appView.show() 95 | 96 | // Handle new window events (e.g., window.open) 97 | appPage.setWindowOpenHandler(({ url }) => { 98 | const hostname = new URL(url).hostname.toLowerCase() 99 | 100 | // Allow accounts.google.com to handle itself 101 | if (hostname.includes('accounts.google.com')) { 102 | return { action: 'deny' } 103 | } 104 | 105 | const isPreview = hostname.startsWith('preview-') 106 | 107 | if (isPreview) { 108 | // Allow opening the URL in a new BrowserWindow 109 | const newWin = new BrowserWindow({ 110 | show: false, 111 | webPreferences: { 112 | // preload: path.join(__dirname, '../preload.js'), 113 | nodeIntegration: true, 114 | contextIsolation: false, 115 | }, 116 | }) 117 | 118 | newWin.once('ready-to-show', () => { 119 | newWin.show() 120 | }) 121 | 122 | void newWin.loadURL(url) 123 | 124 | // Optionally open DevTools for preview windows 125 | if (isDev) { 126 | newWin.webContents.openDevTools() 127 | } 128 | 129 | return { action: 'allow', overrideBrowserWindowOptions: { parent: appView } } 130 | } 131 | 132 | // Open external links in the default browser 133 | void shell.openExternal(url) 134 | return { action: 'deny' } 135 | }) 136 | }) 137 | 138 | // Handle app-command events (e.g., back button on mouse) 139 | appView.on('app-command', (e: ElectronEvent, cmd: string) => { 140 | if (cmd === 'browser-backward' && appView.webContents.canGoBack()) { 141 | appView.webContents.goBack() 142 | } 143 | }) 144 | 145 | return appView 146 | } 147 | -------------------------------------------------------------------------------- /packages/app/src/menu.ts: -------------------------------------------------------------------------------- 1 | // Import necessary Electron modules and types 2 | import { BrowserWindow, Menu, MenuItem, MenuItemConstructorOptions, app, shell } from 'electron' 3 | 4 | // Retrieve application name and version 5 | const appName: string = app.getName() 6 | const appVersion: string = app.getVersion() 7 | 8 | // Define the menu template for Windows and Linux 9 | const templateWin: MenuItemConstructorOptions[] = [ 10 | { 11 | label: 'File', 12 | submenu: [ 13 | { 14 | label: `Hide ${appName}`, 15 | accelerator: 'Control+H', 16 | role: 'hide', 17 | }, 18 | { type: 'separator' }, 19 | { 20 | label: 'Quit', 21 | accelerator: 'Control+W', 22 | role: 'close', 23 | }, 24 | ], 25 | }, 26 | { 27 | label: 'Edit', 28 | submenu: [ 29 | { label: 'Undo', accelerator: 'Control+Z', role: 'undo' }, 30 | { label: 'Redo', accelerator: 'Shift+Control+Z', role: 'redo' }, 31 | { type: 'separator' }, 32 | { label: 'Cut', accelerator: 'Control+X', role: 'cut' }, 33 | { label: 'Copy', accelerator: 'Control+C', role: 'copy' }, 34 | { label: 'Paste', accelerator: 'Control+V', role: 'paste' }, 35 | { label: 'Select All', accelerator: 'Control+A', role: 'selectAll' }, 36 | ], 37 | }, 38 | { 39 | label: 'View', 40 | submenu: [ 41 | { 42 | label: 'Back', 43 | accelerator: 'Backspace', 44 | click: (menuItem: MenuItem, focusedWindow: BrowserWindow | undefined) => { 45 | if (focusedWindow && focusedWindow.webContents.canGoBack()) { 46 | focusedWindow.webContents.goBack() 47 | focusedWindow.webContents.reload() 48 | } 49 | }, 50 | }, 51 | { type: 'separator' }, 52 | { 53 | label: 'Reload', 54 | accelerator: 'F5', 55 | click: (menuItem: MenuItem, focusedWindow: BrowserWindow | undefined) => { 56 | if (focusedWindow) { 57 | focusedWindow.webContents.reload() 58 | } 59 | }, 60 | }, 61 | { type: 'separator' }, 62 | { 63 | label: 'Toggle Dev Tools', 64 | accelerator: 'F12', 65 | click: (menuItem: MenuItem, focusedWindow: BrowserWindow | undefined) => { 66 | if (focusedWindow) { 67 | focusedWindow.webContents.toggleDevTools() 68 | } 69 | }, 70 | }, 71 | ], 72 | }, 73 | { 74 | label: 'Window', 75 | role: 'window', 76 | submenu: [ 77 | { label: 'Minimize', accelerator: 'Control+M', role: 'minimize' }, 78 | { label: 'Close', accelerator: 'Control+W', role: 'close' }, 79 | ], 80 | }, 81 | { 82 | label: 'Help', 83 | role: 'help', 84 | submenu: [ 85 | { 86 | label: `About ${appName}`, 87 | click: () => { 88 | void shell.openExternal(`https://github.com/playcode/playcode-desktop/releases/tag/${appVersion}`) 89 | }, 90 | }, 91 | { 92 | label: `Version ${appVersion}`, 93 | enabled: false, 94 | }, 95 | { type: 'separator' }, 96 | { 97 | label: `View ${appName}`, 98 | click: () => { 99 | void shell.openExternal('https://playcode.io') 100 | }, 101 | }, 102 | { type: 'separator' }, 103 | // Uncomment the following block if you want to include the Changelog in Windows/Linux 104 | /* 105 | { 106 | label: 'Changelog', 107 | click: () => { 108 | shell.openExternal(`https://github.com/Meadowcottage/Playcode/releases/tag/${appVersion}`) 109 | }, 110 | }, 111 | */ 112 | ], 113 | }, 114 | ] 115 | 116 | // Define the menu template for macOS 117 | const templateOSX: MenuItemConstructorOptions[] = [ 118 | { 119 | label: 'Application', 120 | submenu: [ 121 | { 122 | label: `Hide ${appName}`, 123 | accelerator: 'Command+H', 124 | role: 'hide', 125 | }, 126 | { type: 'separator' }, 127 | { 128 | label: 'Quit', 129 | accelerator: 'Command+Q', 130 | click: () => { 131 | app.quit() 132 | }, 133 | }, 134 | ], 135 | }, 136 | { 137 | label: 'Edit', 138 | submenu: [ 139 | { label: 'Undo', accelerator: 'Command+Z', role: 'undo' }, 140 | { label: 'Redo', accelerator: 'Shift+Command+Z', role: 'redo' }, 141 | { type: 'separator' }, 142 | { label: 'Cut', accelerator: 'Command+X', role: 'cut' }, 143 | { label: 'Copy', accelerator: 'Command+C', role: 'copy' }, 144 | { label: 'Paste', accelerator: 'Command+V', role: 'paste' }, 145 | { label: 'Select All', accelerator: 'Command+A', role: 'selectAll' }, 146 | ], 147 | }, 148 | { 149 | label: 'View', 150 | submenu: [ 151 | { 152 | label: 'Back', 153 | accelerator: 'Command+Left', 154 | click: (menuItem: MenuItem, focusedWindow: BrowserWindow | undefined) => { 155 | if (focusedWindow && focusedWindow.webContents.canGoBack()) { 156 | focusedWindow.webContents.goBack() 157 | focusedWindow.webContents.reload() 158 | } 159 | }, 160 | }, 161 | { type: 'separator' }, 162 | { 163 | label: 'Reload', 164 | accelerator: 'Command+R', 165 | click: (menuItem: MenuItem, focusedWindow: BrowserWindow | undefined) => { 166 | if (focusedWindow) { 167 | focusedWindow.webContents.reload() 168 | } 169 | }, 170 | }, 171 | { type: 'separator' }, 172 | { 173 | label: 'Toggle Dev Tools', 174 | accelerator: 'F12', 175 | click: (menuItem: MenuItem, focusedWindow: BrowserWindow | undefined) => { 176 | if (focusedWindow) { 177 | focusedWindow.webContents.toggleDevTools() 178 | } 179 | }, 180 | }, 181 | ], 182 | }, 183 | { 184 | label: 'Window', 185 | role: 'window', 186 | submenu: [ 187 | { label: 'Minimize', accelerator: 'Command+M', role: 'minimize' }, 188 | { label: 'Close', accelerator: 'Command+W', role: 'close' }, 189 | ], 190 | }, 191 | { 192 | label: 'Help', 193 | role: 'help', 194 | submenu: [ 195 | { 196 | label: `About ${appName}`, 197 | click: () => { 198 | void shell.openExternal(`https://github.com/playcode/playcode-desktop/releases/tag/${appVersion}`) 199 | }, 200 | }, 201 | { 202 | label: `Version ${appVersion}`, 203 | enabled: false, 204 | }, 205 | { type: 'separator' }, 206 | { 207 | label: `View ${appName}`, 208 | click: () => { 209 | void shell.openExternal('https://playcode.io') 210 | }, 211 | }, 212 | { type: 'separator' }, 213 | { 214 | label: 'Changelog', 215 | click: () => { 216 | void shell.openExternal(`https://github.com/playcode/playcode-desktop/releases/tag/${appVersion}`) 217 | }, 218 | }, 219 | ], 220 | }, 221 | ] 222 | 223 | // Build the menu from the appropriate template based on the platform 224 | const menu = Menu.buildFromTemplate(process.platform === 'darwin' ? templateOSX : templateWin) 225 | 226 | // Export the constructed menu as the default export 227 | export default menu 228 | -------------------------------------------------------------------------------- /packages/app/src/preload.ts: -------------------------------------------------------------------------------- 1 | import { contextBridge, ipcRenderer } from 'electron' 2 | 3 | 4 | // Example: Expose a safe API to the renderer 5 | // contextBridge.exposeInMainWorld('electronAPI', { 6 | // Define APIs here 7 | // Example: 8 | // send: (channel: string, data: any) => ipcRenderer.send(channel, data), 9 | // receive: (channel: string, func: (...args: any[]) => void) => ipcRenderer.on(channel, (event, ...args) => func(...args))), 10 | // }) 11 | -------------------------------------------------------------------------------- /packages/app/src/utils/screen-recorder.ts: -------------------------------------------------------------------------------- 1 | import { BrowserWindow, Notification, app, globalShortcut, screen } from 'electron' 2 | 3 | import { ChildProcess, exec } from 'child_process' 4 | import os from 'os' 5 | import path from 'path' 6 | 7 | // Constants 8 | const WINDOW_WIDTH: number = 1000 9 | const WINDOW_HEIGHT: number = 613 10 | 11 | const RECORDING_PADDING_LEFT: number = 0 // Can be positive or negative 12 | const RECORDING_PADDING_TOP: number = 0 13 | const RECORDING_PADDING_RIGHT: number = 0 14 | const RECORDING_PADDING_BOTTOM: number = 0 15 | 16 | const RECORDING_FRAME_RATE: number = 60 17 | const RECORDING_DIR: string = path.join(os.homedir(), 'Desktop') 18 | 19 | // Variables 20 | let ffmpegProcess: ChildProcess | undefined 21 | 22 | // Interfaces 23 | interface FFmpegScreenIndices { 24 | screen0Index: string 25 | screen1Index?: string 26 | } 27 | 28 | // Function to get the active screen index for Electron 29 | function getActiveScreenIndex(): number { 30 | const displays = screen.getAllDisplays() 31 | const cursorPoint = screen.getCursorScreenPoint() 32 | 33 | // eslint-disable-next-line no-plusplus 34 | for (let i = 0; i < displays.length; i++) { 35 | const display = displays[i] 36 | const bounds = display.bounds 37 | 38 | if ( 39 | cursorPoint.x >= bounds.x && 40 | cursorPoint.x <= bounds.x + bounds.width && 41 | cursorPoint.y >= bounds.y && 42 | cursorPoint.y <= bounds.y + bounds.height 43 | ) { 44 | return i // Return Electron screen index 45 | } 46 | } 47 | 48 | return -1 49 | } 50 | 51 | // Function to get the FFmpeg screen indices dynamically 52 | function getFFmpegScreenIndices(callback: (indices: FFmpegScreenIndices | null) => void): void { 53 | const ffmpegCommand: string = 'ffmpeg -f avfoundation -list_devices true -i ""' 54 | 55 | exec(ffmpegCommand, (error, stdout, stderr) => { 56 | let output = stdout 57 | if (error) { 58 | if (stderr.includes('Input/output error')) { 59 | console.warn('Usually it is okay. Because some input devices error.') 60 | output = stderr 61 | } else { 62 | console.error('Error listing FFmpeg devices:', error) 63 | callback(null) 64 | return 65 | } 66 | } 67 | 68 | // Parse the output to find the indices of Capture screen 0 and Capture screen 1 69 | const captureScreen0Match = output.match(/\[(\d+)\] Capture screen 0/) 70 | const captureScreen1Match = output.match(/\[(\d+)\] Capture screen 1/) 71 | 72 | if (captureScreen0Match && captureScreen1Match) { 73 | const screen0Index: string = captureScreen0Match[1] 74 | const screen1Index: string = captureScreen1Match[1] 75 | callback({ screen0Index, screen1Index }) 76 | } else if (captureScreen0Match) { 77 | const screen0Index: string = captureScreen0Match[1] 78 | callback({ screen0Index }) 79 | } else { 80 | console.error('Could not find Capture screen 0 or 1 in FFmpeg output.') 81 | callback(null) 82 | } 83 | }) 84 | } 85 | 86 | // Function to get the window position and size centered on the active screen 87 | function getCenteredWindowPositionAndSize(): { x: number; y: number; width: number; height: number } | undefined { 88 | const activeScreenIndex: number = getActiveScreenIndex() 89 | if (activeScreenIndex === -1) { 90 | console.error('No active screen found.') 91 | return 92 | } 93 | 94 | const displays = screen.getAllDisplays() 95 | const display = displays[activeScreenIndex] 96 | 97 | let x: number = display.bounds.x 98 | let y: number = display.bounds.y 99 | const screenSizeWidth: number = display.bounds.width 100 | const screenSizeHeight: number = display.bounds.height 101 | 102 | console.log('Screen size:', screenSizeWidth, screenSizeHeight) 103 | console.log('Window size:', WINDOW_WIDTH, WINDOW_HEIGHT) 104 | console.log('Screen position:', x, y) 105 | 106 | // Calculate x/y to center the window on the screen 107 | x += Math.floor((screenSizeWidth - WINDOW_WIDTH) / 2) 108 | y += Math.floor((screenSizeHeight - WINDOW_HEIGHT) / 2) 109 | 110 | console.log('Center window position:', x, y) 111 | 112 | return { x, y, width: WINDOW_WIDTH, height: WINDOW_HEIGHT } 113 | } 114 | 115 | // Function to get the window position and size adjusted for FFmpeg's screen 116 | function getWindowPositionAndSizeFFmpeg(mainWindow: BrowserWindow): 117 | | { 118 | x: number 119 | y: number 120 | width: number 121 | height: number 122 | } 123 | | undefined { 124 | const activeScreenIndex: number = getActiveScreenIndex() 125 | 126 | if (activeScreenIndex === -1) { 127 | console.error('No active screen found.') 128 | return 129 | } 130 | 131 | const displays = screen.getAllDisplays() 132 | const display = displays[activeScreenIndex] 133 | 134 | // Get the scale factor (devicePixelRatio) for the screen 135 | const scaleFactor: number = display.scaleFactor || 1 136 | 137 | const screenSizeWidth: number = display.bounds.width 138 | const screenSizeHeight: number = display.bounds.height 139 | console.log('Display bounds:', display.bounds) 140 | 141 | const mainWindowBounds = mainWindow.getBounds() 142 | console.log('mainWindowBounds', mainWindowBounds) 143 | 144 | const width: number = mainWindowBounds.width + RECORDING_PADDING_LEFT + RECORDING_PADDING_RIGHT 145 | const height: number = mainWindowBounds.height + RECORDING_PADDING_TOP + RECORDING_PADDING_BOTTOM 146 | const x: number = mainWindowBounds.x - RECORDING_PADDING_LEFT 147 | const y: number = mainWindowBounds.y - RECORDING_PADDING_TOP 148 | 149 | console.log('Screen size (logical):', screenSizeWidth, screenSizeHeight) 150 | console.log('Window size (logical):', width, height) 151 | 152 | // Adjust the window size and position for the screen's density (scale factor) 153 | const adjustedWindowWidth: number = width * scaleFactor 154 | const adjustedWindowHeight: number = height * scaleFactor 155 | const adjustedX: number = (x - display.bounds.x) * scaleFactor 156 | const adjustedY: number = (y - display.bounds.y) * scaleFactor 157 | 158 | console.log('Adjusted window size (physical):', adjustedWindowWidth, adjustedWindowHeight) 159 | console.log('Adjusted window position (physical):', adjustedX, adjustedY) 160 | 161 | return { x: adjustedX, y: adjustedY, width: adjustedWindowWidth, height: adjustedWindowHeight } 162 | } 163 | 164 | // Function to set the window position and size 165 | function setWindowPositionAndSize(mainWindow: BrowserWindow): void { 166 | const positionSize = getCenteredWindowPositionAndSize() 167 | if (positionSize) { 168 | const { x, y, width, height } = positionSize 169 | mainWindow.setPosition(x, y) 170 | mainWindow.setSize(width, height) 171 | } 172 | } 173 | 174 | // Function to start screen recording with ffmpeg 175 | function startScreenRecording(mainWindow: BrowserWindow): void { 176 | const activeScreenIndex: number = getActiveScreenIndex() 177 | if (activeScreenIndex === -1) { 178 | console.error('No active screen found.') 179 | return 180 | } 181 | 182 | // Get the correct FFmpeg screen indices and map the active screen to it 183 | getFFmpegScreenIndices((screenIndices: FFmpegScreenIndices | null) => { 184 | if (!screenIndices) { 185 | console.error('Could not find FFmpeg screen indices.') 186 | return 187 | } 188 | 189 | console.log('Screen recording started') 190 | const windowPositionSize = getWindowPositionAndSizeFFmpeg(mainWindow) 191 | if (!windowPositionSize) { 192 | console.error('Failed to get window position and size for FFmpeg.') 193 | return 194 | } 195 | 196 | const { x, y, width, height } = windowPositionSize 197 | 198 | // Map Electron's active screen to FFmpeg's screen indices 199 | const ffmpegScreenIndex: string | undefined = 200 | activeScreenIndex === 0 ? screenIndices.screen0Index : screenIndices.screen1Index 201 | 202 | if (!ffmpegScreenIndex) { 203 | console.error('FFmpeg screen index not found for the active screen.') 204 | return 205 | } 206 | 207 | console.log('ffmpeg active screen index:', ffmpegScreenIndex) 208 | 209 | // Path to save the video in the Desktop folder 210 | const outputFilePath: string = path.join(RECORDING_DIR, `recording_${Date.now()}.mov`) 211 | 212 | // Command to record the specific region (window) using ffmpeg 213 | const ffmpegCommand: string = `ffmpeg -y -f avfoundation -framerate ${RECORDING_FRAME_RATE} -i "${ffmpegScreenIndex}" -vf "crop=${width}:${height}:${x}:${y}" -pix_fmt yuv420p "${outputFilePath}"` 214 | 215 | // Start ffmpeg process 216 | ffmpegProcess = exec(ffmpegCommand, (error, stdout, stderr) => { 217 | if (error) { 218 | console.error(`Error during screen recording: ${error.message}`) 219 | return 220 | } 221 | console.log('Recording finished:', outputFilePath) 222 | }) 223 | }) 224 | } 225 | 226 | // Function to stop screen recording gracefully 227 | function stopScreenRecording(): void { 228 | if (ffmpegProcess && ffmpegProcess.stdin) { 229 | // Send 'q' to ffmpeg's stdin to stop recording gracefully 230 | ffmpegProcess.stdin.write('q') 231 | console.log('Recording stopped gracefully') 232 | 233 | new Notification({ title: 'Stopped recording', body: 'Your screen recording has been stopped.' }).show() 234 | } 235 | } 236 | 237 | // Function to kill screen recording forcefully 238 | function killScreenRecording(): void { 239 | if (ffmpegProcess) { 240 | ffmpegProcess.kill('SIGTERM') 241 | console.log('Recording killed') 242 | } 243 | } 244 | 245 | // Function to register global shortcuts 246 | function registerGlobalShortcut(getMainWindow: () => BrowserWindow): void { 247 | // Start recording shortcut with window positioning 248 | const shortcut1 = 'CmdOrCtrl+Shift+7' 249 | const shortcut2 = 'CmdOrCtrl+Shift+Alt+7' 250 | const shortcut3 = 'CmdOrCtrl+Shift+8' 251 | 252 | const success1 = globalShortcut.register(shortcut1, () => { 253 | new Notification({ title: 'Started recording', body: 'With centered positioning' }).show() 254 | 255 | const mainWindow = getMainWindow() 256 | setWindowPositionAndSize(mainWindow) 257 | startScreenRecording(mainWindow) 258 | }) 259 | 260 | if (!success1) { 261 | console.error(`Failed to register global shortcut: ${shortcut1}`) 262 | } 263 | 264 | // Start recording shortcut without window positioning 265 | const success2 = globalShortcut.register(shortcut2, () => { 266 | new Notification({ title: 'Started recording', body: '...' }).show() 267 | 268 | const mainWindow = getMainWindow() 269 | startScreenRecording(mainWindow) 270 | }) 271 | 272 | if (!success2) { 273 | console.error(`Failed to register global shortcut: ${shortcut2}`) 274 | } 275 | 276 | // Stop recording shortcut 277 | const success3 = globalShortcut.register(shortcut3, () => { 278 | stopScreenRecording() 279 | }) 280 | 281 | if (!success3) { 282 | console.error(`Failed to register global shortcut: ${shortcut3}`) 283 | } 284 | 285 | // Electron app events 286 | app.on('will-quit', () => { 287 | killScreenRecording() 288 | globalShortcut.unregisterAll() 289 | }) 290 | 291 | // Stop the recording when the window is closed 292 | const mainWindow = getMainWindow() 293 | mainWindow.on('closed', () => { 294 | killScreenRecording() 295 | }) 296 | } 297 | 298 | // Export the registerGlobalShortcut function 299 | export default { registerGlobalShortcut } 300 | -------------------------------------------------------------------------------- /packages/app/tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "exclude": ["node_modules", "dist", "test", "**/*spec.ts"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/app/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "node16", 4 | "moduleResolution": "node16", 5 | "strict": true, 6 | "declaration": true, 7 | "removeComments": true, 8 | "emitDecoratorMetadata": true, 9 | "useDefineForClassFields": false, 10 | "experimentalDecorators": true, 11 | "allowSyntheticDefaultImports": true, 12 | "target": "ES2022", 13 | "sourceMap": true, 14 | "outDir": "./dist", 15 | "baseUrl": "./", 16 | "jsx": "react", 17 | "resolveJsonModule": true, 18 | "allowJs": true, 19 | "checkJs": false, 20 | "esModuleInterop": true, 21 | "downlevelIteration": true, 22 | "strictNullChecks": true, 23 | "strictFunctionTypes": false, 24 | "strictBindCallApply": false, 25 | "strictPropertyInitialization": false, 26 | "noUnusedLocals": false, 27 | "noUnusedParameters": false, 28 | "noImplicitAny": false, 29 | "noImplicitReturns": false, 30 | "noImplicitThis": false, 31 | "noStrictGenericChecks": false, 32 | "skipDefaultLibCheck": false, 33 | "importHelpers": true, 34 | "types": [ 35 | "node" 36 | ], 37 | "lib": [ 38 | "ESNext", 39 | "es2019", 40 | "es2020.bigint", 41 | "es2020.string", 42 | "es2020.symbol.wellknown", 43 | "dom" 44 | ], 45 | "paths": { 46 | "@/*": [ 47 | "src/*" 48 | ] 49 | }, 50 | "incremental": true, 51 | "skipLibCheck": true 52 | }, 53 | "include": [ 54 | "./src/**/*" 55 | ] 56 | } 57 | -------------------------------------------------------------------------------- /packages/app/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.24.7": 6 | version "7.24.7" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" 8 | integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== 9 | dependencies: 10 | "@babel/highlight" "^7.24.7" 11 | picocolors "^1.0.0" 12 | 13 | "@babel/generator@7.17.7": 14 | version "7.17.7" 15 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" 16 | integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== 17 | dependencies: 18 | "@babel/types" "^7.17.0" 19 | jsesc "^2.5.1" 20 | source-map "^0.5.0" 21 | 22 | "@babel/generator@^7.23.0": 23 | version "7.25.6" 24 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.6.tgz#0df1ad8cb32fe4d2b01d8bf437f153d19342a87c" 25 | integrity sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw== 26 | dependencies: 27 | "@babel/types" "^7.25.6" 28 | "@jridgewell/gen-mapping" "^0.3.5" 29 | "@jridgewell/trace-mapping" "^0.3.25" 30 | jsesc "^2.5.1" 31 | 32 | "@babel/helper-environment-visitor@^7.22.20": 33 | version "7.24.7" 34 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" 35 | integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== 36 | dependencies: 37 | "@babel/types" "^7.24.7" 38 | 39 | "@babel/helper-function-name@^7.23.0": 40 | version "7.24.7" 41 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" 42 | integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== 43 | dependencies: 44 | "@babel/template" "^7.24.7" 45 | "@babel/types" "^7.24.7" 46 | 47 | "@babel/helper-hoist-variables@^7.22.5": 48 | version "7.24.7" 49 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" 50 | integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== 51 | dependencies: 52 | "@babel/types" "^7.24.7" 53 | 54 | "@babel/helper-split-export-declaration@^7.22.6": 55 | version "7.24.7" 56 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" 57 | integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== 58 | dependencies: 59 | "@babel/types" "^7.24.7" 60 | 61 | "@babel/helper-string-parser@^7.24.8": 62 | version "7.24.8" 63 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" 64 | integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== 65 | 66 | "@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.24.7": 67 | version "7.24.7" 68 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" 69 | integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== 70 | 71 | "@babel/highlight@^7.24.7": 72 | version "7.24.7" 73 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" 74 | integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== 75 | dependencies: 76 | "@babel/helper-validator-identifier" "^7.24.7" 77 | chalk "^2.4.2" 78 | js-tokens "^4.0.0" 79 | picocolors "^1.0.0" 80 | 81 | "@babel/parser@^7.20.5", "@babel/parser@^7.23.0", "@babel/parser@^7.25.0": 82 | version "7.25.6" 83 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.6.tgz#85660c5ef388cbbf6e3d2a694ee97a38f18afe2f" 84 | integrity sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q== 85 | dependencies: 86 | "@babel/types" "^7.25.6" 87 | 88 | "@babel/template@^7.24.7": 89 | version "7.25.0" 90 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" 91 | integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== 92 | dependencies: 93 | "@babel/code-frame" "^7.24.7" 94 | "@babel/parser" "^7.25.0" 95 | "@babel/types" "^7.25.0" 96 | 97 | "@babel/traverse@7.23.2": 98 | version "7.23.2" 99 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" 100 | integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== 101 | dependencies: 102 | "@babel/code-frame" "^7.22.13" 103 | "@babel/generator" "^7.23.0" 104 | "@babel/helper-environment-visitor" "^7.22.20" 105 | "@babel/helper-function-name" "^7.23.0" 106 | "@babel/helper-hoist-variables" "^7.22.5" 107 | "@babel/helper-split-export-declaration" "^7.22.6" 108 | "@babel/parser" "^7.23.0" 109 | "@babel/types" "^7.23.0" 110 | debug "^4.1.0" 111 | globals "^11.1.0" 112 | 113 | "@babel/types@7.17.0": 114 | version "7.17.0" 115 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" 116 | integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== 117 | dependencies: 118 | "@babel/helper-validator-identifier" "^7.16.7" 119 | to-fast-properties "^2.0.0" 120 | 121 | "@babel/types@^7.17.0", "@babel/types@^7.23.0", "@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.6": 122 | version "7.25.6" 123 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.6.tgz#893942ddb858f32ae7a004ec9d3a76b3463ef8e6" 124 | integrity sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw== 125 | dependencies: 126 | "@babel/helper-string-parser" "^7.24.8" 127 | "@babel/helper-validator-identifier" "^7.24.7" 128 | to-fast-properties "^2.0.0" 129 | 130 | "@cspotcode/source-map-support@^0.8.0": 131 | version "0.8.1" 132 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" 133 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 134 | dependencies: 135 | "@jridgewell/trace-mapping" "0.3.9" 136 | 137 | "@electron/remote@^2.0.9": 138 | version "2.1.2" 139 | resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-2.1.2.tgz#52a97c8faa5b769155b649ef262f2f8c851776e6" 140 | integrity sha512-EPwNx+nhdrTBxyCqXt/pftoQg/ybtWDW3DUWHafejvnB1ZGGfMpv6e15D8KeempocjXe78T7WreyGGb3mlZxdA== 141 | 142 | "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": 143 | version "4.4.0" 144 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 145 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 146 | dependencies: 147 | eslint-visitor-keys "^3.3.0" 148 | 149 | "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": 150 | version "4.11.1" 151 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.1.tgz#a547badfc719eb3e5f4b556325e542fbe9d7a18f" 152 | integrity sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== 153 | 154 | "@eslint/eslintrc@^2.1.4": 155 | version "2.1.4" 156 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" 157 | integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== 158 | dependencies: 159 | ajv "^6.12.4" 160 | debug "^4.3.2" 161 | espree "^9.6.0" 162 | globals "^13.19.0" 163 | ignore "^5.2.0" 164 | import-fresh "^3.2.1" 165 | js-yaml "^4.1.0" 166 | minimatch "^3.1.2" 167 | strip-json-comments "^3.1.1" 168 | 169 | "@eslint/js@8.57.1": 170 | version "8.57.1" 171 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" 172 | integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== 173 | 174 | "@humanwhocodes/config-array@^0.13.0": 175 | version "0.13.0" 176 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" 177 | integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== 178 | dependencies: 179 | "@humanwhocodes/object-schema" "^2.0.3" 180 | debug "^4.3.1" 181 | minimatch "^3.0.5" 182 | 183 | "@humanwhocodes/module-importer@^1.0.1": 184 | version "1.0.1" 185 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 186 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 187 | 188 | "@humanwhocodes/object-schema@^2.0.3": 189 | version "2.0.3" 190 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" 191 | integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== 192 | 193 | "@jridgewell/gen-mapping@^0.3.5": 194 | version "0.3.5" 195 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" 196 | integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== 197 | dependencies: 198 | "@jridgewell/set-array" "^1.2.1" 199 | "@jridgewell/sourcemap-codec" "^1.4.10" 200 | "@jridgewell/trace-mapping" "^0.3.24" 201 | 202 | "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": 203 | version "3.1.2" 204 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" 205 | integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== 206 | 207 | "@jridgewell/set-array@^1.2.1": 208 | version "1.2.1" 209 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" 210 | integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== 211 | 212 | "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": 213 | version "1.5.0" 214 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" 215 | integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== 216 | 217 | "@jridgewell/trace-mapping@0.3.9": 218 | version "0.3.9" 219 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" 220 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 221 | dependencies: 222 | "@jridgewell/resolve-uri" "^3.0.3" 223 | "@jridgewell/sourcemap-codec" "^1.4.10" 224 | 225 | "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": 226 | version "0.3.25" 227 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" 228 | integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== 229 | dependencies: 230 | "@jridgewell/resolve-uri" "^3.1.0" 231 | "@jridgewell/sourcemap-codec" "^1.4.14" 232 | 233 | "@nodelib/fs.scandir@2.1.5": 234 | version "2.1.5" 235 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 236 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 237 | dependencies: 238 | "@nodelib/fs.stat" "2.0.5" 239 | run-parallel "^1.1.9" 240 | 241 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 242 | version "2.0.5" 243 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 244 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 245 | 246 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 247 | version "1.2.8" 248 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 249 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 250 | dependencies: 251 | "@nodelib/fs.scandir" "2.1.5" 252 | fastq "^1.6.0" 253 | 254 | "@nolyfill/is-core-module@1.0.39": 255 | version "1.0.39" 256 | resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" 257 | integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== 258 | 259 | "@pkgr/core@^0.1.0": 260 | version "0.1.1" 261 | resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" 262 | integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== 263 | 264 | "@rtsao/scc@^1.1.0": 265 | version "1.1.0" 266 | resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" 267 | integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== 268 | 269 | "@trivago/prettier-plugin-sort-imports@^4.3.0": 270 | version "4.3.0" 271 | resolved "https://registry.yarnpkg.com/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz#725f411646b3942193a37041c84e0b2116339789" 272 | integrity sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ== 273 | dependencies: 274 | "@babel/generator" "7.17.7" 275 | "@babel/parser" "^7.20.5" 276 | "@babel/traverse" "7.23.2" 277 | "@babel/types" "7.17.0" 278 | javascript-natural-sort "0.7.1" 279 | lodash "^4.17.21" 280 | 281 | "@tsconfig/node10@^1.0.7": 282 | version "1.0.11" 283 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" 284 | integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== 285 | 286 | "@tsconfig/node12@^1.0.7": 287 | version "1.0.11" 288 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" 289 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== 290 | 291 | "@tsconfig/node14@^1.0.0": 292 | version "1.0.3" 293 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" 294 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== 295 | 296 | "@tsconfig/node16@^1.0.2": 297 | version "1.0.4" 298 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" 299 | integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== 300 | 301 | "@types/json-schema@^7.0.12": 302 | version "7.0.15" 303 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" 304 | integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== 305 | 306 | "@types/json5@^0.0.29": 307 | version "0.0.29" 308 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" 309 | integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== 310 | 311 | "@types/semver@^7.5.0": 312 | version "7.5.8" 313 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" 314 | integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== 315 | 316 | "@typescript-eslint/eslint-plugin@^6.15.0": 317 | version "6.21.0" 318 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" 319 | integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== 320 | dependencies: 321 | "@eslint-community/regexpp" "^4.5.1" 322 | "@typescript-eslint/scope-manager" "6.21.0" 323 | "@typescript-eslint/type-utils" "6.21.0" 324 | "@typescript-eslint/utils" "6.21.0" 325 | "@typescript-eslint/visitor-keys" "6.21.0" 326 | debug "^4.3.4" 327 | graphemer "^1.4.0" 328 | ignore "^5.2.4" 329 | natural-compare "^1.4.0" 330 | semver "^7.5.4" 331 | ts-api-utils "^1.0.1" 332 | 333 | "@typescript-eslint/parser@^6.15.0": 334 | version "6.21.0" 335 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b" 336 | integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ== 337 | dependencies: 338 | "@typescript-eslint/scope-manager" "6.21.0" 339 | "@typescript-eslint/types" "6.21.0" 340 | "@typescript-eslint/typescript-estree" "6.21.0" 341 | "@typescript-eslint/visitor-keys" "6.21.0" 342 | debug "^4.3.4" 343 | 344 | "@typescript-eslint/scope-manager@6.21.0": 345 | version "6.21.0" 346 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1" 347 | integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== 348 | dependencies: 349 | "@typescript-eslint/types" "6.21.0" 350 | "@typescript-eslint/visitor-keys" "6.21.0" 351 | 352 | "@typescript-eslint/scope-manager@8.6.0": 353 | version "8.6.0" 354 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.6.0.tgz#28cc2fc26a84b75addf45091a2c6283e29e2c982" 355 | integrity sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw== 356 | dependencies: 357 | "@typescript-eslint/types" "8.6.0" 358 | "@typescript-eslint/visitor-keys" "8.6.0" 359 | 360 | "@typescript-eslint/type-utils@6.21.0": 361 | version "6.21.0" 362 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e" 363 | integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag== 364 | dependencies: 365 | "@typescript-eslint/typescript-estree" "6.21.0" 366 | "@typescript-eslint/utils" "6.21.0" 367 | debug "^4.3.4" 368 | ts-api-utils "^1.0.1" 369 | 370 | "@typescript-eslint/types@6.21.0": 371 | version "6.21.0" 372 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d" 373 | integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== 374 | 375 | "@typescript-eslint/types@8.6.0": 376 | version "8.6.0" 377 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.6.0.tgz#cdc3a16f83f2f0663d6723e9fd032331cdd9f51c" 378 | integrity sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw== 379 | 380 | "@typescript-eslint/typescript-estree@6.21.0": 381 | version "6.21.0" 382 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46" 383 | integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ== 384 | dependencies: 385 | "@typescript-eslint/types" "6.21.0" 386 | "@typescript-eslint/visitor-keys" "6.21.0" 387 | debug "^4.3.4" 388 | globby "^11.1.0" 389 | is-glob "^4.0.3" 390 | minimatch "9.0.3" 391 | semver "^7.5.4" 392 | ts-api-utils "^1.0.1" 393 | 394 | "@typescript-eslint/typescript-estree@8.6.0": 395 | version "8.6.0" 396 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.6.0.tgz#f945506de42871f04868371cb5bf21e8f7266e01" 397 | integrity sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g== 398 | dependencies: 399 | "@typescript-eslint/types" "8.6.0" 400 | "@typescript-eslint/visitor-keys" "8.6.0" 401 | debug "^4.3.4" 402 | fast-glob "^3.3.2" 403 | is-glob "^4.0.3" 404 | minimatch "^9.0.4" 405 | semver "^7.6.0" 406 | ts-api-utils "^1.3.0" 407 | 408 | "@typescript-eslint/utils@6.21.0": 409 | version "6.21.0" 410 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134" 411 | integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ== 412 | dependencies: 413 | "@eslint-community/eslint-utils" "^4.4.0" 414 | "@types/json-schema" "^7.0.12" 415 | "@types/semver" "^7.5.0" 416 | "@typescript-eslint/scope-manager" "6.21.0" 417 | "@typescript-eslint/types" "6.21.0" 418 | "@typescript-eslint/typescript-estree" "6.21.0" 419 | semver "^7.5.4" 420 | 421 | "@typescript-eslint/utils@^6.0.0 || ^7.0.0 || ^8.0.0": 422 | version "8.6.0" 423 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.6.0.tgz#175fe893f32804bed1e72b3364ea6bbe1044181c" 424 | integrity sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A== 425 | dependencies: 426 | "@eslint-community/eslint-utils" "^4.4.0" 427 | "@typescript-eslint/scope-manager" "8.6.0" 428 | "@typescript-eslint/types" "8.6.0" 429 | "@typescript-eslint/typescript-estree" "8.6.0" 430 | 431 | "@typescript-eslint/visitor-keys@6.21.0": 432 | version "6.21.0" 433 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47" 434 | integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== 435 | dependencies: 436 | "@typescript-eslint/types" "6.21.0" 437 | eslint-visitor-keys "^3.4.1" 438 | 439 | "@typescript-eslint/visitor-keys@8.6.0": 440 | version "8.6.0" 441 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.6.0.tgz#5432af4a1753f376f35ab5b891fc9db237aaf76f" 442 | integrity sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg== 443 | dependencies: 444 | "@typescript-eslint/types" "8.6.0" 445 | eslint-visitor-keys "^3.4.3" 446 | 447 | "@ungap/structured-clone@^1.2.0": 448 | version "1.2.0" 449 | resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" 450 | integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== 451 | 452 | acorn-jsx@^5.3.2: 453 | version "5.3.2" 454 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 455 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 456 | 457 | acorn-walk@^8.1.1: 458 | version "8.3.4" 459 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" 460 | integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== 461 | dependencies: 462 | acorn "^8.11.0" 463 | 464 | acorn@^8.11.0, acorn@^8.4.1, acorn@^8.9.0: 465 | version "8.12.1" 466 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" 467 | integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== 468 | 469 | ajv-formats@^3.0.1: 470 | version "3.0.1" 471 | resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" 472 | integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== 473 | dependencies: 474 | ajv "^8.0.0" 475 | 476 | ajv@^6.12.4: 477 | version "6.12.6" 478 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 479 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 480 | dependencies: 481 | fast-deep-equal "^3.1.1" 482 | fast-json-stable-stringify "^2.0.0" 483 | json-schema-traverse "^0.4.1" 484 | uri-js "^4.2.2" 485 | 486 | ajv@^8.0.0, ajv@^8.16.0: 487 | version "8.17.1" 488 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" 489 | integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== 490 | dependencies: 491 | fast-deep-equal "^3.1.3" 492 | fast-uri "^3.0.1" 493 | json-schema-traverse "^1.0.0" 494 | require-from-string "^2.0.2" 495 | 496 | ansi-regex@^5.0.1: 497 | version "5.0.1" 498 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 499 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 500 | 501 | ansi-regex@^6.0.1: 502 | version "6.1.0" 503 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" 504 | integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== 505 | 506 | ansi-styles@^3.2.1: 507 | version "3.2.1" 508 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 509 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 510 | dependencies: 511 | color-convert "^1.9.0" 512 | 513 | ansi-styles@^4.1.0: 514 | version "4.3.0" 515 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 516 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 517 | dependencies: 518 | color-convert "^2.0.1" 519 | 520 | ansi-styles@^6.0.0: 521 | version "6.2.1" 522 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" 523 | integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== 524 | 525 | arg@^4.1.0: 526 | version "4.1.3" 527 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 528 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 529 | 530 | argparse@^2.0.1: 531 | version "2.0.1" 532 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 533 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 534 | 535 | array-buffer-byte-length@^1.0.1: 536 | version "1.0.1" 537 | resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" 538 | integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== 539 | dependencies: 540 | call-bind "^1.0.5" 541 | is-array-buffer "^3.0.4" 542 | 543 | array-includes@^3.1.6, array-includes@^3.1.8: 544 | version "3.1.8" 545 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" 546 | integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== 547 | dependencies: 548 | call-bind "^1.0.7" 549 | define-properties "^1.2.1" 550 | es-abstract "^1.23.2" 551 | es-object-atoms "^1.0.0" 552 | get-intrinsic "^1.2.4" 553 | is-string "^1.0.7" 554 | 555 | array-union@^2.1.0: 556 | version "2.1.0" 557 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 558 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 559 | 560 | array.prototype.findlast@^1.2.5: 561 | version "1.2.5" 562 | resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" 563 | integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== 564 | dependencies: 565 | call-bind "^1.0.7" 566 | define-properties "^1.2.1" 567 | es-abstract "^1.23.2" 568 | es-errors "^1.3.0" 569 | es-object-atoms "^1.0.0" 570 | es-shim-unscopables "^1.0.2" 571 | 572 | array.prototype.findlastindex@^1.2.5: 573 | version "1.2.5" 574 | resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" 575 | integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== 576 | dependencies: 577 | call-bind "^1.0.7" 578 | define-properties "^1.2.1" 579 | es-abstract "^1.23.2" 580 | es-errors "^1.3.0" 581 | es-object-atoms "^1.0.0" 582 | es-shim-unscopables "^1.0.2" 583 | 584 | array.prototype.flat@^1.3.1, array.prototype.flat@^1.3.2: 585 | version "1.3.2" 586 | resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" 587 | integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== 588 | dependencies: 589 | call-bind "^1.0.2" 590 | define-properties "^1.2.0" 591 | es-abstract "^1.22.1" 592 | es-shim-unscopables "^1.0.0" 593 | 594 | array.prototype.flatmap@^1.3.2: 595 | version "1.3.2" 596 | resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" 597 | integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== 598 | dependencies: 599 | call-bind "^1.0.2" 600 | define-properties "^1.2.0" 601 | es-abstract "^1.22.1" 602 | es-shim-unscopables "^1.0.0" 603 | 604 | array.prototype.tosorted@^1.1.4: 605 | version "1.1.4" 606 | resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" 607 | integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== 608 | dependencies: 609 | call-bind "^1.0.7" 610 | define-properties "^1.2.1" 611 | es-abstract "^1.23.3" 612 | es-errors "^1.3.0" 613 | es-shim-unscopables "^1.0.2" 614 | 615 | arraybuffer.prototype.slice@^1.0.3: 616 | version "1.0.3" 617 | resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" 618 | integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== 619 | dependencies: 620 | array-buffer-byte-length "^1.0.1" 621 | call-bind "^1.0.5" 622 | define-properties "^1.2.1" 623 | es-abstract "^1.22.3" 624 | es-errors "^1.2.1" 625 | get-intrinsic "^1.2.3" 626 | is-array-buffer "^3.0.4" 627 | is-shared-array-buffer "^1.0.2" 628 | 629 | atomically@^2.0.3: 630 | version "2.0.3" 631 | resolved "https://registry.yarnpkg.com/atomically/-/atomically-2.0.3.tgz#27e47bbe39994d324918491ba7c0edb7783e56cb" 632 | integrity sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw== 633 | dependencies: 634 | stubborn-fs "^1.2.5" 635 | when-exit "^2.1.1" 636 | 637 | available-typed-arrays@^1.0.7: 638 | version "1.0.7" 639 | resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" 640 | integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== 641 | dependencies: 642 | possible-typed-array-names "^1.0.0" 643 | 644 | balanced-match@^1.0.0: 645 | version "1.0.2" 646 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 647 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 648 | 649 | brace-expansion@^1.1.7: 650 | version "1.1.11" 651 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 652 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 653 | dependencies: 654 | balanced-match "^1.0.0" 655 | concat-map "0.0.1" 656 | 657 | brace-expansion@^2.0.1: 658 | version "2.0.1" 659 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 660 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 661 | dependencies: 662 | balanced-match "^1.0.0" 663 | 664 | braces@^3.0.3: 665 | version "3.0.3" 666 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" 667 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 668 | dependencies: 669 | fill-range "^7.1.1" 670 | 671 | builder-util-runtime@9.2.5: 672 | version "9.2.5" 673 | resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.5.tgz#0afdffa0adb5c84c14926c7dd2cf3c6e96e9be83" 674 | integrity sha512-HjIDfhvqx/8B3TDN4GbABQcgpewTU4LMRTQPkVpKYV3lsuxEJoIfvg09GyWTNmfVNSUAYf+fbTN//JX4TH20pg== 675 | dependencies: 676 | debug "^4.3.4" 677 | sax "^1.2.4" 678 | 679 | call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: 680 | version "1.0.7" 681 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" 682 | integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== 683 | dependencies: 684 | es-define-property "^1.0.0" 685 | es-errors "^1.3.0" 686 | function-bind "^1.1.2" 687 | get-intrinsic "^1.2.4" 688 | set-function-length "^1.2.1" 689 | 690 | callsites@^3.0.0: 691 | version "3.1.0" 692 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 693 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 694 | 695 | chalk@^2.4.2: 696 | version "2.4.2" 697 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 698 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 699 | dependencies: 700 | ansi-styles "^3.2.1" 701 | escape-string-regexp "^1.0.5" 702 | supports-color "^5.3.0" 703 | 704 | chalk@^4.0.0: 705 | version "4.1.2" 706 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 707 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 708 | dependencies: 709 | ansi-styles "^4.1.0" 710 | supports-color "^7.1.0" 711 | 712 | cli-truncate@^4.0.0: 713 | version "4.0.0" 714 | resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a" 715 | integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== 716 | dependencies: 717 | slice-ansi "^5.0.0" 718 | string-width "^7.0.0" 719 | 720 | color-convert@^1.9.0: 721 | version "1.9.3" 722 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 723 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 724 | dependencies: 725 | color-name "1.1.3" 726 | 727 | color-convert@^2.0.1: 728 | version "2.0.1" 729 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 730 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 731 | dependencies: 732 | color-name "~1.1.4" 733 | 734 | color-name@1.1.3: 735 | version "1.1.3" 736 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 737 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 738 | 739 | color-name@~1.1.4: 740 | version "1.1.4" 741 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 742 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 743 | 744 | concat-map@0.0.1: 745 | version "0.0.1" 746 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 747 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 748 | 749 | conf@^1.0.0: 750 | version "1.4.0" 751 | resolved "https://registry.yarnpkg.com/conf/-/conf-1.4.0.tgz#1ea66c9d7a9b601674a5bb9d2b8dc3c726625e67" 752 | integrity sha512-bzlVWS2THbMetHqXKB8ypsXN4DQ/1qopGwNJi1eYbpwesJcd86FBjFciCQX/YwAhp9bM7NVnPFqZ5LpV7gP0Dg== 753 | dependencies: 754 | dot-prop "^4.1.0" 755 | env-paths "^1.0.0" 756 | make-dir "^1.0.0" 757 | pkg-up "^2.0.0" 758 | write-file-atomic "^2.3.0" 759 | 760 | conf@^13.0.0: 761 | version "13.0.1" 762 | resolved "https://registry.yarnpkg.com/conf/-/conf-13.0.1.tgz#a98693789c28507994f06ea0121922dab76591df" 763 | integrity sha512-l9Uwc9eOnz39oADzGO2cSBDi7siv8lwO+31ocQ2nOJijnDiW3pxqm9VV10DPYUO28wW83DjABoUqY1nfHRR2hQ== 764 | dependencies: 765 | ajv "^8.16.0" 766 | ajv-formats "^3.0.1" 767 | atomically "^2.0.3" 768 | debounce-fn "^6.0.0" 769 | dot-prop "^9.0.0" 770 | env-paths "^3.0.0" 771 | json-schema-typed "^8.0.1" 772 | semver "^7.6.2" 773 | uint8array-extras "^1.1.0" 774 | 775 | confusing-browser-globals@^1.0.10: 776 | version "1.0.11" 777 | resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" 778 | integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== 779 | 780 | create-require@^1.1.0: 781 | version "1.1.1" 782 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 783 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 784 | 785 | cross-spawn@^7.0.2: 786 | version "7.0.3" 787 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 788 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 789 | dependencies: 790 | path-key "^3.1.0" 791 | shebang-command "^2.0.0" 792 | which "^2.0.1" 793 | 794 | data-view-buffer@^1.0.1: 795 | version "1.0.1" 796 | resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" 797 | integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== 798 | dependencies: 799 | call-bind "^1.0.6" 800 | es-errors "^1.3.0" 801 | is-data-view "^1.0.1" 802 | 803 | data-view-byte-length@^1.0.1: 804 | version "1.0.1" 805 | resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" 806 | integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== 807 | dependencies: 808 | call-bind "^1.0.7" 809 | es-errors "^1.3.0" 810 | is-data-view "^1.0.1" 811 | 812 | data-view-byte-offset@^1.0.0: 813 | version "1.0.0" 814 | resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" 815 | integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== 816 | dependencies: 817 | call-bind "^1.0.6" 818 | es-errors "^1.3.0" 819 | is-data-view "^1.0.1" 820 | 821 | debounce-fn@^6.0.0: 822 | version "6.0.0" 823 | resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-6.0.0.tgz#558169aed853eb3cf3a17c0a2438e1a91a7ba44f" 824 | integrity sha512-rBMW+F2TXryBwB54Q0d8drNEI+TfoS9JpNTAoVpukbWEhjXQq4rySFYLaqXMFXwdv61Zb2OHtj5bviSoimqxRQ== 825 | dependencies: 826 | mimic-function "^5.0.0" 827 | 828 | debug@^3.2.7: 829 | version "3.2.7" 830 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 831 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 832 | dependencies: 833 | ms "^2.1.1" 834 | 835 | debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: 836 | version "4.3.7" 837 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" 838 | integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== 839 | dependencies: 840 | ms "^2.1.3" 841 | 842 | deep-is@^0.1.3: 843 | version "0.1.4" 844 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 845 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 846 | 847 | define-data-property@^1.0.1, define-data-property@^1.1.4: 848 | version "1.1.4" 849 | resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" 850 | integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== 851 | dependencies: 852 | es-define-property "^1.0.0" 853 | es-errors "^1.3.0" 854 | gopd "^1.0.1" 855 | 856 | define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: 857 | version "1.2.1" 858 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" 859 | integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== 860 | dependencies: 861 | define-data-property "^1.0.1" 862 | has-property-descriptors "^1.0.0" 863 | object-keys "^1.1.1" 864 | 865 | diff@^4.0.1: 866 | version "4.0.2" 867 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 868 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 869 | 870 | dir-glob@^3.0.1: 871 | version "3.0.1" 872 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 873 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 874 | dependencies: 875 | path-type "^4.0.0" 876 | 877 | doctrine@^2.1.0: 878 | version "2.1.0" 879 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" 880 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== 881 | dependencies: 882 | esutils "^2.0.2" 883 | 884 | doctrine@^3.0.0: 885 | version "3.0.0" 886 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 887 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 888 | dependencies: 889 | esutils "^2.0.2" 890 | 891 | dot-prop@^4.1.0: 892 | version "4.2.1" 893 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" 894 | integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== 895 | dependencies: 896 | is-obj "^1.0.0" 897 | 898 | dot-prop@^9.0.0: 899 | version "9.0.0" 900 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-9.0.0.tgz#bae5982fe6dc6b8fddb92efef4f2ddff26779e92" 901 | integrity sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ== 902 | dependencies: 903 | type-fest "^4.18.2" 904 | 905 | electron-config@^2.0.0: 906 | version "2.0.0" 907 | resolved "https://registry.yarnpkg.com/electron-config/-/electron-config-2.0.0.tgz#b00a7d55556d9c1aa59f5eec3bdf446c773425ff" 908 | integrity sha512-5mGwRK4lsAo6tiy4KNF/zUInYpUGr7JJzLA8FHOoqBWV3kkKJWSrDXo4Uk2Ffm5aeQ1o73XuorfkYhaWFV2O4g== 909 | dependencies: 910 | conf "^1.0.0" 911 | 912 | electron-context-menu@^4.0.4: 913 | version "4.0.4" 914 | resolved "https://registry.yarnpkg.com/electron-context-menu/-/electron-context-menu-4.0.4.tgz#a9fb4bd52380cd9bac1f682f0776313db7f94083" 915 | integrity sha512-XPGj35npL8+MG9Lx5ukmK/h8KLmjYJ3e1GvwWKrNZvf2ocv746WXIyltoV1yWtkEPT7g2kQ8hFmu0ZupK5KieA== 916 | dependencies: 917 | cli-truncate "^4.0.0" 918 | electron-dl "^4.0.0" 919 | electron-is-dev "^3.0.1" 920 | 921 | electron-dl@^4.0.0: 922 | version "4.0.0" 923 | resolved "https://registry.yarnpkg.com/electron-dl/-/electron-dl-4.0.0.tgz#413929460cb6bf91257378d262e904787d10e03d" 924 | integrity sha512-USiB9816d2JzKv0LiSbreRfTg5lDk3lWh0vlx/gugCO92ZIJkHVH0UM18EHvKeadErP6Xn4yiTphWzYfbA2Ong== 925 | dependencies: 926 | ext-name "^5.0.0" 927 | pupa "^3.1.0" 928 | unused-filename "^4.0.1" 929 | 930 | electron-is-dev@^3.0.1: 931 | version "3.0.1" 932 | resolved "https://registry.yarnpkg.com/electron-is-dev/-/electron-is-dev-3.0.1.tgz#1cbc79b1dd046787903acd357efdfab6549dc17a" 933 | integrity sha512-8TjjAh8Ec51hUi3o4TaU0mD3GMTOESi866oRNavj9A3IQJ7pmv+MJVmdZBFGw4GFT36X7bkqnuDNYvkQgvyI8Q== 934 | 935 | electron-log@^5.2.0: 936 | version "5.2.0" 937 | resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.2.0.tgz#505716926dfcf9cb3e74f42b1003be6d865bcb88" 938 | integrity sha512-VjLkvaLmbP3AOGOh5Fob9M8bFU0mmeSAb5G2EoTBx+kQLf2XA/0byzjsVGBTHhikbT+m1AB27NEQUv9wX9nM8w== 939 | 940 | electron-store@^10.0.0: 941 | version "10.0.0" 942 | resolved "https://registry.yarnpkg.com/electron-store/-/electron-store-10.0.0.tgz#b6ff4d3a51457a26b394b0deffaf3ff804c8ba91" 943 | integrity sha512-BU/QZh+5twHBprRdLu3YZX/rIarmZzhTNpJvAvqG1/yN0mNCrsMh0kl7bM4xaUKDNRiHz1r7wP/7Prjh7cleIw== 944 | dependencies: 945 | conf "^13.0.0" 946 | type-fest "^4.20.0" 947 | 948 | electron-updater@^6.3.4: 949 | version "6.3.4" 950 | resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-6.3.4.tgz#3934bc89875bb524c2cbbd11041114e97c0c2496" 951 | integrity sha512-uZUo7p1Y53G4tl6Cgw07X1yF8Jlz6zhaL7CQJDZ1fVVkOaBfE2cWtx80avwDVi8jHp+I/FWawrMgTAeCCNIfAg== 952 | dependencies: 953 | builder-util-runtime "9.2.5" 954 | fs-extra "^10.1.0" 955 | js-yaml "^4.1.0" 956 | lazy-val "^1.0.5" 957 | lodash.escaperegexp "^4.1.2" 958 | lodash.isequal "^4.5.0" 959 | semver "^7.6.3" 960 | tiny-typed-emitter "^2.1.0" 961 | 962 | emoji-regex@^10.3.0: 963 | version "10.4.0" 964 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" 965 | integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== 966 | 967 | enhanced-resolve@^5.15.0: 968 | version "5.17.1" 969 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" 970 | integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== 971 | dependencies: 972 | graceful-fs "^4.2.4" 973 | tapable "^2.2.0" 974 | 975 | env-paths@^1.0.0: 976 | version "1.0.0" 977 | resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" 978 | integrity sha512-+6r/UAzikJWJPcQZpBQS+bVmjAMz2BkDP/N4n2Uz1zz8lyw1IHWUeVdh/85gs0dp5A+z76LOQhCZkR6F88mlUw== 979 | 980 | env-paths@^3.0.0: 981 | version "3.0.0" 982 | resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-3.0.0.tgz#2f1e89c2f6dbd3408e1b1711dd82d62e317f58da" 983 | integrity sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A== 984 | 985 | es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: 986 | version "1.23.3" 987 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" 988 | integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== 989 | dependencies: 990 | array-buffer-byte-length "^1.0.1" 991 | arraybuffer.prototype.slice "^1.0.3" 992 | available-typed-arrays "^1.0.7" 993 | call-bind "^1.0.7" 994 | data-view-buffer "^1.0.1" 995 | data-view-byte-length "^1.0.1" 996 | data-view-byte-offset "^1.0.0" 997 | es-define-property "^1.0.0" 998 | es-errors "^1.3.0" 999 | es-object-atoms "^1.0.0" 1000 | es-set-tostringtag "^2.0.3" 1001 | es-to-primitive "^1.2.1" 1002 | function.prototype.name "^1.1.6" 1003 | get-intrinsic "^1.2.4" 1004 | get-symbol-description "^1.0.2" 1005 | globalthis "^1.0.3" 1006 | gopd "^1.0.1" 1007 | has-property-descriptors "^1.0.2" 1008 | has-proto "^1.0.3" 1009 | has-symbols "^1.0.3" 1010 | hasown "^2.0.2" 1011 | internal-slot "^1.0.7" 1012 | is-array-buffer "^3.0.4" 1013 | is-callable "^1.2.7" 1014 | is-data-view "^1.0.1" 1015 | is-negative-zero "^2.0.3" 1016 | is-regex "^1.1.4" 1017 | is-shared-array-buffer "^1.0.3" 1018 | is-string "^1.0.7" 1019 | is-typed-array "^1.1.13" 1020 | is-weakref "^1.0.2" 1021 | object-inspect "^1.13.1" 1022 | object-keys "^1.1.1" 1023 | object.assign "^4.1.5" 1024 | regexp.prototype.flags "^1.5.2" 1025 | safe-array-concat "^1.1.2" 1026 | safe-regex-test "^1.0.3" 1027 | string.prototype.trim "^1.2.9" 1028 | string.prototype.trimend "^1.0.8" 1029 | string.prototype.trimstart "^1.0.8" 1030 | typed-array-buffer "^1.0.2" 1031 | typed-array-byte-length "^1.0.1" 1032 | typed-array-byte-offset "^1.0.2" 1033 | typed-array-length "^1.0.6" 1034 | unbox-primitive "^1.0.2" 1035 | which-typed-array "^1.1.15" 1036 | 1037 | es-define-property@^1.0.0: 1038 | version "1.0.0" 1039 | resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" 1040 | integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== 1041 | dependencies: 1042 | get-intrinsic "^1.2.4" 1043 | 1044 | es-errors@^1.2.1, es-errors@^1.3.0: 1045 | version "1.3.0" 1046 | resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" 1047 | integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== 1048 | 1049 | es-iterator-helpers@^1.0.19: 1050 | version "1.0.19" 1051 | resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" 1052 | integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== 1053 | dependencies: 1054 | call-bind "^1.0.7" 1055 | define-properties "^1.2.1" 1056 | es-abstract "^1.23.3" 1057 | es-errors "^1.3.0" 1058 | es-set-tostringtag "^2.0.3" 1059 | function-bind "^1.1.2" 1060 | get-intrinsic "^1.2.4" 1061 | globalthis "^1.0.3" 1062 | has-property-descriptors "^1.0.2" 1063 | has-proto "^1.0.3" 1064 | has-symbols "^1.0.3" 1065 | internal-slot "^1.0.7" 1066 | iterator.prototype "^1.1.2" 1067 | safe-array-concat "^1.1.2" 1068 | 1069 | es-object-atoms@^1.0.0: 1070 | version "1.0.0" 1071 | resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" 1072 | integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== 1073 | dependencies: 1074 | es-errors "^1.3.0" 1075 | 1076 | es-set-tostringtag@^2.0.3: 1077 | version "2.0.3" 1078 | resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" 1079 | integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== 1080 | dependencies: 1081 | get-intrinsic "^1.2.4" 1082 | has-tostringtag "^1.0.2" 1083 | hasown "^2.0.1" 1084 | 1085 | es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: 1086 | version "1.0.2" 1087 | resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" 1088 | integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== 1089 | dependencies: 1090 | hasown "^2.0.0" 1091 | 1092 | es-to-primitive@^1.2.1: 1093 | version "1.2.1" 1094 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 1095 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 1096 | dependencies: 1097 | is-callable "^1.1.4" 1098 | is-date-object "^1.0.1" 1099 | is-symbol "^1.0.2" 1100 | 1101 | escape-goat@^4.0.0: 1102 | version "4.0.0" 1103 | resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-4.0.0.tgz#9424820331b510b0666b98f7873fe11ac4aa8081" 1104 | integrity sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg== 1105 | 1106 | escape-string-regexp@^1.0.5: 1107 | version "1.0.5" 1108 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1109 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 1110 | 1111 | escape-string-regexp@^4.0.0: 1112 | version "4.0.0" 1113 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 1114 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 1115 | 1116 | escape-string-regexp@^5.0.0: 1117 | version "5.0.0" 1118 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" 1119 | integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== 1120 | 1121 | eslint-config-airbnb-base@^14.2.1: 1122 | version "14.2.1" 1123 | resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e" 1124 | integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA== 1125 | dependencies: 1126 | confusing-browser-globals "^1.0.10" 1127 | object.assign "^4.1.2" 1128 | object.entries "^1.1.2" 1129 | 1130 | eslint-config-prettier@^9.1.0: 1131 | version "9.1.0" 1132 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz#31af3d94578645966c082fcb71a5846d3c94867f" 1133 | integrity sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw== 1134 | 1135 | eslint-import-resolver-node@^0.3.9: 1136 | version "0.3.9" 1137 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" 1138 | integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== 1139 | dependencies: 1140 | debug "^3.2.7" 1141 | is-core-module "^2.13.0" 1142 | resolve "^1.22.4" 1143 | 1144 | eslint-import-resolver-typescript@^3.6.1: 1145 | version "3.6.3" 1146 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz#bb8e388f6afc0f940ce5d2c5fd4a3d147f038d9e" 1147 | integrity sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA== 1148 | dependencies: 1149 | "@nolyfill/is-core-module" "1.0.39" 1150 | debug "^4.3.5" 1151 | enhanced-resolve "^5.15.0" 1152 | eslint-module-utils "^2.8.1" 1153 | fast-glob "^3.3.2" 1154 | get-tsconfig "^4.7.5" 1155 | is-bun-module "^1.0.2" 1156 | is-glob "^4.0.3" 1157 | 1158 | eslint-module-utils@^2.8.1, eslint-module-utils@^2.9.0: 1159 | version "2.11.0" 1160 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.11.0.tgz#b99b211ca4318243f09661fae088f373ad5243c4" 1161 | integrity sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ== 1162 | dependencies: 1163 | debug "^3.2.7" 1164 | 1165 | eslint-plugin-import@^2.29.1: 1166 | version "2.30.0" 1167 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.30.0.tgz#21ceea0fc462657195989dd780e50c92fe95f449" 1168 | integrity sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw== 1169 | dependencies: 1170 | "@rtsao/scc" "^1.1.0" 1171 | array-includes "^3.1.8" 1172 | array.prototype.findlastindex "^1.2.5" 1173 | array.prototype.flat "^1.3.2" 1174 | array.prototype.flatmap "^1.3.2" 1175 | debug "^3.2.7" 1176 | doctrine "^2.1.0" 1177 | eslint-import-resolver-node "^0.3.9" 1178 | eslint-module-utils "^2.9.0" 1179 | hasown "^2.0.2" 1180 | is-core-module "^2.15.1" 1181 | is-glob "^4.0.3" 1182 | minimatch "^3.1.2" 1183 | object.fromentries "^2.0.8" 1184 | object.groupby "^1.0.3" 1185 | object.values "^1.2.0" 1186 | semver "^6.3.1" 1187 | tsconfig-paths "^3.15.0" 1188 | 1189 | eslint-plugin-jest@^28.2.0: 1190 | version "28.8.3" 1191 | resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-28.8.3.tgz#c5699bba0ad06090ad613535e4f1572f4c2567c0" 1192 | integrity sha512-HIQ3t9hASLKm2IhIOqnu+ifw7uLZkIlR7RYNv7fMcEi/p0CIiJmfriStQS2LDkgtY4nyLbIZAD+JL347Yc2ETQ== 1193 | dependencies: 1194 | "@typescript-eslint/utils" "^6.0.0 || ^7.0.0 || ^8.0.0" 1195 | 1196 | eslint-plugin-prettier@^5.1.3: 1197 | version "5.2.1" 1198 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz#d1c8f972d8f60e414c25465c163d16f209411f95" 1199 | integrity sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw== 1200 | dependencies: 1201 | prettier-linter-helpers "^1.0.0" 1202 | synckit "^0.9.1" 1203 | 1204 | eslint-plugin-react@^7.34.1: 1205 | version "7.36.1" 1206 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz#f1dabbb11f3d4ebe8b0cf4e54aff4aee81144ee5" 1207 | integrity sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA== 1208 | dependencies: 1209 | array-includes "^3.1.8" 1210 | array.prototype.findlast "^1.2.5" 1211 | array.prototype.flatmap "^1.3.2" 1212 | array.prototype.tosorted "^1.1.4" 1213 | doctrine "^2.1.0" 1214 | es-iterator-helpers "^1.0.19" 1215 | estraverse "^5.3.0" 1216 | hasown "^2.0.2" 1217 | jsx-ast-utils "^2.4.1 || ^3.0.0" 1218 | minimatch "^3.1.2" 1219 | object.entries "^1.1.8" 1220 | object.fromentries "^2.0.8" 1221 | object.values "^1.2.0" 1222 | prop-types "^15.8.1" 1223 | resolve "^2.0.0-next.5" 1224 | semver "^6.3.1" 1225 | string.prototype.matchall "^4.0.11" 1226 | string.prototype.repeat "^1.0.0" 1227 | 1228 | eslint-plugin-security@^3.0.0: 1229 | version "3.0.1" 1230 | resolved "https://registry.yarnpkg.com/eslint-plugin-security/-/eslint-plugin-security-3.0.1.tgz#bc52904f77c3b74c3942e12bdb0751831a3223d2" 1231 | integrity sha512-XjVGBhtDZJfyuhIxnQ/WMm385RbX3DBu7H1J7HNNhmB2tnGxMeqVSnYv79oAj992ayvIBZghsymwkYFS6cGH4Q== 1232 | dependencies: 1233 | safe-regex "^2.1.1" 1234 | 1235 | eslint-scope@^7.2.2: 1236 | version "7.2.2" 1237 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" 1238 | integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== 1239 | dependencies: 1240 | esrecurse "^4.3.0" 1241 | estraverse "^5.2.0" 1242 | 1243 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: 1244 | version "3.4.3" 1245 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" 1246 | integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== 1247 | 1248 | eslint@^8.57.0: 1249 | version "8.57.1" 1250 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" 1251 | integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== 1252 | dependencies: 1253 | "@eslint-community/eslint-utils" "^4.2.0" 1254 | "@eslint-community/regexpp" "^4.6.1" 1255 | "@eslint/eslintrc" "^2.1.4" 1256 | "@eslint/js" "8.57.1" 1257 | "@humanwhocodes/config-array" "^0.13.0" 1258 | "@humanwhocodes/module-importer" "^1.0.1" 1259 | "@nodelib/fs.walk" "^1.2.8" 1260 | "@ungap/structured-clone" "^1.2.0" 1261 | ajv "^6.12.4" 1262 | chalk "^4.0.0" 1263 | cross-spawn "^7.0.2" 1264 | debug "^4.3.2" 1265 | doctrine "^3.0.0" 1266 | escape-string-regexp "^4.0.0" 1267 | eslint-scope "^7.2.2" 1268 | eslint-visitor-keys "^3.4.3" 1269 | espree "^9.6.1" 1270 | esquery "^1.4.2" 1271 | esutils "^2.0.2" 1272 | fast-deep-equal "^3.1.3" 1273 | file-entry-cache "^6.0.1" 1274 | find-up "^5.0.0" 1275 | glob-parent "^6.0.2" 1276 | globals "^13.19.0" 1277 | graphemer "^1.4.0" 1278 | ignore "^5.2.0" 1279 | imurmurhash "^0.1.4" 1280 | is-glob "^4.0.0" 1281 | is-path-inside "^3.0.3" 1282 | js-yaml "^4.1.0" 1283 | json-stable-stringify-without-jsonify "^1.0.1" 1284 | levn "^0.4.1" 1285 | lodash.merge "^4.6.2" 1286 | minimatch "^3.1.2" 1287 | natural-compare "^1.4.0" 1288 | optionator "^0.9.3" 1289 | strip-ansi "^6.0.1" 1290 | text-table "^0.2.0" 1291 | 1292 | espree@^9.6.0, espree@^9.6.1: 1293 | version "9.6.1" 1294 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" 1295 | integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== 1296 | dependencies: 1297 | acorn "^8.9.0" 1298 | acorn-jsx "^5.3.2" 1299 | eslint-visitor-keys "^3.4.1" 1300 | 1301 | esquery@^1.4.2: 1302 | version "1.6.0" 1303 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" 1304 | integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== 1305 | dependencies: 1306 | estraverse "^5.1.0" 1307 | 1308 | esrecurse@^4.3.0: 1309 | version "4.3.0" 1310 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 1311 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 1312 | dependencies: 1313 | estraverse "^5.2.0" 1314 | 1315 | estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: 1316 | version "5.3.0" 1317 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 1318 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 1319 | 1320 | esutils@^2.0.2: 1321 | version "2.0.3" 1322 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1323 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1324 | 1325 | ext-list@^2.0.0: 1326 | version "2.2.2" 1327 | resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" 1328 | integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== 1329 | dependencies: 1330 | mime-db "^1.28.0" 1331 | 1332 | ext-name@^5.0.0: 1333 | version "5.0.0" 1334 | resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" 1335 | integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== 1336 | dependencies: 1337 | ext-list "^2.0.0" 1338 | sort-keys-length "^1.0.0" 1339 | 1340 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 1341 | version "3.1.3" 1342 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 1343 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 1344 | 1345 | fast-diff@^1.1.2: 1346 | version "1.3.0" 1347 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" 1348 | integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== 1349 | 1350 | fast-glob@^3.2.9, fast-glob@^3.3.2: 1351 | version "3.3.2" 1352 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" 1353 | integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== 1354 | dependencies: 1355 | "@nodelib/fs.stat" "^2.0.2" 1356 | "@nodelib/fs.walk" "^1.2.3" 1357 | glob-parent "^5.1.2" 1358 | merge2 "^1.3.0" 1359 | micromatch "^4.0.4" 1360 | 1361 | fast-json-stable-stringify@^2.0.0: 1362 | version "2.1.0" 1363 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1364 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1365 | 1366 | fast-levenshtein@^2.0.6: 1367 | version "2.0.6" 1368 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1369 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 1370 | 1371 | fast-uri@^3.0.1: 1372 | version "3.0.1" 1373 | resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" 1374 | integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== 1375 | 1376 | fastq@^1.6.0: 1377 | version "1.17.1" 1378 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" 1379 | integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== 1380 | dependencies: 1381 | reusify "^1.0.4" 1382 | 1383 | file-entry-cache@^6.0.1: 1384 | version "6.0.1" 1385 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 1386 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 1387 | dependencies: 1388 | flat-cache "^3.0.4" 1389 | 1390 | fill-range@^7.1.1: 1391 | version "7.1.1" 1392 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" 1393 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 1394 | dependencies: 1395 | to-regex-range "^5.0.1" 1396 | 1397 | find-up@^2.1.0: 1398 | version "2.1.0" 1399 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 1400 | integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== 1401 | dependencies: 1402 | locate-path "^2.0.0" 1403 | 1404 | find-up@^5.0.0: 1405 | version "5.0.0" 1406 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 1407 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 1408 | dependencies: 1409 | locate-path "^6.0.0" 1410 | path-exists "^4.0.0" 1411 | 1412 | flat-cache@^3.0.4: 1413 | version "3.2.0" 1414 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" 1415 | integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== 1416 | dependencies: 1417 | flatted "^3.2.9" 1418 | keyv "^4.5.3" 1419 | rimraf "^3.0.2" 1420 | 1421 | flatted@^3.2.9: 1422 | version "3.3.1" 1423 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" 1424 | integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== 1425 | 1426 | for-each@^0.3.3: 1427 | version "0.3.3" 1428 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" 1429 | integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== 1430 | dependencies: 1431 | is-callable "^1.1.3" 1432 | 1433 | fs-extra@^10.1.0: 1434 | version "10.1.0" 1435 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" 1436 | integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== 1437 | dependencies: 1438 | graceful-fs "^4.2.0" 1439 | jsonfile "^6.0.1" 1440 | universalify "^2.0.0" 1441 | 1442 | fs.realpath@^1.0.0: 1443 | version "1.0.0" 1444 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1445 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 1446 | 1447 | function-bind@^1.1.2: 1448 | version "1.1.2" 1449 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" 1450 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 1451 | 1452 | function.prototype.name@^1.1.6: 1453 | version "1.1.6" 1454 | resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" 1455 | integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== 1456 | dependencies: 1457 | call-bind "^1.0.2" 1458 | define-properties "^1.2.0" 1459 | es-abstract "^1.22.1" 1460 | functions-have-names "^1.2.3" 1461 | 1462 | functions-have-names@^1.2.3: 1463 | version "1.2.3" 1464 | resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" 1465 | integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== 1466 | 1467 | get-east-asian-width@^1.0.0: 1468 | version "1.2.0" 1469 | resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz#5e6ebd9baee6fb8b7b6bd505221065f0cd91f64e" 1470 | integrity sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA== 1471 | 1472 | get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: 1473 | version "1.2.4" 1474 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" 1475 | integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== 1476 | dependencies: 1477 | es-errors "^1.3.0" 1478 | function-bind "^1.1.2" 1479 | has-proto "^1.0.1" 1480 | has-symbols "^1.0.3" 1481 | hasown "^2.0.0" 1482 | 1483 | get-symbol-description@^1.0.2: 1484 | version "1.0.2" 1485 | resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" 1486 | integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== 1487 | dependencies: 1488 | call-bind "^1.0.5" 1489 | es-errors "^1.3.0" 1490 | get-intrinsic "^1.2.4" 1491 | 1492 | get-tsconfig@^4.7.5: 1493 | version "4.8.1" 1494 | resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.8.1.tgz#8995eb391ae6e1638d251118c7b56de7eb425471" 1495 | integrity sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg== 1496 | dependencies: 1497 | resolve-pkg-maps "^1.0.0" 1498 | 1499 | glob-parent@^5.1.2: 1500 | version "5.1.2" 1501 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 1502 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1503 | dependencies: 1504 | is-glob "^4.0.1" 1505 | 1506 | glob-parent@^6.0.2: 1507 | version "6.0.2" 1508 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 1509 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 1510 | dependencies: 1511 | is-glob "^4.0.3" 1512 | 1513 | glob@^7.1.3: 1514 | version "7.2.3" 1515 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1516 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1517 | dependencies: 1518 | fs.realpath "^1.0.0" 1519 | inflight "^1.0.4" 1520 | inherits "2" 1521 | minimatch "^3.1.1" 1522 | once "^1.3.0" 1523 | path-is-absolute "^1.0.0" 1524 | 1525 | globals@^11.1.0: 1526 | version "11.12.0" 1527 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1528 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1529 | 1530 | globals@^13.19.0: 1531 | version "13.24.0" 1532 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" 1533 | integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== 1534 | dependencies: 1535 | type-fest "^0.20.2" 1536 | 1537 | globalthis@^1.0.3: 1538 | version "1.0.4" 1539 | resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" 1540 | integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== 1541 | dependencies: 1542 | define-properties "^1.2.1" 1543 | gopd "^1.0.1" 1544 | 1545 | globby@^11.1.0: 1546 | version "11.1.0" 1547 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 1548 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 1549 | dependencies: 1550 | array-union "^2.1.0" 1551 | dir-glob "^3.0.1" 1552 | fast-glob "^3.2.9" 1553 | ignore "^5.2.0" 1554 | merge2 "^1.4.1" 1555 | slash "^3.0.0" 1556 | 1557 | gopd@^1.0.1: 1558 | version "1.0.1" 1559 | resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" 1560 | integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== 1561 | dependencies: 1562 | get-intrinsic "^1.1.3" 1563 | 1564 | graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: 1565 | version "4.2.11" 1566 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" 1567 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 1568 | 1569 | graphemer@^1.4.0: 1570 | version "1.4.0" 1571 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" 1572 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 1573 | 1574 | has-bigints@^1.0.1, has-bigints@^1.0.2: 1575 | version "1.0.2" 1576 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" 1577 | integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== 1578 | 1579 | has-flag@^3.0.0: 1580 | version "3.0.0" 1581 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1582 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 1583 | 1584 | has-flag@^4.0.0: 1585 | version "4.0.0" 1586 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1587 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1588 | 1589 | has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: 1590 | version "1.0.2" 1591 | resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" 1592 | integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== 1593 | dependencies: 1594 | es-define-property "^1.0.0" 1595 | 1596 | has-proto@^1.0.1, has-proto@^1.0.3: 1597 | version "1.0.3" 1598 | resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" 1599 | integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== 1600 | 1601 | has-symbols@^1.0.2, has-symbols@^1.0.3: 1602 | version "1.0.3" 1603 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 1604 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 1605 | 1606 | has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: 1607 | version "1.0.2" 1608 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" 1609 | integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== 1610 | dependencies: 1611 | has-symbols "^1.0.3" 1612 | 1613 | hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: 1614 | version "2.0.2" 1615 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" 1616 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== 1617 | dependencies: 1618 | function-bind "^1.1.2" 1619 | 1620 | ignore@^5.2.0, ignore@^5.2.4: 1621 | version "5.3.2" 1622 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" 1623 | integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== 1624 | 1625 | import-fresh@^3.2.1: 1626 | version "3.3.0" 1627 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1628 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1629 | dependencies: 1630 | parent-module "^1.0.0" 1631 | resolve-from "^4.0.0" 1632 | 1633 | imurmurhash@^0.1.4: 1634 | version "0.1.4" 1635 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1636 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1637 | 1638 | inflight@^1.0.4: 1639 | version "1.0.6" 1640 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1641 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1642 | dependencies: 1643 | once "^1.3.0" 1644 | wrappy "1" 1645 | 1646 | inherits@2: 1647 | version "2.0.4" 1648 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1649 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1650 | 1651 | internal-slot@^1.0.7: 1652 | version "1.0.7" 1653 | resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" 1654 | integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== 1655 | dependencies: 1656 | es-errors "^1.3.0" 1657 | hasown "^2.0.0" 1658 | side-channel "^1.0.4" 1659 | 1660 | is-array-buffer@^3.0.4: 1661 | version "3.0.4" 1662 | resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" 1663 | integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== 1664 | dependencies: 1665 | call-bind "^1.0.2" 1666 | get-intrinsic "^1.2.1" 1667 | 1668 | is-async-function@^2.0.0: 1669 | version "2.0.0" 1670 | resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" 1671 | integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== 1672 | dependencies: 1673 | has-tostringtag "^1.0.0" 1674 | 1675 | is-bigint@^1.0.1: 1676 | version "1.0.4" 1677 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" 1678 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== 1679 | dependencies: 1680 | has-bigints "^1.0.1" 1681 | 1682 | is-boolean-object@^1.1.0: 1683 | version "1.1.2" 1684 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" 1685 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== 1686 | dependencies: 1687 | call-bind "^1.0.2" 1688 | has-tostringtag "^1.0.0" 1689 | 1690 | is-bun-module@^1.0.2: 1691 | version "1.2.1" 1692 | resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-1.2.1.tgz#495e706f42e29f086fd5fe1ac3c51f106062b9fc" 1693 | integrity sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q== 1694 | dependencies: 1695 | semver "^7.6.3" 1696 | 1697 | is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: 1698 | version "1.2.7" 1699 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" 1700 | integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== 1701 | 1702 | is-core-module@^2.13.0, is-core-module@^2.15.1: 1703 | version "2.15.1" 1704 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" 1705 | integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== 1706 | dependencies: 1707 | hasown "^2.0.2" 1708 | 1709 | is-data-view@^1.0.1: 1710 | version "1.0.1" 1711 | resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" 1712 | integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== 1713 | dependencies: 1714 | is-typed-array "^1.1.13" 1715 | 1716 | is-date-object@^1.0.1, is-date-object@^1.0.5: 1717 | version "1.0.5" 1718 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" 1719 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== 1720 | dependencies: 1721 | has-tostringtag "^1.0.0" 1722 | 1723 | is-extglob@^2.1.1: 1724 | version "2.1.1" 1725 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1726 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1727 | 1728 | is-finalizationregistry@^1.0.2: 1729 | version "1.0.2" 1730 | resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz#c8749b65f17c133313e661b1289b95ad3dbd62e6" 1731 | integrity sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw== 1732 | dependencies: 1733 | call-bind "^1.0.2" 1734 | 1735 | is-fullwidth-code-point@^4.0.0: 1736 | version "4.0.0" 1737 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" 1738 | integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== 1739 | 1740 | is-generator-function@^1.0.10: 1741 | version "1.0.10" 1742 | resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" 1743 | integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== 1744 | dependencies: 1745 | has-tostringtag "^1.0.0" 1746 | 1747 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 1748 | version "4.0.3" 1749 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1750 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1751 | dependencies: 1752 | is-extglob "^2.1.1" 1753 | 1754 | is-map@^2.0.3: 1755 | version "2.0.3" 1756 | resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" 1757 | integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== 1758 | 1759 | is-negative-zero@^2.0.3: 1760 | version "2.0.3" 1761 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" 1762 | integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== 1763 | 1764 | is-number-object@^1.0.4: 1765 | version "1.0.7" 1766 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" 1767 | integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== 1768 | dependencies: 1769 | has-tostringtag "^1.0.0" 1770 | 1771 | is-number@^7.0.0: 1772 | version "7.0.0" 1773 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1774 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1775 | 1776 | is-obj@^1.0.0: 1777 | version "1.0.1" 1778 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 1779 | integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== 1780 | 1781 | is-path-inside@^3.0.3: 1782 | version "3.0.3" 1783 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 1784 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1785 | 1786 | is-plain-obj@^1.0.0: 1787 | version "1.1.0" 1788 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" 1789 | integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== 1790 | 1791 | is-regex@^1.1.4: 1792 | version "1.1.4" 1793 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" 1794 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== 1795 | dependencies: 1796 | call-bind "^1.0.2" 1797 | has-tostringtag "^1.0.0" 1798 | 1799 | is-set@^2.0.3: 1800 | version "2.0.3" 1801 | resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" 1802 | integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== 1803 | 1804 | is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: 1805 | version "1.0.3" 1806 | resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" 1807 | integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== 1808 | dependencies: 1809 | call-bind "^1.0.7" 1810 | 1811 | is-string@^1.0.5, is-string@^1.0.7: 1812 | version "1.0.7" 1813 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" 1814 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== 1815 | dependencies: 1816 | has-tostringtag "^1.0.0" 1817 | 1818 | is-symbol@^1.0.2, is-symbol@^1.0.3: 1819 | version "1.0.4" 1820 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" 1821 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 1822 | dependencies: 1823 | has-symbols "^1.0.2" 1824 | 1825 | is-typed-array@^1.1.13: 1826 | version "1.1.13" 1827 | resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" 1828 | integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== 1829 | dependencies: 1830 | which-typed-array "^1.1.14" 1831 | 1832 | is-weakmap@^2.0.2: 1833 | version "2.0.2" 1834 | resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" 1835 | integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== 1836 | 1837 | is-weakref@^1.0.2: 1838 | version "1.0.2" 1839 | resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" 1840 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== 1841 | dependencies: 1842 | call-bind "^1.0.2" 1843 | 1844 | is-weakset@^2.0.3: 1845 | version "2.0.3" 1846 | resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.3.tgz#e801519df8c0c43e12ff2834eead84ec9e624007" 1847 | integrity sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ== 1848 | dependencies: 1849 | call-bind "^1.0.7" 1850 | get-intrinsic "^1.2.4" 1851 | 1852 | isarray@^2.0.5: 1853 | version "2.0.5" 1854 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" 1855 | integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== 1856 | 1857 | isexe@^2.0.0: 1858 | version "2.0.0" 1859 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1860 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1861 | 1862 | iterator.prototype@^1.1.2: 1863 | version "1.1.2" 1864 | resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" 1865 | integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== 1866 | dependencies: 1867 | define-properties "^1.2.1" 1868 | get-intrinsic "^1.2.1" 1869 | has-symbols "^1.0.3" 1870 | reflect.getprototypeof "^1.0.4" 1871 | set-function-name "^2.0.1" 1872 | 1873 | javascript-natural-sort@0.7.1: 1874 | version "0.7.1" 1875 | resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" 1876 | integrity sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw== 1877 | 1878 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 1879 | version "4.0.0" 1880 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1881 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1882 | 1883 | js-yaml@^4.1.0: 1884 | version "4.1.0" 1885 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1886 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1887 | dependencies: 1888 | argparse "^2.0.1" 1889 | 1890 | jsesc@^2.5.1: 1891 | version "2.5.2" 1892 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1893 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1894 | 1895 | json-buffer@3.0.1: 1896 | version "3.0.1" 1897 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" 1898 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== 1899 | 1900 | json-schema-traverse@^0.4.1: 1901 | version "0.4.1" 1902 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1903 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1904 | 1905 | json-schema-traverse@^1.0.0: 1906 | version "1.0.0" 1907 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" 1908 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 1909 | 1910 | json-schema-typed@^8.0.1: 1911 | version "8.0.1" 1912 | resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-8.0.1.tgz#826ee39e3b6cef536f85412ff048d3ff6f19dfa0" 1913 | integrity sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg== 1914 | 1915 | json-stable-stringify-without-jsonify@^1.0.1: 1916 | version "1.0.1" 1917 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1918 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1919 | 1920 | json5@^1.0.2: 1921 | version "1.0.2" 1922 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" 1923 | integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== 1924 | dependencies: 1925 | minimist "^1.2.0" 1926 | 1927 | json5@^2.2.2: 1928 | version "2.2.3" 1929 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" 1930 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== 1931 | 1932 | jsonfile@^6.0.1: 1933 | version "6.1.0" 1934 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" 1935 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== 1936 | dependencies: 1937 | universalify "^2.0.0" 1938 | optionalDependencies: 1939 | graceful-fs "^4.1.6" 1940 | 1941 | "jsx-ast-utils@^2.4.1 || ^3.0.0": 1942 | version "3.3.5" 1943 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" 1944 | integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== 1945 | dependencies: 1946 | array-includes "^3.1.6" 1947 | array.prototype.flat "^1.3.1" 1948 | object.assign "^4.1.4" 1949 | object.values "^1.1.6" 1950 | 1951 | keyv@^4.5.3: 1952 | version "4.5.4" 1953 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" 1954 | integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== 1955 | dependencies: 1956 | json-buffer "3.0.1" 1957 | 1958 | lazy-val@^1.0.5: 1959 | version "1.0.5" 1960 | resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d" 1961 | integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== 1962 | 1963 | levn@^0.4.1: 1964 | version "0.4.1" 1965 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1966 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1967 | dependencies: 1968 | prelude-ls "^1.2.1" 1969 | type-check "~0.4.0" 1970 | 1971 | locate-path@^2.0.0: 1972 | version "2.0.0" 1973 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 1974 | integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== 1975 | dependencies: 1976 | p-locate "^2.0.0" 1977 | path-exists "^3.0.0" 1978 | 1979 | locate-path@^6.0.0: 1980 | version "6.0.0" 1981 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1982 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1983 | dependencies: 1984 | p-locate "^5.0.0" 1985 | 1986 | lodash.escaperegexp@^4.1.2: 1987 | version "4.1.2" 1988 | resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" 1989 | integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== 1990 | 1991 | lodash.isequal@^4.5.0: 1992 | version "4.5.0" 1993 | resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" 1994 | integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== 1995 | 1996 | lodash.merge@^4.6.2: 1997 | version "4.6.2" 1998 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1999 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 2000 | 2001 | lodash@^4.17.21: 2002 | version "4.17.21" 2003 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 2004 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 2005 | 2006 | loose-envify@^1.4.0: 2007 | version "1.4.0" 2008 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 2009 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 2010 | dependencies: 2011 | js-tokens "^3.0.0 || ^4.0.0" 2012 | 2013 | make-dir@^1.0.0: 2014 | version "1.3.0" 2015 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" 2016 | integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== 2017 | dependencies: 2018 | pify "^3.0.0" 2019 | 2020 | make-error@^1.1.1: 2021 | version "1.3.6" 2022 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 2023 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 2024 | 2025 | merge2@^1.3.0, merge2@^1.4.1: 2026 | version "1.4.1" 2027 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 2028 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 2029 | 2030 | micromatch@^4.0.4: 2031 | version "4.0.8" 2032 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" 2033 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== 2034 | dependencies: 2035 | braces "^3.0.3" 2036 | picomatch "^2.3.1" 2037 | 2038 | mime-db@^1.28.0: 2039 | version "1.53.0" 2040 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" 2041 | integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== 2042 | 2043 | mimic-function@^5.0.0: 2044 | version "5.0.1" 2045 | resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" 2046 | integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== 2047 | 2048 | minimatch@9.0.3: 2049 | version "9.0.3" 2050 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" 2051 | integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== 2052 | dependencies: 2053 | brace-expansion "^2.0.1" 2054 | 2055 | minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 2056 | version "3.1.2" 2057 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 2058 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 2059 | dependencies: 2060 | brace-expansion "^1.1.7" 2061 | 2062 | minimatch@^9.0.4: 2063 | version "9.0.5" 2064 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" 2065 | integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== 2066 | dependencies: 2067 | brace-expansion "^2.0.1" 2068 | 2069 | minimist@^1.2.0, minimist@^1.2.6: 2070 | version "1.2.8" 2071 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" 2072 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 2073 | 2074 | ms@^2.1.1, ms@^2.1.3: 2075 | version "2.1.3" 2076 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 2077 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 2078 | 2079 | natural-compare@^1.4.0: 2080 | version "1.4.0" 2081 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 2082 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 2083 | 2084 | object-assign@^4.1.1: 2085 | version "4.1.1" 2086 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 2087 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 2088 | 2089 | object-inspect@^1.13.1: 2090 | version "1.13.2" 2091 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" 2092 | integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== 2093 | 2094 | object-keys@^1.1.1: 2095 | version "1.1.1" 2096 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 2097 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 2098 | 2099 | object.assign@^4.1.2, object.assign@^4.1.4, object.assign@^4.1.5: 2100 | version "4.1.5" 2101 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" 2102 | integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== 2103 | dependencies: 2104 | call-bind "^1.0.5" 2105 | define-properties "^1.2.1" 2106 | has-symbols "^1.0.3" 2107 | object-keys "^1.1.1" 2108 | 2109 | object.entries@^1.1.2, object.entries@^1.1.8: 2110 | version "1.1.8" 2111 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" 2112 | integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== 2113 | dependencies: 2114 | call-bind "^1.0.7" 2115 | define-properties "^1.2.1" 2116 | es-object-atoms "^1.0.0" 2117 | 2118 | object.fromentries@^2.0.8: 2119 | version "2.0.8" 2120 | resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" 2121 | integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== 2122 | dependencies: 2123 | call-bind "^1.0.7" 2124 | define-properties "^1.2.1" 2125 | es-abstract "^1.23.2" 2126 | es-object-atoms "^1.0.0" 2127 | 2128 | object.groupby@^1.0.3: 2129 | version "1.0.3" 2130 | resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" 2131 | integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== 2132 | dependencies: 2133 | call-bind "^1.0.7" 2134 | define-properties "^1.2.1" 2135 | es-abstract "^1.23.2" 2136 | 2137 | object.values@^1.1.6, object.values@^1.2.0: 2138 | version "1.2.0" 2139 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" 2140 | integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== 2141 | dependencies: 2142 | call-bind "^1.0.7" 2143 | define-properties "^1.2.1" 2144 | es-object-atoms "^1.0.0" 2145 | 2146 | once@^1.3.0: 2147 | version "1.4.0" 2148 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2149 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 2150 | dependencies: 2151 | wrappy "1" 2152 | 2153 | optionator@^0.9.3: 2154 | version "0.9.4" 2155 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" 2156 | integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== 2157 | dependencies: 2158 | deep-is "^0.1.3" 2159 | fast-levenshtein "^2.0.6" 2160 | levn "^0.4.1" 2161 | prelude-ls "^1.2.1" 2162 | type-check "^0.4.0" 2163 | word-wrap "^1.2.5" 2164 | 2165 | p-limit@^1.1.0: 2166 | version "1.3.0" 2167 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 2168 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 2169 | dependencies: 2170 | p-try "^1.0.0" 2171 | 2172 | p-limit@^3.0.2: 2173 | version "3.1.0" 2174 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 2175 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 2176 | dependencies: 2177 | yocto-queue "^0.1.0" 2178 | 2179 | p-locate@^2.0.0: 2180 | version "2.0.0" 2181 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 2182 | integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== 2183 | dependencies: 2184 | p-limit "^1.1.0" 2185 | 2186 | p-locate@^5.0.0: 2187 | version "5.0.0" 2188 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 2189 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 2190 | dependencies: 2191 | p-limit "^3.0.2" 2192 | 2193 | p-try@^1.0.0: 2194 | version "1.0.0" 2195 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 2196 | integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== 2197 | 2198 | parent-module@^1.0.0: 2199 | version "1.0.1" 2200 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 2201 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 2202 | dependencies: 2203 | callsites "^3.0.0" 2204 | 2205 | path-exists@^3.0.0: 2206 | version "3.0.0" 2207 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 2208 | integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== 2209 | 2210 | path-exists@^4.0.0: 2211 | version "4.0.0" 2212 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 2213 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 2214 | 2215 | path-exists@^5.0.0: 2216 | version "5.0.0" 2217 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" 2218 | integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== 2219 | 2220 | path-is-absolute@^1.0.0: 2221 | version "1.0.1" 2222 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2223 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 2224 | 2225 | path-key@^3.1.0: 2226 | version "3.1.1" 2227 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 2228 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 2229 | 2230 | path-parse@^1.0.7: 2231 | version "1.0.7" 2232 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 2233 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 2234 | 2235 | path-type@^4.0.0: 2236 | version "4.0.0" 2237 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 2238 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 2239 | 2240 | picocolors@^1.0.0: 2241 | version "1.1.0" 2242 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" 2243 | integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== 2244 | 2245 | picomatch@^2.3.1: 2246 | version "2.3.1" 2247 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 2248 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 2249 | 2250 | pify@^3.0.0: 2251 | version "3.0.0" 2252 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 2253 | integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== 2254 | 2255 | pkg-up@^2.0.0: 2256 | version "2.0.0" 2257 | resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" 2258 | integrity sha512-fjAPuiws93rm7mPUu21RdBnkeZNrbfCFCwfAhPWY+rR3zG0ubpe5cEReHOw5fIbfmsxEV/g2kSxGTATY3Bpnwg== 2259 | dependencies: 2260 | find-up "^2.1.0" 2261 | 2262 | possible-typed-array-names@^1.0.0: 2263 | version "1.0.0" 2264 | resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" 2265 | integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== 2266 | 2267 | prelude-ls@^1.2.1: 2268 | version "1.2.1" 2269 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 2270 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 2271 | 2272 | prettier-linter-helpers@^1.0.0: 2273 | version "1.0.0" 2274 | resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" 2275 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== 2276 | dependencies: 2277 | fast-diff "^1.1.2" 2278 | 2279 | prettier@^3.2.5: 2280 | version "3.3.3" 2281 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" 2282 | integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== 2283 | 2284 | prop-types@^15.8.1: 2285 | version "15.8.1" 2286 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" 2287 | integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== 2288 | dependencies: 2289 | loose-envify "^1.4.0" 2290 | object-assign "^4.1.1" 2291 | react-is "^16.13.1" 2292 | 2293 | punycode@^2.1.0: 2294 | version "2.3.1" 2295 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" 2296 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== 2297 | 2298 | pupa@^3.1.0: 2299 | version "3.1.0" 2300 | resolved "https://registry.yarnpkg.com/pupa/-/pupa-3.1.0.tgz#f15610274376bbcc70c9a3aa8b505ea23f41c579" 2301 | integrity sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug== 2302 | dependencies: 2303 | escape-goat "^4.0.0" 2304 | 2305 | queue-microtask@^1.2.2: 2306 | version "1.2.3" 2307 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 2308 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 2309 | 2310 | react-is@^16.13.1: 2311 | version "16.13.1" 2312 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 2313 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 2314 | 2315 | reflect.getprototypeof@^1.0.4: 2316 | version "1.0.6" 2317 | resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" 2318 | integrity sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg== 2319 | dependencies: 2320 | call-bind "^1.0.7" 2321 | define-properties "^1.2.1" 2322 | es-abstract "^1.23.1" 2323 | es-errors "^1.3.0" 2324 | get-intrinsic "^1.2.4" 2325 | globalthis "^1.0.3" 2326 | which-builtin-type "^1.1.3" 2327 | 2328 | regexp-tree@~0.1.1: 2329 | version "0.1.27" 2330 | resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" 2331 | integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== 2332 | 2333 | regexp.prototype.flags@^1.5.2: 2334 | version "1.5.2" 2335 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" 2336 | integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== 2337 | dependencies: 2338 | call-bind "^1.0.6" 2339 | define-properties "^1.2.1" 2340 | es-errors "^1.3.0" 2341 | set-function-name "^2.0.1" 2342 | 2343 | require-from-string@^2.0.2: 2344 | version "2.0.2" 2345 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 2346 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 2347 | 2348 | resolve-from@^4.0.0: 2349 | version "4.0.0" 2350 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 2351 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 2352 | 2353 | resolve-pkg-maps@^1.0.0: 2354 | version "1.0.0" 2355 | resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" 2356 | integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== 2357 | 2358 | resolve@^1.22.4: 2359 | version "1.22.8" 2360 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" 2361 | integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== 2362 | dependencies: 2363 | is-core-module "^2.13.0" 2364 | path-parse "^1.0.7" 2365 | supports-preserve-symlinks-flag "^1.0.0" 2366 | 2367 | resolve@^2.0.0-next.5: 2368 | version "2.0.0-next.5" 2369 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" 2370 | integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== 2371 | dependencies: 2372 | is-core-module "^2.13.0" 2373 | path-parse "^1.0.7" 2374 | supports-preserve-symlinks-flag "^1.0.0" 2375 | 2376 | reusify@^1.0.4: 2377 | version "1.0.4" 2378 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 2379 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 2380 | 2381 | rimraf@^3.0.2: 2382 | version "3.0.2" 2383 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 2384 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 2385 | dependencies: 2386 | glob "^7.1.3" 2387 | 2388 | run-parallel@^1.1.9: 2389 | version "1.2.0" 2390 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 2391 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 2392 | dependencies: 2393 | queue-microtask "^1.2.2" 2394 | 2395 | safe-array-concat@^1.1.2: 2396 | version "1.1.2" 2397 | resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" 2398 | integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== 2399 | dependencies: 2400 | call-bind "^1.0.7" 2401 | get-intrinsic "^1.2.4" 2402 | has-symbols "^1.0.3" 2403 | isarray "^2.0.5" 2404 | 2405 | safe-regex-test@^1.0.3: 2406 | version "1.0.3" 2407 | resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" 2408 | integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== 2409 | dependencies: 2410 | call-bind "^1.0.6" 2411 | es-errors "^1.3.0" 2412 | is-regex "^1.1.4" 2413 | 2414 | safe-regex@^2.1.1: 2415 | version "2.1.1" 2416 | resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-2.1.1.tgz#f7128f00d056e2fe5c11e81a1324dd974aadced2" 2417 | integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== 2418 | dependencies: 2419 | regexp-tree "~0.1.1" 2420 | 2421 | sax@^1.2.4: 2422 | version "1.4.1" 2423 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" 2424 | integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== 2425 | 2426 | semver@^6.3.1: 2427 | version "6.3.1" 2428 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" 2429 | integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== 2430 | 2431 | semver@^7.5.4, semver@^7.6.0, semver@^7.6.2, semver@^7.6.3: 2432 | version "7.6.3" 2433 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" 2434 | integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== 2435 | 2436 | set-function-length@^1.2.1: 2437 | version "1.2.2" 2438 | resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" 2439 | integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== 2440 | dependencies: 2441 | define-data-property "^1.1.4" 2442 | es-errors "^1.3.0" 2443 | function-bind "^1.1.2" 2444 | get-intrinsic "^1.2.4" 2445 | gopd "^1.0.1" 2446 | has-property-descriptors "^1.0.2" 2447 | 2448 | set-function-name@^2.0.1, set-function-name@^2.0.2: 2449 | version "2.0.2" 2450 | resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" 2451 | integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== 2452 | dependencies: 2453 | define-data-property "^1.1.4" 2454 | es-errors "^1.3.0" 2455 | functions-have-names "^1.2.3" 2456 | has-property-descriptors "^1.0.2" 2457 | 2458 | shebang-command@^2.0.0: 2459 | version "2.0.0" 2460 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2461 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2462 | dependencies: 2463 | shebang-regex "^3.0.0" 2464 | 2465 | shebang-regex@^3.0.0: 2466 | version "3.0.0" 2467 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2468 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2469 | 2470 | side-channel@^1.0.4, side-channel@^1.0.6: 2471 | version "1.0.6" 2472 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" 2473 | integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== 2474 | dependencies: 2475 | call-bind "^1.0.7" 2476 | es-errors "^1.3.0" 2477 | get-intrinsic "^1.2.4" 2478 | object-inspect "^1.13.1" 2479 | 2480 | signal-exit@^3.0.2: 2481 | version "3.0.7" 2482 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 2483 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 2484 | 2485 | slash@^3.0.0: 2486 | version "3.0.0" 2487 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2488 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2489 | 2490 | slice-ansi@^5.0.0: 2491 | version "5.0.0" 2492 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" 2493 | integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== 2494 | dependencies: 2495 | ansi-styles "^6.0.0" 2496 | is-fullwidth-code-point "^4.0.0" 2497 | 2498 | sort-keys-length@^1.0.0: 2499 | version "1.0.1" 2500 | resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" 2501 | integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw== 2502 | dependencies: 2503 | sort-keys "^1.0.0" 2504 | 2505 | sort-keys@^1.0.0: 2506 | version "1.1.2" 2507 | resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" 2508 | integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== 2509 | dependencies: 2510 | is-plain-obj "^1.0.0" 2511 | 2512 | source-map@^0.5.0: 2513 | version "0.5.7" 2514 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 2515 | integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== 2516 | 2517 | string-width@^7.0.0: 2518 | version "7.2.0" 2519 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" 2520 | integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== 2521 | dependencies: 2522 | emoji-regex "^10.3.0" 2523 | get-east-asian-width "^1.0.0" 2524 | strip-ansi "^7.1.0" 2525 | 2526 | string.prototype.matchall@^4.0.11: 2527 | version "4.0.11" 2528 | resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" 2529 | integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== 2530 | dependencies: 2531 | call-bind "^1.0.7" 2532 | define-properties "^1.2.1" 2533 | es-abstract "^1.23.2" 2534 | es-errors "^1.3.0" 2535 | es-object-atoms "^1.0.0" 2536 | get-intrinsic "^1.2.4" 2537 | gopd "^1.0.1" 2538 | has-symbols "^1.0.3" 2539 | internal-slot "^1.0.7" 2540 | regexp.prototype.flags "^1.5.2" 2541 | set-function-name "^2.0.2" 2542 | side-channel "^1.0.6" 2543 | 2544 | string.prototype.repeat@^1.0.0: 2545 | version "1.0.0" 2546 | resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" 2547 | integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== 2548 | dependencies: 2549 | define-properties "^1.1.3" 2550 | es-abstract "^1.17.5" 2551 | 2552 | string.prototype.trim@^1.2.9: 2553 | version "1.2.9" 2554 | resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" 2555 | integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== 2556 | dependencies: 2557 | call-bind "^1.0.7" 2558 | define-properties "^1.2.1" 2559 | es-abstract "^1.23.0" 2560 | es-object-atoms "^1.0.0" 2561 | 2562 | string.prototype.trimend@^1.0.8: 2563 | version "1.0.8" 2564 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" 2565 | integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== 2566 | dependencies: 2567 | call-bind "^1.0.7" 2568 | define-properties "^1.2.1" 2569 | es-object-atoms "^1.0.0" 2570 | 2571 | string.prototype.trimstart@^1.0.8: 2572 | version "1.0.8" 2573 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" 2574 | integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== 2575 | dependencies: 2576 | call-bind "^1.0.7" 2577 | define-properties "^1.2.1" 2578 | es-object-atoms "^1.0.0" 2579 | 2580 | strip-ansi@^6.0.1: 2581 | version "6.0.1" 2582 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 2583 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 2584 | dependencies: 2585 | ansi-regex "^5.0.1" 2586 | 2587 | strip-ansi@^7.1.0: 2588 | version "7.1.0" 2589 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" 2590 | integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== 2591 | dependencies: 2592 | ansi-regex "^6.0.1" 2593 | 2594 | strip-bom@^3.0.0: 2595 | version "3.0.0" 2596 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 2597 | integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== 2598 | 2599 | strip-json-comments@^3.1.1: 2600 | version "3.1.1" 2601 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2602 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2603 | 2604 | stubborn-fs@^1.2.5: 2605 | version "1.2.5" 2606 | resolved "https://registry.yarnpkg.com/stubborn-fs/-/stubborn-fs-1.2.5.tgz#e5e244223166921ddf66ed5e062b6b3bf285bfd2" 2607 | integrity sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g== 2608 | 2609 | supports-color@^5.3.0: 2610 | version "5.5.0" 2611 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2612 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2613 | dependencies: 2614 | has-flag "^3.0.0" 2615 | 2616 | supports-color@^7.1.0: 2617 | version "7.2.0" 2618 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2619 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2620 | dependencies: 2621 | has-flag "^4.0.0" 2622 | 2623 | supports-preserve-symlinks-flag@^1.0.0: 2624 | version "1.0.0" 2625 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 2626 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 2627 | 2628 | synckit@^0.9.1: 2629 | version "0.9.1" 2630 | resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.1.tgz#febbfbb6649979450131f64735aa3f6c14575c88" 2631 | integrity sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A== 2632 | dependencies: 2633 | "@pkgr/core" "^0.1.0" 2634 | tslib "^2.6.2" 2635 | 2636 | tapable@^2.2.0: 2637 | version "2.2.1" 2638 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" 2639 | integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== 2640 | 2641 | text-table@^0.2.0: 2642 | version "0.2.0" 2643 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2644 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 2645 | 2646 | tiny-typed-emitter@^2.1.0: 2647 | version "2.1.0" 2648 | resolved "https://registry.yarnpkg.com/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz#b3b027fdd389ff81a152c8e847ee2f5be9fad7b5" 2649 | integrity sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA== 2650 | 2651 | to-fast-properties@^2.0.0: 2652 | version "2.0.0" 2653 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2654 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 2655 | 2656 | to-regex-range@^5.0.1: 2657 | version "5.0.1" 2658 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2659 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2660 | dependencies: 2661 | is-number "^7.0.0" 2662 | 2663 | ts-api-utils@^1.0.1, ts-api-utils@^1.3.0: 2664 | version "1.3.0" 2665 | resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" 2666 | integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== 2667 | 2668 | ts-node@10.9.2: 2669 | version "10.9.2" 2670 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" 2671 | integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== 2672 | dependencies: 2673 | "@cspotcode/source-map-support" "^0.8.0" 2674 | "@tsconfig/node10" "^1.0.7" 2675 | "@tsconfig/node12" "^1.0.7" 2676 | "@tsconfig/node14" "^1.0.0" 2677 | "@tsconfig/node16" "^1.0.2" 2678 | acorn "^8.4.1" 2679 | acorn-walk "^8.1.1" 2680 | arg "^4.1.0" 2681 | create-require "^1.1.0" 2682 | diff "^4.0.1" 2683 | make-error "^1.1.1" 2684 | v8-compile-cache-lib "^3.0.1" 2685 | yn "3.1.1" 2686 | 2687 | tsconfig-paths@4.2.0: 2688 | version "4.2.0" 2689 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" 2690 | integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== 2691 | dependencies: 2692 | json5 "^2.2.2" 2693 | minimist "^1.2.6" 2694 | strip-bom "^3.0.0" 2695 | 2696 | tsconfig-paths@^3.15.0: 2697 | version "3.15.0" 2698 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" 2699 | integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== 2700 | dependencies: 2701 | "@types/json5" "^0.0.29" 2702 | json5 "^1.0.2" 2703 | minimist "^1.2.6" 2704 | strip-bom "^3.0.0" 2705 | 2706 | tslib@^2.6.2: 2707 | version "2.7.0" 2708 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" 2709 | integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== 2710 | 2711 | type-check@^0.4.0, type-check@~0.4.0: 2712 | version "0.4.0" 2713 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 2714 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 2715 | dependencies: 2716 | prelude-ls "^1.2.1" 2717 | 2718 | type-fest@^0.20.2: 2719 | version "0.20.2" 2720 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 2721 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 2722 | 2723 | type-fest@^4.18.2, type-fest@^4.20.0: 2724 | version "4.26.1" 2725 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.26.1.tgz#a4a17fa314f976dd3e6d6675ef6c775c16d7955e" 2726 | integrity sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg== 2727 | 2728 | typed-array-buffer@^1.0.2: 2729 | version "1.0.2" 2730 | resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" 2731 | integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== 2732 | dependencies: 2733 | call-bind "^1.0.7" 2734 | es-errors "^1.3.0" 2735 | is-typed-array "^1.1.13" 2736 | 2737 | typed-array-byte-length@^1.0.1: 2738 | version "1.0.1" 2739 | resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" 2740 | integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== 2741 | dependencies: 2742 | call-bind "^1.0.7" 2743 | for-each "^0.3.3" 2744 | gopd "^1.0.1" 2745 | has-proto "^1.0.3" 2746 | is-typed-array "^1.1.13" 2747 | 2748 | typed-array-byte-offset@^1.0.2: 2749 | version "1.0.2" 2750 | resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" 2751 | integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== 2752 | dependencies: 2753 | available-typed-arrays "^1.0.7" 2754 | call-bind "^1.0.7" 2755 | for-each "^0.3.3" 2756 | gopd "^1.0.1" 2757 | has-proto "^1.0.3" 2758 | is-typed-array "^1.1.13" 2759 | 2760 | typed-array-length@^1.0.6: 2761 | version "1.0.6" 2762 | resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" 2763 | integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== 2764 | dependencies: 2765 | call-bind "^1.0.7" 2766 | for-each "^0.3.3" 2767 | gopd "^1.0.1" 2768 | has-proto "^1.0.3" 2769 | is-typed-array "^1.1.13" 2770 | possible-typed-array-names "^1.0.0" 2771 | 2772 | uint8array-extras@^1.1.0: 2773 | version "1.4.0" 2774 | resolved "https://registry.yarnpkg.com/uint8array-extras/-/uint8array-extras-1.4.0.tgz#e42a678a6dd335ec2d21661333ed42f44ae7cc74" 2775 | integrity sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ== 2776 | 2777 | unbox-primitive@^1.0.2: 2778 | version "1.0.2" 2779 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" 2780 | integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== 2781 | dependencies: 2782 | call-bind "^1.0.2" 2783 | has-bigints "^1.0.2" 2784 | has-symbols "^1.0.3" 2785 | which-boxed-primitive "^1.0.2" 2786 | 2787 | universalify@^2.0.0: 2788 | version "2.0.1" 2789 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" 2790 | integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== 2791 | 2792 | unused-filename@^4.0.1: 2793 | version "4.0.1" 2794 | resolved "https://registry.yarnpkg.com/unused-filename/-/unused-filename-4.0.1.tgz#3e7285db0f3ec94fb2b089dd220a3b269b226914" 2795 | integrity sha512-ZX6U1J04K1FoSUeoX1OicAhw4d0aro2qo+L8RhJkiGTNtBNkd/Fi1Wxoc9HzcVu6HfOzm0si/N15JjxFmD1z6A== 2796 | dependencies: 2797 | escape-string-regexp "^5.0.0" 2798 | path-exists "^5.0.0" 2799 | 2800 | uri-js@^4.2.2: 2801 | version "4.4.1" 2802 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2803 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2804 | dependencies: 2805 | punycode "^2.1.0" 2806 | 2807 | v8-compile-cache-lib@^3.0.1: 2808 | version "3.0.1" 2809 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" 2810 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 2811 | 2812 | when-exit@^2.1.1: 2813 | version "2.1.3" 2814 | resolved "https://registry.yarnpkg.com/when-exit/-/when-exit-2.1.3.tgz#5831cdbed8ad4984645da98c4a00d4ee3a3757e7" 2815 | integrity sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw== 2816 | 2817 | which-boxed-primitive@^1.0.2: 2818 | version "1.0.2" 2819 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" 2820 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 2821 | dependencies: 2822 | is-bigint "^1.0.1" 2823 | is-boolean-object "^1.1.0" 2824 | is-number-object "^1.0.4" 2825 | is-string "^1.0.5" 2826 | is-symbol "^1.0.3" 2827 | 2828 | which-builtin-type@^1.1.3: 2829 | version "1.1.4" 2830 | resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" 2831 | integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== 2832 | dependencies: 2833 | function.prototype.name "^1.1.6" 2834 | has-tostringtag "^1.0.2" 2835 | is-async-function "^2.0.0" 2836 | is-date-object "^1.0.5" 2837 | is-finalizationregistry "^1.0.2" 2838 | is-generator-function "^1.0.10" 2839 | is-regex "^1.1.4" 2840 | is-weakref "^1.0.2" 2841 | isarray "^2.0.5" 2842 | which-boxed-primitive "^1.0.2" 2843 | which-collection "^1.0.2" 2844 | which-typed-array "^1.1.15" 2845 | 2846 | which-collection@^1.0.2: 2847 | version "1.0.2" 2848 | resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" 2849 | integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== 2850 | dependencies: 2851 | is-map "^2.0.3" 2852 | is-set "^2.0.3" 2853 | is-weakmap "^2.0.2" 2854 | is-weakset "^2.0.3" 2855 | 2856 | which-typed-array@^1.1.14, which-typed-array@^1.1.15: 2857 | version "1.1.15" 2858 | resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" 2859 | integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== 2860 | dependencies: 2861 | available-typed-arrays "^1.0.7" 2862 | call-bind "^1.0.7" 2863 | for-each "^0.3.3" 2864 | gopd "^1.0.1" 2865 | has-tostringtag "^1.0.2" 2866 | 2867 | which@^2.0.1: 2868 | version "2.0.2" 2869 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2870 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2871 | dependencies: 2872 | isexe "^2.0.0" 2873 | 2874 | word-wrap@^1.2.5: 2875 | version "1.2.5" 2876 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" 2877 | integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== 2878 | 2879 | wrappy@1: 2880 | version "1.0.2" 2881 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2882 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 2883 | 2884 | write-file-atomic@^2.3.0: 2885 | version "2.4.3" 2886 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" 2887 | integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== 2888 | dependencies: 2889 | graceful-fs "^4.1.11" 2890 | imurmurhash "^0.1.4" 2891 | signal-exit "^3.0.2" 2892 | 2893 | yn@3.1.1: 2894 | version "3.1.1" 2895 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 2896 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 2897 | 2898 | yocto-queue@^0.1.0: 2899 | version "0.1.0" 2900 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2901 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2902 | -------------------------------------------------------------------------------- /packages/renderer/app.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/playcode/playcode-desktop/8427383069990369715c0b19c21a3e144c332374/packages/renderer/app.css -------------------------------------------------------------------------------- /packages/renderer/renderer.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/playcode/playcode-desktop/8427383069990369715c0b19c21a3e144c332374/packages/renderer/renderer.js -------------------------------------------------------------------------------- /test/test.js: -------------------------------------------------------------------------------- 1 | const assert = require('assert') 2 | const electron = require('electron') 3 | const Application = require('spectron').Application 4 | 5 | const app = new Application({ 6 | path: electron, 7 | args: ['app'] 8 | }) 9 | 10 | describe('App Testing:', function () { 11 | this.timeout(10000) 12 | 13 | beforeEach(() => { 14 | return app.start() 15 | }) 16 | 17 | it('Window Tests', () => { 18 | app.start().then(() => { 19 | // Check if the window is visible 20 | return app.browserWindow.isVisible() 21 | }).then(isVisible => { 22 | // Verify the window is visible 23 | assert.equal(isVisible, true) 24 | }).then(() => { 25 | // Get the window's title 26 | return app.client.getTitle() 27 | }).then(title => { 28 | // Verify the window's title 29 | assert.equal(title, 'Playcode') 30 | }).then(() => { 31 | // Stop the application 32 | return app.stop() 33 | }).catch(err => { 34 | // Log any failures 35 | console.err('Test failed', err.message) 36 | }) 37 | }) 38 | 39 | afterEach(() => { 40 | if (app && app.isRunning()) { 41 | return app.stop() 42 | } 43 | }) 44 | }) 45 | --------------------------------------------------------------------------------