├── .eslintrc.json ├── .gitignore ├── .husky ├── .gitignore └── pre-commit ├── .prettierrc.json ├── LICENSE.md ├── README.md ├── dist ├── index.d.ts ├── index.js └── nui-events │ ├── context │ ├── NuiContext.d.ts │ └── NuiContext.js │ ├── hooks │ ├── useNuiCallback.d.ts │ ├── useNuiCallback.js │ ├── useNuiEvent.d.ts │ ├── useNuiEvent.js │ ├── useNuiRequest.d.ts │ └── useNuiRequest.js │ ├── providers │ ├── NuiProvider.d.ts │ └── NuiProvider.js │ └── utils │ ├── eventNameFactory.d.ts │ └── eventNameFactory.js ├── lib └── ui │ ├── index.ts │ └── nui-events │ ├── context │ └── NuiContext.ts │ ├── hooks │ ├── useNuiCallback.ts │ ├── useNuiEvent.ts │ └── useNuiRequest.ts │ ├── providers │ └── NuiProvider.tsx │ └── utils │ └── eventNameFactory.ts ├── package.json ├── tsconfig.json └── yarn.lock /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "es2021": true 5 | }, 6 | "extends": ["eslint:recommended", "plugin:react/recommended", "plugin:@typescript-eslint/recommended"], 7 | "parser": "@typescript-eslint/parser", 8 | "parserOptions": { 9 | "ecmaFeatures": { 10 | "jsx": true 11 | }, 12 | "ecmaVersion": 12, 13 | "sourceType": "module" 14 | }, 15 | "plugins": ["react", "@typescript-eslint", "react-hooks"], 16 | "rules": { 17 | "react-hooks/rules-of-hooks": "error", 18 | "react-hooks/exhaustive-deps": "error", 19 | "no-console": "warn" 20 | }, 21 | "ignorePatterns": ["dist/**/*"] 22 | } 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | npx lint-staged 5 | npx lint-staged 6 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "printWidth": 120 4 | } 5 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # GNU General Public License 2 | 3 | _Version 3, 29 June 2007_ 4 | _Copyright © 2007 Free Software Foundation, Inc. <>_ 5 | 6 | Everyone is permitted to copy and distribute verbatim copies of this license 7 | document, but changing it is not allowed. 8 | 9 | ## Preamble 10 | 11 | The GNU General Public License is a free, copyleft license for software and other 12 | kinds of works. 13 | 14 | The licenses for most software and other practical works are designed to take away 15 | your freedom to share and change the works. By contrast, the GNU General Public 16 | License is intended to guarantee your freedom to share and change all versions of a 17 | program--to make sure it remains free software for all its users. We, the Free 18 | Software Foundation, use the GNU General Public License for most of our software; it 19 | applies also to 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 price. Our General 23 | Public Licenses are designed to make sure that you have the freedom to distribute 24 | copies of free software (and charge for them if you wish), that you receive source 25 | code or can get it if you want it, that you can change the software or use pieces of 26 | it in new free programs, and that you know you can do these things. 27 | 28 | To protect your rights, we need to prevent others from denying you these rights or 29 | asking you to surrender the rights. Therefore, you have certain responsibilities if 30 | you distribute copies of the software, or if you modify it: responsibilities to 31 | respect the freedom of others. 32 | 33 | For example, if you distribute copies of such a program, whether gratis or for a fee, 34 | you must pass on to the recipients the same freedoms that you received. You must make 35 | sure that they, too, receive or can get the source code. And you must show them these 36 | terms so they know their rights. 37 | 38 | Developers that use the GNU GPL protect your rights with two steps: **(1)** assert 39 | copyright on the software, and **(2)** offer you this License giving you legal permission 40 | to copy, distribute and/or modify it. 41 | 42 | For the developers' and authors' protection, the GPL clearly explains that there is 43 | no warranty for this free software. For both users' and authors' sake, the GPL 44 | requires that modified versions be marked as changed, so that their problems will not 45 | be attributed erroneously to authors of previous versions. 46 | 47 | Some devices are designed to deny users access to install or run modified versions of 48 | the software inside them, although the manufacturer can do so. This is fundamentally 49 | incompatible with the aim of protecting users' freedom to change the software. The 50 | systematic pattern of such abuse occurs in the area of products for individuals to 51 | use, which is precisely where it is most unacceptable. Therefore, we have designed 52 | this version of the GPL to prohibit the practice for those products. If such problems 53 | arise substantially in other domains, we stand ready to extend this provision to 54 | those domains in future versions of the GPL, as needed to protect the freedom of 55 | users. 56 | 57 | Finally, every program is threatened constantly by software patents. States should 58 | not allow patents to restrict development and use of software on general-purpose 59 | computers, but in those that do, we wish to avoid the special danger that patents 60 | applied to a free program could make it effectively proprietary. To prevent this, the 61 | GPL assures that patents cannot be used to render the program non-free. 62 | 63 | The precise terms and conditions for copying, distribution and modification follow. 64 | 65 | ## TERMS AND CONDITIONS 66 | 67 | ### 0. Definitions 68 | 69 | “This License” refers to version 3 of the GNU General Public License. 70 | 71 | “Copyright” also means copyright-like laws that apply to other kinds of 72 | works, such as semiconductor masks. 73 | 74 | “The Program” refers to any copyrightable work licensed under this 75 | License. Each licensee is addressed as “you”. “Licensees” and 76 | “recipients” may be individuals or organizations. 77 | 78 | To “modify” a work means to copy from or adapt all or part of the work in 79 | a fashion requiring copyright permission, other than the making of an exact copy. The 80 | resulting work is called a “modified version” of the earlier work or a 81 | work “based on” the earlier work. 82 | 83 | A “covered work” means either the unmodified Program or a work based on 84 | the Program. 85 | 86 | To “propagate” a work means to do anything with it that, without 87 | permission, would make you directly or secondarily liable for infringement under 88 | applicable copyright law, except executing it on a computer or modifying a private 89 | copy. Propagation includes copying, distribution (with or without modification), 90 | making available to the public, and in some countries other activities as well. 91 | 92 | To “convey” a work means any kind of propagation that enables other 93 | parties to make or receive copies. Mere interaction with a user through a computer 94 | network, with no transfer of a copy, is not conveying. 95 | 96 | An interactive user interface displays “Appropriate Legal Notices” to the 97 | extent that it includes a convenient and prominently visible feature that **(1)** 98 | displays an appropriate copyright notice, and **(2)** tells the user that there is no 99 | warranty for the work (except to the extent that warranties are provided), that 100 | licensees may convey the work under this License, and how to view a copy of this 101 | License. If the interface presents a list of user commands or options, such as a 102 | menu, a prominent item in the list meets this criterion. 103 | 104 | ### 1. Source Code 105 | 106 | The “source code” for a work means the preferred form of the work for 107 | making modifications to it. “Object code” means any non-source form of a 108 | work. 109 | 110 | A “Standard Interface” means an interface that either is an official 111 | standard defined by a recognized standards body, or, in the case of interfaces 112 | specified for a particular programming language, one that is widely used among 113 | developers working in that language. 114 | 115 | The “System Libraries” of an executable work include anything, other than 116 | the work as a whole, that **(a)** is included in the normal form of packaging a Major 117 | Component, but which is not part of that Major Component, and **(b)** serves only to 118 | enable use of the work with that Major Component, or to implement a Standard 119 | Interface for which an implementation is available to the public in source code form. 120 | A “Major Component”, in this context, means a major essential component 121 | (kernel, window system, and so on) of the specific operating system (if any) on which 122 | the executable work runs, or a compiler used to produce the work, or an object code 123 | interpreter used to run it. 124 | 125 | The “Corresponding Source” for a work in object code form means all the 126 | source code needed to generate, install, and (for an executable work) run the object 127 | code and to modify the work, including scripts to control those activities. However, 128 | it does not include the work's System Libraries, or general-purpose tools or 129 | generally available free programs which are used unmodified in performing those 130 | activities but which are not part of the work. For example, Corresponding Source 131 | includes interface definition files associated with source files for the work, and 132 | the source code for shared libraries and dynamically linked subprograms that the work 133 | is specifically designed to require, such as by intimate data communication or 134 | control flow between those subprograms and other parts of the work. 135 | 136 | The Corresponding Source need not include anything that users can regenerate 137 | automatically from other parts of the Corresponding Source. 138 | 139 | The Corresponding Source for a work in source code form is that same work. 140 | 141 | ### 2. Basic Permissions 142 | 143 | All rights granted under this License are granted for the term of copyright on the 144 | Program, and are irrevocable provided the stated conditions are met. This License 145 | explicitly affirms your unlimited permission to run the unmodified Program. The 146 | output from running a covered work is covered by this License only if the output, 147 | given its content, constitutes a covered work. This License acknowledges your rights 148 | of fair use or other equivalent, as provided by copyright law. 149 | 150 | You may make, run and propagate covered works that you do not convey, without 151 | conditions so long as your license otherwise remains in force. You may convey covered 152 | works to others for the sole purpose of having them make modifications exclusively 153 | for you, or provide you with facilities for running those works, provided that you 154 | comply with the terms of this License in conveying all material for which you do not 155 | control copyright. Those thus making or running the covered works for you must do so 156 | exclusively on your behalf, under your direction and control, on terms that prohibit 157 | them from making any copies of your copyrighted material outside their relationship 158 | with you. 159 | 160 | Conveying under any other circumstances is permitted solely under the conditions 161 | stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 162 | 163 | ### 3. Protecting Users' Legal Rights From Anti-Circumvention Law 164 | 165 | No covered work shall be deemed part of an effective technological measure under any 166 | applicable law fulfilling obligations under article 11 of the WIPO copyright treaty 167 | adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention 168 | of such measures. 169 | 170 | When you convey a covered work, you waive any legal power to forbid circumvention of 171 | technological measures to the extent such circumvention is effected by exercising 172 | rights under this License with respect to the covered work, and you disclaim any 173 | intention to limit operation or modification of the work as a means of enforcing, 174 | against the work's users, your or third parties' legal rights to forbid circumvention 175 | of technological measures. 176 | 177 | ### 4. Conveying Verbatim Copies 178 | 179 | You may convey verbatim copies of the Program's source code as you receive it, in any 180 | medium, provided that you conspicuously and appropriately publish on each copy an 181 | appropriate copyright notice; keep intact all notices stating that this License and 182 | any non-permissive terms added in accord with section 7 apply to the code; keep 183 | intact all notices of the absence of any warranty; and give all recipients a copy of 184 | this License along with the Program. 185 | 186 | You may charge any price or no price for each copy that you convey, and you may offer 187 | support or warranty protection for a fee. 188 | 189 | ### 5. Conveying Modified Source Versions 190 | 191 | You may convey a work based on the Program, or the modifications to produce it from 192 | the Program, in the form of source code under the terms of section 4, provided that 193 | you also meet all of these conditions: 194 | 195 | - **a)** The work must carry prominent notices stating that you modified it, and giving a 196 | relevant date. 197 | - **b)** The work must carry prominent notices stating that it is released under this 198 | License and any conditions added under section 7. This requirement modifies the 199 | requirement in section 4 to “keep intact all notices”. 200 | - **c)** You must license the entire work, as a whole, under this License to anyone who 201 | comes into possession of a copy. This License will therefore apply, along with any 202 | applicable section 7 additional terms, to the whole of the work, and all its parts, 203 | regardless of how they are packaged. This License gives no permission to license the 204 | work in any other way, but it does not invalidate such permission if you have 205 | separately received it. 206 | - **d)** If the work has interactive user interfaces, each must display Appropriate Legal 207 | Notices; however, if the Program has interactive interfaces that do not display 208 | Appropriate Legal Notices, your work need not make them do so. 209 | 210 | A compilation of a covered work with other separate and independent works, which are 211 | not by their nature extensions of the covered work, and which are not combined with 212 | it such as to form a larger program, in or on a volume of a storage or distribution 213 | medium, is called an “aggregate” if the compilation and its resulting 214 | copyright are not used to limit the access or legal rights of the compilation's users 215 | beyond what the individual works permit. Inclusion of a covered work in an aggregate 216 | does not cause this License to apply to the other parts of the aggregate. 217 | 218 | ### 6. Conveying Non-Source Forms 219 | 220 | You may convey a covered work in object code form under the terms of sections 4 and 221 | 5, provided that you also convey the machine-readable Corresponding Source under the 222 | terms of this License, in one of these ways: 223 | 224 | - **a)** Convey the object code in, or embodied in, a physical product (including a 225 | physical distribution medium), accompanied by the Corresponding Source fixed on a 226 | durable physical medium customarily used for software interchange. 227 | - **b)** Convey the object code in, or embodied in, a physical product (including a 228 | physical distribution medium), accompanied by a written offer, valid for at least 229 | three years and valid for as long as you offer spare parts or customer support for 230 | that product model, to give anyone who possesses the object code either **(1)** a copy of 231 | the Corresponding Source for all the software in the product that is covered by this 232 | License, on a durable physical medium customarily used for software interchange, for 233 | a price no more than your reasonable cost of physically performing this conveying of 234 | source, or **(2)** access to copy the Corresponding Source from a network server at no 235 | charge. 236 | - **c)** Convey individual copies of the object code with a copy of the written offer to 237 | provide the Corresponding Source. This alternative is allowed only occasionally and 238 | noncommercially, and only if you received the object code with such an offer, in 239 | accord with subsection 6b. 240 | - **d)** Convey the object code by offering access from a designated place (gratis or for 241 | a charge), and offer equivalent access to the Corresponding Source in the same way 242 | through the same place at no further charge. You need not require recipients to copy 243 | the Corresponding Source along with the object code. If the place to copy the object 244 | code is a network server, the Corresponding Source may be on a different server 245 | (operated by you or a third party) that supports equivalent copying facilities, 246 | provided you maintain clear directions next to the object code saying where to find 247 | the Corresponding Source. Regardless of what server hosts the Corresponding Source, 248 | you remain obligated to ensure that it is available for as long as needed to satisfy 249 | these requirements. 250 | - **e)** Convey the object code using peer-to-peer transmission, provided you inform 251 | other peers where the object code and Corresponding Source of the work are being 252 | offered to the general public at no charge under subsection 6d. 253 | 254 | A separable portion of the object code, whose source code is excluded from the 255 | Corresponding Source as a System Library, need not be included in conveying the 256 | object code work. 257 | 258 | A “User Product” is either **(1)** a “consumer product”, which 259 | means any tangible personal property which is normally used for personal, family, or 260 | household purposes, or **(2)** anything designed or sold for incorporation into a 261 | dwelling. In determining whether a product is a consumer product, doubtful cases 262 | shall be resolved in favor of coverage. For a particular product received by a 263 | particular user, “normally used” refers to a typical or common use of 264 | that class of product, regardless of the status of the particular user or of the way 265 | in which the particular user actually uses, or expects or is expected to use, the 266 | product. A product is a consumer product regardless of whether the product has 267 | substantial commercial, industrial or non-consumer uses, unless such uses represent 268 | the only significant mode of use of the product. 269 | 270 | “Installation Information” for a User Product means any methods, 271 | procedures, authorization keys, or other information required to install and execute 272 | modified versions of a covered work in that User Product from a modified version of 273 | its Corresponding Source. The information must suffice to ensure that the continued 274 | functioning of the modified object code is in no case prevented or interfered with 275 | solely because modification has been made. 276 | 277 | If you convey an object code work under this section in, or with, or specifically for 278 | use in, a User Product, and the conveying occurs as part of a transaction in which 279 | the right of possession and use of the User Product is transferred to the recipient 280 | in perpetuity or for a fixed term (regardless of how the transaction is 281 | characterized), the Corresponding Source conveyed under this section must be 282 | accompanied by the Installation Information. But this requirement does not apply if 283 | neither you nor any third party retains the ability to install modified object code 284 | on the User Product (for example, the work has been installed in ROM). 285 | 286 | The requirement to provide Installation Information does not include a requirement to 287 | continue to provide support service, warranty, or updates for a work that has been 288 | modified or installed by the recipient, or for the User Product in which it has been 289 | modified or installed. Access to a network may be denied when the modification itself 290 | materially and adversely affects the operation of the network or violates the rules 291 | and protocols for communication across the network. 292 | 293 | Corresponding Source conveyed, and Installation Information provided, in accord with 294 | this section must be in a format that is publicly documented (and with an 295 | implementation available to the public in source code form), and must require no 296 | special password or key for unpacking, reading or copying. 297 | 298 | ### 7. Additional Terms 299 | 300 | “Additional permissions” are terms that supplement the terms of this 301 | License by making exceptions from one or more of its conditions. Additional 302 | permissions that are applicable to the entire Program shall be treated as though they 303 | were included in this License, to the extent that they are valid under applicable 304 | law. If additional permissions apply only to part of the Program, that part may be 305 | used separately under those permissions, but the entire Program remains governed by 306 | this License without regard to the additional permissions. 307 | 308 | When you convey a copy of a covered work, you may at your option remove any 309 | additional permissions from that copy, or from any part of it. (Additional 310 | permissions may be written to require their own removal in certain cases when you 311 | modify the work.) You may place additional permissions on material, added by you to a 312 | covered work, for which you have or can give appropriate copyright permission. 313 | 314 | Notwithstanding any other provision of this License, for material you add to a 315 | covered work, you may (if authorized by the copyright holders of that material) 316 | supplement the terms of this License with terms: 317 | 318 | - **a)** Disclaiming warranty or limiting liability differently from the terms of 319 | sections 15 and 16 of this License; or 320 | - **b)** Requiring preservation of specified reasonable legal notices or author 321 | attributions in that material or in the Appropriate Legal Notices displayed by works 322 | containing it; or 323 | - **c)** Prohibiting misrepresentation of the origin of that material, or requiring that 324 | modified versions of such material be marked in reasonable ways as different from the 325 | original version; or 326 | - **d)** Limiting the use for publicity purposes of names of licensors or authors of the 327 | material; or 328 | - **e)** Declining to grant rights under trademark law for use of some trade names, 329 | trademarks, or service marks; or 330 | - **f)** Requiring indemnification of licensors and authors of that material by anyone 331 | who conveys the material (or modified versions of it) with contractual assumptions of 332 | liability to the recipient, for any liability that these contractual assumptions 333 | directly impose on those licensors and authors. 334 | 335 | All other non-permissive additional terms are considered “further 336 | restrictions” within the meaning of section 10. If the Program as you received 337 | it, or any part of it, contains a notice stating that it is governed by this License 338 | along with a term that is a further restriction, you may remove that term. If a 339 | license document contains a further restriction but permits relicensing or conveying 340 | under this License, you may add to a covered work material governed by the terms of 341 | that license document, provided that the further restriction does not survive such 342 | relicensing or conveying. 343 | 344 | If you add terms to a covered work in accord with this section, you must place, in 345 | the relevant source files, a statement of the additional terms that apply to those 346 | files, or a notice indicating where to find the applicable terms. 347 | 348 | Additional terms, permissive or non-permissive, may be stated in the form of a 349 | separately written license, or stated as exceptions; the above requirements apply 350 | either way. 351 | 352 | ### 8. Termination 353 | 354 | You may not propagate or modify a covered work except as expressly provided under 355 | this License. Any attempt otherwise to propagate or modify it is void, and will 356 | automatically terminate your rights under this License (including any patent licenses 357 | granted under the third paragraph of section 11). 358 | 359 | However, if you cease all violation of this License, then your license from a 360 | particular copyright holder is reinstated **(a)** provisionally, unless and until the 361 | copyright holder explicitly and finally terminates your license, and **(b)** permanently, 362 | if the copyright holder fails to notify you of the violation by some reasonable means 363 | prior to 60 days after the cessation. 364 | 365 | Moreover, your license from a particular copyright holder is reinstated permanently 366 | if the copyright holder notifies you of the violation by some reasonable means, this 367 | is the first time you have received notice of violation of this License (for any 368 | work) from that copyright holder, and you cure the violation prior to 30 days after 369 | your receipt of the notice. 370 | 371 | Termination of your rights under this section does not terminate the licenses of 372 | parties who have received copies or rights from you under this License. If your 373 | rights have been terminated and not permanently reinstated, you do not qualify to 374 | receive new licenses for the same material under section 10. 375 | 376 | ### 9. Acceptance Not Required for Having Copies 377 | 378 | You are not required to accept this License in order to receive or run a copy of the 379 | Program. Ancillary propagation of a covered work occurring solely as a consequence of 380 | using peer-to-peer transmission to receive a copy likewise does not require 381 | acceptance. However, nothing other than this License grants you permission to 382 | propagate or modify any covered work. These actions infringe copyright if you do not 383 | accept this License. Therefore, by modifying or propagating a covered work, you 384 | indicate your acceptance of this License to do so. 385 | 386 | ### 10. Automatic Licensing of Downstream Recipients 387 | 388 | Each time you convey a covered work, the recipient automatically receives a license 389 | from the original licensors, to run, modify and propagate that work, subject to this 390 | License. You are not responsible for enforcing compliance by third parties with this 391 | License. 392 | 393 | An “entity transaction” is a transaction transferring control of an 394 | organization, or substantially all assets of one, or subdividing an organization, or 395 | merging organizations. If propagation of a covered work results from an entity 396 | transaction, each party to that transaction who receives a copy of the work also 397 | receives whatever licenses to the work the party's predecessor in interest had or 398 | could give under the previous paragraph, plus a right to possession of the 399 | Corresponding Source of the work from the predecessor in interest, if the predecessor 400 | has it or can get it with reasonable efforts. 401 | 402 | You may not impose any further restrictions on the exercise of the rights granted or 403 | affirmed under this License. For example, you may not impose a license fee, royalty, 404 | or other charge for exercise of rights granted under this License, and you may not 405 | initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging 406 | that any patent claim is infringed by making, using, selling, offering for sale, or 407 | importing the Program or any portion of it. 408 | 409 | ### 11. Patents 410 | 411 | A “contributor” is a copyright holder who authorizes use under this 412 | License of the Program or a work on which the Program is based. The work thus 413 | licensed is called the contributor's “contributor version”. 414 | 415 | A contributor's “essential patent claims” are all patent claims owned or 416 | controlled by the contributor, whether already acquired or hereafter acquired, that 417 | would be infringed by some manner, permitted by this License, of making, using, or 418 | selling its contributor version, but do not include claims that would be infringed 419 | only as a consequence of further modification of the contributor version. For 420 | purposes of this definition, “control” includes the right to grant patent 421 | sublicenses in a manner consistent with the requirements of this License. 422 | 423 | Each contributor grants you a non-exclusive, worldwide, royalty-free patent license 424 | under the contributor's essential patent claims, to make, use, sell, offer for sale, 425 | import and otherwise run, modify and propagate the contents of its contributor 426 | version. 427 | 428 | In the following three paragraphs, a “patent license” is any express 429 | agreement or commitment, however denominated, not to enforce a patent (such as an 430 | express permission to practice a patent or covenant not to sue for patent 431 | infringement). To “grant” such a patent license to a party means to make 432 | such an agreement or commitment not to enforce a patent against the party. 433 | 434 | If you convey a covered work, knowingly relying on a patent license, and the 435 | Corresponding Source of the work is not available for anyone to copy, free of charge 436 | and under the terms of this License, through a publicly available network server or 437 | other readily accessible means, then you must either **(1)** cause the Corresponding 438 | Source to be so available, or **(2)** arrange to deprive yourself of the benefit of the 439 | patent license for this particular work, or **(3)** arrange, in a manner consistent with 440 | the requirements of this License, to extend the patent license to downstream 441 | recipients. “Knowingly relying” means you have actual knowledge that, but 442 | for the patent license, your conveying the covered work in a country, or your 443 | recipient's use of the covered work in a country, would infringe one or more 444 | identifiable patents in that country that you have reason to believe are valid. 445 | 446 | If, pursuant to or in connection with a single transaction or arrangement, you 447 | convey, or propagate by procuring conveyance of, a covered work, and grant a patent 448 | license to some of the parties receiving the covered work authorizing them to use, 449 | propagate, modify or convey a specific copy of the covered work, then the patent 450 | license you grant is automatically extended to all recipients of the covered work and 451 | works based on it. 452 | 453 | A patent license is “discriminatory” if it does not include within the 454 | scope of its coverage, prohibits the exercise of, or is conditioned on the 455 | non-exercise of one or more of the rights that are specifically granted under this 456 | License. You may not convey a covered work if you are a party to an arrangement with 457 | a third party that is in the business of distributing software, under which you make 458 | payment to the third party based on the extent of your activity of conveying the 459 | work, and under which the third party grants, to any of the parties who would receive 460 | the covered work from you, a discriminatory patent license **(a)** in connection with 461 | copies of the covered work conveyed by you (or copies made from those copies), or **(b)** 462 | primarily for and in connection with specific products or compilations that contain 463 | the covered work, unless you entered into that arrangement, or that patent license 464 | was granted, prior to 28 March 2007. 465 | 466 | Nothing in this License shall be construed as excluding or limiting any implied 467 | license or other defenses to infringement that may otherwise be available to you 468 | under applicable patent law. 469 | 470 | ### 12. No Surrender of Others' Freedom 471 | 472 | If conditions are imposed on you (whether by court order, agreement or otherwise) 473 | that contradict the conditions of this License, they do not excuse you from the 474 | conditions of this License. If you cannot convey a covered work so as to satisfy 475 | simultaneously your obligations under this License and any other pertinent 476 | obligations, then as a consequence you may not convey it at all. For example, if you 477 | agree to terms that obligate you to collect a royalty for further conveying from 478 | those to whom you convey the Program, the only way you could satisfy both those terms 479 | and this License would be to refrain entirely from conveying the Program. 480 | 481 | ### 13. Use with the GNU Affero General Public License 482 | 483 | Notwithstanding any other provision of this License, you have permission to link or 484 | combine any covered work with a work licensed under version 3 of the GNU Affero 485 | General Public License into a single combined work, and to convey the resulting work. 486 | The terms of this License will continue to apply to the part which is the covered 487 | work, but the special requirements of the GNU Affero General Public License, section 488 | 13, concerning interaction through a network will apply to the combination as such. 489 | 490 | ### 14. Revised Versions of this License 491 | 492 | The Free Software Foundation may publish revised and/or new versions of the GNU 493 | General Public License from time to time. Such new versions will be similar in spirit 494 | to the present version, but may differ in detail to address new problems or concerns. 495 | 496 | Each version is given a distinguishing version number. If the Program specifies that 497 | a certain numbered version of the GNU General Public License “or any later 498 | version” applies to it, you have the option of following the terms and 499 | conditions either of that numbered version or of any later version published by the 500 | Free Software Foundation. If the Program does not specify a version number of the GNU 501 | General Public License, you may choose any version ever published by the Free 502 | Software Foundation. 503 | 504 | If the Program specifies that a proxy can decide which future versions of the GNU 505 | General Public License can be used, that proxy's public statement of acceptance of a 506 | version permanently authorizes you to choose that version for the Program. 507 | 508 | Later license versions may give you additional or different permissions. However, no 509 | additional obligations are imposed on any author or copyright holder as a result of 510 | your choosing to follow a later version. 511 | 512 | ### 15. Disclaimer of Warranty 513 | 514 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. 515 | EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 516 | PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER 517 | EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 518 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE 519 | QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE 520 | DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 521 | 522 | ### 16. Limitation of Liability 523 | 524 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY 525 | COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS 526 | PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, 527 | INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE 528 | PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE 529 | OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE 530 | WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 531 | POSSIBILITY OF SUCH DAMAGES. 532 | 533 | ### 17. Interpretation of Sections 15 and 16 534 | 535 | If the disclaimer of warranty and limitation of liability provided above cannot be 536 | given local legal effect according to their terms, reviewing courts shall apply local 537 | law that most closely approximates an absolute waiver of all civil liability in 538 | connection with the Program, unless a warranty or assumption of liability accompanies 539 | a copy of the Program in return for a fee. 540 | 541 | _END OF TERMS AND CONDITIONS_ 542 | 543 | ## How to Apply These Terms to Your New Programs 544 | 545 | If you develop a new program, and you want it to be of the greatest possible use to 546 | the public, the best way to achieve this is to make it free software which everyone 547 | can redistribute and change under these terms. 548 | 549 | To do so, attach the following notices to the program. It is safest to attach them 550 | to the start of each source file to most effectively state the exclusion of warranty; 551 | and each file should have at least the “copyright” line and a pointer to 552 | where the full notice is found. 553 | 554 | fivem-nui-react-lib - A set of tools for using FiveM NUI events in React 555 | Copyright (C) 2021 fran 556 | 557 | This program is free software: you can redistribute it and/or modify 558 | it under the terms of the GNU General Public License as published by 559 | the Free Software Foundation, either version 3 of the License, or 560 | (at your option) any later version. 561 | 562 | This program is distributed in the hope that it will be useful, 563 | but WITHOUT ANY WARRANTY; without even the implied warranty of 564 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 565 | GNU General Public License for more details. 566 | 567 | You should have received a copy of the GNU General Public License 568 | along with this program. If not, see . 569 | 570 | Also add information on how to contact you by electronic and paper mail. 571 | 572 | If the program does terminal interaction, make it output a short notice like this 573 | when it starts in an interactive mode: 574 | 575 | fivem-nui-react-lib - A set of tools for using FiveM NUI events in React 576 | Copyright (C) 2021 fran 577 | This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. 578 | This is free software, and you are welcome to redistribute it 579 | under certain conditions; type 'show c' for details. 580 | 581 | The hypothetical commands `show w` and `show c` should show the appropriate parts of 582 | the General Public License. Of course, your program's commands might be different; 583 | for a GUI interface, you would use an “about box”. 584 | 585 | You should also get your employer (if you work as a programmer) or school, if any, to 586 | sign a “copyright disclaimer” for the program, if necessary. For more 587 | information on this, and how to apply and follow the GNU GPL, see 588 | <>. 589 | 590 | The GNU General Public License does not permit incorporating your program into 591 | proprietary programs. If your program is a subroutine library, you may consider it 592 | more useful to permit linking proprietary applications with the library. If this is 593 | what you want to do, use the GNU Lesser General Public License instead of this 594 | License. But first, please read 595 | <>. 596 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # fivem-nui-react-lib 2 | 3 | A (very opinionated) set of tools for using FiveM NUI events in React 4 | 5 | # example 6 | 7 | https://github.com/jfrader/fivem-nui-react-boilerplate 8 | 9 | # usage 10 | 11 | ### install 12 | 13 | `npm install --save fivem-nui-react-lib` 14 | 15 | ### provider 16 | 17 | You need a provider to set the resource name for events 18 | 19 | ```js 20 | import { NuiProvider } from "fivem-nui-react-lib"; 21 | 22 | function App() { 23 | return ( 24 | 25 |
This is my app
26 |
27 | ); 28 | } 29 | ``` 30 | 31 | ### useNuiEvent 32 | 33 | This library receives the following schema on NUI events 34 | 35 | ```js 36 | { 37 | app: 'app-name', // can be always the same or change to differenciate events better on the UI 38 | method: 'method-name', // the actual event name which is sent to NUI 39 | data: 'response' // the response which will be handled from the UI 40 | } 41 | ``` 42 | 43 | Receive events from client and set your state 44 | 45 | ```js 46 | // UI 47 | import { useNuiEvent } from "fivem-nui-react-lib"; 48 | 49 | function MyComponent() { 50 | const [myState, setMyState] = useState(false); 51 | useNuiEvent("app-name", "method-name", setMyState); 52 | } 53 | ``` 54 | 55 | ```js 56 | // CLIENT 57 | sendNuiMessage( 58 | JSON.stringify({ 59 | app: "app-name", 60 | method: "method-name", 61 | data: true, // myState will be set as true in this example 62 | }) 63 | ); 64 | ``` 65 | 66 | ### useNuiRequest 67 | 68 | Send requests to client 69 | 70 | ```js 71 | // UI 72 | import { useNuiRequest } from "fivem-nui-react-lib"; 73 | 74 | function MyComponent() { 75 | const { send } = useNuiRequest(); 76 | send("method-name", { myArgument: "isAwesome" }); 77 | } 78 | ``` 79 | 80 | ```js 81 | // CLIENT 82 | RegisterNuiCallbackType(`myEvent`); 83 | on(`__cfx_nui:myEvent`, (data, cb) => { 84 | // Use the arguments 85 | emitNet("myEvent", { input: data.myArgument }); 86 | // Callback to prevent errors 87 | cb(); 88 | }); 89 | ``` 90 | 91 | Send requests to another resoruce, overriding provider 92 | 93 | ```js 94 | // UI 95 | import { useNuiRequest } from "fivem-nui-react-lib"; 96 | 97 | function MyComponent() { 98 | const { send } = useNuiRequest({ resource: "another-resource" }); 99 | send("method-name", { myArgument: "isAwesome" }); 100 | } 101 | ``` 102 | 103 | ### useNuiCallback 104 | 105 | Make a callback to "myEvent" by sending back "myEventSuccess" or "myEventError" from the client 106 | 107 | ```js 108 | // UI 109 | import { useNuiCallback } from "fivem-nui-react-lib"; 110 | 111 | function MyComponent() { 112 | const [myState, setMyState] = useState(null); 113 | const [error, setError] = useState(null); 114 | const [fetchMyMethod, { loading }] = useNuiCallback("app-name", "myEvent", setMyState, setError); 115 | 116 | useEffect(() => { 117 | fetchMyMethod({ argument: 1 }); 118 | }, [fetchMyMethod]); 119 | } 120 | ``` 121 | 122 | ```js 123 | // CLIENT 124 | RegisterNuiCallbackType(`myEvent`); 125 | on(`__cfx_nui:myEvent`, (data, cb) => { 126 | // emit some event to the server: 127 | emitNet("myEvent", { input: data }); 128 | // callback so you prevent errors 129 | cb(); 130 | }); 131 | 132 | // ... on success 133 | sendNuiMessage( 134 | JSON.stringify({ 135 | app: "app-name", 136 | method: "myEventSuccess", 137 | data: true, 138 | }) 139 | ); 140 | 141 | // ... on error 142 | sendNuiMessage( 143 | JSON.stringify({ 144 | app: "app-name", 145 | method: "myEventError", 146 | data: true, 147 | }) 148 | ); 149 | ``` 150 | 151 | The example above will request myEvent to the client and be in loading state until client sends back either myEventSuccess or myEventError. 152 | After one of those are received, the handlers will be executed (setMyState if success, setError if errored). 153 | If no event is received after the timeout time, it will throw as timeout error. 154 | 155 | # contributions 156 | 157 | Feel free to contribute and/or suggest changes. 158 | 159 | # license 160 | 161 | fivem-nui-react-lib - A set of tools for using FiveM NUI events in React 162 | 163 | Copyright (C) 2023 Fran 164 | 165 | This program is free software: you can redistribute it and/or modify 166 | it under the terms of the GNU General Public License as published by 167 | the Free Software Foundation, either version 3 of the License, or 168 | (at your option) any later version. 169 | 170 | This program is distributed in the hope that it will be useful, 171 | but WITHOUT ANY WARRANTY; without even the implied warranty of 172 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 173 | GNU General Public License for more details. 174 | 175 | You should have received a copy of the GNU General Public License 176 | along with this program. If not, see . 177 | -------------------------------------------------------------------------------- /dist/index.d.ts: -------------------------------------------------------------------------------- 1 | export * from "./nui-events/hooks/useNuiEvent"; 2 | export * from "./nui-events/hooks/useNuiCallback"; 3 | export * from "./nui-events/hooks/useNuiRequest"; 4 | export * from "./nui-events/context/NuiContext"; 5 | export * from "./nui-events/providers/NuiProvider"; 6 | export * from "./nui-events/utils/eventNameFactory"; 7 | -------------------------------------------------------------------------------- /dist/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 3 | if (k2 === undefined) k2 = k; 4 | Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); 5 | }) : (function(o, m, k, k2) { 6 | if (k2 === undefined) k2 = k; 7 | o[k2] = m[k]; 8 | })); 9 | var __exportStar = (this && this.__exportStar) || function(m, exports) { 10 | for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); 11 | }; 12 | Object.defineProperty(exports, "__esModule", { value: true }); 13 | __exportStar(require("./nui-events/hooks/useNuiEvent"), exports); 14 | __exportStar(require("./nui-events/hooks/useNuiCallback"), exports); 15 | __exportStar(require("./nui-events/hooks/useNuiRequest"), exports); 16 | __exportStar(require("./nui-events/context/NuiContext"), exports); 17 | __exportStar(require("./nui-events/providers/NuiProvider"), exports); 18 | __exportStar(require("./nui-events/utils/eventNameFactory"), exports); 19 | -------------------------------------------------------------------------------- /dist/nui-events/context/NuiContext.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import { IAbortableFetch } from "../providers/NuiProvider"; 3 | export interface NuiContext { 4 | resource: string; 5 | callbackTimeout: number; 6 | send: (e: string, data?: unknown, resource?: string) => Promise; 7 | sendAbortable: (e: string, data?: unknown, resource?: string) => IAbortableFetch; 8 | } 9 | export declare const NuiContext: import("react").Context; 10 | -------------------------------------------------------------------------------- /dist/nui-events/context/NuiContext.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.NuiContext = void 0; 4 | var react_1 = require("react"); 5 | exports.NuiContext = react_1.createContext(null); 6 | -------------------------------------------------------------------------------- /dist/nui-events/hooks/useNuiCallback.d.ts: -------------------------------------------------------------------------------- 1 | declare type UseNuiCallbackFetchOptions = { 2 | timeout: number | false; 3 | }; 4 | declare type UseNuiCallbackFetch = (input?: I, options?: UseNuiCallbackFetchOptions) => void; 5 | declare type UseNuiCallbackResponse = [UseNuiCallbackFetch, { 6 | loading: boolean; 7 | error: unknown; 8 | response: R; 9 | }]; 10 | /** 11 | * @callback nuiEventHandler 12 | * @param {any} responseData 13 | * 14 | * @callback nuiEventErrorHandler 15 | * @param {any} responseError 16 | * 17 | * @function nuiFetchFn 18 | * @param {any} data - Request body 19 | * @param {Object} options - Fetch options 20 | * @param {string} options.timeout - Timeout to stop waiting for callback response in milliseconds. 21 | */ 22 | /** 23 | * Make a callback to "myEvent" by sending back "myEventSuccess" or "myEventError" from the client 24 | * @param {string} app needs to be the same here and in the success and error response events 25 | * @param {string} method the event name which is sent to client 26 | * @param {nuiEventHandler} [handler] receive the data sent by the client when success 27 | * @param {nuiEventErrorHandler} [errHandler] receive the data sent by the client when errored 28 | * @returns {[nuiFetchFn, { loading, error, response }]} [fetchFn, { loading, error, response }] 29 | * @example 30 | * const [user, setUser] = useState(null) 31 | * const [fetchUser, { loading, error, response }] = useNuiCallback("appname", "fetchUser", setUser); 32 | * useEffect(() => { 33 | * fetchUser(11); 34 | * }, [fetchUser]); 35 | */ 36 | export declare const useNuiCallback: (app: string, method: string, handler?: (res: R) => void, errHandler?: (err: unknown) => void) => UseNuiCallbackResponse; 37 | export {}; 38 | -------------------------------------------------------------------------------- /dist/nui-events/hooks/useNuiCallback.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.useNuiCallback = void 0; 4 | var react_1 = require("react"); 5 | var NuiContext_1 = require("../context/NuiContext"); 6 | var eventNameFactory_1 = require("../utils/eventNameFactory"); 7 | var useNuiEvent_1 = require("./useNuiEvent"); 8 | /** 9 | * @callback nuiEventHandler 10 | * @param {any} responseData 11 | * 12 | * @callback nuiEventErrorHandler 13 | * @param {any} responseError 14 | * 15 | * @function nuiFetchFn 16 | * @param {any} data - Request body 17 | * @param {Object} options - Fetch options 18 | * @param {string} options.timeout - Timeout to stop waiting for callback response in milliseconds. 19 | */ 20 | /** 21 | * Make a callback to "myEvent" by sending back "myEventSuccess" or "myEventError" from the client 22 | * @param {string} app needs to be the same here and in the success and error response events 23 | * @param {string} method the event name which is sent to client 24 | * @param {nuiEventHandler} [handler] receive the data sent by the client when success 25 | * @param {nuiEventErrorHandler} [errHandler] receive the data sent by the client when errored 26 | * @returns {[nuiFetchFn, { loading, error, response }]} [fetchFn, { loading, error, response }] 27 | * @example 28 | * const [user, setUser] = useState(null) 29 | * const [fetchUser, { loading, error, response }] = useNuiCallback("appname", "fetchUser", setUser); 30 | * useEffect(() => { 31 | * fetchUser(11); 32 | * }, [fetchUser]); 33 | */ 34 | var useNuiCallback = function (app, method, handler, errHandler) { 35 | var _a = react_1.useContext(NuiContext_1.NuiContext), sendAbortable = _a.sendAbortable, callbackTimeout = _a.callbackTimeout; 36 | var fetchRef = react_1.useRef(); 37 | var timeoutRef = react_1.useRef(); 38 | // These are Refs to avoid re renders. 39 | // We dont care if "app" and "method" arguments change. 40 | var eventNameRef = react_1.useRef(eventNameFactory_1.eventNameFactory(app, method)); 41 | var methodNameRef = react_1.useRef(method); 42 | var appNameRef = react_1.useRef(app); 43 | // has timed out 44 | var _b = react_1.useState(false), timedOut = _b[0], setTimedOut = _b[1]; 45 | // has failed at network or browser level 46 | var _c = react_1.useState(false), failed = _c[0], setFailed = _c[1]; 47 | // is waiting for server callback response event 48 | var _d = react_1.useState(false), loading = _d[0], setLoading = _d[1]; 49 | // returned error from server callback event or network failure 50 | var _e = react_1.useState(null), error = _e[0], setError = _e[1]; 51 | // response from server callback event 52 | var _f = react_1.useState(null), response = _f[0], setResponse = _f[1]; 53 | var onSuccess = react_1.useCallback(function (data) { 54 | if (!loading) { 55 | return; 56 | } 57 | // If we receive success event, clear timeout 58 | timeoutRef.current && clearTimeout(timeoutRef.current); 59 | // If already timed out, don't do shit :) 60 | if (timedOut) { 61 | return; 62 | } 63 | // Set new state after success event received 64 | setResponse(data); 65 | setError(null); 66 | setLoading(false); 67 | handler === null || handler === void 0 ? void 0 : handler(data); 68 | }, [handler, timedOut, loading]); 69 | var onError = react_1.useCallback(function (err) { 70 | // If we receive error event, clear timeout 71 | timeoutRef.current && clearTimeout(timeoutRef.current); 72 | // Set new state after error event received 73 | setError(err); 74 | setResponse(null); 75 | setLoading(false); 76 | errHandler === null || errHandler === void 0 ? void 0 : errHandler(err); 77 | }, [errHandler]); 78 | // Handle the success and error events for this method 79 | useNuiEvent_1.useNuiEvent(appNameRef.current, methodNameRef.current + "Success", onSuccess); 80 | useNuiEvent_1.useNuiEvent(appNameRef.current, methodNameRef.current + "Error", onError); 81 | // Only fetch if we are not loading/waiting the events. 82 | var fetch = react_1.useCallback(function (data, options) { 83 | setLoading(function (curr) { 84 | if (!curr) { 85 | setTimedOut(false); 86 | setFailed(false); 87 | setError(null); 88 | setResponse(null); 89 | fetchRef.current = sendAbortable(methodNameRef.current, data); 90 | fetchRef.current.promise.catch(function (e) { 91 | if (!timedOut) { 92 | onError(e); 93 | setFailed(true); 94 | timeoutRef.current = undefined; 95 | fetchRef.current = undefined; 96 | } 97 | }); 98 | var _options = options || { timeout: callbackTimeout }; 99 | var timeoutTime_1 = _options.timeout === false ? false : _options.timeout || callbackTimeout; 100 | if (timeoutTime_1 && !failed) { 101 | clearTimeout(timeoutRef.current); 102 | timeoutRef.current = setTimeout(function () { 103 | setTimedOut(true); 104 | onError(new Error("fivem-nui-react-lib: \"" + eventNameRef.current + "\" event callback timed out after " + timeoutTime_1 + " milliseconds")); 105 | fetchRef.current && fetchRef.current.abort(); 106 | timeoutRef.current = undefined; 107 | fetchRef.current = undefined; 108 | }, timeoutTime_1); 109 | } 110 | return true; 111 | } 112 | return curr; 113 | }); 114 | }, 115 | // eslint-disable-next-line react-hooks/exhaustive-deps 116 | []); 117 | return [fetch, { loading: loading, response: response, error: error }]; 118 | }; 119 | exports.useNuiCallback = useNuiCallback; 120 | -------------------------------------------------------------------------------- /dist/nui-events/hooks/useNuiEvent.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @callback nuiEventHandler 3 | * @param {any} responseData 4 | */ 5 | /** 6 | * A hook to receive data from the client in the following schema: 7 | * 8 | * { 9 | * "app": "app-name", 10 | * "method": "method-name", 11 | * "data": { anyValue: 1 } 12 | * } 13 | * 14 | * @param {string} app The app name which the client will emit to 15 | * @param {string} method The specific `method` field that should be listened for. 16 | * @param {nuiEventHandler} handler The callback function that will handle the data received from the server 17 | * 18 | * @example 19 | * const [dataState, setDataState] = useState(); 20 | * useNuiEvent("appname", "methodname", setDataState); 21 | **/ 22 | export declare const useNuiEvent: (app: string, method: string, handler: (r: D) => void) => void; 23 | -------------------------------------------------------------------------------- /dist/nui-events/hooks/useNuiEvent.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.useNuiEvent = void 0; 4 | var react_1 = require("react"); 5 | var eventNameFactory_1 = require("../utils/eventNameFactory"); 6 | function addEventListener(element, type, handler) { 7 | element.addEventListener(type, handler); 8 | } 9 | /** 10 | * @callback nuiEventHandler 11 | * @param {any} responseData 12 | */ 13 | /** 14 | * A hook to receive data from the client in the following schema: 15 | * 16 | * { 17 | * "app": "app-name", 18 | * "method": "method-name", 19 | * "data": { anyValue: 1 } 20 | * } 21 | * 22 | * @param {string} app The app name which the client will emit to 23 | * @param {string} method The specific `method` field that should be listened for. 24 | * @param {nuiEventHandler} handler The callback function that will handle the data received from the server 25 | * 26 | * @example 27 | * const [dataState, setDataState] = useState(); 28 | * useNuiEvent("appname", "methodname", setDataState); 29 | **/ 30 | var useNuiEvent = function (app, method, handler) { 31 | var savedHandler = react_1.useRef(); 32 | // When handler value changes set mutable ref to handler val 33 | react_1.useEffect(function () { 34 | savedHandler.current = handler; 35 | }, [handler]); 36 | react_1.useEffect(function () { 37 | var eventName = eventNameFactory_1.eventNameFactory(app, method); 38 | var eventListener = function (event) { 39 | if (savedHandler.current && savedHandler.current.call) { 40 | var data = event.data; 41 | var newData = data; 42 | savedHandler.current(newData); 43 | } 44 | }; 45 | addEventListener(window, eventName, eventListener); 46 | // Remove Event Listener on component cleanup 47 | return function () { return window.removeEventListener(eventName, eventListener); }; 48 | }, [app, method]); 49 | }; 50 | exports.useNuiEvent = useNuiEvent; 51 | -------------------------------------------------------------------------------- /dist/nui-events/hooks/useNuiRequest.d.ts: -------------------------------------------------------------------------------- 1 | import { NuiContext } from "../context/NuiContext"; 2 | declare type UseNuiRequestOptions = { 3 | resource?: string; 4 | }; 5 | /** 6 | * @typedef {Object} useNuiRequestResponse 7 | * @property {number} send - Method to send an event to the server 8 | * @property {number} sendAbortable - Same as send but able to abort mission :) 9 | * 10 | * @function sendFn 11 | * @param {string} event 12 | * @param {any} data 13 | * 14 | * @function sendAbortableFn 15 | * @param {string} event 16 | * @param {any} data 17 | */ 18 | /** 19 | * Send requests to the client 20 | * @param {Object} [options] 21 | * @param {string} [options.resource] override the provider resource name with the resource name to send the event to 22 | * @returns {useNuiRequestResponse} object with send event method 23 | * @example 24 | * const { send } = useNuiRequest(); 25 | * const { send: sendToAnotherResource } = useNuiRequest("another-resource"); 26 | * 27 | * return 28 | * 29 | * 30 | * 31 | * 32 | */ 33 | export declare const useNuiRequest: ({ resource }?: UseNuiRequestOptions) => Pick; 34 | export {}; 35 | -------------------------------------------------------------------------------- /dist/nui-events/hooks/useNuiRequest.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.useNuiRequest = void 0; 4 | var react_1 = require("react"); 5 | var NuiContext_1 = require("../context/NuiContext"); 6 | /** 7 | * @typedef {Object} useNuiRequestResponse 8 | * @property {number} send - Method to send an event to the server 9 | * @property {number} sendAbortable - Same as send but able to abort mission :) 10 | * 11 | * @function sendFn 12 | * @param {string} event 13 | * @param {any} data 14 | * 15 | * @function sendAbortableFn 16 | * @param {string} event 17 | * @param {any} data 18 | */ 19 | /** 20 | * Send requests to the client 21 | * @param {Object} [options] 22 | * @param {string} [options.resource] override the provider resource name with the resource name to send the event to 23 | * @returns {useNuiRequestResponse} object with send event method 24 | * @example 25 | * const { send } = useNuiRequest(); 26 | * const { send: sendToAnotherResource } = useNuiRequest("another-resource"); 27 | * 28 | * return 29 | * 30 | * 31 | * 32 | * 33 | */ 34 | var useNuiRequest = function (_a) { 35 | var _b = _a === void 0 ? {} : _a, resource = _b.resource; 36 | var context = react_1.useContext(NuiContext_1.NuiContext); 37 | if (!context) { 38 | throw new Error("fivem-nui-react-lib: useNuiRequest must be used inside NuiProvider passing the `resource` prop"); 39 | } 40 | var send = context.send, sendAbortable = context.sendAbortable; 41 | return react_1.useMemo(function () { return ({ 42 | send: function (event, data) { 43 | if (data === void 0) { data = {}; } 44 | return send(event, data, resource); 45 | }, 46 | sendAbortable: function (event, data) { 47 | if (data === void 0) { data = {}; } 48 | return sendAbortable(event, data, resource); 49 | }, 50 | }); }, [send, sendAbortable, resource]); 51 | }; 52 | exports.useNuiRequest = useNuiRequest; 53 | -------------------------------------------------------------------------------- /dist/nui-events/providers/NuiProvider.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | export interface IAbortableFetch { 3 | abort: () => void; 4 | promise: Promise; 5 | } 6 | export declare const NuiProvider: ({ resource, children, timeout, }: { 7 | timeout?: number | false; 8 | resource: string; 9 | children: JSX.Element; 10 | }) => JSX.Element; 11 | -------------------------------------------------------------------------------- /dist/nui-events/providers/NuiProvider.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __assign = (this && this.__assign) || function () { 3 | __assign = Object.assign || function(t) { 4 | for (var s, i = 1, n = arguments.length; i < n; i++) { 5 | s = arguments[i]; 6 | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) 7 | t[p] = s[p]; 8 | } 9 | return t; 10 | }; 11 | return __assign.apply(this, arguments); 12 | }; 13 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 14 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 15 | return new (P || (P = Promise))(function (resolve, reject) { 16 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 17 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 18 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 19 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 20 | }); 21 | }; 22 | var __generator = (this && this.__generator) || function (thisArg, body) { 23 | var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; 24 | return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; 25 | function verb(n) { return function (v) { return step([n, v]); }; } 26 | function step(op) { 27 | if (f) throw new TypeError("Generator is already executing."); 28 | while (_) try { 29 | if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; 30 | if (y = 0, t) op = [op[0] & 2, t.value]; 31 | switch (op[0]) { 32 | case 0: case 1: t = op; break; 33 | case 4: _.label++; return { value: op[1], done: false }; 34 | case 5: _.label++; y = op[1]; op = [0]; continue; 35 | case 7: op = _.ops.pop(); _.trys.pop(); continue; 36 | default: 37 | if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } 38 | if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } 39 | if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } 40 | if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } 41 | if (t[2]) _.ops.pop(); 42 | _.trys.pop(); continue; 43 | } 44 | op = body.call(thisArg, _); 45 | } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } 46 | if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; 47 | } 48 | }; 49 | Object.defineProperty(exports, "__esModule", { value: true }); 50 | exports.NuiProvider = void 0; 51 | var jsx_runtime_1 = require("react/jsx-runtime"); 52 | var react_1 = require("react"); 53 | var NuiContext_1 = require("../context/NuiContext"); 54 | var eventNameFactory_1 = require("../utils/eventNameFactory"); 55 | function abortableFetch(request, opts) { 56 | var controller = new AbortController(); 57 | var signal = controller.signal; 58 | return { 59 | abort: function () { return controller.abort(); }, 60 | promise: fetch(request, __assign(__assign({}, opts), { signal: signal })), 61 | }; 62 | } 63 | function getParams(resource, event, data) { 64 | return [ 65 | "https://" + resource + "/" + event, 66 | { 67 | method: "post", 68 | headers: { 69 | "Content-Type": "application/json; charset=UTF-8", 70 | }, 71 | body: JSON.stringify(data), 72 | }, 73 | ]; 74 | } 75 | var DEFAULT_TIMEOUT = 10000; 76 | var NuiProvider = function (_a) { 77 | var resource = _a.resource, children = _a.children, timeout = _a.timeout; 78 | var resourceRef = react_1.useRef(resource || ""); 79 | var timeoutRef = react_1.useRef(timeout || DEFAULT_TIMEOUT); 80 | var eventListener = function (event) { 81 | var _a = event.data, app = _a.app, method = _a.method, data = _a.data; 82 | if (app && method) { 83 | window.dispatchEvent(new MessageEvent(eventNameFactory_1.eventNameFactory(app, method), { 84 | data: data, 85 | })); 86 | } 87 | }; 88 | react_1.useEffect(function () { 89 | window.addEventListener("message", eventListener); 90 | return function () { return window.removeEventListener("message", eventListener); }; 91 | }, []); 92 | var send = react_1.useCallback(function (event, data, res) { 93 | if (data === void 0) { data = {}; } 94 | return __awaiter(void 0, void 0, void 0, function () { 95 | return __generator(this, function (_a) { 96 | return [2 /*return*/, fetch.apply(void 0, getParams(res || resourceRef.current, event, data))]; 97 | }); 98 | }); 99 | }, []); 100 | var sendAbortable = react_1.useCallback(function (event, data, res) { 101 | if (data === void 0) { data = {}; } 102 | return abortableFetch.apply(void 0, getParams(res || resourceRef.current, event, data)); 103 | }, []); 104 | return (jsx_runtime_1.jsx(NuiContext_1.NuiContext.Provider, __assign({ value: { 105 | send: send, 106 | sendAbortable: sendAbortable, 107 | resource: resourceRef.current, 108 | callbackTimeout: timeoutRef.current, 109 | } }, { children: children }), void 0)); 110 | }; 111 | exports.NuiProvider = NuiProvider; 112 | -------------------------------------------------------------------------------- /dist/nui-events/utils/eventNameFactory.d.ts: -------------------------------------------------------------------------------- 1 | export declare const eventNameFactory: (app: string, method: string) => string; 2 | -------------------------------------------------------------------------------- /dist/nui-events/utils/eventNameFactory.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.eventNameFactory = void 0; 4 | var eventNameFactory = function (app, method) { return app + ":" + method; }; 5 | exports.eventNameFactory = eventNameFactory; 6 | -------------------------------------------------------------------------------- /lib/ui/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./nui-events/hooks/useNuiEvent"; 2 | export * from "./nui-events/hooks/useNuiCallback"; 3 | export * from "./nui-events/hooks/useNuiRequest"; 4 | export * from "./nui-events/context/NuiContext"; 5 | export * from "./nui-events/providers/NuiProvider"; 6 | export * from "./nui-events/utils/eventNameFactory"; 7 | -------------------------------------------------------------------------------- /lib/ui/nui-events/context/NuiContext.ts: -------------------------------------------------------------------------------- 1 | import { createContext } from "react"; 2 | import { IAbortableFetch } from "../providers/NuiProvider"; 3 | 4 | export interface NuiContext { 5 | resource: string; 6 | callbackTimeout: number; 7 | send: (e: string, data?: unknown, resource?: string) => Promise; 8 | sendAbortable: (e: string, data?: unknown, resource?: string) => IAbortableFetch; 9 | } 10 | 11 | export const NuiContext = createContext(null); 12 | -------------------------------------------------------------------------------- /lib/ui/nui-events/hooks/useNuiCallback.ts: -------------------------------------------------------------------------------- 1 | import { useCallback, useContext, useRef, useState } from "react"; 2 | import { NuiContext } from "../context/NuiContext"; 3 | import { IAbortableFetch } from "../providers/NuiProvider"; 4 | import { eventNameFactory } from "../utils/eventNameFactory"; 5 | import { useNuiEvent } from "./useNuiEvent"; 6 | 7 | type UseNuiCallbackFetchOptions = { 8 | timeout: number | false; 9 | }; 10 | 11 | type UseNuiCallbackFetch = (input?: I, options?: UseNuiCallbackFetchOptions) => void; 12 | 13 | type UseNuiCallbackResponse = [UseNuiCallbackFetch, { loading: boolean; error: unknown; response: R }]; 14 | 15 | /** 16 | * @callback nuiEventHandler 17 | * @param {any} responseData 18 | * 19 | * @callback nuiEventErrorHandler 20 | * @param {any} responseError 21 | * 22 | * @function nuiFetchFn 23 | * @param {any} data - Request body 24 | * @param {Object} options - Fetch options 25 | * @param {string} options.timeout - Timeout to stop waiting for callback response in milliseconds. 26 | */ 27 | 28 | /** 29 | * Make a callback to "myEvent" by sending back "myEventSuccess" or "myEventError" from the client 30 | * @param {string} app needs to be the same here and in the success and error response events 31 | * @param {string} method the event name which is sent to client 32 | * @param {nuiEventHandler} [handler] receive the data sent by the client when success 33 | * @param {nuiEventErrorHandler} [errHandler] receive the data sent by the client when errored 34 | * @returns {[nuiFetchFn, { loading, error, response }]} [fetchFn, { loading, error, response }] 35 | * @example 36 | * const [user, setUser] = useState(null) 37 | * const [fetchUser, { loading, error, response }] = useNuiCallback("appname", "fetchUser", setUser); 38 | * useEffect(() => { 39 | * fetchUser(11); 40 | * }, [fetchUser]); 41 | */ 42 | export const useNuiCallback = ( 43 | app: string, 44 | method: string, 45 | handler?: (res: R) => void, 46 | errHandler?: (err: unknown) => void 47 | ): UseNuiCallbackResponse => { 48 | const { sendAbortable, callbackTimeout } = useContext(NuiContext); 49 | 50 | const fetchRef = useRef(); 51 | const timeoutRef = useRef(); 52 | 53 | // These are Refs to avoid re renders. 54 | // We dont care if "app" and "method" arguments change. 55 | const eventNameRef = useRef(eventNameFactory(app, method)); 56 | const methodNameRef = useRef(method); 57 | const appNameRef = useRef(app); 58 | 59 | // has timed out 60 | const [timedOut, setTimedOut] = useState(false); 61 | 62 | // has failed at network or browser level 63 | const [failed, setFailed] = useState(false); 64 | 65 | // is waiting for server callback response event 66 | const [loading, setLoading] = useState(false); 67 | 68 | // returned error from server callback event or network failure 69 | const [error, setError] = useState(null); 70 | 71 | // response from server callback event 72 | const [response, setResponse] = useState(null); 73 | 74 | const onSuccess = useCallback( 75 | (data: R) => { 76 | if (!loading) { 77 | return; 78 | } 79 | // If we receive success event, clear timeout 80 | timeoutRef.current && clearTimeout(timeoutRef.current); 81 | // If already timed out, don't do shit :) 82 | if (timedOut) { 83 | return; 84 | } 85 | // Set new state after success event received 86 | setResponse(data); 87 | setError(null); 88 | setLoading(false); 89 | handler?.(data); 90 | }, 91 | [handler, timedOut, loading] 92 | ); 93 | 94 | const onError = useCallback( 95 | (err: unknown) => { 96 | // If we receive error event, clear timeout 97 | timeoutRef.current && clearTimeout(timeoutRef.current); 98 | // Set new state after error event received 99 | setError(err); 100 | setResponse(null); 101 | setLoading(false); 102 | errHandler?.(err); 103 | }, 104 | [errHandler] 105 | ); 106 | 107 | // Handle the success and error events for this method 108 | useNuiEvent(appNameRef.current, `${methodNameRef.current}Success`, onSuccess); 109 | useNuiEvent(appNameRef.current, `${methodNameRef.current}Error`, onError); 110 | 111 | // Only fetch if we are not loading/waiting the events. 112 | const fetch = useCallback( 113 | (data?: I, options?: UseNuiCallbackFetchOptions) => { 114 | setLoading((curr) => { 115 | if (!curr) { 116 | setTimedOut(false); 117 | setFailed(false); 118 | setError(null); 119 | setResponse(null); 120 | fetchRef.current = sendAbortable(methodNameRef.current, data); 121 | 122 | fetchRef.current.promise.catch((e) => { 123 | if (!timedOut) { 124 | onError(e); 125 | setFailed(true); 126 | timeoutRef.current = undefined; 127 | fetchRef.current = undefined; 128 | } 129 | }); 130 | 131 | const _options = options || { timeout: callbackTimeout }; 132 | const timeoutTime = _options.timeout === false ? false : _options.timeout || callbackTimeout; 133 | 134 | if (timeoutTime && !failed) { 135 | clearTimeout(timeoutRef.current); 136 | timeoutRef.current = setTimeout(() => { 137 | setTimedOut(true); 138 | onError( 139 | new Error( 140 | `fivem-nui-react-lib: "${eventNameRef.current}" event callback timed out after ${timeoutTime} milliseconds` 141 | ) 142 | ); 143 | fetchRef.current && fetchRef.current.abort(); 144 | timeoutRef.current = undefined; 145 | fetchRef.current = undefined; 146 | }, timeoutTime); 147 | } 148 | 149 | return true; 150 | } 151 | return curr; 152 | }); 153 | }, 154 | // eslint-disable-next-line react-hooks/exhaustive-deps 155 | [] 156 | ); 157 | 158 | return [fetch, { loading, response, error }]; 159 | }; 160 | -------------------------------------------------------------------------------- /lib/ui/nui-events/hooks/useNuiEvent.ts: -------------------------------------------------------------------------------- 1 | import { MutableRefObject, useEffect, useRef } from "react"; 2 | import { eventNameFactory } from "../utils/eventNameFactory"; 3 | 4 | function addEventListener( 5 | element: T, 6 | type: string, 7 | handler: (this: T, evt: E) => void 8 | ) { 9 | element.addEventListener(type, handler as (evt: Event) => void); 10 | } 11 | 12 | /** 13 | * @callback nuiEventHandler 14 | * @param {any} responseData 15 | */ 16 | 17 | /** 18 | * A hook to receive data from the client in the following schema: 19 | * 20 | * { 21 | * "app": "app-name", 22 | * "method": "method-name", 23 | * "data": { anyValue: 1 } 24 | * } 25 | * 26 | * @param {string} app The app name which the client will emit to 27 | * @param {string} method The specific `method` field that should be listened for. 28 | * @param {nuiEventHandler} handler The callback function that will handle the data received from the server 29 | * 30 | * @example 31 | * const [dataState, setDataState] = useState(); 32 | * useNuiEvent("appname", "methodname", setDataState); 33 | **/ 34 | export const useNuiEvent = (app: string, method: string, handler: (r: D) => void): void => { 35 | const savedHandler: MutableRefObject<(r: D) => void> = useRef(); 36 | 37 | // When handler value changes set mutable ref to handler val 38 | useEffect(() => { 39 | savedHandler.current = handler; 40 | }, [handler]); 41 | 42 | useEffect(() => { 43 | const eventName = eventNameFactory(app, method); 44 | const eventListener = (event) => { 45 | if (savedHandler.current && savedHandler.current.call) { 46 | const { data } = event; 47 | const newData = data; 48 | savedHandler.current(newData as D); 49 | } 50 | }; 51 | 52 | addEventListener(window, eventName, eventListener); 53 | // Remove Event Listener on component cleanup 54 | return () => window.removeEventListener(eventName, eventListener); 55 | }, [app, method]); 56 | }; 57 | -------------------------------------------------------------------------------- /lib/ui/nui-events/hooks/useNuiRequest.ts: -------------------------------------------------------------------------------- 1 | import { useContext, useMemo } from "react"; 2 | import { NuiContext } from "../context/NuiContext"; 3 | 4 | type UseNuiRequestOptions = { 5 | resource?: string; 6 | }; 7 | 8 | /** 9 | * @typedef {Object} useNuiRequestResponse 10 | * @property {number} send - Method to send an event to the server 11 | * @property {number} sendAbortable - Same as send but able to abort mission :) 12 | * 13 | * @function sendFn 14 | * @param {string} event 15 | * @param {any} data 16 | * 17 | * @function sendAbortableFn 18 | * @param {string} event 19 | * @param {any} data 20 | */ 21 | 22 | /** 23 | * Send requests to the client 24 | * @param {Object} [options] 25 | * @param {string} [options.resource] override the provider resource name with the resource name to send the event to 26 | * @returns {useNuiRequestResponse} object with send event method 27 | * @example 28 | * const { send } = useNuiRequest(); 29 | * const { send: sendToAnotherResource } = useNuiRequest("another-resource"); 30 | * 31 | * return 32 | * 33 | * 34 | * 35 | * 36 | */ 37 | export const useNuiRequest = ({ resource }: UseNuiRequestOptions = {}): Pick => { 38 | const context = useContext(NuiContext); 39 | 40 | if (!context) { 41 | throw new Error("fivem-nui-react-lib: useNuiRequest must be used inside NuiProvider passing the `resource` prop"); 42 | } 43 | 44 | const { send, sendAbortable } = context; 45 | return useMemo( 46 | () => ({ 47 | send: (event: string, data = {}) => send(event, data, resource), 48 | sendAbortable: (event: string, data = {}) => sendAbortable(event, data, resource), 49 | }), 50 | [send, sendAbortable, resource] 51 | ); 52 | }; 53 | -------------------------------------------------------------------------------- /lib/ui/nui-events/providers/NuiProvider.tsx: -------------------------------------------------------------------------------- 1 | import React, { useCallback, useEffect, useRef } from "react"; 2 | import { NuiContext } from "../context/NuiContext"; 3 | import { eventNameFactory } from "../utils/eventNameFactory"; 4 | 5 | export interface IAbortableFetch { 6 | abort: () => void; 7 | promise: Promise; 8 | } 9 | 10 | function abortableFetch(request, opts): IAbortableFetch { 11 | const controller = new AbortController(); 12 | const signal = controller.signal; 13 | 14 | return { 15 | abort: () => controller.abort(), 16 | promise: fetch(request, { ...opts, signal }), 17 | }; 18 | } 19 | 20 | function getParams(resource, event, data): [RequestInfo, RequestInit] { 21 | return [ 22 | `https://${resource}/${event}`, 23 | { 24 | method: "post", 25 | headers: { 26 | "Content-Type": "application/json; charset=UTF-8", 27 | }, 28 | body: JSON.stringify(data), 29 | }, 30 | ]; 31 | } 32 | 33 | const DEFAULT_TIMEOUT = 10000; 34 | 35 | export const NuiProvider = ({ 36 | resource, 37 | children, 38 | timeout, 39 | }: { 40 | timeout?: number | false; 41 | resource: string; 42 | children: JSX.Element; 43 | }): JSX.Element => { 44 | const resourceRef = useRef(resource || ""); 45 | const timeoutRef = useRef(timeout || DEFAULT_TIMEOUT); 46 | 47 | const eventListener = (event: { data: { app: string; method: string; data: unknown } }) => { 48 | const { app, method, data } = event.data; 49 | if (app && method) { 50 | window.dispatchEvent( 51 | new MessageEvent(eventNameFactory(app, method), { 52 | data, 53 | }) 54 | ); 55 | } 56 | }; 57 | 58 | useEffect(() => { 59 | window.addEventListener("message", eventListener); 60 | return () => window.removeEventListener("message", eventListener); 61 | }, []); 62 | 63 | const send = useCallback(async (event: string, data = {}, res?: string) => { 64 | return fetch(...getParams(res || resourceRef.current, event, data)); 65 | }, []); 66 | 67 | const sendAbortable = useCallback((event: string, data = {}, res?: string): IAbortableFetch => { 68 | return abortableFetch(...getParams(res || resourceRef.current, event, data)); 69 | }, []); 70 | 71 | return ( 72 | 80 | {children} 81 | 82 | ); 83 | }; 84 | -------------------------------------------------------------------------------- /lib/ui/nui-events/utils/eventNameFactory.ts: -------------------------------------------------------------------------------- 1 | export const eventNameFactory = (app: string, method: string): string => `${app}:${method}`; 2 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fivem-nui-react-lib", 3 | "description": "React provider and hooks for FiveM NUI", 4 | "author": "fran ", 5 | "license": "GPL-3.0-or-later", 6 | "version": "2.3.13", 7 | "main": "dist/index.js", 8 | "scripts": { 9 | "build": "yarn rimraf dist && tsc", 10 | "lint": "yarn eslint lib", 11 | "prepare": "yarn lint && yarn build && husky install", 12 | "test": "echo \"Error: no test specified\" && exit 1" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/jfrader/fivem-nui-react-lib.git" 17 | }, 18 | "files": [ 19 | "dist" 20 | ], 21 | "peerDependencies": { 22 | "react": "^17.0.2", 23 | "react-dom": "^17.0.2" 24 | }, 25 | "devDependencies": { 26 | "@types/node": "^12.0.0", 27 | "@types/react": "^17.0.3", 28 | "@typescript-eslint/eslint-plugin": "^5.49.0", 29 | "@typescript-eslint/parser": "^5.49.0", 30 | "eslint": "^8.40.0", 31 | "eslint-config-prettier": "^8.6.0", 32 | "eslint-plugin-prettier": "^4.2.1", 33 | "eslint-plugin-react": "^7.32.1", 34 | "eslint-plugin-react-hooks": "^4.6.0", 35 | "husky": "^6.0.0", 36 | "lint-staged": "^10.5.4", 37 | "prettier": "^2.2.1", 38 | "react": "^17.0.2", 39 | "react-dom": "^17.0.2", 40 | "rimraf": "^3.0.2", 41 | "typescript": "^4.1.2" 42 | }, 43 | "lint-staged": { 44 | "*.js,*.ts": "yarn lint", 45 | "*.{js,ts,css,md}": "prettier --write" 46 | }, 47 | "keywords": [ 48 | "fivem", 49 | "gta5", 50 | "gtarp", 51 | "nui", 52 | "react", 53 | "lib", 54 | "library", 55 | "events" 56 | ] 57 | } 58 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "dist", 4 | "declaration": true, 5 | "target": "es5", 6 | "lib": ["dom", "dom.iterable", "esnext"], 7 | "allowJs": true, 8 | "skipLibCheck": true, 9 | "esModuleInterop": true, 10 | "allowSyntheticDefaultImports": true, 11 | "strict": false, 12 | "strictFunctionTypes": false, 13 | "forceConsistentCasingInFileNames": true, 14 | "noFallthroughCasesInSwitch": true, 15 | "module": "commonjs", 16 | "moduleResolution": "node", 17 | "resolveJsonModule": true, 18 | "isolatedModules": true, 19 | "noEmit": false, 20 | "jsx": "react-jsx" 21 | }, 22 | "include": ["lib"] 23 | } 24 | -------------------------------------------------------------------------------- /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.0.0": 6 | version "7.12.13" 7 | resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz" 8 | integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== 9 | dependencies: 10 | "@babel/highlight" "^7.12.13" 11 | 12 | "@babel/helper-validator-identifier@^7.12.11": 13 | version "7.12.11" 14 | resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz" 15 | integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== 16 | 17 | "@babel/highlight@^7.12.13": 18 | version "7.13.10" 19 | resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz" 20 | integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.12.11" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@eslint-community/eslint-utils@^4.2.0": 27 | version "4.4.0" 28 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 29 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 30 | dependencies: 31 | eslint-visitor-keys "^3.3.0" 32 | 33 | "@eslint-community/regexpp@^4.4.0": 34 | version "4.5.1" 35 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" 36 | integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== 37 | 38 | "@eslint/eslintrc@^2.0.3": 39 | version "2.0.3" 40 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" 41 | integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== 42 | dependencies: 43 | ajv "^6.12.4" 44 | debug "^4.3.2" 45 | espree "^9.5.2" 46 | globals "^13.19.0" 47 | ignore "^5.2.0" 48 | import-fresh "^3.2.1" 49 | js-yaml "^4.1.0" 50 | minimatch "^3.1.2" 51 | strip-json-comments "^3.1.1" 52 | 53 | "@eslint/js@8.40.0": 54 | version "8.40.0" 55 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.40.0.tgz#3ba73359e11f5a7bd3e407f70b3528abfae69cec" 56 | integrity sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA== 57 | 58 | "@humanwhocodes/config-array@^0.11.8": 59 | version "0.11.8" 60 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" 61 | integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== 62 | dependencies: 63 | "@humanwhocodes/object-schema" "^1.2.1" 64 | debug "^4.1.1" 65 | minimatch "^3.0.5" 66 | 67 | "@humanwhocodes/module-importer@^1.0.1": 68 | version "1.0.1" 69 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 70 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 71 | 72 | "@humanwhocodes/object-schema@^1.2.1": 73 | version "1.2.1" 74 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 75 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 76 | 77 | "@nodelib/fs.scandir@2.1.5": 78 | version "2.1.5" 79 | resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" 80 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 81 | dependencies: 82 | "@nodelib/fs.stat" "2.0.5" 83 | run-parallel "^1.1.9" 84 | 85 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 86 | version "2.0.5" 87 | resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" 88 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 89 | 90 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 91 | version "1.2.8" 92 | resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" 93 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 94 | dependencies: 95 | "@nodelib/fs.scandir" "2.1.5" 96 | fastq "^1.6.0" 97 | 98 | "@types/json-schema@^7.0.9": 99 | version "7.0.11" 100 | resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" 101 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 102 | 103 | "@types/node@^12.0.0": 104 | version "12.20.7" 105 | resolved "https://registry.npmjs.org/@types/node/-/node-12.20.7.tgz" 106 | integrity sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA== 107 | 108 | "@types/parse-json@^4.0.0": 109 | version "4.0.0" 110 | resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" 111 | integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== 112 | 113 | "@types/prop-types@*": 114 | version "15.7.3" 115 | resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz" 116 | integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== 117 | 118 | "@types/react@^17.0.3": 119 | version "17.0.3" 120 | resolved "https://registry.npmjs.org/@types/react/-/react-17.0.3.tgz" 121 | integrity sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg== 122 | dependencies: 123 | "@types/prop-types" "*" 124 | "@types/scheduler" "*" 125 | csstype "^3.0.2" 126 | 127 | "@types/scheduler@*": 128 | version "0.16.1" 129 | resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz" 130 | integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== 131 | 132 | "@types/semver@^7.3.12": 133 | version "7.3.13" 134 | resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz" 135 | integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== 136 | 137 | "@typescript-eslint/eslint-plugin@^5.49.0": 138 | version "5.49.0" 139 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.49.0.tgz#d0b4556f0792194bf0c2fb297897efa321492389" 140 | integrity sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q== 141 | dependencies: 142 | "@typescript-eslint/scope-manager" "5.49.0" 143 | "@typescript-eslint/type-utils" "5.49.0" 144 | "@typescript-eslint/utils" "5.49.0" 145 | debug "^4.3.4" 146 | ignore "^5.2.0" 147 | natural-compare-lite "^1.4.0" 148 | regexpp "^3.2.0" 149 | semver "^7.3.7" 150 | tsutils "^3.21.0" 151 | 152 | "@typescript-eslint/parser@^5.49.0": 153 | version "5.49.0" 154 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.49.0.tgz#d699734b2f20e16351e117417d34a2bc9d7c4b90" 155 | integrity sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg== 156 | dependencies: 157 | "@typescript-eslint/scope-manager" "5.49.0" 158 | "@typescript-eslint/types" "5.49.0" 159 | "@typescript-eslint/typescript-estree" "5.49.0" 160 | debug "^4.3.4" 161 | 162 | "@typescript-eslint/scope-manager@5.49.0": 163 | version "5.49.0" 164 | resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.49.0.tgz" 165 | integrity sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ== 166 | dependencies: 167 | "@typescript-eslint/types" "5.49.0" 168 | "@typescript-eslint/visitor-keys" "5.49.0" 169 | 170 | "@typescript-eslint/type-utils@5.49.0": 171 | version "5.49.0" 172 | resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.49.0.tgz" 173 | integrity sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA== 174 | dependencies: 175 | "@typescript-eslint/typescript-estree" "5.49.0" 176 | "@typescript-eslint/utils" "5.49.0" 177 | debug "^4.3.4" 178 | tsutils "^3.21.0" 179 | 180 | "@typescript-eslint/types@5.49.0": 181 | version "5.49.0" 182 | resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.49.0.tgz" 183 | integrity sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg== 184 | 185 | "@typescript-eslint/typescript-estree@5.49.0": 186 | version "5.49.0" 187 | resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.49.0.tgz" 188 | integrity sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA== 189 | dependencies: 190 | "@typescript-eslint/types" "5.49.0" 191 | "@typescript-eslint/visitor-keys" "5.49.0" 192 | debug "^4.3.4" 193 | globby "^11.1.0" 194 | is-glob "^4.0.3" 195 | semver "^7.3.7" 196 | tsutils "^3.21.0" 197 | 198 | "@typescript-eslint/utils@5.49.0": 199 | version "5.49.0" 200 | resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.49.0.tgz" 201 | integrity sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ== 202 | dependencies: 203 | "@types/json-schema" "^7.0.9" 204 | "@types/semver" "^7.3.12" 205 | "@typescript-eslint/scope-manager" "5.49.0" 206 | "@typescript-eslint/types" "5.49.0" 207 | "@typescript-eslint/typescript-estree" "5.49.0" 208 | eslint-scope "^5.1.1" 209 | eslint-utils "^3.0.0" 210 | semver "^7.3.7" 211 | 212 | "@typescript-eslint/visitor-keys@5.49.0": 213 | version "5.49.0" 214 | resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.49.0.tgz" 215 | integrity sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg== 216 | dependencies: 217 | "@typescript-eslint/types" "5.49.0" 218 | eslint-visitor-keys "^3.3.0" 219 | 220 | acorn-jsx@^5.3.2: 221 | version "5.3.2" 222 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 223 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 224 | 225 | acorn@^8.8.0: 226 | version "8.8.2" 227 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" 228 | integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== 229 | 230 | aggregate-error@^3.0.0: 231 | version "3.1.0" 232 | resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" 233 | integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== 234 | dependencies: 235 | clean-stack "^2.0.0" 236 | indent-string "^4.0.0" 237 | 238 | ajv@^6.10.0, ajv@^6.12.4: 239 | version "6.12.6" 240 | resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" 241 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 242 | dependencies: 243 | fast-deep-equal "^3.1.1" 244 | fast-json-stable-stringify "^2.0.0" 245 | json-schema-traverse "^0.4.1" 246 | uri-js "^4.2.2" 247 | 248 | ansi-colors@^4.1.1: 249 | version "4.1.1" 250 | resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" 251 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 252 | 253 | ansi-escapes@^4.3.0: 254 | version "4.3.2" 255 | resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" 256 | integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== 257 | dependencies: 258 | type-fest "^0.21.3" 259 | 260 | ansi-regex@^5.0.0: 261 | version "5.0.0" 262 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" 263 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 264 | 265 | ansi-regex@^5.0.1: 266 | version "5.0.1" 267 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 268 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 269 | 270 | ansi-styles@^3.2.1: 271 | version "3.2.1" 272 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" 273 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 274 | dependencies: 275 | color-convert "^1.9.0" 276 | 277 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 278 | version "4.3.0" 279 | resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" 280 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 281 | dependencies: 282 | color-convert "^2.0.1" 283 | 284 | argparse@^2.0.1: 285 | version "2.0.1" 286 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 287 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 288 | 289 | array-includes@^3.1.2, array-includes@^3.1.6: 290 | version "3.1.6" 291 | resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz" 292 | integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== 293 | dependencies: 294 | call-bind "^1.0.2" 295 | define-properties "^1.1.4" 296 | es-abstract "^1.20.4" 297 | get-intrinsic "^1.1.3" 298 | is-string "^1.0.7" 299 | 300 | array-union@^2.1.0: 301 | version "2.1.0" 302 | resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" 303 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 304 | 305 | array.prototype.flatmap@^1.3.1: 306 | version "1.3.1" 307 | resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz" 308 | integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== 309 | dependencies: 310 | call-bind "^1.0.2" 311 | define-properties "^1.1.4" 312 | es-abstract "^1.20.4" 313 | es-shim-unscopables "^1.0.0" 314 | 315 | array.prototype.tosorted@^1.1.1: 316 | version "1.1.1" 317 | resolved "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz" 318 | integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== 319 | dependencies: 320 | call-bind "^1.0.2" 321 | define-properties "^1.1.4" 322 | es-abstract "^1.20.4" 323 | es-shim-unscopables "^1.0.0" 324 | get-intrinsic "^1.1.3" 325 | 326 | astral-regex@^2.0.0: 327 | version "2.0.0" 328 | resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" 329 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== 330 | 331 | available-typed-arrays@^1.0.5: 332 | version "1.0.5" 333 | resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" 334 | integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== 335 | 336 | balanced-match@^1.0.0: 337 | version "1.0.2" 338 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" 339 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 340 | 341 | brace-expansion@^1.1.7: 342 | version "1.1.11" 343 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" 344 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 345 | dependencies: 346 | balanced-match "^1.0.0" 347 | concat-map "0.0.1" 348 | 349 | braces@^3.0.2: 350 | version "3.0.2" 351 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" 352 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 353 | dependencies: 354 | fill-range "^7.0.1" 355 | 356 | call-bind@^1.0.0, call-bind@^1.0.2: 357 | version "1.0.2" 358 | resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" 359 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 360 | dependencies: 361 | function-bind "^1.1.1" 362 | get-intrinsic "^1.0.2" 363 | 364 | callsites@^3.0.0: 365 | version "3.1.0" 366 | resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" 367 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 368 | 369 | chalk@^2.0.0: 370 | version "2.4.2" 371 | resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" 372 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 373 | dependencies: 374 | ansi-styles "^3.2.1" 375 | escape-string-regexp "^1.0.5" 376 | supports-color "^5.3.0" 377 | 378 | chalk@^4.0.0, chalk@^4.1.0: 379 | version "4.1.0" 380 | resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" 381 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== 382 | dependencies: 383 | ansi-styles "^4.1.0" 384 | supports-color "^7.1.0" 385 | 386 | clean-stack@^2.0.0: 387 | version "2.2.0" 388 | resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" 389 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== 390 | 391 | cli-cursor@^3.1.0: 392 | version "3.1.0" 393 | resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" 394 | integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== 395 | dependencies: 396 | restore-cursor "^3.1.0" 397 | 398 | cli-truncate@^2.1.0: 399 | version "2.1.0" 400 | resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" 401 | integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== 402 | dependencies: 403 | slice-ansi "^3.0.0" 404 | string-width "^4.2.0" 405 | 406 | color-convert@^1.9.0: 407 | version "1.9.3" 408 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" 409 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 410 | dependencies: 411 | color-name "1.1.3" 412 | 413 | color-convert@^2.0.1: 414 | version "2.0.1" 415 | resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" 416 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 417 | dependencies: 418 | color-name "~1.1.4" 419 | 420 | color-name@1.1.3: 421 | version "1.1.3" 422 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" 423 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 424 | 425 | color-name@~1.1.4: 426 | version "1.1.4" 427 | resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" 428 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 429 | 430 | commander@^6.2.0: 431 | version "6.2.1" 432 | resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" 433 | integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== 434 | 435 | concat-map@0.0.1: 436 | version "0.0.1" 437 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" 438 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 439 | 440 | cosmiconfig@^7.0.0: 441 | version "7.0.0" 442 | resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz" 443 | integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== 444 | dependencies: 445 | "@types/parse-json" "^4.0.0" 446 | import-fresh "^3.2.1" 447 | parse-json "^5.0.0" 448 | path-type "^4.0.0" 449 | yaml "^1.10.0" 450 | 451 | cross-spawn@^7.0.0, cross-spawn@^7.0.2: 452 | version "7.0.3" 453 | resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" 454 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 455 | dependencies: 456 | path-key "^3.1.0" 457 | shebang-command "^2.0.0" 458 | which "^2.0.1" 459 | 460 | csstype@^3.0.2: 461 | version "3.0.7" 462 | resolved "https://registry.npmjs.org/csstype/-/csstype-3.0.7.tgz" 463 | integrity sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g== 464 | 465 | debug@^4.1.1, debug@^4.2.0, debug@^4.3.2, debug@^4.3.4: 466 | version "4.3.4" 467 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" 468 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 469 | dependencies: 470 | ms "2.1.2" 471 | 472 | dedent@^0.7.0: 473 | version "0.7.0" 474 | resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" 475 | integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= 476 | 477 | deep-is@^0.1.3: 478 | version "0.1.3" 479 | resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" 480 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 481 | 482 | define-properties@^1.1.3, define-properties@^1.1.4: 483 | version "1.1.4" 484 | resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" 485 | integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== 486 | dependencies: 487 | has-property-descriptors "^1.0.0" 488 | object-keys "^1.1.1" 489 | 490 | dir-glob@^3.0.1: 491 | version "3.0.1" 492 | resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" 493 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 494 | dependencies: 495 | path-type "^4.0.0" 496 | 497 | doctrine@^2.1.0: 498 | version "2.1.0" 499 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" 500 | integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== 501 | dependencies: 502 | esutils "^2.0.2" 503 | 504 | doctrine@^3.0.0: 505 | version "3.0.0" 506 | resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" 507 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 508 | dependencies: 509 | esutils "^2.0.2" 510 | 511 | emoji-regex@^8.0.0: 512 | version "8.0.0" 513 | resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" 514 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 515 | 516 | end-of-stream@^1.1.0: 517 | version "1.4.4" 518 | resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" 519 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 520 | dependencies: 521 | once "^1.4.0" 522 | 523 | enquirer@^2.3.6: 524 | version "2.3.6" 525 | resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" 526 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 527 | dependencies: 528 | ansi-colors "^4.1.1" 529 | 530 | error-ex@^1.3.1: 531 | version "1.3.2" 532 | resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" 533 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 534 | dependencies: 535 | is-arrayish "^0.2.1" 536 | 537 | es-abstract@^1.19.0, es-abstract@^1.20.4: 538 | version "1.21.1" 539 | resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz" 540 | integrity sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg== 541 | dependencies: 542 | available-typed-arrays "^1.0.5" 543 | call-bind "^1.0.2" 544 | es-set-tostringtag "^2.0.1" 545 | es-to-primitive "^1.2.1" 546 | function-bind "^1.1.1" 547 | function.prototype.name "^1.1.5" 548 | get-intrinsic "^1.1.3" 549 | get-symbol-description "^1.0.0" 550 | globalthis "^1.0.3" 551 | gopd "^1.0.1" 552 | has "^1.0.3" 553 | has-property-descriptors "^1.0.0" 554 | has-proto "^1.0.1" 555 | has-symbols "^1.0.3" 556 | internal-slot "^1.0.4" 557 | is-array-buffer "^3.0.1" 558 | is-callable "^1.2.7" 559 | is-negative-zero "^2.0.2" 560 | is-regex "^1.1.4" 561 | is-shared-array-buffer "^1.0.2" 562 | is-string "^1.0.7" 563 | is-typed-array "^1.1.10" 564 | is-weakref "^1.0.2" 565 | object-inspect "^1.12.2" 566 | object-keys "^1.1.1" 567 | object.assign "^4.1.4" 568 | regexp.prototype.flags "^1.4.3" 569 | safe-regex-test "^1.0.0" 570 | string.prototype.trimend "^1.0.6" 571 | string.prototype.trimstart "^1.0.6" 572 | typed-array-length "^1.0.4" 573 | unbox-primitive "^1.0.2" 574 | which-typed-array "^1.1.9" 575 | 576 | es-set-tostringtag@^2.0.1: 577 | version "2.0.1" 578 | resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" 579 | integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== 580 | dependencies: 581 | get-intrinsic "^1.1.3" 582 | has "^1.0.3" 583 | has-tostringtag "^1.0.0" 584 | 585 | es-shim-unscopables@^1.0.0: 586 | version "1.0.0" 587 | resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" 588 | integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== 589 | dependencies: 590 | has "^1.0.3" 591 | 592 | es-to-primitive@^1.2.1: 593 | version "1.2.1" 594 | resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" 595 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 596 | dependencies: 597 | is-callable "^1.1.4" 598 | is-date-object "^1.0.1" 599 | is-symbol "^1.0.2" 600 | 601 | escape-string-regexp@^1.0.5: 602 | version "1.0.5" 603 | resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" 604 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 605 | 606 | escape-string-regexp@^4.0.0: 607 | version "4.0.0" 608 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 609 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 610 | 611 | eslint-config-prettier@^8.6.0: 612 | version "8.6.0" 613 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz#dec1d29ab728f4fa63061774e1672ac4e363d207" 614 | integrity sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA== 615 | 616 | eslint-plugin-prettier@^4.2.1: 617 | version "4.2.1" 618 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" 619 | integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== 620 | dependencies: 621 | prettier-linter-helpers "^1.0.0" 622 | 623 | eslint-plugin-react-hooks@^4.6.0: 624 | version "4.6.0" 625 | resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" 626 | integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== 627 | 628 | eslint-plugin-react@^7.32.1: 629 | version "7.32.1" 630 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.1.tgz#88cdeb4065da8ca0b64e1274404f53a0f9890200" 631 | integrity sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www== 632 | dependencies: 633 | array-includes "^3.1.6" 634 | array.prototype.flatmap "^1.3.1" 635 | array.prototype.tosorted "^1.1.1" 636 | doctrine "^2.1.0" 637 | estraverse "^5.3.0" 638 | jsx-ast-utils "^2.4.1 || ^3.0.0" 639 | minimatch "^3.1.2" 640 | object.entries "^1.1.6" 641 | object.fromentries "^2.0.6" 642 | object.hasown "^1.1.2" 643 | object.values "^1.1.6" 644 | prop-types "^15.8.1" 645 | resolve "^2.0.0-next.4" 646 | semver "^6.3.0" 647 | string.prototype.matchall "^4.0.8" 648 | 649 | eslint-scope@^5.1.1: 650 | version "5.1.1" 651 | resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" 652 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 653 | dependencies: 654 | esrecurse "^4.3.0" 655 | estraverse "^4.1.1" 656 | 657 | eslint-scope@^7.2.0: 658 | version "7.2.0" 659 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" 660 | integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== 661 | dependencies: 662 | esrecurse "^4.3.0" 663 | estraverse "^5.2.0" 664 | 665 | eslint-utils@^3.0.0: 666 | version "3.0.0" 667 | resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" 668 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 669 | dependencies: 670 | eslint-visitor-keys "^2.0.0" 671 | 672 | eslint-visitor-keys@^2.0.0: 673 | version "2.1.0" 674 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" 675 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 676 | 677 | eslint-visitor-keys@^3.3.0: 678 | version "3.3.0" 679 | resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" 680 | integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== 681 | 682 | eslint-visitor-keys@^3.4.1: 683 | version "3.4.1" 684 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" 685 | integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== 686 | 687 | eslint@^8.40.0: 688 | version "8.40.0" 689 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.40.0.tgz#a564cd0099f38542c4e9a2f630fa45bf33bc42a4" 690 | integrity sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ== 691 | dependencies: 692 | "@eslint-community/eslint-utils" "^4.2.0" 693 | "@eslint-community/regexpp" "^4.4.0" 694 | "@eslint/eslintrc" "^2.0.3" 695 | "@eslint/js" "8.40.0" 696 | "@humanwhocodes/config-array" "^0.11.8" 697 | "@humanwhocodes/module-importer" "^1.0.1" 698 | "@nodelib/fs.walk" "^1.2.8" 699 | ajv "^6.10.0" 700 | chalk "^4.0.0" 701 | cross-spawn "^7.0.2" 702 | debug "^4.3.2" 703 | doctrine "^3.0.0" 704 | escape-string-regexp "^4.0.0" 705 | eslint-scope "^7.2.0" 706 | eslint-visitor-keys "^3.4.1" 707 | espree "^9.5.2" 708 | esquery "^1.4.2" 709 | esutils "^2.0.2" 710 | fast-deep-equal "^3.1.3" 711 | file-entry-cache "^6.0.1" 712 | find-up "^5.0.0" 713 | glob-parent "^6.0.2" 714 | globals "^13.19.0" 715 | grapheme-splitter "^1.0.4" 716 | ignore "^5.2.0" 717 | import-fresh "^3.0.0" 718 | imurmurhash "^0.1.4" 719 | is-glob "^4.0.0" 720 | is-path-inside "^3.0.3" 721 | js-sdsl "^4.1.4" 722 | js-yaml "^4.1.0" 723 | json-stable-stringify-without-jsonify "^1.0.1" 724 | levn "^0.4.1" 725 | lodash.merge "^4.6.2" 726 | minimatch "^3.1.2" 727 | natural-compare "^1.4.0" 728 | optionator "^0.9.1" 729 | strip-ansi "^6.0.1" 730 | strip-json-comments "^3.1.0" 731 | text-table "^0.2.0" 732 | 733 | espree@^9.5.2: 734 | version "9.5.2" 735 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" 736 | integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== 737 | dependencies: 738 | acorn "^8.8.0" 739 | acorn-jsx "^5.3.2" 740 | eslint-visitor-keys "^3.4.1" 741 | 742 | esquery@^1.4.2: 743 | version "1.5.0" 744 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" 745 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 746 | dependencies: 747 | estraverse "^5.1.0" 748 | 749 | esrecurse@^4.3.0: 750 | version "4.3.0" 751 | resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" 752 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 753 | dependencies: 754 | estraverse "^5.2.0" 755 | 756 | estraverse@^4.1.1: 757 | version "4.3.0" 758 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" 759 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 760 | 761 | estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: 762 | version "5.3.0" 763 | resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" 764 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 765 | 766 | esutils@^2.0.2: 767 | version "2.0.3" 768 | resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" 769 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 770 | 771 | execa@^4.1.0: 772 | version "4.1.0" 773 | resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" 774 | integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== 775 | dependencies: 776 | cross-spawn "^7.0.0" 777 | get-stream "^5.0.0" 778 | human-signals "^1.1.1" 779 | is-stream "^2.0.0" 780 | merge-stream "^2.0.0" 781 | npm-run-path "^4.0.0" 782 | onetime "^5.1.0" 783 | signal-exit "^3.0.2" 784 | strip-final-newline "^2.0.0" 785 | 786 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 787 | version "3.1.3" 788 | resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" 789 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 790 | 791 | fast-diff@^1.1.2: 792 | version "1.2.0" 793 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" 794 | integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== 795 | 796 | fast-glob@^3.2.9: 797 | version "3.2.12" 798 | resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" 799 | integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== 800 | dependencies: 801 | "@nodelib/fs.stat" "^2.0.2" 802 | "@nodelib/fs.walk" "^1.2.3" 803 | glob-parent "^5.1.2" 804 | merge2 "^1.3.0" 805 | micromatch "^4.0.4" 806 | 807 | fast-json-stable-stringify@^2.0.0: 808 | version "2.1.0" 809 | resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" 810 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 811 | 812 | fast-levenshtein@^2.0.6: 813 | version "2.0.6" 814 | resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" 815 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 816 | 817 | fastq@^1.6.0: 818 | version "1.15.0" 819 | resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" 820 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== 821 | dependencies: 822 | reusify "^1.0.4" 823 | 824 | figures@^3.2.0: 825 | version "3.2.0" 826 | resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" 827 | integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== 828 | dependencies: 829 | escape-string-regexp "^1.0.5" 830 | 831 | file-entry-cache@^6.0.1: 832 | version "6.0.1" 833 | resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" 834 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 835 | dependencies: 836 | flat-cache "^3.0.4" 837 | 838 | fill-range@^7.0.1: 839 | version "7.0.1" 840 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" 841 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 842 | dependencies: 843 | to-regex-range "^5.0.1" 844 | 845 | find-up@^5.0.0: 846 | version "5.0.0" 847 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 848 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 849 | dependencies: 850 | locate-path "^6.0.0" 851 | path-exists "^4.0.0" 852 | 853 | flat-cache@^3.0.4: 854 | version "3.0.4" 855 | resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" 856 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 857 | dependencies: 858 | flatted "^3.1.0" 859 | rimraf "^3.0.2" 860 | 861 | flatted@^3.1.0: 862 | version "3.1.1" 863 | resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" 864 | integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== 865 | 866 | for-each@^0.3.3: 867 | version "0.3.3" 868 | resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" 869 | integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== 870 | dependencies: 871 | is-callable "^1.1.3" 872 | 873 | fs.realpath@^1.0.0: 874 | version "1.0.0" 875 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" 876 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 877 | 878 | function-bind@^1.1.1: 879 | version "1.1.1" 880 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" 881 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 882 | 883 | function.prototype.name@^1.1.5: 884 | version "1.1.5" 885 | resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz" 886 | integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== 887 | dependencies: 888 | call-bind "^1.0.2" 889 | define-properties "^1.1.3" 890 | es-abstract "^1.19.0" 891 | functions-have-names "^1.2.2" 892 | 893 | functions-have-names@^1.2.2: 894 | version "1.2.3" 895 | resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" 896 | integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== 897 | 898 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: 899 | version "1.2.0" 900 | resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz" 901 | integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== 902 | dependencies: 903 | function-bind "^1.1.1" 904 | has "^1.0.3" 905 | has-symbols "^1.0.3" 906 | 907 | get-own-enumerable-property-symbols@^3.0.0: 908 | version "3.0.2" 909 | resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" 910 | integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== 911 | 912 | get-stream@^5.0.0: 913 | version "5.2.0" 914 | resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" 915 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 916 | dependencies: 917 | pump "^3.0.0" 918 | 919 | get-symbol-description@^1.0.0: 920 | version "1.0.0" 921 | resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" 922 | integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== 923 | dependencies: 924 | call-bind "^1.0.2" 925 | get-intrinsic "^1.1.1" 926 | 927 | glob-parent@^5.1.2: 928 | version "5.1.2" 929 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" 930 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 931 | dependencies: 932 | is-glob "^4.0.1" 933 | 934 | glob-parent@^6.0.2: 935 | version "6.0.2" 936 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 937 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 938 | dependencies: 939 | is-glob "^4.0.3" 940 | 941 | glob@^7.1.3: 942 | version "7.1.6" 943 | resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" 944 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 945 | dependencies: 946 | fs.realpath "^1.0.0" 947 | inflight "^1.0.4" 948 | inherits "2" 949 | minimatch "^3.0.4" 950 | once "^1.3.0" 951 | path-is-absolute "^1.0.0" 952 | 953 | globals@^13.19.0: 954 | version "13.20.0" 955 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" 956 | integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== 957 | dependencies: 958 | type-fest "^0.20.2" 959 | 960 | globalthis@^1.0.3: 961 | version "1.0.3" 962 | resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" 963 | integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== 964 | dependencies: 965 | define-properties "^1.1.3" 966 | 967 | globby@^11.1.0: 968 | version "11.1.0" 969 | resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" 970 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 971 | dependencies: 972 | array-union "^2.1.0" 973 | dir-glob "^3.0.1" 974 | fast-glob "^3.2.9" 975 | ignore "^5.2.0" 976 | merge2 "^1.4.1" 977 | slash "^3.0.0" 978 | 979 | gopd@^1.0.1: 980 | version "1.0.1" 981 | resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" 982 | integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== 983 | dependencies: 984 | get-intrinsic "^1.1.3" 985 | 986 | grapheme-splitter@^1.0.4: 987 | version "1.0.4" 988 | resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" 989 | integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== 990 | 991 | has-bigints@^1.0.1, has-bigints@^1.0.2: 992 | version "1.0.2" 993 | resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" 994 | integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== 995 | 996 | has-flag@^3.0.0: 997 | version "3.0.0" 998 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" 999 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1000 | 1001 | has-flag@^4.0.0: 1002 | version "4.0.0" 1003 | resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" 1004 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1005 | 1006 | has-property-descriptors@^1.0.0: 1007 | version "1.0.0" 1008 | resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" 1009 | integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== 1010 | dependencies: 1011 | get-intrinsic "^1.1.1" 1012 | 1013 | has-proto@^1.0.1: 1014 | version "1.0.1" 1015 | resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" 1016 | integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== 1017 | 1018 | has-symbols@^1.0.2, has-symbols@^1.0.3: 1019 | version "1.0.3" 1020 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" 1021 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 1022 | 1023 | has-tostringtag@^1.0.0: 1024 | version "1.0.0" 1025 | resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" 1026 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== 1027 | dependencies: 1028 | has-symbols "^1.0.2" 1029 | 1030 | has@^1.0.3: 1031 | version "1.0.3" 1032 | resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" 1033 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1034 | dependencies: 1035 | function-bind "^1.1.1" 1036 | 1037 | human-signals@^1.1.1: 1038 | version "1.1.1" 1039 | resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" 1040 | integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== 1041 | 1042 | husky@^6.0.0: 1043 | version "6.0.0" 1044 | resolved "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz" 1045 | integrity sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ== 1046 | 1047 | ignore@^5.2.0: 1048 | version "5.2.4" 1049 | resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" 1050 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 1051 | 1052 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1053 | version "3.3.0" 1054 | resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" 1055 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1056 | dependencies: 1057 | parent-module "^1.0.0" 1058 | resolve-from "^4.0.0" 1059 | 1060 | imurmurhash@^0.1.4: 1061 | version "0.1.4" 1062 | resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" 1063 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1064 | 1065 | indent-string@^4.0.0: 1066 | version "4.0.0" 1067 | resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" 1068 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== 1069 | 1070 | inflight@^1.0.4: 1071 | version "1.0.6" 1072 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" 1073 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1074 | dependencies: 1075 | once "^1.3.0" 1076 | wrappy "1" 1077 | 1078 | inherits@2: 1079 | version "2.0.4" 1080 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" 1081 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1082 | 1083 | internal-slot@^1.0.3, internal-slot@^1.0.4: 1084 | version "1.0.4" 1085 | resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz" 1086 | integrity sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ== 1087 | dependencies: 1088 | get-intrinsic "^1.1.3" 1089 | has "^1.0.3" 1090 | side-channel "^1.0.4" 1091 | 1092 | is-array-buffer@^3.0.1: 1093 | version "3.0.1" 1094 | resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz" 1095 | integrity sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ== 1096 | dependencies: 1097 | call-bind "^1.0.2" 1098 | get-intrinsic "^1.1.3" 1099 | is-typed-array "^1.1.10" 1100 | 1101 | is-arrayish@^0.2.1: 1102 | version "0.2.1" 1103 | resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" 1104 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 1105 | 1106 | is-bigint@^1.0.1: 1107 | version "1.0.4" 1108 | resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" 1109 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== 1110 | dependencies: 1111 | has-bigints "^1.0.1" 1112 | 1113 | is-boolean-object@^1.1.0: 1114 | version "1.1.0" 1115 | resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz" 1116 | integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== 1117 | dependencies: 1118 | call-bind "^1.0.0" 1119 | 1120 | is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: 1121 | version "1.2.7" 1122 | resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" 1123 | integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== 1124 | 1125 | is-core-module@^2.9.0: 1126 | version "2.11.0" 1127 | resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz" 1128 | integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== 1129 | dependencies: 1130 | has "^1.0.3" 1131 | 1132 | is-date-object@^1.0.1: 1133 | version "1.0.5" 1134 | resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" 1135 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== 1136 | dependencies: 1137 | has-tostringtag "^1.0.0" 1138 | 1139 | is-extglob@^2.1.1: 1140 | version "2.1.1" 1141 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" 1142 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1143 | 1144 | is-fullwidth-code-point@^3.0.0: 1145 | version "3.0.0" 1146 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" 1147 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1148 | 1149 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: 1150 | version "4.0.3" 1151 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" 1152 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1153 | dependencies: 1154 | is-extglob "^2.1.1" 1155 | 1156 | is-negative-zero@^2.0.2: 1157 | version "2.0.2" 1158 | resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" 1159 | integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== 1160 | 1161 | is-number-object@^1.0.4: 1162 | version "1.0.4" 1163 | resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz" 1164 | integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== 1165 | 1166 | is-number@^7.0.0: 1167 | version "7.0.0" 1168 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" 1169 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1170 | 1171 | is-obj@^1.0.1: 1172 | version "1.0.1" 1173 | resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" 1174 | integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= 1175 | 1176 | is-path-inside@^3.0.3: 1177 | version "3.0.3" 1178 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 1179 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1180 | 1181 | is-regex@^1.1.4: 1182 | version "1.1.4" 1183 | resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" 1184 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== 1185 | dependencies: 1186 | call-bind "^1.0.2" 1187 | has-tostringtag "^1.0.0" 1188 | 1189 | is-regexp@^1.0.0: 1190 | version "1.0.0" 1191 | resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" 1192 | integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= 1193 | 1194 | is-shared-array-buffer@^1.0.2: 1195 | version "1.0.2" 1196 | resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" 1197 | integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== 1198 | dependencies: 1199 | call-bind "^1.0.2" 1200 | 1201 | is-stream@^2.0.0: 1202 | version "2.0.0" 1203 | resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz" 1204 | integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== 1205 | 1206 | is-string@^1.0.5, is-string@^1.0.7: 1207 | version "1.0.7" 1208 | resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" 1209 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== 1210 | dependencies: 1211 | has-tostringtag "^1.0.0" 1212 | 1213 | is-symbol@^1.0.2, is-symbol@^1.0.3: 1214 | version "1.0.4" 1215 | resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" 1216 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== 1217 | dependencies: 1218 | has-symbols "^1.0.2" 1219 | 1220 | is-typed-array@^1.1.10, is-typed-array@^1.1.9: 1221 | version "1.1.10" 1222 | resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz" 1223 | integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== 1224 | dependencies: 1225 | available-typed-arrays "^1.0.5" 1226 | call-bind "^1.0.2" 1227 | for-each "^0.3.3" 1228 | gopd "^1.0.1" 1229 | has-tostringtag "^1.0.0" 1230 | 1231 | is-unicode-supported@^0.1.0: 1232 | version "0.1.0" 1233 | resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" 1234 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== 1235 | 1236 | is-weakref@^1.0.2: 1237 | version "1.0.2" 1238 | resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" 1239 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== 1240 | dependencies: 1241 | call-bind "^1.0.2" 1242 | 1243 | isexe@^2.0.0: 1244 | version "2.0.0" 1245 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" 1246 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1247 | 1248 | js-sdsl@^4.1.4: 1249 | version "4.4.0" 1250 | resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" 1251 | integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== 1252 | 1253 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 1254 | version "4.0.0" 1255 | resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" 1256 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1257 | 1258 | js-yaml@^4.1.0: 1259 | version "4.1.0" 1260 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1261 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1262 | dependencies: 1263 | argparse "^2.0.1" 1264 | 1265 | json-parse-even-better-errors@^2.3.0: 1266 | version "2.3.1" 1267 | resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" 1268 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1269 | 1270 | json-schema-traverse@^0.4.1: 1271 | version "0.4.1" 1272 | resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" 1273 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1274 | 1275 | json-stable-stringify-without-jsonify@^1.0.1: 1276 | version "1.0.1" 1277 | resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" 1278 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1279 | 1280 | "jsx-ast-utils@^2.4.1 || ^3.0.0": 1281 | version "3.2.0" 1282 | resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz" 1283 | integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== 1284 | dependencies: 1285 | array-includes "^3.1.2" 1286 | object.assign "^4.1.2" 1287 | 1288 | levn@^0.4.1: 1289 | version "0.4.1" 1290 | resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" 1291 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1292 | dependencies: 1293 | prelude-ls "^1.2.1" 1294 | type-check "~0.4.0" 1295 | 1296 | lines-and-columns@^1.1.6: 1297 | version "1.1.6" 1298 | resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" 1299 | integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= 1300 | 1301 | lint-staged@^10.5.4: 1302 | version "10.5.4" 1303 | resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.4.tgz" 1304 | integrity sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg== 1305 | dependencies: 1306 | chalk "^4.1.0" 1307 | cli-truncate "^2.1.0" 1308 | commander "^6.2.0" 1309 | cosmiconfig "^7.0.0" 1310 | debug "^4.2.0" 1311 | dedent "^0.7.0" 1312 | enquirer "^2.3.6" 1313 | execa "^4.1.0" 1314 | listr2 "^3.2.2" 1315 | log-symbols "^4.0.0" 1316 | micromatch "^4.0.2" 1317 | normalize-path "^3.0.0" 1318 | please-upgrade-node "^3.2.0" 1319 | string-argv "0.3.1" 1320 | stringify-object "^3.3.0" 1321 | 1322 | listr2@^3.2.2: 1323 | version "3.6.2" 1324 | resolved "https://registry.npmjs.org/listr2/-/listr2-3.6.2.tgz" 1325 | integrity sha512-B2vlu7Zx/2OAMVUovJ7Tv1kQ2v2oXd0nZKzkSAcRCej269d8gkS/gupDEdNl23KQ3ZjVD8hQmifrrBFbx8F9LA== 1326 | dependencies: 1327 | chalk "^4.1.0" 1328 | cli-truncate "^2.1.0" 1329 | figures "^3.2.0" 1330 | indent-string "^4.0.0" 1331 | log-update "^4.0.0" 1332 | p-map "^4.0.0" 1333 | rxjs "^6.6.7" 1334 | through "^2.3.8" 1335 | wrap-ansi "^7.0.0" 1336 | 1337 | locate-path@^6.0.0: 1338 | version "6.0.0" 1339 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1340 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1341 | dependencies: 1342 | p-locate "^5.0.0" 1343 | 1344 | lodash.merge@^4.6.2: 1345 | version "4.6.2" 1346 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1347 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1348 | 1349 | log-symbols@^4.0.0: 1350 | version "4.1.0" 1351 | resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" 1352 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== 1353 | dependencies: 1354 | chalk "^4.1.0" 1355 | is-unicode-supported "^0.1.0" 1356 | 1357 | log-update@^4.0.0: 1358 | version "4.0.0" 1359 | resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" 1360 | integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== 1361 | dependencies: 1362 | ansi-escapes "^4.3.0" 1363 | cli-cursor "^3.1.0" 1364 | slice-ansi "^4.0.0" 1365 | wrap-ansi "^6.2.0" 1366 | 1367 | loose-envify@^1.1.0, loose-envify@^1.4.0: 1368 | version "1.4.0" 1369 | resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" 1370 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 1371 | dependencies: 1372 | js-tokens "^3.0.0 || ^4.0.0" 1373 | 1374 | lru-cache@^6.0.0: 1375 | version "6.0.0" 1376 | resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" 1377 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1378 | dependencies: 1379 | yallist "^4.0.0" 1380 | 1381 | merge-stream@^2.0.0: 1382 | version "2.0.0" 1383 | resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" 1384 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1385 | 1386 | merge2@^1.3.0, merge2@^1.4.1: 1387 | version "1.4.1" 1388 | resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" 1389 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1390 | 1391 | micromatch@^4.0.2, micromatch@^4.0.4: 1392 | version "4.0.5" 1393 | resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" 1394 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1395 | dependencies: 1396 | braces "^3.0.2" 1397 | picomatch "^2.3.1" 1398 | 1399 | mimic-fn@^2.1.0: 1400 | version "2.1.0" 1401 | resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" 1402 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1403 | 1404 | minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: 1405 | version "3.1.2" 1406 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" 1407 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1408 | dependencies: 1409 | brace-expansion "^1.1.7" 1410 | 1411 | ms@2.1.2: 1412 | version "2.1.2" 1413 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" 1414 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1415 | 1416 | natural-compare-lite@^1.4.0: 1417 | version "1.4.0" 1418 | resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" 1419 | integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== 1420 | 1421 | natural-compare@^1.4.0: 1422 | version "1.4.0" 1423 | resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" 1424 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1425 | 1426 | normalize-path@^3.0.0: 1427 | version "3.0.0" 1428 | resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" 1429 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1430 | 1431 | npm-run-path@^4.0.0: 1432 | version "4.0.1" 1433 | resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" 1434 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 1435 | dependencies: 1436 | path-key "^3.0.0" 1437 | 1438 | object-assign@^4.1.1: 1439 | version "4.1.1" 1440 | resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" 1441 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 1442 | 1443 | object-inspect@^1.12.2, object-inspect@^1.9.0: 1444 | version "1.12.3" 1445 | resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" 1446 | integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== 1447 | 1448 | object-keys@^1.1.1: 1449 | version "1.1.1" 1450 | resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" 1451 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 1452 | 1453 | object.assign@^4.1.2, object.assign@^4.1.4: 1454 | version "4.1.4" 1455 | resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" 1456 | integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== 1457 | dependencies: 1458 | call-bind "^1.0.2" 1459 | define-properties "^1.1.4" 1460 | has-symbols "^1.0.3" 1461 | object-keys "^1.1.1" 1462 | 1463 | object.entries@^1.1.6: 1464 | version "1.1.6" 1465 | resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz" 1466 | integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== 1467 | dependencies: 1468 | call-bind "^1.0.2" 1469 | define-properties "^1.1.4" 1470 | es-abstract "^1.20.4" 1471 | 1472 | object.fromentries@^2.0.6: 1473 | version "2.0.6" 1474 | resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz" 1475 | integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== 1476 | dependencies: 1477 | call-bind "^1.0.2" 1478 | define-properties "^1.1.4" 1479 | es-abstract "^1.20.4" 1480 | 1481 | object.hasown@^1.1.2: 1482 | version "1.1.2" 1483 | resolved "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz" 1484 | integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== 1485 | dependencies: 1486 | define-properties "^1.1.4" 1487 | es-abstract "^1.20.4" 1488 | 1489 | object.values@^1.1.6: 1490 | version "1.1.6" 1491 | resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz" 1492 | integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== 1493 | dependencies: 1494 | call-bind "^1.0.2" 1495 | define-properties "^1.1.4" 1496 | es-abstract "^1.20.4" 1497 | 1498 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1499 | version "1.4.0" 1500 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" 1501 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1502 | dependencies: 1503 | wrappy "1" 1504 | 1505 | onetime@^5.1.0: 1506 | version "5.1.2" 1507 | resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" 1508 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 1509 | dependencies: 1510 | mimic-fn "^2.1.0" 1511 | 1512 | optionator@^0.9.1: 1513 | version "0.9.1" 1514 | resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" 1515 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 1516 | dependencies: 1517 | deep-is "^0.1.3" 1518 | fast-levenshtein "^2.0.6" 1519 | levn "^0.4.1" 1520 | prelude-ls "^1.2.1" 1521 | type-check "^0.4.0" 1522 | word-wrap "^1.2.3" 1523 | 1524 | p-limit@^3.0.2: 1525 | version "3.1.0" 1526 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1527 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1528 | dependencies: 1529 | yocto-queue "^0.1.0" 1530 | 1531 | p-locate@^5.0.0: 1532 | version "5.0.0" 1533 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1534 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1535 | dependencies: 1536 | p-limit "^3.0.2" 1537 | 1538 | p-map@^4.0.0: 1539 | version "4.0.0" 1540 | resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" 1541 | integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== 1542 | dependencies: 1543 | aggregate-error "^3.0.0" 1544 | 1545 | parent-module@^1.0.0: 1546 | version "1.0.1" 1547 | resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" 1548 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1549 | dependencies: 1550 | callsites "^3.0.0" 1551 | 1552 | parse-json@^5.0.0: 1553 | version "5.2.0" 1554 | resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" 1555 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 1556 | dependencies: 1557 | "@babel/code-frame" "^7.0.0" 1558 | error-ex "^1.3.1" 1559 | json-parse-even-better-errors "^2.3.0" 1560 | lines-and-columns "^1.1.6" 1561 | 1562 | path-exists@^4.0.0: 1563 | version "4.0.0" 1564 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1565 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1566 | 1567 | path-is-absolute@^1.0.0: 1568 | version "1.0.1" 1569 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" 1570 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1571 | 1572 | path-key@^3.0.0, path-key@^3.1.0: 1573 | version "3.1.1" 1574 | resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" 1575 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1576 | 1577 | path-parse@^1.0.7: 1578 | version "1.0.7" 1579 | resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" 1580 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1581 | 1582 | path-type@^4.0.0: 1583 | version "4.0.0" 1584 | resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" 1585 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1586 | 1587 | picomatch@^2.3.1: 1588 | version "2.3.1" 1589 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" 1590 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1591 | 1592 | please-upgrade-node@^3.2.0: 1593 | version "3.2.0" 1594 | resolved "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz" 1595 | integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== 1596 | dependencies: 1597 | semver-compare "^1.0.0" 1598 | 1599 | prelude-ls@^1.2.1: 1600 | version "1.2.1" 1601 | resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" 1602 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1603 | 1604 | prettier-linter-helpers@^1.0.0: 1605 | version "1.0.0" 1606 | resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" 1607 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== 1608 | dependencies: 1609 | fast-diff "^1.1.2" 1610 | 1611 | prettier@^2.2.1: 1612 | version "2.2.1" 1613 | resolved "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz" 1614 | integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== 1615 | 1616 | prop-types@^15.8.1: 1617 | version "15.8.1" 1618 | resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" 1619 | integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== 1620 | dependencies: 1621 | loose-envify "^1.4.0" 1622 | object-assign "^4.1.1" 1623 | react-is "^16.13.1" 1624 | 1625 | pump@^3.0.0: 1626 | version "3.0.0" 1627 | resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" 1628 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1629 | dependencies: 1630 | end-of-stream "^1.1.0" 1631 | once "^1.3.1" 1632 | 1633 | punycode@^2.1.0: 1634 | version "2.1.1" 1635 | resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" 1636 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1637 | 1638 | queue-microtask@^1.2.2: 1639 | version "1.2.3" 1640 | resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" 1641 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 1642 | 1643 | react-dom@^17.0.2: 1644 | version "17.0.2" 1645 | resolved "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz" 1646 | integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== 1647 | dependencies: 1648 | loose-envify "^1.1.0" 1649 | object-assign "^4.1.1" 1650 | scheduler "^0.20.2" 1651 | 1652 | react-is@^16.13.1: 1653 | version "16.13.1" 1654 | resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" 1655 | integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 1656 | 1657 | react@^17.0.2: 1658 | version "17.0.2" 1659 | resolved "https://registry.npmjs.org/react/-/react-17.0.2.tgz" 1660 | integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== 1661 | dependencies: 1662 | loose-envify "^1.1.0" 1663 | object-assign "^4.1.1" 1664 | 1665 | regexp.prototype.flags@^1.4.3: 1666 | version "1.4.3" 1667 | resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" 1668 | integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== 1669 | dependencies: 1670 | call-bind "^1.0.2" 1671 | define-properties "^1.1.3" 1672 | functions-have-names "^1.2.2" 1673 | 1674 | regexpp@^3.2.0: 1675 | version "3.2.0" 1676 | resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" 1677 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 1678 | 1679 | resolve-from@^4.0.0: 1680 | version "4.0.0" 1681 | resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" 1682 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1683 | 1684 | resolve@^2.0.0-next.4: 1685 | version "2.0.0-next.4" 1686 | resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz" 1687 | integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== 1688 | dependencies: 1689 | is-core-module "^2.9.0" 1690 | path-parse "^1.0.7" 1691 | supports-preserve-symlinks-flag "^1.0.0" 1692 | 1693 | restore-cursor@^3.1.0: 1694 | version "3.1.0" 1695 | resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" 1696 | integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== 1697 | dependencies: 1698 | onetime "^5.1.0" 1699 | signal-exit "^3.0.2" 1700 | 1701 | reusify@^1.0.4: 1702 | version "1.0.4" 1703 | resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" 1704 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1705 | 1706 | rimraf@^3.0.2: 1707 | version "3.0.2" 1708 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" 1709 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1710 | dependencies: 1711 | glob "^7.1.3" 1712 | 1713 | run-parallel@^1.1.9: 1714 | version "1.2.0" 1715 | resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" 1716 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 1717 | dependencies: 1718 | queue-microtask "^1.2.2" 1719 | 1720 | rxjs@^6.6.7: 1721 | version "6.6.7" 1722 | resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" 1723 | integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== 1724 | dependencies: 1725 | tslib "^1.9.0" 1726 | 1727 | safe-regex-test@^1.0.0: 1728 | version "1.0.0" 1729 | resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" 1730 | integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== 1731 | dependencies: 1732 | call-bind "^1.0.2" 1733 | get-intrinsic "^1.1.3" 1734 | is-regex "^1.1.4" 1735 | 1736 | scheduler@^0.20.2: 1737 | version "0.20.2" 1738 | resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz" 1739 | integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== 1740 | dependencies: 1741 | loose-envify "^1.1.0" 1742 | object-assign "^4.1.1" 1743 | 1744 | semver-compare@^1.0.0: 1745 | version "1.0.0" 1746 | resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" 1747 | integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= 1748 | 1749 | semver@^6.3.0: 1750 | version "6.3.0" 1751 | resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" 1752 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1753 | 1754 | semver@^7.3.7: 1755 | version "7.3.8" 1756 | resolved "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz" 1757 | integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== 1758 | dependencies: 1759 | lru-cache "^6.0.0" 1760 | 1761 | shebang-command@^2.0.0: 1762 | version "2.0.0" 1763 | resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" 1764 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1765 | dependencies: 1766 | shebang-regex "^3.0.0" 1767 | 1768 | shebang-regex@^3.0.0: 1769 | version "3.0.0" 1770 | resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" 1771 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1772 | 1773 | side-channel@^1.0.4: 1774 | version "1.0.4" 1775 | resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" 1776 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 1777 | dependencies: 1778 | call-bind "^1.0.0" 1779 | get-intrinsic "^1.0.2" 1780 | object-inspect "^1.9.0" 1781 | 1782 | signal-exit@^3.0.2: 1783 | version "3.0.3" 1784 | resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" 1785 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 1786 | 1787 | slash@^3.0.0: 1788 | version "3.0.0" 1789 | resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" 1790 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1791 | 1792 | slice-ansi@^3.0.0: 1793 | version "3.0.0" 1794 | resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" 1795 | integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== 1796 | dependencies: 1797 | ansi-styles "^4.0.0" 1798 | astral-regex "^2.0.0" 1799 | is-fullwidth-code-point "^3.0.0" 1800 | 1801 | slice-ansi@^4.0.0: 1802 | version "4.0.0" 1803 | resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" 1804 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== 1805 | dependencies: 1806 | ansi-styles "^4.0.0" 1807 | astral-regex "^2.0.0" 1808 | is-fullwidth-code-point "^3.0.0" 1809 | 1810 | string-argv@0.3.1: 1811 | version "0.3.1" 1812 | resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" 1813 | integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== 1814 | 1815 | string-width@^4.1.0, string-width@^4.2.0: 1816 | version "4.2.2" 1817 | resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz" 1818 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== 1819 | dependencies: 1820 | emoji-regex "^8.0.0" 1821 | is-fullwidth-code-point "^3.0.0" 1822 | strip-ansi "^6.0.0" 1823 | 1824 | string.prototype.matchall@^4.0.8: 1825 | version "4.0.8" 1826 | resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz" 1827 | integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== 1828 | dependencies: 1829 | call-bind "^1.0.2" 1830 | define-properties "^1.1.4" 1831 | es-abstract "^1.20.4" 1832 | get-intrinsic "^1.1.3" 1833 | has-symbols "^1.0.3" 1834 | internal-slot "^1.0.3" 1835 | regexp.prototype.flags "^1.4.3" 1836 | side-channel "^1.0.4" 1837 | 1838 | string.prototype.trimend@^1.0.6: 1839 | version "1.0.6" 1840 | resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz" 1841 | integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== 1842 | dependencies: 1843 | call-bind "^1.0.2" 1844 | define-properties "^1.1.4" 1845 | es-abstract "^1.20.4" 1846 | 1847 | string.prototype.trimstart@^1.0.6: 1848 | version "1.0.6" 1849 | resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz" 1850 | integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== 1851 | dependencies: 1852 | call-bind "^1.0.2" 1853 | define-properties "^1.1.4" 1854 | es-abstract "^1.20.4" 1855 | 1856 | stringify-object@^3.3.0: 1857 | version "3.3.0" 1858 | resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" 1859 | integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== 1860 | dependencies: 1861 | get-own-enumerable-property-symbols "^3.0.0" 1862 | is-obj "^1.0.1" 1863 | is-regexp "^1.0.0" 1864 | 1865 | strip-ansi@^6.0.0: 1866 | version "6.0.0" 1867 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" 1868 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 1869 | dependencies: 1870 | ansi-regex "^5.0.0" 1871 | 1872 | strip-ansi@^6.0.1: 1873 | version "6.0.1" 1874 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1875 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1876 | dependencies: 1877 | ansi-regex "^5.0.1" 1878 | 1879 | strip-final-newline@^2.0.0: 1880 | version "2.0.0" 1881 | resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" 1882 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 1883 | 1884 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1885 | version "3.1.1" 1886 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" 1887 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1888 | 1889 | supports-color@^5.3.0: 1890 | version "5.5.0" 1891 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" 1892 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1893 | dependencies: 1894 | has-flag "^3.0.0" 1895 | 1896 | supports-color@^7.1.0: 1897 | version "7.2.0" 1898 | resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" 1899 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1900 | dependencies: 1901 | has-flag "^4.0.0" 1902 | 1903 | supports-preserve-symlinks-flag@^1.0.0: 1904 | version "1.0.0" 1905 | resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" 1906 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1907 | 1908 | text-table@^0.2.0: 1909 | version "0.2.0" 1910 | resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" 1911 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1912 | 1913 | through@^2.3.8: 1914 | version "2.3.8" 1915 | resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" 1916 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 1917 | 1918 | to-regex-range@^5.0.1: 1919 | version "5.0.1" 1920 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" 1921 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1922 | dependencies: 1923 | is-number "^7.0.0" 1924 | 1925 | tslib@^1.8.1, tslib@^1.9.0: 1926 | version "1.14.1" 1927 | resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" 1928 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 1929 | 1930 | tsutils@^3.21.0: 1931 | version "3.21.0" 1932 | resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" 1933 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 1934 | dependencies: 1935 | tslib "^1.8.1" 1936 | 1937 | type-check@^0.4.0, type-check@~0.4.0: 1938 | version "0.4.0" 1939 | resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" 1940 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1941 | dependencies: 1942 | prelude-ls "^1.2.1" 1943 | 1944 | type-fest@^0.20.2: 1945 | version "0.20.2" 1946 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" 1947 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1948 | 1949 | type-fest@^0.21.3: 1950 | version "0.21.3" 1951 | resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" 1952 | integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== 1953 | 1954 | typed-array-length@^1.0.4: 1955 | version "1.0.4" 1956 | resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" 1957 | integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== 1958 | dependencies: 1959 | call-bind "^1.0.2" 1960 | for-each "^0.3.3" 1961 | is-typed-array "^1.1.9" 1962 | 1963 | typescript@^4.1.2: 1964 | version "4.2.3" 1965 | resolved "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz" 1966 | integrity sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw== 1967 | 1968 | unbox-primitive@^1.0.2: 1969 | version "1.0.2" 1970 | resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" 1971 | integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== 1972 | dependencies: 1973 | call-bind "^1.0.2" 1974 | has-bigints "^1.0.2" 1975 | has-symbols "^1.0.3" 1976 | which-boxed-primitive "^1.0.2" 1977 | 1978 | uri-js@^4.2.2: 1979 | version "4.4.1" 1980 | resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" 1981 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1982 | dependencies: 1983 | punycode "^2.1.0" 1984 | 1985 | which-boxed-primitive@^1.0.2: 1986 | version "1.0.2" 1987 | resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" 1988 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== 1989 | dependencies: 1990 | is-bigint "^1.0.1" 1991 | is-boolean-object "^1.1.0" 1992 | is-number-object "^1.0.4" 1993 | is-string "^1.0.5" 1994 | is-symbol "^1.0.3" 1995 | 1996 | which-typed-array@^1.1.9: 1997 | version "1.1.9" 1998 | resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz" 1999 | integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== 2000 | dependencies: 2001 | available-typed-arrays "^1.0.5" 2002 | call-bind "^1.0.2" 2003 | for-each "^0.3.3" 2004 | gopd "^1.0.1" 2005 | has-tostringtag "^1.0.0" 2006 | is-typed-array "^1.1.10" 2007 | 2008 | which@^2.0.1: 2009 | version "2.0.2" 2010 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" 2011 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2012 | dependencies: 2013 | isexe "^2.0.0" 2014 | 2015 | word-wrap@^1.2.3: 2016 | version "1.2.3" 2017 | resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" 2018 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 2019 | 2020 | wrap-ansi@^6.2.0: 2021 | version "6.2.0" 2022 | resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" 2023 | integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== 2024 | dependencies: 2025 | ansi-styles "^4.0.0" 2026 | string-width "^4.1.0" 2027 | strip-ansi "^6.0.0" 2028 | 2029 | wrap-ansi@^7.0.0: 2030 | version "7.0.0" 2031 | resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" 2032 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2033 | dependencies: 2034 | ansi-styles "^4.0.0" 2035 | string-width "^4.1.0" 2036 | strip-ansi "^6.0.0" 2037 | 2038 | wrappy@1: 2039 | version "1.0.2" 2040 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" 2041 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2042 | 2043 | yallist@^4.0.0: 2044 | version "4.0.0" 2045 | resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" 2046 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2047 | 2048 | yaml@^1.10.0: 2049 | version "1.10.2" 2050 | resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" 2051 | integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== 2052 | 2053 | yocto-queue@^0.1.0: 2054 | version "0.1.0" 2055 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2056 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2057 | --------------------------------------------------------------------------------