From ee9aa12d19d9fba9f5e384ee62b0e820bf5043ce Mon Sep 17 00:00:00 2001 From: Alexander Bass Date: Mon, 3 Apr 2023 15:26:24 -0400 Subject: [PATCH] cleanup --- .eslintrc.json | 48 + LICENSE.txt | 675 +++++ README.md | 21 + build.sh | 3 +- client/scripts/display/html.js | 2 - client/scripts/env.js | 2 +- client/scripts/illegalaction.js | 2 +- client/scripts/interface/mainmenu/create.js | 21 +- client/scripts/interface/mainmenu/menu.js | 7 +- client/scripts/interface/mainmenu/picker.js | 53 +- package-lock.json | 2713 +++++++++++-------- package.json | 15 +- screenshots/1.png | Bin 0 -> 23865 bytes screenshots/2.png | Bin 0 -> 29154 bytes screenshots/3.png | Bin 0 -> 17830 bytes 15 files changed, 2429 insertions(+), 1133 deletions(-) create mode 100644 .eslintrc.json create mode 100644 LICENSE.txt create mode 100644 README.md create mode 100644 screenshots/1.png create mode 100644 screenshots/2.png create mode 100644 screenshots/3.png diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..816f0bc --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,48 @@ +{ + "extends": "eslint:recommended", + "env": { + "browser": true, + "node": true, + "es6": true + }, + "parserOptions": { + "ecmaVersion": 11 + }, + "rules": { + // "brace-style": ["error", "stroustrup", { "allowSingleLine": true }], + // "comma-dangle": ["error", "always-multiline"], + "sourceType": "module", + "comma-spacing": "error", + "comma-style": "error", + "curly": ["error", "multi-line", "consistent"], + "dot-location": ["error", "property"], + "handle-callback-err": "off", + "max-nested-callbacks": ["error", { "max": 4 }], + "max-statements-per-line": ["error", { "max": 2 }], + "no-console": "off", + "no-empty-function": "error", + "no-floating-decimal": "error", + // "no-inline-comments": "error", + "no-lonely-if": "error", + // "no-multi-spaces": "error", + "no-multiple-empty-lines": ["error", { "max": 2, "maxEOF": 1, "maxBOF": 0 }], + "no-shadow": ["error", { "allow": ["err", "resolve", "reject"] }], + "no-trailing-spaces": ["error"], + "no-var": "error", + "no-unreachable": "off", + "object-curly-spacing": ["error", "always"], + "prefer-const": "error", + "semi": ["error", "always"], + "space-before-blocks": "error", + "space-before-function-paren": ["error", { + "anonymous": "never", + "named": "never", + "asyncArrow": "always" + }], + "space-in-parens": "error", + "space-infix-ops": "error", + "space-unary-ops": "error", + "spaced-comment": "error", + "yoda": "error" + } +} diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..53d1f3d --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,675 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. + diff --git a/README.md b/README.md new file mode 100644 index 0000000..a3bbeae --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +# Unfinished Multiplayer Minesweeper Prototype +Back in early 2022, I wanted to make a multiplayer version of minesweeper. +The prototype is built with TypeScript, JavaScript, Spaghetti (only partly joking about that one), HTML Canvas, and Socket.io. + +to run, simply run the `build.sh` script: +```Bash +./build.sh +``` +and go to `localhost:8082` in your browser. + +Only a husk of the required features for this to be considered polished are implemented, but the basic outline of the game is there. + +I tried building the frontend without any framework — just vanilla javascript — but got bogged down and lost interest. + +Though I did not finish this project, it was a great learning experience for making a client server application. + +Anyhow, instead of having to run my code on your computer, here are some screenshots showcasing the features + +![Screenshot of game's main menu](screenshots/1.png) +![Screenshot of game creation screen](screenshots/2.png) +![Screenshot in game](screenshots/3.png) \ No newline at end of file diff --git a/build.sh b/build.sh index 8206608..fe35af3 100644 --- a/build.sh +++ b/build.sh @@ -10,6 +10,5 @@ echo "Rolling up ES6 Modules into bundle......" npx rollup -c echo "Compiling TypeScript" npx tsc -echo "Starting server......." -echo "$(tput setaf 3)~-+/\________________/==o=O=o==\________________/\+-~$(tput setaf 8)" +echo "Starting server on port 8082." node dist/server/main.js diff --git a/client/scripts/display/html.js b/client/scripts/display/html.js index e33c7da..d128a66 100644 --- a/client/scripts/display/html.js +++ b/client/scripts/display/html.js @@ -1,5 +1,3 @@ -import {game} from "../game/game.js" - export var canvas = document.getElementById('canvas'); export var ctx = canvas.getContext('2d'); export var wrapper = document.getElementById('game'); diff --git a/client/scripts/env.js b/client/scripts/env.js index 4459704..3c286d7 100644 --- a/client/scripts/env.js +++ b/client/scripts/env.js @@ -1 +1 @@ -export const IP_ADDRESS = 'http://localhost:8082/' +export const IP_ADDRESS = 'http://localhost:8082/'; diff --git a/client/scripts/illegalaction.js b/client/scripts/illegalaction.js index ddb2b18..9264131 100644 --- a/client/scripts/illegalaction.js +++ b/client/scripts/illegalaction.js @@ -18,7 +18,7 @@ export function illegalAction(data) { action = "Invalid Placement location." break; case 100: - action = "Malformed Packet" + action = "Malformed Socket Request" break; default: action = "Unknown action." diff --git a/client/scripts/interface/mainmenu/create.js b/client/scripts/interface/mainmenu/create.js index 71dd43e..42f426c 100644 --- a/client/scripts/interface/mainmenu/create.js +++ b/client/scripts/interface/mainmenu/create.js @@ -1,5 +1,4 @@ import * as net from "../../net/netcode.js" -import { changeScene } from "../scene.js" import {Picker} from "./picker.js" import {tileArray, menuArray} from "../../display/tileRenderer.js" import * as util from "../../util.js" @@ -120,16 +119,16 @@ function updateCount(mode) { } else if (mode === 2) { - if (mines > max) { - mines = max - } - if (mines < min) { - mines = min - } - percentage = Math.floor((mines / (width * height)) * 1000)/ 10 - mineBox.value = mines; - mineSlider.value = percentage * 10 - updatePercentageLabel(percentage) + if (mines > max) { + mines = max + } + if (mines < min) { + mines = min + } + percentage = Math.floor((mines / (width * height)) * 1000)/ 10 + mineBox.value = mines; + mineSlider.value = percentage * 10 + updatePercentageLabel(percentage) } diff --git a/client/scripts/interface/mainmenu/menu.js b/client/scripts/interface/mainmenu/menu.js index b4ec0c2..262f9c1 100644 --- a/client/scripts/interface/mainmenu/menu.js +++ b/client/scripts/interface/mainmenu/menu.js @@ -1,12 +1,9 @@ import * as status from "../../net/status.js" -// import {joinGame, createGame} from "../../net/netcode.js" +import {joinGame, initJoin} from "../../net/netcode.js" import { changeScene } from "../scene.js" import {ID} from "../../util.js" -const joinType = ID("joinType") -const joinGameMenu = ID("joinGame") -const createGameMenu = ID("createGame") const codeInput = ID("joinGameCode") codeInput.addEventListener("input", e => { @@ -20,7 +17,7 @@ changeScene("newgame") ID("gotoJoin").addEventListener("click", e => { if (codeInput.value.length !== 6) return console.log("error") -net.initJoin(codeInput.value) +initJoin(codeInput.value) }) ID("joinGameButton").addEventListener("click", e => { diff --git a/client/scripts/interface/mainmenu/picker.js b/client/scripts/interface/mainmenu/picker.js index 249b1a2..c3d1139 100644 --- a/client/scripts/interface/mainmenu/picker.js +++ b/client/scripts/interface/mainmenu/picker.js @@ -1,46 +1,47 @@ +import { ID } from "../../util.js"; export class Picker { - constructor(parentID, spriteSheet, ranges, style, selected = null, clickEvent){ - this.parentID = parentID + constructor(parentID, spriteSheet, ranges, style, selected = null, clickEvent) { + this.parentID = parentID; this.selected = selected; - this.buttons = [] - const buttonBar = document.getElementById(parentID); + this.buttons = []; + const buttonBar = ID(parentID); - for(let i=0;i < ranges[1]-ranges[0];i++) { - let span = document.createElement('span') - span.className = `button ${style}` - const n = i + ranges[0] + for (let i = 0; i < ranges[1] - ranges[0]; i++) { + let span = document.createElement('span'); + span.className = `button ${style}`; + const n = i + ranges[0]; span.appendChild(spriteSheet[n]); buttonBar.appendChild(span); span.no = i; span.addEventListener('click', e => { - this.select(e.target.no); - if (clickEvent instanceof Function) { - clickEvent() - } + this.select(e.target.no); + if (clickEvent instanceof Function) { + clickEvent(); + } }); - this.buttons.push(span) - }; - if (typeof selected ==="number") { - this.select(selected) + this.buttons.push(span); + } + if (typeof selected === "number") { + this.select(selected); } } select(number) { - const target = this.buttons[number] - this.selected = number - document.getElementById(this.parentID).querySelectorAll('.button').forEach(item => { - item.style =""; - item.active ="false"; - }) - target.style = "background: #4CAF50;" - target.active = "true" + const target = this.buttons[number]; + this.selected = number; + ID(this.parentID).querySelectorAll('.button').forEach(item => { + item.style = ""; + item.active = "false"; + }); + target.style = "background: #4CAF50;"; + target.active = "true"; } } export function destroy(parentID) { - const buttonBar = document.getElementById(parentID); + const buttonBar = ID(parentID); while (buttonBar.lastChild) { - buttonBar.removeChild(buttonBar.lastChild) + buttonBar.removeChild(buttonBar.lastChild); } } diff --git a/package-lock.json b/package-lock.json index 8470b39..3a79d82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,25 +1,28 @@ { - "name": "MultiplayerMinesweeper", + "name": "multiplayer_minesweeper", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "MultiplayerMinesweeper", + "name": "multiplayer_minesweeper", "version": "1.0.0", - "license": "UNLICENSED", + "license": "GPLv3", "dependencies": { "express": "^4.18.1", "sass": "^1.52.3", "socket.io": "^4.5.1", - "ts-node": "^10.8.1", - "typescript": "^4.7.4" + "ts-node": "^10.8.1" }, "devDependencies": { "@tsconfig/node16": "^1.0.3", "@types/express": "^4.17.13", "@types/node": "^18.0.0", - "rollup": "^2.75.7" + "@typescript-eslint/eslint-plugin": "^5.31.0", + "@typescript-eslint/parser": "^5.31.0", + "eslint": "^8.20.0", + "rollup": "^2.75.7", + "typescript": "^4.7.4" } }, "node_modules/@cspotcode/source-map-support": { @@ -33,18 +36,107 @@ "node": ">=12" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.0.tgz", + "integrity": "sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz", + "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.1", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.37.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.37.0.tgz", + "integrity": "sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", @@ -55,6 +147,46 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -85,11 +217,6 @@ "@types/node": "*" } }, - "node_modules/@types/component-emitter": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", - "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" - }, "node_modules/@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -105,26 +232,29 @@ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, "node_modules/@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", + "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", "dev": true, "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.29", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz", - "integrity": "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==", + "version": "4.17.33", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", + "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", "dev": true, "dependencies": { "@types/node": "*", @@ -132,16 +262,22 @@ "@types/range-parser": "*" } }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", "dev": true }, "node_modules/@types/node": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", - "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" + "version": "18.15.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", + "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==" }, "node_modules/@types/qs": { "version": "6.9.7", @@ -155,16 +291,210 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "node_modules/@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", "dev": true, "dependencies": { - "@types/mime": "^1", + "@types/mime": "*", "@types/node": "*" } }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.57.1.tgz", + "integrity": "sha512-1MeobQkQ9tztuleT3v72XmY0XuKXVXusAhryoLuU5YZ+mXoYKZP9SQ7Flulh1NX4DTjpGTc2b/eMu4u7M7dhnQ==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.57.1", + "@typescript-eslint/type-utils": "5.57.1", + "@typescript-eslint/utils": "5.57.1", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.57.1.tgz", + "integrity": "sha512-hlA0BLeVSA/wBPKdPGxoVr9Pp6GutGoY380FEhbVi0Ph4WNe8kLvqIRx76RSQt1lynZKfrXKs0/XeEk4zZycuA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.57.1", + "@typescript-eslint/types": "5.57.1", + "@typescript-eslint/typescript-estree": "5.57.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.57.1.tgz", + "integrity": "sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.57.1", + "@typescript-eslint/visitor-keys": "5.57.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.57.1.tgz", + "integrity": "sha512-/RIPQyx60Pt6ga86hKXesXkJ2WOS4UemFrmmq/7eOyiYjYv/MUSHPlkhU6k9T9W1ytnTJueqASW+wOmW4KrViw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.57.1", + "@typescript-eslint/utils": "5.57.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.57.1.tgz", + "integrity": "sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.1.tgz", + "integrity": "sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.57.1", + "@typescript-eslint/visitor-keys": "5.57.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.57.1.tgz", + "integrity": "sha512-kN6vzzf9NkEtawECqze6v99LtmDiUJCVpvieTFA1uL7/jDghiJGubGZ5csicYHU1Xoqb3oH/R5cN5df6W41Nfg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.57.1", + "@typescript-eslint/types": "5.57.1", + "@typescript-eslint/typescript-estree": "5.57.1", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.57.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.1.tgz", + "integrity": "sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.57.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -178,9 +508,9 @@ } }, "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "bin": { "acorn": "bin/acorn" }, @@ -188,6 +518,15 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", @@ -196,10 +535,50 @@ "node": ">=0.4.0" } }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -213,11 +592,32 @@ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, "node_modules/base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", @@ -235,9 +635,9 @@ } }, "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -247,7 +647,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.10.3", + "qs": "6.11.0", "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -257,6 +657,29 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -288,6 +711,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -314,10 +762,40 @@ "fsevents": "~2.3.2" } }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/content-disposition": { "version": "0.5.4", @@ -331,9 +809,9 @@ } }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { "node": ">= 0.6" } @@ -368,14 +846,42 @@ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "dependencies": { - "ms": "2.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -401,6 +907,30 @@ "node": ">=0.3.1" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -415,9 +945,9 @@ } }, "node_modules/engine.io": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", - "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.1.tgz", + "integrity": "sha512-JFYQurD/nbsA5BSPmbaOSLa3tSVj8L6o4srSwXXY3NqE+gGUNmmPTbhn8tjzcCtSqhFgIeqef81ngny8JM25hw==", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -428,16 +958,16 @@ "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" + "ws": "~8.11.0" }, "engines": { "node": ">=10.0.0" } }, "node_modules/engine.io-parser": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", - "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", + "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==", "engines": { "node": ">=10.0.0" } @@ -450,32 +980,204 @@ "node": ">= 0.6" } }, - "node_modules/engine.io/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/engine.io/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.37.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.37.0.tgz", + "integrity": "sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.2", + "@eslint/js": "8.37.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.4.0", + "espree": "^9.5.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz", + "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/espree": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz", + "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -485,13 +1187,13 @@ } }, "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.0", + "body-parser": "1.20.1", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.5.0", @@ -510,7 +1212,7 @@ "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.10.3", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.18.0", @@ -525,6 +1227,86 @@ "node": ">= 0.10.0" } }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -553,6 +1335,54 @@ "node": ">= 0.8" } }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -569,6 +1399,12 @@ "node": ">= 0.6" } }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -588,9 +1424,9 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -600,17 +1436,79 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 6" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -622,6 +1520,15 @@ "node": ">= 0.4.0" } }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", @@ -659,10 +1566,54 @@ "node": ">=0.10.0" } }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", + "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } }, "node_modules/inherits": { "version": "2.0.4", @@ -715,6 +1666,101 @@ "node": ">=0.12.0" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-sdsl": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.0.tgz", + "integrity": "sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -733,6 +1779,15 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -741,6 +1796,19 @@ "node": ">= 0.6" } }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -771,10 +1839,34 @@ "node": ">= 0.6" } }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true }, "node_modules/negotiator": { "version": "0.6.3", @@ -801,9 +1893,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -819,6 +1911,74 @@ "node": ">= 0.8" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -827,11 +1987,47 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -843,6 +2039,15 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -855,10 +2060,19 @@ "node": ">= 0.10" } }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dependencies": { "side-channel": "^1.0.4" }, @@ -869,6 +2083,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -902,10 +2136,44 @@ "node": ">=8.10.0" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/rollup": { - "version": "2.75.7", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.7.tgz", - "integrity": "sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ==", + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -917,6 +2185,29 @@ "fsevents": "~2.3.2" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -942,9 +2233,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz", - "integrity": "sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ==", + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.60.0.tgz", + "integrity": "sha512-updbwW6fNb5gGm8qMXzVO7V4sWf7LMXnMly/JEyfbfERbVH46Fn6q02BX7/eHTdKpE7d+oTkMMQpFWNUMfFbgQ==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -957,6 +2248,21 @@ "node": ">=12.0.0" } }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -980,6 +2286,19 @@ "node": ">= 0.8.0" } }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -1004,6 +2323,27 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -1017,82 +2357,51 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/socket.io": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz", - "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz", + "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "debug": "~4.3.2", - "engine.io": "~6.2.0", - "socket.io-adapter": "~2.4.0", - "socket.io-parser": "~4.0.4" + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" }, "engines": { "node": ">=10.0.0" } }, "node_modules/socket.io-adapter": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dependencies": { + "ws": "~8.11.0" + } }, "node_modules/socket.io-parser": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", - "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.2.tgz", + "integrity": "sha512-DJtziuKypFkMMHCm2uIshOYC7QaylbtzQwiMYDuCKy3OPkjLzu4B2vAhTlqipRHHzrI0NJeBAizTK7X+6m1jVw==", "dependencies": { - "@types/component-emitter": "^1.2.10", - "component-emitter": "~1.3.0", + "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" }, "engines": { "node": ">=10.0.0" } }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socket.io-parser/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/socket.io/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socket.io/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -1109,6 +2418,48 @@ "node": ">= 0.8" } }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1129,9 +2480,9 @@ } }, "node_modules/ts-node": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", - "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -1170,6 +2521,51 @@ } } }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -1183,9 +2579,9 @@ } }, "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1202,6 +2598,15 @@ "node": ">= 0.8" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -1223,10 +2628,40 @@ "node": ">= 0.8" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, "node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", "engines": { "node": ">=10.0.0" }, @@ -1243,6 +2678,12 @@ } } }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -1250,904 +2691,18 @@ "engines": { "node": ">=6" } - } - }, - "dependencies": { - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } }, - "@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==" - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/component-emitter": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", - "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" - }, - "@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" - }, - "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.29", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz", - "integrity": "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "@types/node": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.0.tgz", - "integrity": "sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "engine.io": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", - "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", - "requires": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" + "engines": { + "node": ">=10" }, - "dependencies": { - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } - }, - "engine.io-parser": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", - "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "rollup": { - "version": "2.75.7", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.75.7.tgz", - "integrity": "sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sass": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz", - "integrity": "sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ==", - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "socket.io": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz", - "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==", - "requires": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.2.0", - "socket.io-adapter": "~2.4.0", - "socket.io-parser": "~4.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "socket.io-adapter": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==" - }, - "socket.io-parser": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", - "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", - "requires": { - "@types/component-emitter": "^1.2.10", - "component-emitter": "~1.3.0", - "debug": "~4.3.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "ts-node": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", - "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - } - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "requires": {} - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" } } } diff --git a/package.json b/package.json index 39a6ae6..ed39f37 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "MultiplayerMinesweeper", + "name": "multiplayer_minesweeper", "version": "1.0.0", "description": "", "main": "", @@ -12,18 +12,21 @@ "url": "empires" }, "author": "Alexander Bass", - "license": "UNLICENSED", + "license": "GPLv3", "dependencies": { "express": "^4.18.1", "sass": "^1.52.3", "socket.io": "^4.5.1", - "ts-node": "^10.8.1", - "typescript": "^4.7.4" + "ts-node": "^10.8.1" }, "devDependencies": { "@tsconfig/node16": "^1.0.3", "@types/express": "^4.17.13", "@types/node": "^18.0.0", - "rollup": "^2.75.7" + "@typescript-eslint/eslint-plugin": "^5.31.0", + "@typescript-eslint/parser": "^5.31.0", + "eslint": "^8.20.0", + "rollup": "^2.75.7", + "typescript": "^4.7.4" } -} +} \ No newline at end of file diff --git a/screenshots/1.png b/screenshots/1.png new file mode 100644 index 0000000000000000000000000000000000000000..832b924f23db642b4c58a0078b02a964da3c61e2 GIT binary patch literal 23865 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 a1RcOT>!x28=l_})9TFIRxaCmX5B~(A&9Hm` literal 0 HcmV?d00001 diff --git a/screenshots/2.png b/screenshots/2.png new file mode 100644 index 0000000000000000000000000000000000000000..88c01ca8636bc109fbb02ba8f3b225974df6398e GIT binary patch literal 29154 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 literal 0 HcmV?d00001 diff --git a/screenshots/3.png b/screenshots/3.png new file mode 100644 index 0000000000000000000000000000000000000000..bbdb254d9d9b17e403ec36f5fe5355a8b11a7416 GIT binary patch literal 17830 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 A?EnA( literal 0 HcmV?d00001