diff --git a/.eslintrc.js b/.eslintrc.js index 4e6567d..f73a8b9 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,5 +1,6 @@ module.exports = { env: { + browser: true, commonjs: true, es6: true, node: true diff --git a/.gitignore b/.gitignore index ee644ce..3086016 100644 --- a/.gitignore +++ b/.gitignore @@ -1,20 +1,4 @@ -# node modules -node_modules/ -package-lock.json -yarn.lock - -# vscode -.vscode/ - -# Old Datas -ServerData/ -UserData/ - -# Stream Data -stream/*.mp3 - -# Bot Config +node_modules config.json - -# Lavalink logs -lavalink/logs/ \ No newline at end of file +/lavalink/logs +.DS_Store diff --git a/Client/index.js b/Client/index.js deleted file mode 100644 index 8941cf7..0000000 --- a/Client/index.js +++ /dev/null @@ -1,38 +0,0 @@ -/** electron */ -const electron = require('electron') -const app = electron.app -let mainWindow - -/** version */ -const version = require('../package.json').version - -/** Name */ -const name = require('./package.json').name - -app.on('ready', () => { - if (!mainWindow) createMainWindow() -}) - -app.on('activate', () => { - if (!mainWindow) createMainWindow() -}) - -app.on('window-all-closed', () => { - if (process.platform !== 'darwin') app.quit() -}) - -function createMainWindow () { - mainWindow = new electron.BrowserWindow({ - title: name + ' v' + version, - width: 800, - height: 600, - icon: 'https://repository-images.githubusercontent.com/189825448/b441c500-8e39-11e9-99bb-2958359f548d', - webPreferences: { - nodeIntegration: true - }, - autoHideMenuBar: true - }).on('close', () => { - mainWindow = null - }) - mainWindow.loadFile('./src/index.html') -} diff --git a/Client/package.json b/Client/package.json deleted file mode 100644 index 0612142..0000000 --- a/Client/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "SeoaBot Client", - "version": "0.1.0", - "description": "SeoaBot Dashboard", - "main": "index.js", - "scripts": { - "test": "electron ." - }, - "repository": { - "type": "git", - "url": "git+https://github.com/seoaapp/SeoaBot.git" - }, - "author": "Seoa Bot Develoment Team", - "license": "GPL-3.0-or-later", - "bugs": { - "url": "https://github.com/seoaapp/SeoaBot/issues" - }, - "homepage": "https://github.com/seoaapp/SeoaBot#readme", - "dependencies": { - "electron": "^6.0.1" - } -} diff --git a/Client/src/index.html b/Client/src/index.html deleted file mode 100644 index 9a27d23..0000000 --- a/Client/src/index.html +++ /dev/null @@ -1,12 +0,0 @@ -
- diff --git a/LICENSE b/LICENSE deleted file mode 100644 index f288702..0000000 --- a/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - 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/QuizData/Standard.md b/QuizData/Standard.md deleted file mode 100644 index 46fc477..0000000 --- a/QuizData/Standard.md +++ /dev/null @@ -1,40 +0,0 @@ -Quizs.json의 표준 표기법 -=========================== - -## 예시 -```json -{ - "language": "c", - "question": "C언어에서 세미콜론(;)은 의무가 아닙니다.\n즉, 사람의 스타일에 따라 적을수도, 안 적을수도 있습니다.", - "explanation": "의무입니다, C언어 컴파일러(빌더)는 세미콜론으로 문장과 문장을 나눕니다.\n세미콜론을 사용하지 않을경우, 컴파일러가 컴파일(빌드)을 수행하지 못합니다.", - "answer": false, - "point": 1 -} -``` - ----------------------------------------------------------------------------------- - -## 정의 -| 변수이름 | 설명 | 자료형 | -| ----------- | ------------------------ | ----------- | -| language | 이 문제와 관련된 언어 | String | -| question | 문제 | String | -| explanation | 이 문제의 풀이 | String | -| answer | 정답 여/부 | **Boolean** | -| point | 정답일경우 가져갈 포인트 | **Number** | - ----------------------------------------------------------------------------------- - -## 서술 표준 -1. 모든 문제는 o 혹은 x으로 대답할 수 있어야 하며, 정답이 명확해야 한다 -2. 모든 문제는 평어체로 표기하되, 풀이는 경어체로 표기한다 -3. 모든 문장의 끝에는 문장의 끝을 알리는 온점이 표기하여야 한다 -4. 모든 풀이는 맨 앞에 "~입니다, ~가 아닙니다"와 같은 정답 여부를 표기하여야 한다 - ----------------------------------------------------------------------------------- - -## 기술적 표준 -1. 모든 문제들은 배열(Array)에 감싸져 있어야 한다 -2. 모든 변수는 지정된 자료형에 맞아야 한다 -3. 통일을 위해 language중 파이썬은 버전의 따라 `py2`와 `py3`로 나누어야 하며, C#은 `c#`으로 표기하고, C++은 `c++`로 표기하며 자바스크립트는 `js`로 표기한다 -4. question, explanation은 `enter`가 있으면 안되므로 `\n`을 사용해야 한다 diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index cdaffa3..0000000 --- a/appveyor.yml +++ /dev/null @@ -1,19 +0,0 @@ -environment: - nodejs_version: "8" - -install: - - npm install - -test_script: - - node --version - - npm --version - - npm test - -build: off - -on_success: - - ps: Invoke-RestMethod https://raw.githubusercontent.com/seoaapp/appveyor-discord-webhook/master/send.ps1 -o send.ps1 - - ps: ./send.ps1 success $env:WEBHOOK_URL -on_failure: - - ps: Invoke-RestMethod https://raw.githubusercontent.com/seoaapp/appveyor-discord-webhook/master/send.ps1 -o send.ps1 - - ps: ./send.ps1 failure $env:WEBHOOK_URL diff --git a/classes/index.js b/classes/index.js deleted file mode 100644 index e8f2952..0000000 --- a/classes/index.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports.bot = require('./seoa') -module.exports.m = require('./music_native') -module.exports.lm = require('./music_lavalink') -module.exports.s = require('./search') \ No newline at end of file diff --git a/classes/music_lavalink.js b/classes/music_lavalink.js deleted file mode 100644 index 51ee3d6..0000000 --- a/classes/music_lavalink.js +++ /dev/null @@ -1,154 +0,0 @@ -const fetch = require('node-fetch') -const { URLSearchParams } = require('url') - -const events = require('events') -const stableMode = false - -module.exports = class MusicServers extends events.EventEmitter { - constructor (seoa) { - super() - this.servers = new Map() - this.seoa = seoa - } - - new (gID, channel) { - this.servers.set(gID, new Server(gID, this.seoa)) - let here = this._(gID) - this.emit(`${gID}_add`, here) - if (channel) here._(channel) - return here - } - - _ (gID, channel) { - let res = this.servers.get(gID) - if (!res) { - this.new(gID, channel) - return this._(gID) - } - return res - } - - set (gID, c, channel) { - if (!c || c.name !== 'Server') return - this.servers.set(gID, c) - if (channel) this._(gID).join(channel) - } -} - -class Server extends events.EventEmitter { - constructor (gID, seoa) { - super() - this.gID = gID - this.player = null - this.player = null - this.skipSafe = false - this.volume = 50 - this.repeat = false - this.random = false // un used variable - this.playing = false - this.currentSong = null - this.songs = [] - this.stableMode = stableMode // Read-only - this.seoa = seoa - } - - async _ (channel) { - if (!channel) return this.emit('notChannel') - this.player = this.seoa.player.join( - { - guild: this.gID, - channel: channel.id, - host: this.seoa.player.nodes.first().host - }, - { selfdeaf: false, selfmute: false } - ) - } - - handler (gID) { - return new Promise(async (resolve, reject) => { - try { - let result = await this.seoa.player.get(gID) - resolve(result) - } catch (e) { - reject(e) - } - }) - } - - seek (sec) { - this.player.seek(sec * 1000 + this.player.state.position) - } - - start () { - if (!this.player) return - if (!this.playing) this.play(this.songs.shift()) - } - - play (song) { - if (!this.player || !song) return - if (this.repeat) this.songs.push(song) - this.emit('playing', song) - this.playing = true - this.currentSong = song - this.player.play(this.currentSong.track) - this.player.volume(this.volume) - - this.player.on('end', dat => { - this.playing = false - if (this.skipSafe) { - this.skipSafe = false - return this.stop() - } else if (dat.reason === 'REPLACED') return - - if (this.songs.length > 0) this.play(this.songs.shift()) - else this.stop() - }) - } - - pause () { - if (this.player) this.player[this.player.paused ? 'resume' : 'pause']() - } - - skip () { - if (this.player) this.player.end() - } - - stop (cb) { - if (this.player) { - this.seoa.player.leave(this.gID) - delete this.player - } - - if (cb) cb() - } - - setVolume (vol) { - this.emit('changeVol', this.volume, vol) - this.volume = vol - if (this.player) this.player.volume(vol) - } - - add (song, isMyList) { - if (!isMyList) this.emit('addSong', song) - this.songs.push(song) - } - - getSongs (query) { - const node = this.seoa.player.nodes.first() - const params = new URLSearchParams() - params.append('identifier', query) - return fetch( - `http://${node.host}:${node.port}/loadtracks?${params.toString()}`, - { headers: { Authorization: node.password } } - ) - .then(res => res.json()) - .then(data => data.tracks) - .catch(console.error) - } - - mylist (lID) { - /* let myList = mylist[lID] - this.emit('myList', myList) - if (myList) myList.forEach(v => { this.add(v, true) }) */ - } -} diff --git a/classes/music_native.js b/classes/music_native.js deleted file mode 100644 index 694df22..0000000 --- a/classes/music_native.js +++ /dev/null @@ -1,179 +0,0 @@ -const ytdl = require('ytdl-core') -const fs = require('fs') -const events = require('events') -const stableMode = false - -let mylist = {} -module.exports = class MusicServers extends events.EventEmitter { - constructor () { - super() - this.servers = new Map() - } - - new (gID, channel) { - this.servers.set(gID, new Server(gID)) - let here = this._(gID) - this.emit(`${gID}_add`, here) - if (channel) here._(channel) - return here - } - - _ (gID, channel) { - let res = this.servers.get(gID) - if (!res) { - this.new(gID, channel) - return this._(gID) - } - return res - } - - set (gID, c, channel) { - if (!c || c.name !== 'Server') return - this.servers.set(gID, c) - if (channel) this._(gID).join(channel) - } -} - -class Server extends events.EventEmitter { - constructor (gID) { - super() - this.gID = gID - this.conn = null - this.dispatcher = null - this.skipSafe = false - this.volume = 1 - this.repeat = false - this.random = false // un used variable - this.playing = false - this.currentSong = null - this.songs = [] - this.stableMode = stableMode // Read-only - } - - async _ (channel) { - if (!channel) return this.emit('notChannel') - if (this.conn) return this.emit('alreadyJoined') - this.conn = await channel.join() - } - - start () { - if (!this.conn) return - if (!this.playing) this.play(this.songs.shift()) - } - - play (song) { - if (!this.conn || !song) return - if (this.repeat) this.songs.push(song) - this.emit('playing', song) - this.playing = true - this.skipSafe = false - this.currentSong = song - this.dispatcher = stableMode - ? this.conn.playFile(song.path) - : this.conn.playStream( - ytdl(song.url, { filter: 'audioonly', quality: 'highestaudio' }) - ) - this.dispatcher.setVolume(this.volume) - - this.dispatcher.on('error', err => { - this.emit('error', err) - this.songs = [this.currentSong].concat(this.songs) - this.skip() - }) - - this.dispatcher.on('end', () => { - this.playing = false - if (this.skipSafe) { - this.skipSafe = false - return this.stop() - } - - if (this.songs.length > 0) this.play(this.songs.shift()) - else this.stop() - }) - } - - pause () { - if (this.dispatcher) { this.dispatcher[this.dispatcher.paused ? 'resume' : 'pause']() } - } - - fix (channel) { - if (!channel) return - if (this.currentSong) this.songs = [this.currentSong].concat(this.songs) - this.playing = false - this.leave() - this._(channel) - this.start() - } - - skip () { - if (this.dispatcher) this.dispatcher.end() - } - - stop (cb) { - if (this.dispatcher) { - this.skipSafe = true - this.dispatcher.end() - delete this.dispatcher - } - - if (cb) cb() - } - - setVolume (vol) { - this.emit('changeVol', this.volume, vol) - this.volume = vol - if (this.dispatcher) this.dispatcher.setVolume(vol) - } - - add (url, isMyList) { - const song = new Song(url) - if (!isMyList) this.emit('addSong', song) - this.songs.push(song) - } - - leave () { - if (this.conn) this.disconnect() - } - - disconnect () { - if (!this.conn) return - this.skipSafe = true - this.conn.disconnect() - delete this.conn - } - - mylist (lID) { - let myList = mylist[lID] - this.emit('myList', myList) - if (myList) { - myList.forEach(v => { - this.add(v, true) - }) - } - } -} - -class Song { - constructor (url) { - this.url = url - this.title = null - this.length = null - this.vID = null - this.thumbnail = null - this.path = null - ytdl.getInfo(url).then(inf => { - this.title = inf.title - this.length = inf.length_seconds - this.vID = inf.video_id - this.thumbnail = inf.thumbnail_url - if (!stableMode) return - this.path = `./stream/${this.vID}.mp3` - if (!fs.existsSync(this.path)) { - ytdl(url, { filter: 'audioonly', quality: 'highestaudio' }).pipe( - fs.createWriteStream(this.path) - ) - } - }) - } -} diff --git a/classes/search.js b/classes/search.js deleted file mode 100644 index b867a69..0000000 --- a/classes/search.js +++ /dev/null @@ -1,82 +0,0 @@ -const request = require('request') - -const apiUrl = 'https://www.googleapis.com/youtube/v3/search' -const method = 'GET' - -module.exports = class YoutubeSearcher { - constructor (key) { - this.apiKey = key - this.part = 'id' - this.params = {} - this.allowParams = [ - 'channelId', - 'channelType', - 'eventType', - 'onBehalfOfContentOwner', - 'order', - 'pageToken', - 'publishedAfter', - 'publishedBefore', - 'regionCode', - 'safeSearch', - 'topicId', - 'type', - 'videoCaption', - 'videoCategoryId', - 'videoDefinition', - 'videoDimension', - 'videoDuration', - 'videoEmbeddable', - 'videoLicense', - 'videoSyndicated', - 'videoType' - ] - this.allowParts = ['id', 'snippet'] - } - - addParam (t, v) { - if (!t || !this.allowParams.includes(t)) return - this.params[t] = v - return this - } - - setPart (v) { - if (!v || !this.allowParts.includes(v)) return - this.part = v - return this - } - - _ (q, c, cb) { - if (cb) return this.search(q, c, cb) - else return this.promiseSearch(q, c) - } - - search (q, c, cb, pRes, pRej) { - this.params['q'] = q - this.params['key'] = this.apiKey - this.params['part'] = this.part - this.params['maxResults'] = c || 5 - let temp = new URL(apiUrl) - - Object.keys(this.params).forEach(k => { - temp.searchParams.append(k, this.params[k]) - }) - - request(temp.href, { method: method, timeout: 1000 }, (err, res) => { - res = JSON.parse(res.body) - pRej && pRes - ? err - ? pRej(err) - : pRes(res) - : cb - ? cb(err, res) - : console.log('자네 "_" 메서드를 사용하지 않겠나?') - }) - } - - promiseSearch (q, c) { - return new Promise((resolve, reject) => { - this.search(q, c, null, resolve, reject) - }) - } -} diff --git a/classes/seoa.js b/classes/seoa.js deleted file mode 100644 index e9aea79..0000000 --- a/classes/seoa.js +++ /dev/null @@ -1,34 +0,0 @@ -const Discord = require('discord.js') -const LMusic = require('./music_lavalink') -const Music = require('./music_native') -const { PlayerManager } = require('discord.js-lavalink') - -module.exports = class Seoa extends Discord.Client { - constructor (config, db) { - super() - this.settings = config - this.db = db || null - this.m = new Music() - this.lm = new LMusic(this) - this.commands = new Discord.Collection() - this.player - - this.on('guildCreate', guild => { - if (this.db) return this.db.update('serverdata', { owner: guild.ownerID }, { id: guild.id }) - }) - - this.on('guildDelete', guild => { - if (this.db) return this.db.update('serverdata', { owner: guild.ownerID }, { id: guild.id }) - }) - - this.login(config.token) - } - - ready () { - if (this.player) return - this.player = new PlayerManager(this, this.settings.nodes, { - user: this.user.id, - shards: 0 - }, { selfdeaf: false, selfmute: false }) - } -} \ No newline at end of file diff --git a/commands/dev.js b/commands/dev.js deleted file mode 100644 index 5b5b4fa..0000000 --- a/commands/dev.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @name Seoa:Dev - * @description Developer evaluation command - */ - -/** Message */ -const i18n = require('i18n') - -exports.run = async (seoa, msg, query) => { - let server = await seoa.db.select('serverdata', { id: msg.guild.id }) - server = server[0] - if (seoa.settings.owners.includes(msg.author.id)) { - try { - // eslint-disable-next-line - eval(query.args.join(' ')) - } catch (error) { - msg.channel.send(error) - } - } else { - msg.channel.send( - i18n.__({ phrase: '403', locale: server.lang }) - ) - } -} - -exports.callSign = ['dev', 'eval'] \ No newline at end of file diff --git a/commands/help.js b/commands/help.js deleted file mode 100644 index d91d2eb..0000000 --- a/commands/help.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @name Seoa:helps - * @description Help Command - */ - -const commands = require('./') -const locale = { - en: require('../locales/en.json'), - kor: require('../locales/kor.json'), - pt: require('../locales/pt.json') -} - -exports.run = async (seoa, msg) => { - let server = await seoa.db.select('serverdata', { id: msg.guild.id }) - server = server[0] - const help = { - fields: [ - { - name: locale[server.lang].CommandBook, - value: locale[server.lang].Prefix + ' >' - } - ], - description: locale[server.lang].BETAMSG - } - - let keys = Object.keys(commands) - for (k of keys) { - if (commands[k].helps) help.fields.push({ - name: commands[k].helps.description, - value: '> ' + commands[k].helps.uses, - inline: true - }) - - if (keys.length === keys.indexOf(k) + 1) { - msg.channel.send(locale[server.lang].DMSEND) - msg.author.send({ embed: help }) - } - } -} - -exports.callSign = ['help', 'Help', '도움', '도움말'] -exports.helps = { - description: '도움말을 보여줍니다', - uses: 'help' -} diff --git a/commands/index.js b/commands/index.js deleted file mode 100644 index c87a5d9..0000000 --- a/commands/index.js +++ /dev/null @@ -1,20 +0,0 @@ -/** Default */ -module.exports.help = require('./help') -module.exports.invite = require('./invite') -module.exports.ping = require('./ping') - -/** Quiz */ -module.exports.leaderboard = require('./leaderboard') -module.exports.point = require('./point') -module.exports.quiz = require('./quiz') - -/** Music */ -module.exports.lm = require('./m_lavalink') -module.exports.m = require('./m_native') - -/** Owner */ -module.exports.notice = require('./notice') -module.exports.dev = require('./dev') - -/** Admin */ -module.exports.settings = require('./settings') \ No newline at end of file diff --git a/commands/invite.js b/commands/invite.js deleted file mode 100644 index 80a5f53..0000000 --- a/commands/invite.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * @name Seoa:Invite - * @description Bot Invite Command - */ - -/** Message */ -const i18n = require('i18n') - -exports.run = async (seoa, msg) => { - let server = await seoa.db.select('serverdata', { id: msg.guild.id }) - server = server[0] - const invite = { - description: i18n.__({ - phrase: 'Invite', - locale: server.lang - }) - } - msg.channel.send({ embed: invite }).then((err) => console.log(err)) -} - -exports.callSign = ['invite', '봇초대링크', '초대링크', 'Invite'] -exports.helps = { - description: '초대링크를 줍니다', - uses: 'invite' -} diff --git a/commands/join.js b/commands/join.js deleted file mode 100644 index d4b8927..0000000 --- a/commands/join.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @name Seoa:Join - * @description Voice Join - */ - -exports.run = (seoa, msg) => { - let channel = msg.member.voiceChannel - let here = seoa.m._(msg.guild.id) - if (channel) here.join(channel) - else return -} - -exports.callSign = ['들어와', 'join', '들어오기'] -exports.helps = { - description: '보이스 채널에 들어옵니다', - uses: 'join' -} diff --git a/commands/leaderboard.js b/commands/leaderboard.js deleted file mode 100644 index 7b80e09..0000000 --- a/commands/leaderboard.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * @name Seoa:settings - * @description settings Command - * @Thank https://stackoverflow.com/questions/37817334/javascript-bubble-sort - */ - -// i18n (locale) -const i18n = require('i18n') -i18n.configure({ - directory: './locales' -}) - -function bubble (arr) { - var len = arr.length - for (var i = 0; i < len; i++) { - for (var j = 0; j < len - i - 1; j++) { - if (arr[j].quizPoint < arr[j + 1].quizPoint) { - const temp = arr[j] - arr[j] = arr[j + 1] - arr[j + 1] = temp - } - } - } - return arr -} - -exports.run = async (seoa, msg, query) => { - let server = await seoa.db.select('serverdata', { id: msg.guild.id }) - server = server[0] - const users = await seoa.db.select('userdata') - let arr = [] - - for (const user in users) arr.push(user) - arr = bubble(arr).slice(0, parseInt(query.args[1]) || 20) - - let temp = - '```fix\n' + - i18n.__({ - phrase: 'LeaderBoardMsg', - locale: server.lang - }) + - '\n' - arr.forEach((leader, th) => { - temp += i18n.__( - { - phrase: 'LeaderBoardMsg1', - locale: server.lang - }, - th + 1, - seoa.users.find(u => u.id === leader.id).username, - leader.quizPoint - ) - }) - temp += '```' - msg.channel.send(temp) -} - -exports.callSign = ['leader', 'leaderboard', '리더보드', '리더', '보드'] -exports.helps = { - description: '리더보드를 보여줍니다', - uses: 'leaderboard' -} diff --git a/commands/leave.js b/commands/leave.js deleted file mode 100644 index 980f15d..0000000 --- a/commands/leave.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * @name Seoa:Leave - * @description Voice Leave - */ - -/** Message */ -const i18n = require('i18n') - -exports.run = async (seoa, msg, settings) => { - let server = await seoa.db.select('serverdata', { id: msg.guild.id }) - server = server[0] - if (msg.guild.voiceConnection) { - // TODO: LEAVE 에러 고치기 - msg.member.voiceChannel.leave() - msg.channel.send( - i18n.__({ phrase: 'Leave', locale: server.lang }) - ) - } -} - -exports.callSign = ['나가기', 'leave'] -exports.helps = { - description: '음성 채널을 나갑니다', - uses: 'leave' -} diff --git a/commands/m_lavalink.js b/commands/m_lavalink.js deleted file mode 100644 index ca1d425..0000000 --- a/commands/m_lavalink.js +++ /dev/null @@ -1,76 +0,0 @@ -/** - * @name Seoa:Music - * @description Music - */ - -exports.run = async (seoa, msg, query) => { - if (!seoa.settings.owners.includes(msg.author.id)) return - /** 이벤트 중복 등록 방지 */ - seoa.ready() - if (!seoa.lm.servers.hasOwnProperty(msg.guild.id)) { - seoa.lm.once(`${msg.guild.id}_add`, _here => { - _here.on('playing', song => { - msg.reply(JSON.stringify(song)) - }) - - _here.on('alreadyJoined', () => { - msg.reply('이미 접속했대') - }) - - _here.on('notChannel', () => { - msg.reply('니 채널에 없대') - }) - - _here.on('addSong', song => { - msg.reply(JSON.stringify(song)) - }) - - _here.on('changeVol', (bef, aft) => { - msg.reply(`${bef}% => ${aft}%`) - }) - }) - } - - let here = seoa.lm._(msg.guild.id, msg.member.voiceChannel) - switch (query.args[0]) { - case 'join': - here._(msg.member.voiceChannel) - break - case 'leave': - here.leave() - break - case 'search': - if (!query.args[1]) return - here.getSongs(`ytsearch: ${query.args.splice(1).join(' ')}`).then(song => { - if (song[0]) here.add(song[0]) - }) - here.start() - break - case 'play': - here.start() - break - case 'vol': - if (Number(query.args[1])) here.setVolume(Number(query.args[1])) - break - case 'seek': - if (Number(query.args[1])) here.seek(Number(query.args[1])) - break - case 'stop': - here.stop() - break - case 'skip': - here.skip() - break - case 'mylist': - if (query.args[1]) here.mylist(query.args[1]) - break - default: - msg.reply('join, leave, url [URL], play, vol [PERCENTAGE], stop, skip') - } -} - -exports.callSign = ['lm'] -exports.helps = { - description: '음악과 관련된 명령어 입니다. (사용 불가)', - uses: 'lm' -} diff --git a/commands/m_native.js b/commands/m_native.js deleted file mode 100644 index 143b60d..0000000 --- a/commands/m_native.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * @name Seoa:Music - * @description Music - */ - -exports.run = (seoa, msg, query) => { - /** 이벤트 중복 등록 방지 */ - if (!seoa.m.servers.has(msg.guild.id)) { - seoa.m.once(`${msg.guild.id}_add`, _here => { - _here.on('playing', song => { - msg.reply(JSON.stringify(song)) - }) - - _here.on('alreadyJoined', () => { - msg.reply('이미 접속했대') - }) - - _here.on('notChannel', () => { - msg.reply('니 채널에 없대') - }) - - _here.on('addSong', song => { - msg.reply(JSON.stringify(song)) - }) - - _here.on('changeVol', (bef, aft) => { - msg.reply(`${bef * 100}% => ${aft * 100}%`) - }) - }) - } - - let here = seoa.m._(msg.guild.id, msg.member.voiceChannel) - switch (query.args[0]) { - case 'join': - here._(msg.member.voiceChannel) - break - case 'leave': - here.leave() - break - case 'url': - if (!query.args[1]) return - here.add(query.args[1]) - here.start() - break - case 'play': - here.start() - break - case 'vol': - if (query.args[1] && Number(query.args[1])) here.setVolume(Number(query.args[1]) / 100) - break - case 'stop': - here.stop() - break - case 'skip': - here.skip() - break - case 'fix': - here.fix(msg.member.voiceChannel) - break - case 'mylist': - if (query.args[1]) here.mylist(query.args[1]) - break - default: - msg.reply('join, leave, url [URL], play, vol [PERCENTAGE], stop, skip') - } -} - -exports.callSign = ['m'] -exports.helps = { - description: '음악과 관련된 명령어 입니다.', - uses: 'm' -} diff --git a/commands/notice.js b/commands/notice.js deleted file mode 100644 index 110d773..0000000 --- a/commands/notice.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * @name Seoa:Notice - * @description Notice Command - */ - -const i18n = require('i18n') - -exports.run = async (seoa, msg, query) => { - let server = await seoa.db.select('serverdata', { id: msg.guild.id }) - server = server[0] - if (seoa.settings.owners.includes(msg.author.id)) { - seoa.guilds.forEach((guild) => { - if (seoa.settings.servers[guild.id].channelnoticeid === '') { - // 서버장에게 전송 - // guild.owner.send('<@' + guild.ownerID + '> 공지 채널 설정이 되지 않았습니다!\n> 서버장에게 공지를 전송합니다.\n\n' + query.args[0].toLowerCase()) - } else { - /* 설정된 채널로 보내기 */ - if (guild.channels.get(seoa.settings.servers[guild.id].channelnoticeid)) { - guild.channels - .get(seoa.settings.servers[guild.id].channelnoticeid) - .send(query.message.slice(query.command.length + 1)) - } - // console.log(guild.channels.get(seoa.settings.servers[guild.id].channelnoticeid)) - } - }) - } else { - msg.reply( - i18n.__({ phrase: '404', locale: server.lang }) - ) - } -} - -exports.callSign = ['notice', '공지'] diff --git a/commands/ping.js b/commands/ping.js deleted file mode 100644 index cdc92bf..0000000 --- a/commands/ping.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @name Seoa:Ping - * @description Seoa's ping command - */ - -/** Message */ -const i18n = require('i18n') -const { RichEmbed } = require('discord.js') - -exports.run = async (seoa, msg) => { - let pp = await msg.channel.send('Calculating...') - let msgp = i18n.__({ - phrase: 'msgping', - locale: seoa.settings.servers[msg.guild.id].lang - }) - - let p = i18n.__({ - phrase: 'ping', - locale: seoa.settings.servers[msg.guild.id].lang - }) - - let api = i18n.__({ - phrase: 'APIPING', - locale: seoa.settings.servers[msg.guild.id].lang - }) - - let pingembed = new RichEmbed() - .setTitle(p) - .setColor('RANDOM') - .setDescription(`${msgp} ${pp.createdTimestamp - msg.createdTimestamp}ms\n${api} ${Math.round(seoa.ping)}ms`) - .setFooter(msg.author.username, msg.author.avatarURL) - .setTimestamp() - - pp.edit(pingembed) -} - -exports.callSign = ['ping', '핑', '퐁', 'pong', 'pn'] -exports.helps = { - description: '봇의 핑을 보여줍니다.', - uses: 'ping' -} diff --git a/commands/play.js b/commands/play.js deleted file mode 100644 index 9682085..0000000 --- a/commands/play.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * @name Seoa:Play - * @description Music Player by YouTube & Spotify & SoundCloud & Music File & Others - */ - -const i18n = require('i18n') - -const ytdl = require('ytdl-core') - -exports.run = async (seoa, msg) => { - let server = await seoa.db.select('serverdata', { id: msg.guild.id }) - server = server[0] - const targetUrl = msg.content.split(' ')[1] - try { - if ( - msg.content.includes('youtube.com') || - msg.content.includes('youtu.be') - ) { - if (msg.member.voiceChannel) { - if (!msg.guild.voiceConnection) { - msg.member.voiceChannel.join() - } - msg.guild.voiceConnection.playStream( - ytdl(targetUrl, { audioonly: true }), - { volume: 0.5 } - ) - } else { - msg.channel.send( - i18n.__({ - phrase: 'NOTJOIN', - locale: server.lang - }) - ) - } - } else if (msg.content.includes('soundcloud')) { - } else if (msg.content.includes('spotify')) { - } else if (msg.content.includes('')) { - if (msg.member.voiceChannel) { - if (!msg.guild.voiceConnection) { - msg.member.voiceChannel.join() - } - msg.guild.voiceConnection.playStream( - msg.attachments.map((v) => v.url), - { audioonly: true }, - { volume: 0.5 } - ) - } else { - msg.channel.send( - i18n.__({ - phrase: 'NOTJOIN', - locale: server.lang - }) - ) - } - } - } catch (e) { - // console.log(URLSearchParams(e)) - msg.channel.send( - i18n.__({ - phrase: 'NOTURL', - locale: server.lang - }) - ) - } -} - -exports.callSign = ['플렝', '노래', '시작', 'play'] -exports.helps = { - description: '노래를 재생해드릴께요~', - uses: 'play' -} diff --git a/commands/point.js b/commands/point.js deleted file mode 100644 index a7ac288..0000000 --- a/commands/point.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @name Seoa:helps - * @description Help Command - */ -exports.run = () => {} -exports.callSign = ['quiz point', '퀴즈 포인트'] -exports.helps = { - description: '퀴즈 포인트를 볼 수 있습니다.', - uses: 'quiz point' -} diff --git a/commands/quiz.js b/commands/quiz.js deleted file mode 100644 index f6c7618..0000000 --- a/commands/quiz.js +++ /dev/null @@ -1,209 +0,0 @@ -/** - * @name Seoa:Quiz - * @description Quiz command - */ - -const QuizData = require('../QuizData/quizs.json') -const discord = require('discord.js') - -const i18n = require('i18n') - -exports.run = async (seoa, msg) => { - let server = await seoa.db.select('serverdata', { id: msg.guild.id }) - server = server[0] - let user = await seoa.db.select('userdata', { id: msg.author.id }) - user = user[0] - const msgArray = msg.content.split(' ') - const filter = (reaction, user) => - (reaction.emoji.name === '⭕' || reaction.emoji.name === '❌') && - user.id === msg.author.id - - let quizNum - if (msg.content.includes('point') || msg.content.includes('포인트')) { - msg.channel.send( - i18n.__( - { phrase: 'PointMsg', locale: server.lang }, - user.quizPoint - ) - ) - } else { - if (!msgArray[1]) { - quizNum = Math.floor(Math.random() * QuizData.length) - /** } else { - if (msgArray[1] < QuizData.length) { - quizNum = Math.floor(msgArray[1]) - } else if ((QuizData.filter(quiz => quiz.language === msgArray[1])).length > 0) { - const quizsFiltered = QuizData.filter(quiz => quiz.language === msgArray[1]) - quizNum = QuizData.indexOf(quizsFiltered[Math.floor(Math.random() * (quizsFiltered.length - 1))]) - } else { - const quizNumberNotExist = new discord.RichEmbed() - .setColor(0xff0000) - .addField('퀴즈 No. ' + msgArray[1] + '(을)를 찾을 수 없습니다.', '퀴즈는 No. ' + (QuizData.length - 1) + '까지만 등록되어 있습니다.') - return msg.channel.send(quizNumberNotExist) - } - } */ - const quizEmbed = new discord.RichEmbed() - .setColor('#0000ff') - .setAuthor( - i18n.__( - { phrase: 'QUIZ2', locale: server.lang }, - msg.author.username - ), - msg.author.displayAvatarURL - ) - .setTitle('Quiz No.' + quizNum) - .addField( - 'Q. ' + - QuizData[quizNum].question.replace( - '{username}', - msg.author.username - ), - i18n.__({ - phrase: 'min', - locale: server.lang - }) - ) - if (QuizData[quizNum].image) { - quizEmbed.setImage(QuizData[quizNum].image) - } - msg.channel.send(quizEmbed).then((th) => { - if (Math.floor(Math.random() * 1)) { - th.react('⭕') - setTimeout(() => { - th.react('❌') - }, 1000) - } else { - th.react('❌') - setTimeout(() => { - th.react('⭕') - }, 1000) - } - th.awaitReactions(filter, { - time: 60000, - max: 1 - }).then((collected) => { - if (!collected.array()[0]) { - const quizFailByLate = new discord.RichEmbed() - .setColor('#808080') - .setDescription( - i18n.__({ - phrase: 'QUIZMSG1', - locale: server.lang - }) - ) - .setAuthor( - i18n.__( - { - phrase: 'Over', - locale: server.lang - }, - msg.author.username - ), - msg.author.displayAvatarURL - ) - .setTitle('Quiz No.' + quizNum) - .addField( - 'Q. ' + - QuizData[quizNum].question.replace( - '{username}', - msg.author.username - ), - '**A.** ' + QuizData[quizNum].explanation - ) - if (QuizData[quizNum].image) { - quizFailByLate.setImage(QuizData[quizNum].image) - } - th.edit(quizFailByLate) - user.quizPoint-- - seoa.db.update('userdata', { quizPoint: user.quizPoint }, { id: msg.author.id }) - } else { - let Quizanswer - if (QuizData[quizNum].answer === true) { - Quizanswer = '⭕' - } else if (QuizData[quizNum].answer === false) { - Quizanswer = '❌' - } - - // 맞았을 경우 - if (collected.array()[0].emoji.name === Quizanswer) { - const quizCorrectEmbed = new discord.RichEmbed() - .setColor('#00ff00') - .setDescription( - i18n.__({ - phrase: 'IS', - locale: server.lang - }) - ) - .setAuthor( - i18n.__( - { - phrase: 'SUS', - locale: server.lang - }, - msg.author.username - ), - msg.author.displayAvatarURL - ) - .setTitle('Quiz No.' + quizNum) - .addField( - 'Q. ' + - QuizData[quizNum].question.replace( - '{username}', - msg.author.username - ), - '**A.** ' + QuizData[quizNum].explanation - ) - if (QuizData[quizNum].image) { - quizCorrectEmbed.setImage(QuizData[quizNum].image) - } - th.edit(quizCorrectEmbed) - user.quizPoint++ - seoa.db.update('userdata', { quizPoint: user.quizPoint }, { id: msg.author.id }) - } else { - // 틀렸을 경우 - const quizNotCorrectEmbed = new discord.RichEmbed() - .setColor('#ff0000') - .setDescription( - i18n.__({ - phrase: 'PR', - locale: server.lang - }) - ) - .setAuthor( - i18n.__( - { - phrase: 'NOTCORRECT', - locale: server.lang - }, - msg.author.username - ), - msg.author.displayAvatarURL - ) - .setTitle('Quiz No.' + quizNum) - .addField( - 'Q. ' + - QuizData[quizNum].question.replace( - '{username}', - msg.author.username - ), - '**A.** ' + QuizData[quizNum].explanation - ) - if (QuizData[quizNum].image) { - quizNotCorrectEmbed.setImage(QuizData[quizNum].image) - } - th.edit(quizNotCorrectEmbed) - user.quizPoint-- - seoa.db.update('userdata', { quizPoint: user.quizPoint }, { id: msg.author.id }) - } - } - }) - }) - } - } -} - -exports.callSign = ['quiz', 'Quiz', '퀴즈'] -exports.helps = { - description: '프로그래밍에 대한 퀴즈를 풀 수 있습니다.', - uses: 'quiz' -} diff --git a/commands/search.js b/commands/search.js deleted file mode 100644 index 170548c..0000000 --- a/commands/search.js +++ /dev/null @@ -1,102 +0,0 @@ -/** - * @name Seoa:search - * @description YouTube Search Command - */ - -const ytSearch = require('yt-search') -const randomHexColor = require('random-hex-color') - -const i18n = require('i18n') - -exports.run = async (seoa, msg) => { - /** Message Filter for .awaitMessages() */ - let server = await seoa.db.select('serverdata', { id: msg.guild.id }) - server = server[0] - const filter = (m) => m.author.id === msg.author.id - - msg.channel - .send( - i18n.__({ - phrase: 'YOUTUBEDEVMSG', - locale: server.lang - }) - ) - .then((m) => { - msg.channel - .awaitMessages(filter, { - max: 1, - time: 60000 - }) - .then((collect) => { - if (!collect.first()) { - m.edit( - i18n.__({ - phrase: 'Corrent', - locale: server.lang - }) - ) - m.delete(2000) - } else { - ytSearch(collect.first().content, (err, res) => { - if (err) m.channel.send(err) - - const embed = { - color: parseInt(randomHexColor().substring(1), 16), - title: - "'" + - i18n.__( - { - phrase: 'search', - locale: server.lang - }, - collect.first().content.slice(0, 200) - ), - fields: [] - } - res.videos.slice(0, 10).forEach((video, index) => { - embed.fields.push({ - name: index + 1 + '. ' + video.title, - value: i18n.__( - { - phrase: 'view', - locale: server.lang - }, - video.url, - video.duration, - video.ago, - video.views - ) - }) - }) - m.edit({ embed }) - msg.channel - .awaitMessages(filter, { - max: 1, - time: 60000 - }) - .then((collect2) => { - if (!collect2.first()) { - m.edit( - i18n.__({ - phrase: 'Corrent', - locale: server.lang - }) - ) - m.delete(2000) - } else { - if (collect2) { - // None - } - } - }) - }) - } - }) - }) -} - -exports.callSign = ['search', '검색'] -exports.helps = { - description: 'YouTube에서 검색합니다', - uses: 'search' -} diff --git a/commands/settings.js b/commands/settings.js deleted file mode 100644 index 74ece91..0000000 --- a/commands/settings.js +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @name Seoa:settings - * @description settings Command - */ - -const i18n = require('i18n') - -exports.run = async (seoa, msg, query) => { - let server = await seoa.db.select('serverdata', { id: msg.guild.id }) - server = server[0] - if (msg.member.hasPermission('ADMINISTRATOR')) { - if (query.args[0]) { - if (['lang', '언어'].includes(query.args[0].toLowerCase())) { - if ( - !( - query.args[1] === 'kor' || - query.args[1] === 'en' || - query.args[1] === 'pt' - ) - ) { - seoa.db.update('serverdata', { lang: server.en }, { id: msg.guild.id }) - msg.channel.send( - i18n.__({ - phrase: 'ENMSG', - locale: server.lang - }) - ) - } else { - seoa.db.update('serverdata', { lang: query.args[1] }, { id: msg.guild.id }) - msg.channel.send( - i18n.__( - { phrase: 'Lang', locale: server.lang }, - query.args[1] - ) - ) - } - } else if (['channel', '채널'].includes(query.args[0].toLowerCase())) { - seoa.db.update('serverdata', { channelnoticeid: msg.mentions.channels.firstKey() }, { id: msg.guild.id }) - msg.channel.send( - i18n.__({ phrase: 'su', locale: server.lang }) - ) - } - } else { - msg.channel.send( - i18n.__({ phrase: 'ch', locale: server.lang }) - ) - } - } else { - msg.channel.send( - i18n.__({ phrase: 'MISS', locale: server.lang }) - ) - } -} - -exports.callSign = ['settings', 'setting', '설정'] -exports.helps = { - description: '서버 설정을 합니다.', - uses: 'settings' -} diff --git a/config.example.json b/config.example.json deleted file mode 100644 index e90450a..0000000 --- a/config.example.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "token": "", - "prefix": ">", - "commands": "./commands", - "activity": "Awesome Musics & Quizs | >help", - "owners": ["527746745073926145", "309230935377707011", "403025222921486338", - "487912605273423883", "526958314647453706", "119550317003014144", - "393674169243402240", "420919892636598272"], - - "nodes": [ - { "host": "localhost", "port": 2333, "password": "youshallnotpass" } - ] -} \ No newline at end of file diff --git a/config.inc.json b/config.inc.json new file mode 100644 index 0000000..e24ae94 --- /dev/null +++ b/config.inc.json @@ -0,0 +1,37 @@ +{ + "prefix": ">", + "token": "", + "activity": "<[prefix]>help", + "owners": [""], + "debug": false, + + "path": { + "library": "./lib", + "classes": "<[path.library]>/classes", + "commandsOrigin": "<[path.library]>/commands", + "events": "<[path.library]>/events", + "languages": "<[path.library]>/languages" + }, "localPolicy": { + "music": { + "volumeLimit": true + } + }, "mysql": { + "enable": false, + "host": "localhost", + "port": 3306, + "user": "root", + "pass": "password", + "database": "seoa", + "charset": "utf8mb4" + }, "api": { + "youtube": { + "enable": false, + "clientID": "" + } + }, "music": { + "useNative": true, + "lavalinkNodes": [ + { "host": "localhost", "port": 2333, "password": "seoabot" } + ] + } +} \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..88fa3a6 --- /dev/null +++ b/index.js @@ -0,0 +1,4 @@ +const Seoa = require('./seoa') +const config = require('./config') +// eslint-disable-next-line no-new +new Seoa(config) diff --git a/lavalink/Lavalink.jar b/lavalink/Lavalink.jar index 8369bb4..ab8ca36 100644 Binary files a/lavalink/Lavalink.jar and b/lavalink/Lavalink.jar differ diff --git a/lib/classes/getinf.js b/lib/classes/getinf.js new file mode 100644 index 0000000..85a6549 --- /dev/null +++ b/lib/classes/getinf.js @@ -0,0 +1,101 @@ +/** + * GetInfos + * @class GetInfos + * @author UnderC + */ +class GetInfos { + /** + * @param {DB} db umysql 모듈로 만들어진 DB 커넥션 + * @param {String} userTable user 정보가 들어있는 테이블 이름 + * @param {String} serverTable guild 정보가 들어있는 테이블 이름 + * @param {String} myListTable 마이리스트 정보가 들어있는 테이블 이름 + * @param {String} customTable 커스텀 커맨드 정보가 들어있는 테이블 이름 + */ + constructor (db, userTable, serverTable, myListTable, customTable) { + if (!db) throw new Error() + this.db = db + this.u = userTable + this.s = serverTable + this.m = myListTable + this.c = customTable + } + + /** + * @param {String} table 테이블 이름 + * @param {Object} a 찾으려는 데이터 + * @param {Object} b 찾지 못하면 삽입할 데이터 + * @param {Boolean} assignBoth a와 b를 병합해서 삽입할 지 여부 + * @param {Array[Boolean]} COS Call On Self (해당 클래스에서 호출 여부) + */ + async getIns (table, a, b, assignBoth, COS = [false, false]) { + const dat = await this.db.select(table, a) + if (!dat) throw new Error() + else if (!dat[0]) { + this.db.insert(table, b ? (assignBoth ? a.assign(b) : b) : a) + return this.getIns(table, a, null, null, [true, false]) + } + + return COS[0] ? dat[0] : [(COS[1] || !!dat[0]), dat[0]] + } + + /** + * @param {String} u 찾으려는 user의 아이디 + * @returns {Object} user의 정보 + */ + getUser (u) { + return this.getIns(this.u, { id: u.id }, null, false, [true, false]) + } + + /** + * @param {String} s 찾으려는 guild의 아이디 + * @returns {Object} guild의 정보 + */ + getGuild (s) { + return this.getIns(this.s, { id: s.id }, { owner: s.ownerID }, true, [true, false]) + } + + /** + * @param {String} n 찾으려는 마이리스트 이름 + * @returns {MyList} 마이리스트 정보 + */ + async getMyList (n) { + const temp = await this.db.select(this.m, { name: n }) + return temp[0] ? new MyList({ db: this.db, table: this.m }, temp[0]) : false + } +} + +class MyList { + constructor (db, m) { + if (!m) throw new Error() + this.db = db.db + this.table = db.table + this.id = m.id + this.name = m.name + this.list = JSON.parse(m.list.split('\'').join('"')) + this.author = m.author + } + + add (id) { + if (!id || (typeof id) !== 'string') return false + this.list.push(id) + return this.update() + } + + update () { + this.db.update(this.table, { list: JSON.stringify(this.list).split('"').join('\'') }, { id: this.id }) + return this + } + + del (id) { + if (!id) return + const index = (typeof id) === 'number' + ? (this.list.length <= id ? false : id) + : ((typeof id) === 'string' ? this.list.indexOf(id) : false) + if ((typeof index) === 'number' && index >= 0) this.list.splice(index, 1) + else return false + return this.update() + } +} + +module.exports = GetInfos +module.exports.MyList = MyList diff --git a/lib/classes/index.js b/lib/classes/index.js new file mode 100644 index 0000000..fe62fdb --- /dev/null +++ b/lib/classes/index.js @@ -0,0 +1,3 @@ +/** Reload 편의성을 위해 Key 값과 파일 이름을 동일하게 맞춰주세요 */ +module.exports.Search = require('./search') +module.exports.GetInf = require('./GetInf') diff --git a/lib/classes/search.js b/lib/classes/search.js new file mode 100644 index 0000000..b09e8ed --- /dev/null +++ b/lib/classes/search.js @@ -0,0 +1,112 @@ +const ytsr = require('ytsr') + +/** + * YoutubeSearcher + * @class YoutubeSearcher + */ +class YoutubeSearcher { + addParam () { + return this + } + + setPart () { + return this + } + + /** + * @param {String} q 유튜브에 검색할 검색어 + * @param {Number} c 검색할 갯수 + * @param {?Function} cb 콜백 + * @returns {Promise | undefined} 검색 결과 Promise 또는 없음 (콜백이 없는 경우 Promise로 반환) + */ + _ (q, c, cb) { + if (cb) return this.search(q, c, cb) + else return this.promiseSearch(q, c) + } + + makeModel (temp) { + const res = [] + temp.items.forEach(item => { + /* + this.url = inf.info.uri + this.title = inf.info.title + this.author = inf.info.author + this.length = inf.info.length / 1000 + this.vID = inf.info.identifier + this.track = inf.track + ytdl.getBasicInfo(this.url).then(inf => { + this.thumbnail = inf.player_response.videoDetails.thumbnail.thumbnails[3].url + }) + */ + const durations = item.duration.split(':').map(v => Number(v)) + const duration = (durations[0] * 60 + durations[1]) * 1000 + const videoID = item.link.replace('https://www.youtube.com/watch?v=', '') + res.push({ + id: { videoId: videoID }, + info: { + uri: item.link, + title: item.title, + duration: duration, + vID: videoID, + player_response: { + videoDetails: { + thumbnail: { + thumbnails: [null, null, null, { + url: item.thumbnail + }] + } + } + } + } + }) + }) + console.log(temp) + console.log(res) + return { items: res } + } + + errHandler (err, pRej) { + if (err) { + if (!pRej) throw err + pRej(err) + } + } + + /** + * @param {String} q 유튜브에 검색할 검색어 + * @param {Number} c 검색할 갯수 + * @param {?Function} cb 콜백 + * @param {?Function} pRes Promise Resolve Function + * @param {?Function} pRej Promise Reject Function + * @returns {undefined} 콜백 또는 Promise Function를 통하여 검색 결과가 리턴됩니다. + */ + search (q, c, cb, pRes, pRej) { + ytsr.getFilters(q, (err, filters) => { + this.errHandler(err, pRej) + const filter = filters.get('Type').find(o => o.name === 'Video') + ytsr.getFilters(filter.ref, (err, filters) => { + this.errHandler(err, pRej) + ytsr(null, { limit: c, nextpageRef: filter.ref }, (err, res) => { + this.errHandler(err, pRej) + cb ? cb(this.makeModel(res)) + : pRes + ? pRes(this.makeModel(res)) + : this.errHandler(new Error()) + }) + }) + }) + } + + /** + * @param {String} q 유튜브에 검색할 검색어 + * @param {Number} c 검색할 갯수 + * @returns {Promise} 검색 결과 + */ + promiseSearch (q, c) { + return new Promise((resolve, reject) => { + this.search(q, c, null, resolve, reject) + }) + } +} + +module.exports = YoutubeSearcher diff --git a/lib/commands/blacklist.js b/lib/commands/blacklist.js new file mode 100644 index 0000000..d974456 --- /dev/null +++ b/lib/commands/blacklist.js @@ -0,0 +1,23 @@ +const Model = require('./model') +const addAlias = ['add', 'create', 'push', '추가', 'assign', 'assignment', '등록'] +const delAlias = ['del', 'remove', 'delete', '삭제', '제거'] +module.exports = class extends Model { + constructor () { + super(['blacklist', 'black', '블랙리스트', '블랙'], 'blacklist', 'blacklist') + } + + run (msg, args, p) { + const embed = new p.Embed() + const targets = msg.mentions.members + let type = -1 + if (addAlias.includes(args[1])) type = 1 + else if (delAlias.includes(args[1])) type = 0 + + if (type === -1) return + targets.forEach(t => { + p.db.update('userdata', { isBlacklist: type }, { id: t.id }) + }) + embed.addField('블랙리스트 업데이트', `${targets.size}명의 유저를 블랙리스트에 ${type === 1 ? '추가' : '제거'}했어요.`) + return { type: 'msg', aft: embed } + } +} diff --git a/lib/commands/eval.js b/lib/commands/eval.js new file mode 100644 index 0000000..0acac39 --- /dev/null +++ b/lib/commands/eval.js @@ -0,0 +1,11 @@ +const Model = require('./model') +module.exports = class extends Model { + constructor () { + super(['eval', 'dev'], 'eval', 'eval') + } + + run (msg, args, p) { + // eslint-disable-next-line no-eval + eval(args.splice(1)).join(' ') + } +} diff --git a/lib/commands/example.js b/lib/commands/example.js new file mode 100644 index 0000000..3edca77 --- /dev/null +++ b/lib/commands/example.js @@ -0,0 +1,11 @@ +const Model = require('./model') +module.exports = class extends Model { + constructor () { + super(['example'], 'example', 'example') + } + + run (msg, args, p) { + const embed = new p.Embed().setColor('RANDOM') + return { type: 'msg', aft: embed } // or msg.channel.send(embed) + } +} diff --git a/lib/commands/help.js b/lib/commands/help.js new file mode 100644 index 0000000..ffff921 --- /dev/null +++ b/lib/commands/help.js @@ -0,0 +1,22 @@ +const Model = require('./model') +const unique = require('uuniquets') +module.exports = class extends Model { + constructor () { + super(['help', '도움', '도움말'], 'help', 'help') + } + + run (msg, args, p) { + const prefix = p.client.config.prefix + const commands = unique([...p.client.commands.values()]) + const embed = new p.Embed().setTitle(p.lang.get('CommandBook')) + .setDescription(p.lang.get('Prefix', [prefix])) + + for (const c of commands) { + if (c.ownOnly ? !p.client.is(1, msg.member) : !p.client.is(2, msg.member, c.perm)) continue + const uses = prefix + c.alias.join(`, ${prefix}`) + embed.addField(p.lang.get(`cmd_${c.key}_desc`), uses, true) + } + + return { type: 'msg', aft: embed, target: msg.author } + } +} diff --git a/lib/commands/index.js b/lib/commands/index.js new file mode 100644 index 0000000..a37230f --- /dev/null +++ b/lib/commands/index.js @@ -0,0 +1,13 @@ +/** Reload 편의성을 위해 Key 값과 파일 이름을 동일하게 맞춰주세요 */ +module.exports.ping = require('./ping') +module.exports.invite = require('./invite') +module.exports.mylist = require('./mylist') +module.exports.music = require('./music') +module.exports.reload = require('./reload') +module.exports.logout = require('./logout') +module.exports.help = require('./help') +module.exports.info = require('./info') +module.exports.leaderboard = require('./leaderboard') +module.exports.quiz = require('./quiz') +module.exports.setting = require('./setting') +module.exports.blacklist = require('./blacklist') diff --git a/lib/commands/info.js b/lib/commands/info.js new file mode 100644 index 0000000..afe1583 --- /dev/null +++ b/lib/commands/info.js @@ -0,0 +1,26 @@ +const Model = require('./model') +const conv = require('utimets') +module.exports = class extends Model { + constructor () { + super(['botinfo', '봇정보'], 'botinfo', 'botinfo') + } + + run (msg, args, p) { + const u = conv(p.client.uptime / 1000) + const _ = new Date(p.client.user.createdAt) + const U = conv((new Date() - _.getTime()) / 1000) + const embed = new p.Embed().setColor('RANDOM') + .setTitle(p.lang.get('Info', [p.client.user.username])) + .setDescription(p.lang.get('From', [msg.author.username])) + .setThumbnail(p.client.user.avatarURL) + .addField('\u200B', '\u200B', true) + .addField(p.lang.get('Name&Tag', [p.client.user.username]), p.client.user.tag, true) + .addField(p.lang.get('CommandSize', [p.client.user.username]), Object.keys(p.client.commandsOrigin).length, true) + .addField(p.lang.get('UsersSize', [p.client.user.username]), p.client.users.size, true) + .addField(p.lang.get('ChannelsSize', [p.client.user.username]), p.client.channels.size, true) + .addField(p.lang.get('ServersSize', [p.client.user.username]), p.client.guilds.size, true) + .addField(p.lang.get('BotDay', [p.client.user.username]), `${_}\n${p.lang.get('Time', [U[0], U[1], U[2], Math.floor(U[3])])}`, true) + .addField(p.lang.get('UpdataDay', [p.client.user.username]), p.lang.get('Time', [u[0], u[1], u[2], Math.floor(u[3])])) + return { type: 'msg', aft: embed } + } +} diff --git a/lib/commands/invite.js b/lib/commands/invite.js new file mode 100644 index 0000000..50eac3e --- /dev/null +++ b/lib/commands/invite.js @@ -0,0 +1,12 @@ +const Model = require('./model') +module.exports = class extends Model { + constructor () { + super(['invite', '초대링크', '봇초대링크'], 'invite', 'invite') + } + + run (msg, args, p) { + const embed = new p.Embed().setColor('RANDOM') + embed.setDescription(p.lang.get('Invite')) + return { type: 'msg', aft: embed } + } +} diff --git a/lib/commands/leaderboard.js b/lib/commands/leaderboard.js new file mode 100644 index 0000000..1ffe5b9 --- /dev/null +++ b/lib/commands/leaderboard.js @@ -0,0 +1,16 @@ +const Model = require('./model') +module.exports = class extends Model { + constructor () { + super(['leader', 'leaderboard', '리더보드', '리더', '보드'], 'leaderboard', 'leaderboard') + } + + async run (msg, args, p) { + let res = `\`\`\`fix\n${p.lang.get('LeaderBoardMsg')}` + const usrs = await p.client.db.select('userdata', null, 'order by quizPoint desc limit 10') + usrs.forEach((_u, i) => { + const u = p.client.users.find(U => U.id === _u.id) + res += p.lang.get('LeaderBoardMsg1', [i + 1, u ? u.username : `UNKNOWN(${_u.id})`, _u.quizPoint]) + }) + return { type: 'msg', aft: `${res}\`\`\`` } + } +} diff --git a/lib/commands/logout.js b/lib/commands/logout.js new file mode 100644 index 0000000..7f267f4 --- /dev/null +++ b/lib/commands/logout.js @@ -0,0 +1,11 @@ +const Model = require('./model') +module.exports = class extends Model { + constructor () { + super(['logout', '로그아웃'], 'logout', 'logout', 0, true) + } + + run (msg, args, p) { + p.client.destroy() + process.exit(0) + } +} diff --git a/lib/commands/model.js b/lib/commands/model.js new file mode 100644 index 0000000..8c27b46 --- /dev/null +++ b/lib/commands/model.js @@ -0,0 +1,31 @@ +/** + * CommandModel + * @class CommandModel + */ +class CommandModel { + /** + * @param {Array} alias 명령어 호출 방법 목록 + * @param {String} name 명령어 이름 + * @param {String} commandKey lang파일에서 도움말을 불러올때 쓰는 키 이름 + * @param {String | Number} perm 디스코드 권한 + * @param {Boolean} ownOnly 봇 소유자 전용 여부 + */ + constructor (alias, name, commandKey, perm, ownOnly) { + this.alias = alias + this.name = name + this.key = commandKey + this.perm = perm || 0 + this.ownOnly = ownOnly || false + } + + /** + * @param {Message} msg 디스코드 메시지 + * @param {Array} args 명령어 인수 + * @param {Object} p 디스코드 봇 구성요소 + */ + run (msg, args, p) { + return { type: 'err', aft: `Not overrided in ${this.name} <= run[Method]` } + } +} + +module.exports = CommandModel diff --git a/lib/commands/music.js b/lib/commands/music.js new file mode 100644 index 0000000..6948423 --- /dev/null +++ b/lib/commands/music.js @@ -0,0 +1,104 @@ +const Model = require('./model') +const conv = require('utimets') + +module.exports = class extends Model { + constructor () { + super(['m', 'music', '뮤직', '음악'], 'music', 'music') + } + + async run (msg, args, p) { + args.splice(0, 1) + const embed = new p.Embed() + const policy = p.client.config.localPolicy.music + const here = msg.client.m._(msg.guild.id, msg.member.voiceChannel) + if (args[0] === 'join') here._(msg.member.voiceChannel) + else if (args[0] === 'leave') here.leave() + else if (args[0] === 'url') { + if (!args[1] || !p.client.config.music.useNative) return + here.add(args[1]) + here.start() + } else if (args[0] === 'play') here.start() + else if (args[0] === 'vol') { + const vol = Number(args[1]) + if (vol >= 0) { + if (policy.volumeLimit ? vol <= 200 : true) here.setVolume(p.client.config.music.useNative ? vol / 100 : vol) + else msg.channel.send('200% 를 넘는 볼륨으로 설정 할 수 없습니다.') + } else if (args[1]) msg.channel.send('0% 미만의 볼륨으로 설정 할 수 없습니다.') + } else if (args[0] === 'stop') here.stop() + else if (args[0] === 'skip') here.skip() + else if (args[0] === 'pause') here.pause() + else if (args[0] === 'clear') here.clear() + else if (args[0] === 'repeat') here.repeat ? here.repeat = false : here.repeat = true + else if (args[0] === 'random') here.random ? here.random = false : here.random = true + else if (args[0] === 'now') { + if (here.playing) { + const time = p.client.config.music.useNative ? here.dispatcher.time : here.player.state.position + const u = conv(here.currentSong.length - Math.floor(time / 1000)) + embed.addField(':musical_note: **지금 재생중**', `**제목** | ${here.currentSong.title}\n**길이** | ${u[1]}시간 ${u[2]}분 ${u[3]}초 남음`) + .setThumbnail(here.currentSong.thumbnail) + } else embed.setDescription('재생중인 음악이 없습니다!') + } else if (args[0] === 'list') { + let res = '' + for (const i in here.songs) res += `[${i}] **제목** | ${here.songs[i].title}\n` + embed.setTitle(':clipboard: **대기열**').setDescription(res) + } else if (args[0] === 'search') { + if (!p.search || !args[1]) return + embed.setDescription('검색 중입니다 잠시만 기다려 주십시오') + const query = args.splice(1).join(' ') + if (p.client.config.music.useNative) p.search._(query, 5).then(res => { here.add(res.items[0].id.videoId) }) + else here.getSongs(`ytsearch: ${query}`).then(res => here.add(res[0])) + } else if (args[0] === 'fix') here.fix(msg.member.voiceChannel) + else if (args[0] === 'stable') here.stableMode = true + else if (args[0] === 'unstable') here.stableMode = false + else if (args[0] === 'mylist') { + const mylist = await p.db.select('mylist', { name: args[1] }) + here.mylist(mylist[0]) + } else { + const desc = '**[] Optinal, <> Required**\n(p)m \n(p)m \n(p)m \n(p)m search \n(p)m url \n(p)m vol \n(p)m mylist ' + embed.setDescription(desc) + } + return { type: 'msg', aft: embed } + } + + handler (msg, p) { + if (!p.client.m.eventNames().includes(`${msg.guild.id}_add`)) { + p.client.m.once(`${msg.guild.id}_add`, _here => { + _here.on('playing', song => { + const u = conv(song.length) + const embed = new p.Embed() + embed.addField(':cd: **재생중!**', `**제목** | ${song.title}\n**길이** | ${u[1]}시간 ${u[2]}분 ${u[3]}초`) + .setThumbnail(song.thumbnail) + msg.channel.send(embed) + }) + + _here.on('alreadyJoined', () => { + msg.channel.send('이미 접속했대. 만약 오류라면 ``>>>m fix``를 사용해주라9! (찡긋)') + }) + + _here.on('notChannel', () => { + msg.channel.send('니 채널에 없대') + }) + + _here.on('addSong', song => { + const embed = new p.Embed() + embed.addField(':inbox_tray: **대기열 추가됨!**', `${song.title} (이)가 대기열에 추가되었습니다.`) + .setThumbnail(song.thumbnail) + msg.channel.send(embed) + }) + + _here.on('myList', m => { + const embed = new p.Embed() + embed.addField(':inbox_tray: **대기열 추가됨!**', `<@${m.author}>(이)가 만든 ${m.name} 플레이리스트\n${m.list.length}개의 항목이 대기열에 추가되었습니다.`) + msg.channel.send(embed) + }) + + _here.on('changeVol', (bef, aft) => { + const embed = new p.Embed() + const multifly = p.client.config.music.useNative ? 100 : 1 + embed.addField(':loud_sound: **볼륨 변경됨!**', `볼륨이 ${bef * multifly}% 에서 ${aft * multifly}% (으)로 변경되었습니다.`) + msg.channel.send(embed) + }) + }) + } + } +} diff --git a/lib/commands/mylist.js b/lib/commands/mylist.js new file mode 100644 index 0000000..338eb29 --- /dev/null +++ b/lib/commands/mylist.js @@ -0,0 +1,40 @@ +const Model = require('./model') +const ytdl = require('ytdl-core') +const { song } = require('umusicts') + +module.exports = class extends Model { + constructor () { + super(['mylist', '재생목록', '마이리스트'], 'mylist', 'mylist') + } + + async run (msg, args, p) { + const embed = new p.Embed() + if (args[1] && args[2]) { + const myList = await p.gi.getMyList(args[2]) + if (args[1] === 'create') { + if (myList) return embed.setDescription('이미 존재하는 재생목록입니다.') + p.db.insert('mylist', { name: args[2], author: msg.author.id, list: JSON.stringify([]) }) + embed.setDescription(`성공적으로 '${args[2]}'를 생성하였습니다!`) + } else if (args[1] === 'add') { + if (!myList) embed.setDescription('재생목록이 존재하지 않습니다.') + else if (!args[3]) embed.setDescription('query를 입력해 주세요.') + else { + const query = args.splice(3).join(' ').split(':') + if (query.length !== 2) return + if (query[0] === 'u') { + myList.add(query[1]) + embed.setDescription(query[1]) + } else if (query[0] === 's') { + const res = await p.search._(query[1], 5) + const inf = await ytdl.getInfo(res.items[0].id.videoId) + // eslint-disable-next-line new-cap + const temp = new song(inf) + myList.add(temp.url) + embed.setDescription(temp.url) + } + } + } + } else embed.setDescription('잘못된 사용법') + return { type: 'msg', aft: embed } + } +} diff --git a/lib/commands/ping.js b/lib/commands/ping.js new file mode 100644 index 0000000..e102917 --- /dev/null +++ b/lib/commands/ping.js @@ -0,0 +1,13 @@ +const Model = require('./model') +module.exports = class extends Model { + constructor () { + super(['ping', 'pong'], 'ping', 'ping') + } + + run (msg, args, p) { + const embed = new p.Embed().setColor('RANDOM') + const ping = Math.abs(new Date() - msg.createdTimestamp) + embed.addField('Pong!', p.lang.get('ping', [ping, p.client.ping])) + msg.channel.send(embed) + } +} diff --git a/lib/commands/quiz.js b/lib/commands/quiz.js new file mode 100644 index 0000000..4ebdbd3 --- /dev/null +++ b/lib/commands/quiz.js @@ -0,0 +1,48 @@ +const Model = require('./model') +const quizs = require('./quizData') +const pointAlias = ['point', '포인트', '점수'] +const reactFilter = ['❌', '⭕'] +module.exports = class extends Model { + constructor () { + super(['quiz', '퀴즈'], 'quiz', 'quiz') + } + + run (msg, args, p) { + const embed = new p.Embed().setColor(0x0000ff) + const f = (r, u) => (reactFilter.includes(r.emoji.name) && u.id === msg.author.id) + if (pointAlias.includes(args[1])) { + return { type: 'msg', aft: p.lang.get('PointMsg', [p.u.quizPoint]) } + } else { + const qN = Math.floor(Math.random() * quizs.length) + const q = quizs[qN] + embed.setAuthor(p.lang.get('QUIZ2', [msg.author.username]), msg.author.displayAvatarURL) + .setTitle(`Quiz No. ${qN}`) + .addField(`Q. ${q.question.replace('{username}', msg.author.username)}`, p.lang.get('min')) + .setImage(q.image) + msg.channel.send(embed).then(_m => { + reactFilter.forEach(r => _m.react(r)) + _m.awaitReactions(f, { time: 60000, max: 1 }).then(c => { + const C = c.array()[0]._emoji.name + const gap = Number(Number(q.answer) === reactFilter.indexOf(C)) || -1 + if (!C) { + embed.setColor(0x808080) + .setDescription(p.lang.get('QUIZMSG1')) + .setAuthor(p.lang.get('Over', [msg.author.username]), msg.author.displayAvatarURL) + } else { + if (gap === 1) { + embed.setColor(0x00ff00) + .setDescription(p.lang.get('IS')) + .setAuthor(p.lang.get('SUS', [msg.author.username]), msg.author.displayAvatarURL) + } else if (gap === -1) { + embed.setColor(0xff0000) + .setDescription(p.lang.get('PR')) + .setAuthor(p.lang.get('NOTCORRECT', [msg.author.username]), msg.author.displayAvatarURL) + } + } + _m.edit(embed.addField(`Q. ${q.question.replace('{username}', msg.author.username)}`, `**A.** ${q.explanation}`)) + p.db.update('userdata', { quizPoint: p.u.quizPoint + gap }, { id: p.u.id }) + }) + }) + } + } +} diff --git a/QuizData/quizs.json b/lib/commands/quizData.json similarity index 88% rename from QuizData/quizs.json rename to lib/commands/quizData.json index 614bd2e..a70bccc 100644 --- a/QuizData/quizs.json +++ b/lib/commands/quizData.json @@ -64,7 +64,7 @@ }, { "language": "js", - "question": "JavaScript에서 ```js\nvar a = '30'\na += true\na += 1 + 2\nconsole.log(a)```를 했을때, 출력은```\n> 34```이다.", + "question": "JavaScript에서 ```js\nvar a = \"30\"\na += true\na += 1 + 2\nconsole.log(a)```를 했을때, 출력은```\n> 34```이다.", "explanation": "\"30true3\"으로 출력됩니다, 이유는 다음과 같습니다.```diff\n+ a가 30이라는 *문자열*입니다.\n+ *문자열*에 *참/거짓*을 넣으려 할때, JS는 *참/거짓*을 *문자열*로 바꿔 맨뒤에 놓습니다.\n+ *문자열*에 *숫자*를 넣으려고 할때, JS는 *숫자*를 문자열으로 바꿔 맨뒤에 놓습니다.\n```", "answer": false, "point": 2 @@ -76,6 +76,7 @@ "answer": true, "point": 2 }, + { "language": "html", "question": "html에서 줄바꿈을 하려고 하면
을 입력해야 한다.", @@ -154,5 +155,19 @@ "answer": true, "explanation": "맞습니다, 아희는 한글로 된 언어이기 때문에 당연히 한글로 작성합니다.", "point": 2 + }, + { + "language": "js", + "question": "const, let와 var은 모두 \"똑같은 기능\"을 가진 선언문이다.", + "answer": false, + "explanation": "모두 다른 기능입니다. const는 똑같은 이름을 가진 선언문이 있다면 오류를 뜨게 해 겹쳐서는 안 될 모듈을 불러오는데 적합하며, let는 해당 scope(e.g: if(...) { let y = null }, 여기서 scope는 {}) 안에서만 효력을 가지며 var은 선언이 scope 밖으로 hoist(위에 고정)되어 여러개의 var과 조건문의 결합으로 정보를 조작할수 있는 선언문입니다.", + "point": 1 + }, + { + "language": "py3", + "question": "다음 python3 코드에서 random 값이 3이라면 'Yee'가 출력되는가?", + "answer": true, + "explanation": "맞습니다, 파이썬의 리스트에서는 1번부터 시작하는 것이 아니라 0번부터 시작합니다\n이 문제에서는 3개가 주어졌으니, 0.Yay 1.Noo 2.IDK가 되므로 3은 정해지지 않았습니다\n그래서 me의 3번째를 얻어오는 mee는 None이 될 수 밖에 없고, 최종적으로 Yee를 출력하게 됩니다.", + "point": 2 } -] +] \ No newline at end of file diff --git a/lib/commands/reload.js b/lib/commands/reload.js new file mode 100644 index 0000000..47a65b5 --- /dev/null +++ b/lib/commands/reload.js @@ -0,0 +1,13 @@ +const Model = require('./model') +module.exports = class extends Model { + constructor () { + super(['reload', '리로드'], 'reload', 'reload', 0, true) + } + + run (msg, args, p) { + const embed = new p.Embed() + p.client.load() + embed.setDescription(`${p.client.commands.size}개의 명령어\n${Object.keys(p.client.events).length}개의 이벤트\n${Object.keys(p.client.classes).length}개의 클래스 로드가 완료되었습니다.`) + return { type: 'msg', aft: embed } + } +} diff --git a/lib/commands/setting.js b/lib/commands/setting.js new file mode 100644 index 0000000..39b97bb --- /dev/null +++ b/lib/commands/setting.js @@ -0,0 +1,26 @@ +const Model = require('./model') +const allowLangs = ['ko', 'en'] +module.exports = class extends Model { + constructor () { + super(['set', 'setting', '설정', 'settings'], 'setting', 'setting') + } + + run (msg, args, p) { + const embed = new p.Embed() + if (args[1] === 'prefix') { + if (msg.member.hasPermission(8) || !args[2]) return + const before = p.g.prefix + p.db.update('serverData', { prefix: args[2] }, { id: msg.guild.id }) + embed.addField('Prefix 변경', `Prefix가 ${before}에서 ${args[2]}로 변경되었습니다!`) + } else if (args[1] === 'lang') { + if (!allowLangs.includes(args[2])) { + embed.addField('언어 변경', `지원하는 언어가 아닙니다.\n\`\`${allowLangs.join(', ')}\`\` 만 지원합니다.`) + } else { + const before = p.u.lang + p.db.update('serverData', { prefix: args[2] }, { id: msg.author.id }) + embed.addField('언어 변경', `언어가 ${before}에서 ${args[2]}로 변경되었습니다!`) + } + } + return { type: 'msg', aft: embed } + } +} diff --git a/lib/events/index.js b/lib/events/index.js new file mode 100644 index 0000000..88eb6fb --- /dev/null +++ b/lib/events/index.js @@ -0,0 +1,3 @@ +/** Reload 편의성을 위해 Key 값과 파일 이름을 동일하게 맞춰주세요 */ +module.exports.message = require('./message') +module.exports.ready = require('./ready') diff --git a/lib/events/message.js b/lib/events/message.js new file mode 100644 index 0000000..a165e6f --- /dev/null +++ b/lib/events/message.js @@ -0,0 +1,43 @@ +const Model = require('./model') +const { RichEmbed } = require('discord.js') +module.exports = class extends Model { + constructor (client) { + super(client, 'message') + } + + async run (msg) { + if (msg.author.bot || !msg.guild) return + const u = await this.gi.getUser(msg.author) + const g = await this.gi.getGuild(msg.guild) + const prefix = this.config.debug ? this.config.prefix : g.prefix + if (!msg.content.startsWith(prefix) || u.isBlacklist === 1) return + const args = msg.content.substring(prefix.length).split(' ') + const cmd = this.commands.get(args[0]) + if (!cmd) return + + const handler = (result) => { + if (!result || !result.type) return + if (result.type === 'edit') result.bef.edit(result.aft) + else if (result.type === 'msg') (result.target || msg.channel).send(result.aft) + else if (result.type === 'del') result.bef.delete() + } + + /** + * u: 유저 정보 + * g: 길드 정보 + * gi: 유저&길드&마이리스트 정보 로드 모듈 + * lang: 언어 모듈 + * search: 유튜브 검색 모듈 + */ + const lang = this.langs.get(u.lang) + const embed = new RichEmbed() + const pak = { client: this, Embed: RichEmbed, lang: lang, u: u, g: g, gi: this.gi, db: this.db, search: this.search } + if (cmd.ownOnly && !this.is(1, msg.member)) msg.channel.send(embed.setDescription(lang.get('403'))) + else if (!cmd.ownOnly && !this.is(2, msg.member, cmd.perm)) msg.channel.send(embed.setDescription(lang.get('402'))) + else { + if (cmd.handler) cmd.handler(msg, pak) + const temp = cmd.run(msg, args, pak) + if (temp) temp.then ? temp.then(result => handler(result)) : handler(temp) + } + } +} diff --git a/lib/events/model.js b/lib/events/model.js new file mode 100644 index 0000000..24bbd8c --- /dev/null +++ b/lib/events/model.js @@ -0,0 +1,21 @@ +/** + * EventModel + * @class EventModel + */ +class EventModel { + /** + * @param {Client} client 디스코드 봇 클라이언트 + * @param {String} eventName 이벤트 이름 + */ + constructor (client, eventName) { + this.client = client + this.eventName = eventName + client.on(eventName, this.run) + } + + run () { + throw new SyntaxError(`Not overrided in ${this.eventName} <= run[Method]`) + } +} + +module.exports = EventModel diff --git a/lib/events/ready.js b/lib/events/ready.js new file mode 100644 index 0000000..d2c4857 --- /dev/null +++ b/lib/events/ready.js @@ -0,0 +1,13 @@ +const Model = require('./model') +const { PlayerManager } = require('discord.js-lavalink') +module.exports = class extends Model { + constructor (client) { + super(client, 'ready') + } + + run () { + console.info(this.user.username + ' is now Online!') + this.user.setActivity(this.config.activity, { type: 'PLAYING' }) + if (!this.config.music.useNative) this.player = new PlayerManager(this, this.config.music.lavalinkNodes, { user: this.user.id, shards: 0 }) + } +} diff --git a/lib/languages/en.json b/lib/languages/en.json new file mode 100644 index 0000000..efb410a --- /dev/null +++ b/lib/languages/en.json @@ -0,0 +1,66 @@ +{ + "repository": "https://github.com/ttakkku/SeoaBot", + "inviteLink": "https://discordapp.com/oauth2/authorize?client_id=569453314551578644&permissions=8&scope=bot", + "402": "Sorry, but that command is **only** for Guild Manager.", + "403": "Sorry, but that command is **only** for SeoaBot Developers.", + "404": "Sorry, but that command is **only** for SeoaBot Staffs.", + "CommandNotFound": "Sorry, but I couldn't find that command on CMD_LIST.txt. Try >help!", + "BotNotDM": "You can't use <[0]> on Direct Message.", + "Info": "Information of <[0]>", + "From": "Requested by <[0]>", + "Name&Tag": "<[0]>'s DiscordTag", + "ID": "<[0]>'s Client ID", + "CommandSize": "Commands", + "UsersSize": "Users", + "ChannelsSize": "Channels", + "ServersSize": "Servers", + "BotDay": "<[0]>'s Account Birthday", + "UpdataDay": "<[0]>'s Last Update", + "UpTime": "Time of <[0]> is online [ Uptime ]", + "APIPING": "Delay [ API Ping ]", + "Time": "<[0]> day(s) <[1]> hour(s) <[2]> minute(s) <[3]> second(s)", + "DMSEND": "Sent CommandBook to your Direct Message!", + "BETAMSG": "This bot is BETA and Highly Unstable. Please report bugs on [issues](<[repository]>/issues).\n**[Invite Bot!](<[inviteLink]>)**\n**[Support Server](https://discord.gg/ZyJuBUJ)**", + "CommandBook": "Seoa CommandBook", + "Prefix": "Prefix: <[0]>", + "Invite": "**[Invite Bot!](<[inviteLink]>)**", + "quizTitle": "Code Quiz", + "LeaderBoardMsg": "SeoaBot <[quizTitle]> LeaderBoard", + "LeaderBoardMsg1": "Rank <[0]>: <[1]> (<[2]> Point)\n", + "Leave": "Left voice channel.", + "NOTJOIN": "I'm not in voice channel. Try >join!", + "NOTURL": "That's unsupported URL format. double check and try again.", + "QUIZMSG1": "[Request to add <[quizTitle]>!](<[repository]>/issues/new/choose)", + "PointMsg": "You have **<[0]>** Point.", + "QUIZ2": "<[0]> is solving <[quizTitle]>...", + "ENMSG": "Set language to `en` cause that language is unsupported.", + "Lang": "Set language to `<[0]>`.", + "su": "Successfully changed!", + "ch": "Please select one of `channel, lang`", + "MISS": "You aren't staff of this server. Ask Staffs to change settings!", + "min": "Time limit : **1 minute**", + "Over": "<[0]> - Time Over!", + "IS": "[Report Error of <[quizTitle]>!](<[repository]>/issues/new/choose)", + "PR": "[<[quizTitle]> Support!](<[repository]>/issues/new/choose)", + "SUS": "<[0]> - Correct Answer!", + "NOTCORRECT": "<[0]> - Wrong Answer!", + "YOUTUBEDEVMSG": "Please type what you want to search on YouTube in 1 minute. **[Highly Unstable]**", + "Corrent": "Okay, canceled.", + "search": "YouTube Results of <[0]>", + "view": "[Watch](http://youtube.com<[0]>) / length: <[1]> / Uploaded at <[2]> / Played <[3]> times", + "ping": "Seoa's Ping: <[0]>ms\nMessage ping: <[1]>ms", + + "cmd_help_desc": "도움이 필요하신가요?", + "cmd_invite_desc": "저를 초대해줘요!", + "cmd_music_desc": "음악 관련된 명령어들이 대거로 나옵니다!", + "cmd_mylist_desc": "나만의 재생목록", + "cmd_ping_desc": "핑퐁 (따꾸)!", + "cmd_reload_desc": "명령어 리로드하는 명령어입니다.", + "cmd_botinfo_desc": "봇의 정보는 다 알려줍니다(봇 토큰 뺴고요)", + "cmd_leaderboard_desc": "리더보드를 보여줍니다", + "cmd_logout_desc": "봇이 로그아웃 됩니다!", + "cmd_quiz_desc": "프로그래밍 언어 퀴즈가 나옵니다!", + "cmd_blacklist_desc":"깜방 갑니다~", + "cmd_setting_desc": "서버 세팅하는 명령어입니다.", + "cmd_eval_desc": "(일반 유저들은 쉇) 여긴 서아봇 개발자들만 쓸 수 있는 명령어라구요!" +} \ No newline at end of file diff --git a/lib/languages/index.js b/lib/languages/index.js new file mode 100644 index 0000000..d2834f4 --- /dev/null +++ b/lib/languages/index.js @@ -0,0 +1,2 @@ +module.exports.ko = require('./ko') +module.exports.en = require('./en') diff --git a/lib/languages/ko.json b/lib/languages/ko.json new file mode 100644 index 0000000..c86b650 --- /dev/null +++ b/lib/languages/ko.json @@ -0,0 +1,66 @@ +{ + "repository": "https://github.com/seoaapp/SeoaBot", + "inviteLink": "https://discordapp.com/oauth2/authorize?client_id=569453314551578644&permissions=8&scope=bot", + "402": "당신은 서버 관리자가 아닙니다!", + "403": "어디서 감히 개발자도 아닌게 까불어!", + "404": "당신은 봇 소유자 (운영자)가 아닙니다!", + "CommandNotFound": "아 저런! 그건 없는 명령이에요", + "BotNotDM": "<[0]>는 DM에서 사용하실 수 없어요!", + "Info": "<[0]>의 정보!", + "From": "<[0]>가 요청함", + "Name&Tag": "<[0]>의 DiscordTag", + "ID": "<[0]>의 클라이언트 ID", + "CommandSize": "등록된 명령어 수", + "UsersSize": "등록된 유저 수", + "ChannelsSize": "총 채널 수", + "ServersSize": "총 서버 수", + "BotDay": "<[0]>의 계정 생성 날짜", + "UpdataDay": "<[0]>의 마지막 업데이트 날짜", + "UpTime": "<[0]>의 업타임", + "APIPING": "API 핑 ( 지연시간 )", + "Time": "<[0]>일 <[1]>시간 <[2]>분 <[3]>초", + "DMSEND": "DM(PM)으로 도움말을 보냈습니다!", + "BETAMSG": "이 봇은 베타입니다. 불안정하니 버그가 발생할경우 [이슈](<[repository]>/issues)에 알려주세요 \n **[봇 초대링크!](<[inviteLink]>)** \n **[봇 서포트 주소](https://discord.gg/ZyJuBUJ)**", + "CommandBook": "Seoa CommandBook\n[Support Server](https://discord.gg/BHS5pw3)", + "Prefix": "접두사: <[0]>", + "Invite": "**[봇 초대링크!](<[inviteLink]>)**", + "quizTitle": "Code Quiz", + "LeaderBoardMsg": "SeoaBot <[quizTitle]> LeaderBoard", + "LeaderBoardMsg1": "<[0]>등: <[1]> (<[2]>점)\n", + "Leave": "음성 채널을 떠났습니다!", + "NOTJOIN": "삐빅! 음성채널에 들어와 있지 않습니다!", + "NOTURL": "삐빅! 지원하지 않는 URL입니다.", + "QUIZMSG1": "[<[quizTitle]> 추가 요청하러 가기!](<[repository]>/issues/new/choose)", + "PointMsg": "**<[0]>** 포인트 입니다.", + "QUIZ2": "<[0]>님이 <[quizTitle]>를 푸는 중입니다...", + "ENMSG": "해당 언어는 정의되어 있지 않아 `en`으로 설정되었습니다.", + "Lang": "<[0]>으로 설정되었습니다.", + "su": "성공!", + "ch": "`채널, 언어` 중에서 하나를 골라주세요", + "MISS": "당신은 권한이 없어서 설정을 못 합니다", + "min": "제한시간은 **1분**입니다.", + "Over": "<[0]>님 - 타임 오버입니다!", + "IS": "[<[quizTitle]> 오류 제보하러 가기!](<[repository]>/issues/new/choose)", + "PR": "[<[quizTitle]> 문의하러 가기!](<[repository]>/issues/new/choose)", + "SUS": "<[0]>님 - 정답입니다!", + "NOTCORRECT": "<[0]>님 - 오답입니다!", + "YOUTUBEDEVMSG": "YouTube에서 검색할 검색어를 입력해 주세요 (제한시간 1분) **[Dev]**", + "Corrent": "1분이 지나 취소되었습니다", + "search": "<[0]>'의 검색 결과", + "view": "[보기](http://youtube.com/?v=<[0]>) / 길이: <[1]> / 게시일: <[2]> / <[3]>번 재생됨", + "ping": "Seoa의 핑: <[0]>ms\nSeoa의 메세지 핑: <[1]>ms", + + "cmd_help_desc": "도움이 필요하신가요?", + "cmd_invite_desc": "저를 초대해줘요!", + "cmd_music_desc": "음악 관련된 명령어들이 대거로 나옵니다!", + "cmd_mylist_desc": "나만의 재생목록", + "cmd_ping_desc": "핑퐁 (따꾸)!", + "cmd_reload_desc": "명령어 리로드하는 명령어입니다.", + "cmd_botinfo_desc": "봇의 정보는 다 알려줍니다(봇 토큰 뺴고요)", + "cmd_leaderboard_desc": "리더보드를 보여줍니다", + "cmd_logout_desc": "봇이 로그아웃 됩니다!", + "cmd_quiz_desc": "프로그래밍 언어 퀴즈가 나옵니다!", + "cmd_blacklist_desc":"깜방 갑니다~", + "cmd_setting_desc": "서버 세팅하는 명령어입니다.", + "cmd_eval_desc": "(일반 유저들은 쉇) 여긴 서아봇 개발자들만 쓸 수 있는 명령어라구요!" +} \ No newline at end of file diff --git a/locales/en.json b/locales/en.json deleted file mode 100644 index 1e28780..0000000 --- a/locales/en.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "403": "Sorry, but that command is **only** for SeoaBot Developers.", - "404": "Sorry, but that command is **only** for SeoaBot Staffs.", - "CommandNotFound": "Sorry, but I couldn't find that command on CMD_LIST.txt. Try >help!", - "BotNotDM": "You can't use %s on Direct Message.", - "Info": "Information of %s", - "From": "Requested by %s", - "Name&Tag": "%s's DiscordTag", - "ID": "%s's Client ID", - "CommandSize": "Commands", - "UsersSize": "Users", - "ChannelsSize": "Channels", - "ServersSize": "Servers", - "BotDay": "%s's Account Birthday", - "UpdataDay": "%s's Last Update", - "UpTime": "Time of %s is online [ Uptime ]", - "APIPING": "Delay [ API Ping ]", - "Time": "%s day(s) %s hour(s) %s minute(s) %s second(s)", - "DMSEND": "Sent CommandBook to your Direct Message!", - "BETAMSG": "This bot is BETA and Highly Unstable. Please report bugs on [issues](https://github.com/ttakkku/SeoaBot/issues).\n**[Invite Bot!](https://discordapp.com/oauth2/authorize?client_id=569453314551578644&permissions=8&scope=bot)**\n**[Support Server](https://discord.gg/QJfeKYr)**", - "CommandBook": "Seoa CommandBook", - "Prefix": "Prefix:", - "Invite": "**[Invite Bot!](https://discordapp.com/oauth2/authorize?client_id=569453314551578644&permissions=8&scope=bot)**", - "LeaderBoardMsg": "SeoaBot Code Quiz LeaderBoard", - "LeaderBoardMsg1": "Rank %s: %s (%s Point)\n", - "Leave": "Left voice channel.", - "NOTJOIN": "I'm not in voice channel. Try >join!", - "NOTURL": "That's unsupported URL format. double check and try again.", - "QUIZMSG1": "[Request to add Code Quiz!](https://github.com/seoaapp/SeoaBot/issues/new/choose)", - "PointMsg": "You have **%s** Point.", - "QUIZ2": "%s is solving Code Quiz...", - "ENMSG": "Set language to `en` cause that language is unsupported.", - "Lang": "Set language to `%s`.", - "su": "Successfully changed!", - "ch": "Please select one of `channel, lang`", - "MISS": "You aren't staff of this server. Ask Staffs to change settings!", - "min": "Time limit : **1 minute**", - "Over": "%s - Time Over!", - "IS": "[Report Error of Code Quiz!](https://github.com/seoaapp/SeoaBot/issues/new/choose)", - "PR": "[Code Quiz Support!](https://github.com/seoaapp/SeoaBot/issues/new/choose)", - "SUS": "%s - Correct Answer!", - "NOTCORRECT": "%s - Wrong Answer!", - "YOUTUBEDEVMSG": "Please type what you want to search on YouTube in 1 minute. **[Highly Unstable]**", - "Corrent": "Okay, canceled.", - "search": "YouTube Results of %s", - "view": "[Watch](http://youtube.com%s) / length: %s / Uploaded at %s / Played %s times", - "ping": "Seoa's Ping:", - "msgping": "Message ping:" -} diff --git a/locales/kor.json b/locales/kor.json deleted file mode 100644 index fd51252..0000000 --- a/locales/kor.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "403": "어디서 감히 개발자도 아닌게 까불어!", - "404": "당신은 봇 소유자 (운영자)가 아닙니다!", - "CommandNotFound": "아 저런! 그건 없는 명령이에요", - "BotNotDM": "%s는 DM에서 사용하실 수 없어요!", - "Info": "%s의 정보!", - "From": "%s가 요청함", - "Name&Tag": "%s의 DiscordTag", - "ID": "%s의 클라이언트 ID", - "CommandSize": "등록된 명령어 수", - "UsersSize": "등록된 유저 수", - "ChannelsSize": "총 채널 수", - "ServersSize": "총 서버 수", - "BotDay": "%s의 계정 생성 날짜", - "UpdataDay": "%s의 마지막 업데이트 날짜", - "UpTime": "%s의 업타임", - "APIPING": "API 핑 ( 지연시간 )", - "Time": "%s일 %s시간 %s분 %s초", - "DMSEND": "DM(PM)으로 도움말을 보냈습니다!", - "BETAMSG": "이 봇은 베타입니다. 불안정하니 버그가 발생할경우 [이슈](https://github.com/ttakkku/SeoaBot/issues)에 알려주세요 \n **[봇 초대링크!](https://discordapp.com/oauth2/authorize?client_id=569453314551578644&permissions=8&scope=bot)** \n **[봇 서포트 주소](https://discord.gg/QJfeKYr)**", - "CommandBook": "Seoa CommandBook", - "Prefix": "Prefix:", - "Invite": "**[봇 초대링크!](https://discordapp.com/oauth2/authorize?client_id=569453314551578644&permissions=8&scope=bot)**", - "LeaderBoardMsg": "SeoaBot Code Quiz LeaderBoard", - "LeaderBoardMsg1": "%s등: %s (%s점)\n", - "Leave": "음성 채널을 떠났습니다!", - "NOTJOIN": "삐빅! 음성채널에 들어와 있지 않습니다!", - "NOTURL": "삐빅! 지원하지 않는 URL입니다.", - "QUIZMSG1": "[Code Quiz 추가 요청하러 가기!](https://github.com/seoaapp/SeoaBot/issues/new/choose)", - "PointMsg": "**%s** 포인트 입니다.", - "QUIZ2": "%s님이 Code Quiz를 푸는 중입니다...", - "ENMSG": "해당 언어는 정의되어 있지 않아 `en`으로 설정되었습니다.", - "Lang": "%s으로 설정되었습니다.", - "su": "성공!", - "ch": "`채널, 언어` 중에서 하나를 골라주세요", - "MISS": "당신은 권한이 없어서 설정을 못 합니다", - "min": "제한시간은 **1분**입니다.", - "Over": "%s님 - 타임 오버입니다!", - "IS": "[Code Quiz 오류 제보하러 가기!](https://github.com/seoaapp/SeoaBot/issues/new/choose)", - "PR": "[Code Quiz 문의하러 가기!](https://github.com/seoaapp/SeoaBot/issues/new/choose)", - "SUS": "%s님 - 정답입니다!", - "NOTCORRECT": "%s님 - 오답입니다!", - "YOUTUBEDEVMSG": "YouTube에서 검색할 검색어를 입력해 주세요 (제한시간 1분) **[Dev]**", - "Corrent": "1분이 지나 취소되었습니다", - "search": "%s'의 검색 결과", - "view": "[보기](http://youtube.com%s) / 길이: %s / 게시일: %s / %s번 재생됨", - "ping": "Seoa의 핑:", - "msgping": "Seoa의 메세지 핑:" -} diff --git a/locales/pt.json b/locales/pt.json deleted file mode 100644 index 4fcbba4..0000000 --- a/locales/pt.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "403": "Se você não é programador, pra que está resolvendo isso? kk", - "404": "Você não tem permissão de desenvolvedor.", - "CommandNotFound": "Ops, esse comando não existe!", - "BotNotDM": "O %s não pode ser usado nos DM(PV)", - "Info": "Informações de %s:", - "From": "Pedido por %s", - "Name&Tag": "DiscordTag de %s", - "ID": "ID de cliente do %s", - "CommandSize": "Quantidade de comandos registrados:", - "UsersSize": "Quantidade de usuários:", - "ChannelsSize": "Quantidade de canais:", - "ServersSize": "Quantidade de servidores:", - "BotDay": "Data de criação do %s:", - "UpdataDay": "Data de último update do %s:", - "UpTime": "Tempo Online de %s:", - "APIPING": "Ping do WebSocket(API):", - "Time": "%s dia(s) e %s hora(s) e %s minuto(s) e %s segundo(s)", - "DMSEND": "Mandei a página de ajuda para o seu DM(PV)", - "BETAMSG": "Como esse bot é beta, se houver algum erro dirija-se para [Bugs&Erros](https://github.com/ttakkku/SeoaBot/issues) por favor \n **[Link do bot](https://discordapp.com/oauth2/authorize?client_id=569453314551578644&permissions=8&scope=bot)** \n **[Suporte](https://discord.gg/QJfeKYr)**", - "CommandBook": "Página de ajuda do Seoa", - "Prefix": "Prefixo:", - "Invite": "**[Link do bot](https://discordapp.com/oauth2/authorize?client_id=569453314551578644&permissions=8&scope=bot)**", - "LeaderBoardMsg": "Placar de Code Quiz de Seoa", - "LeaderBoardMsg1": "%sº lugar: %s (%s pontos)\n", - "Leave": "sai do canal de voz", - "NOTJOIN": "Ops, entre no canal de voz primeiro por favor!", - "NOTURL": "Ops, esse link não é suportado por mim...", - "QUIZMSG1": "[Pedir para adicionar mais Code Quiz](https://github.com/seoaapp/SeoaBot/issues/new/choose)", - "PointMsg": "**%s** pontos", - "QUIZ2": "O %s está resolvendo o Code Quiz...", - "ENMSG": "Não encontrei os dados sobre esse idioma em mim e defini como `en`.", - "Lang": "Foi configurado como %s.", - "su": "Sucesso!", - "ch": "Escolha um dos `channel, lang`.", - "MISS": "Você não tem permissão para isso!", - "min": "O limite de tempo é **1** minuto", - "Over": "%s, acabou o tempo!", - "IS": "[Reportar erro do Code Quiz](https://github.com/seoaapp/SeoaBot/issues/new/choose)", - "PR": "[Perguntar sobre o Code Quiz](https://github.com/seoaapp/SeoaBot/issues/new/choose)", - "SUS": "O %s acertou!", - "NOTCORRECT": "O %s errou!", - "YOUTUBEDEVMSG": "Escreva qualquer coisa para pesquisar no YouTube (Limite de tempo: 1 minuto) **[Dev]**", - "Corrent": "Passou do limite de tempo e foi cancelado.", - "search": "Resultado de pesquisa do %s.", - "view": "[Ver](http://youtube.com%s) / Duração: %s / Data de Lançamento: %s / Visualizações: %s", - "ping": "Ping do Seoa:", - "msgping": "Ping de mensagem:" -} diff --git a/migration.js b/migration.js deleted file mode 100644 index d282368..0000000 --- a/migration.js +++ /dev/null @@ -1,24 +0,0 @@ -const Umysql = require('umysql') -console.log('SEOABOT JSON TO MYSQL MIGRATION TOOL') -console.log('CONNECTING TO MYSQL SERVER') -const db = new Umysql(process.env.host, process.env.user, process.env.pass, 'seoa') - -console.log('LOADING OLD JSON DATA') -const users = require('./UserData/users.json') -const servers = require('./ServerData/servers.json') -const owners = require('./ServerData/owners.json') -const sIDs = Object.keys(servers) -const uIDs = Object.keys(users) - -console.log('OLD DATA WRITING TO MYSQL SERVER') -console.log('ServerData/servers.json & ServerData/owners.json') -sIDs.forEach(sID => { - db.insert('serverdata', { id: sID, lang: servers[sID].lang, owner: owners[sID] }) -}) - -console.log('UserData/users.json') -uIDs.forEach(uID => { - db.insert('userdata', { id: uID, quizPoint: users[uID].quizPoint }) -}) - -console.log('MIGRATION ENDED') diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..3555d6d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2040 @@ +{ + "name": "seoabot", + "version": "2.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "acorn": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", + "dev": true + }, + "acorn-jsx": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz", + "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw==", + "dev": true + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + }, + "dependencies": { + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + } + } + }, + "bignumber.js": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz", + "integrity": "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" + }, + "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, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "discord.js": { + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-11.5.1.tgz", + "integrity": "sha512-tGhV5xaZXE3Z+4uXJb3hYM6gQ1NmnSxp9PClcsSAYFVRzH6AJH74040mO3afPDMWEAlj8XsoPXXTJHTxesqcGw==", + "requires": { + "long": "^4.0.0", + "prism-media": "^0.0.3", + "snekfetch": "^3.6.4", + "tweetnacl": "^1.0.0", + "ws": "^6.0.0" + } + }, + "discord.js-lavalink": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/discord.js-lavalink/-/discord.js-lavalink-2.2.3.tgz", + "integrity": "sha512-HR7LJ8EhJ3iVeRmfjBOdvBA5/eO25ncbnZOn12x0Sj/JVFd0h5ClGi6w4giWPrnw8fDvCVxKl7+c0Y/6tLgBDQ==", + "requires": { + "ws": "^6.1.4" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.2.tgz", + "integrity": "sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.0.0", + "string.prototype.trimright": "^2.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.3.0.tgz", + "integrity": "sha512-ZvZTKaqDue+N8Y9g0kp6UPZtS4FSY3qARxBs7p4f0H0iof381XHduqVerFWtK8DPtKmemqbqCFENWSQgPR/Gow==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.2", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.4.1", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "eslint-config-standard": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.0.tgz", + "integrity": "sha512-EF6XkrrGVbvv8hL/kYa/m6vnvmUT+K82pJJc4JJVMM6+Qgqh0pnwprSxdduDLB9p/7bIxD+YV5O0wfb8lmcPbA==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", + "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", + "dev": true, + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-es": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-2.0.0.tgz", + "integrity": "sha512-f6fceVtg27BR02EYnBhgWLFQfK6bN4Ll0nQFrBHOlCsAyxeZkn0NHns5O0YZOPrV1B3ramd6cgFwaoFLcSkwEQ==", + "dev": true, + "requires": { + "eslint-utils": "^1.4.2", + "regexpp": "^3.0.0" + }, + "dependencies": { + "regexpp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz", + "integrity": "sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.18.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", + "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", + "dev": true, + "requires": { + "array-includes": "^3.0.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.4.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.0", + "read-pkg-up": "^2.0.0", + "resolve": "^1.11.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-node": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-10.0.0.tgz", + "integrity": "sha512-1CSyM/QCjs6PXaT18+zuAXsjXGIGo5Rw630rSKwokSs2jrYURQc4R5JZpoanNCqwNmepg+0eZ9L7YiRUJb8jiQ==", + "dev": true, + "requires": { + "eslint-plugin-es": "^2.0.0", + "eslint-utils": "^1.4.2", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", + "dev": true + } + } + }, + "eslint-plugin-promise": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz", + "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", + "dev": true + }, + "eslint-plugin-standard": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz", + "integrity": "sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ==", + "dev": true + }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz", + "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.0.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, + "espree": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.1.tgz", + "integrity": "sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-jsx": "^5.0.2", + "eslint-visitor-keys": "^1.1.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", + "dev": true + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "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==" + }, + "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.19", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", + "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "dev": true + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "m3u8stream": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.6.4.tgz", + "integrity": "sha512-9WLF1VAtbVij03HWJKbVZ8L0orsoZiP53UljR5EwaDrozQFMsTGRDPe3PbzWV73He8a+j5H/hWZNoI2VkUSsiw==", + "requires": { + "miniget": "^1.6.1", + "sax": "^1.2.4" + } + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "requires": { + "mime-db": "1.40.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "miniget": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/miniget/-/miniget-1.6.1.tgz", + "integrity": "sha512-I5oBwZmcaOuJrjQn7lpS29HM+aAZDbzKbX5ouxVyhFYdg6fA6YKOTwOCgzZQwlHuMek3FlCxz6eNrd4pOXbwOA==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "mysql": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.17.1.tgz", + "integrity": "sha512-7vMqHQ673SAk5C8fOzTG2LpPcf3bNt0oL3sFpxPEEFp1mdlDcrLK0On7z8ZYKaaHrHwNcQ/MTUz7/oobZ2OyyA==", + "requires": { + "bignumber.js": "7.2.1", + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2", + "sqlstring": "2.3.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-fetch": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "opusscript": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/opusscript/-/opusscript-0.0.7.tgz", + "integrity": "sha512-DcBadTdYTUuH9zQtepsLjQn4Ll6rs3dmeFvN+SD0ThPnxRBRm/WC1zXWPg+wgAJimB784gdZvUMA57gDP7FdVg==" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "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, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prism-media": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-0.0.3.tgz", + "integrity": "sha512-c9KkNifSMU/iXT8FFTaBwBMr+rdVcN+H/uNv1o+CuFeTThNZNTOrQ+RgXA1yL/DeLk098duAeRPP3QNPNbhxYQ==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "psl": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", + "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "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 + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "snekfetch": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/snekfetch/-/snekfetch-3.6.4.tgz", + "integrity": "sha512-NjxjITIj04Ffqid5lqr7XdgwM7X61c/Dns073Ly170bPQHLm6jkmelye/eglS++1nfTWktpP6Y2bFXjdPlQqdw==" + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sqlstring": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + } + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.1.tgz", + "integrity": "sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A==" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "ulangts": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/ulangts/-/ulangts-1.0.6.tgz", + "integrity": "sha512-kgmTHMNHR8fH9GofVN7WAVEYri+ZpOQqv2PSrD8UgpI4ZlDhkgUc8AXdfZb9GBzad+UnzMqY3e0tht1A7SZMfQ==" + }, + "umulavats": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/umulavats/-/umulavats-1.0.8.tgz", + "integrity": "sha512-/m0Eq64tboJtwsQWKVL1090IRcf6b9iZz4FAdNUzIP/5REI73rL1C8ZN5P/6UhHRf6aTCtkyLMTwdqR+Zr03BA==", + "requires": { + "node-fetch": "^2.6.0", + "ytdl-core": "^1.0.7" + } + }, + "umusicts": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/umusicts/-/umusicts-1.0.5.tgz", + "integrity": "sha512-3zPOViQgQBi2VsujuW237Jg9cLzb7LgZi76vDkaSineyWvMBfTMISB2YVgkqIDX8/gzcGuu0sKDAxq19fjVqlA==", + "requires": { + "ytdl-core": "^1.0.7" + }, + "dependencies": { + "m3u8stream": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.6.4.tgz", + "integrity": "sha512-9WLF1VAtbVij03HWJKbVZ8L0orsoZiP53UljR5EwaDrozQFMsTGRDPe3PbzWV73He8a+j5H/hWZNoI2VkUSsiw==", + "requires": { + "miniget": "^1.6.1", + "sax": "^1.2.4" + } + }, + "miniget": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/miniget/-/miniget-1.6.1.tgz", + "integrity": "sha512-I5oBwZmcaOuJrjQn7lpS29HM+aAZDbzKbX5ouxVyhFYdg6fA6YKOTwOCgzZQwlHuMek3FlCxz6eNrd4pOXbwOA==" + }, + "ytdl-core": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-1.0.7.tgz", + "integrity": "sha512-gECPN5g5JnSy8hIq11xHIGe1T/Xzy0mWxQin3zhlJ3nG/YjPcEVEejrdd2XmA4Vv2Zw3+b1ZyDjmt37XfZri6A==", + "requires": { + "html-entities": "^1.1.3", + "m3u8stream": "^0.6.3", + "miniget": "^1.6.0", + "sax": "^1.1.3" + } + } + } + }, + "umysql": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/umysql/-/umysql-0.1.1.tgz", + "integrity": "sha512-tI4IZ12E2DuUguOmxSgG97sKdd4GE++ZEJJp5uEcbUkJuLnsT/Mh2jdLKD+wa9bxrZ2xlfz6NRaDgGHAPp29zA==", + "requires": { + "mysql": "^2.17.1" + } + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utimets": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utimets/-/utimets-1.0.0.tgz", + "integrity": "sha512-Gq8V3+lZWCjIozWyfwBsx8BE6PzLVbZjYVJwtMX4lqR6Aqw8w/8pR2nbGTvnfTBzwqeA+hAtPD1oal1UI2JLUQ==" + }, + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" + }, + "uuniquets": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/uuniquets/-/uuniquets-1.0.0.tgz", + "integrity": "sha512-Yjf/o21YOYBPEkdNMsqAvRDhvSeGY7RnUq/UHWLHq4RcV/juk9QT2/QZSuAqEuAaeMMieF8QfLwT+kyyMWCIVA==" + }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "requires": { + "async-limiter": "~1.0.0" + } + }, + "ytdl-core": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-1.0.7.tgz", + "integrity": "sha512-gECPN5g5JnSy8hIq11xHIGe1T/Xzy0mWxQin3zhlJ3nG/YjPcEVEejrdd2XmA4Vv2Zw3+b1ZyDjmt37XfZri6A==", + "requires": { + "html-entities": "^1.1.3", + "m3u8stream": "^0.6.3", + "miniget": "^1.6.0", + "sax": "^1.1.3" + } + }, + "ytsr": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/ytsr/-/ytsr-0.1.10.tgz", + "integrity": "sha512-9wq0TiFejj6T5t9WXx/7Uw7Pix6vtXq3nd7BbPvz3BwUjJ4rdW4maylj1/sW+AUaSNgZgVbVngH/Y1a7V1kzsA==", + "requires": { + "html-entities": "^1.1.3" + } + } + } +} diff --git a/package.json b/package.json index b64669e..e90d4b2 100644 --- a/package.json +++ b/package.json @@ -1,44 +1,43 @@ { - "name": "seoa", - "version": "0.1.0", - "description": "The Discord bot is name Seoa", - "main": "seoa.js", + "name": "seoabot", + "version": "2.0.0", + "description": "SeoaBot Remaster", + "main": "index.js", "scripts": { - "test": "node seoa.js", - "check": "npx standard", - "Client": "electron ./Client && node ./seoa" + "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "git+https://github.com/seoaapp/SeoaBot.git" }, - "author": "Seoa Bot Develoment Team", - "license": "GPL-3.0-or-later", + "keywords": [ + "SeoaBot" + ], + "author": "UnderC", + "license": "GPL-3.0", "bugs": { - "url": "https://github.com/seoaapp/SeoaBot/issues" + "url": "https://github.com/UnderC/SeoaBot/issues" }, - "homepage": "https://github.com/seoaapp/SeoaBot#readme", + "homepage": "https://github.com/UnderC/SeoaBot#readme", "dependencies": { "discord.js": "^11.5.1", "discord.js-lavalink": "^2.2.3", - "ffmpeg": "^0.0.4", - "i18n": "^0.8.3", - "node-fetch": "^2.6.0", - "node-opus": "^0.3.2", - "os": "^0.1.1", - "random-hex-color": "^1.0.1", - "rethinkdb": "^2.3.3", + "opusscript": "0.0.7", + "request": "^2.88.0", + "ulangts": "^1.0.6", + "umulavats": "^1.0.8", + "umusicts": "^1.0.5", "umysql": "^0.1.1", - "yt-search": "^0.4.1", - "ytdl-core": "^0.29.5" + "utimets": "^1.0.0", + "uuniquets": "^1.0.0", + "ytsr": "^0.1.10" }, "devDependencies": { - "eslint": "^6.1.0", - "eslint-config-standard": "^13.0.1", + "eslint": "^6.3.0", + "eslint-config-standard": "^14.1.0", "eslint-plugin-import": "^2.18.2", - "eslint-plugin-node": "^9.1.0", + "eslint-plugin-node": "^10.0.0", "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-standard": "^4.0.0", - "standard": "^13.1.0" + "eslint-plugin-standard": "^4.0.1" } } diff --git a/seoa.js b/seoa.js index 5f064c9..2cbcbd0 100644 --- a/seoa.js +++ b/seoa.js @@ -1,160 +1,63 @@ -/** - * @name Seoa - * @description Seoa - Music Player - * @license GPL-3.0-or-later - * @author Seoa Bot Develoment Team - * @version 0.1.0 - */ - -'use strict' // strict mode - -/** Custom Discord.js Module */ -const Seoa = require('./classes/seoa') - -/** Database Manager Module */ +const { Client } = require('discord.js') +const UlangTS = require('ulangts') +const UmusicTS = require('umusicts') +const UmulavaTS = require('umulavats') const Umysql = require('umysql') -const db = new Umysql('localhost', 'root', 'root', 'seoa') - -/** Seoa Settings */ -const config = require('./config') - -/** Random Color Picker Module */ -const randomHexColor = require('random-hex-color') - -/** Seoa Custom Discord Client */ -const seoa = new Seoa(config, db) - -/** Command Load */ -const commands = require(config.commands) -Object.keys(commands).forEach(k => { - const command = commands[k] - console.log(`${config.commands}/${k} loaded`) - command.callSign.forEach(c => { - seoa.commands.set(c, command) - }) -}) - -/** i18n (locale) */ -const i18n = require('i18n') -i18n.configure({ - directory: './locales' -}) - -seoa.on('ready', () => { - console.info(seoa.user.username + ' is now Online!\n') - seoa.user.setActivity(config.activity, { type: 'PLAYING' }) - seoa.guilds.forEach((guild) => { - db.update('serverdata', { owner: guild.ownerID }, { id: guild.id }) - }) -}) - -seoa.on('message', async (msg) => { - if (msg.author.bot) return - if (!msg.guild) return msg.channel.send(i18n.__({ phrase: 'BotNotDM', locale: 'en' }, seoa.user.username)) - - let user = await db.select('userdata', { id: msg.author.id }) - user = user[0] - if (!user) { - db.insert('userdata', { id: msg.author.id }) - user = { id: msg.author.id, lang: 'en', quizPoint: 0 } +const path = require('path') + +class Seoa extends Client { + constructor (config) { + super() + /** 봇 환경변수 불러오기 및 해석 */ + this.config = UlangTS.parse(config, config) + this.loadKeys = ['classes', 'events', 'commandsOrigin'] + /** 커맨드 & 클래스 & 이벤트 (리)로드 함수 */ + this.load() + + /** 언어 해석 모듈 (건들지 마시오) */ + this.langs = new UlangTS(require(this.config.path.languages)) + /** 음악 모듈 (건들지 마시오) */ + this.m = this.config.music.useNative ? new UmusicTS() : new UmulavaTS(this) + /** 유튜브 영상 검색 모듈 (건들지 마시오) */ + this.search = this.classes.Search && this.config.api.youtube.enable + ? new this.classes.Search(this.config.api.youtube.clientID).addParam('type', 'video').addParam('order', 'relevance') + : false + /** 데이터베이스 휘젓는 모듈 (건들지 마시오) */ + this.db = this.config.mysql.enable + ? new Umysql(this.config.mysql.host, this.config.mysql.user, this.config.mysql.pass, this.config.mysql.database, this.config.mysql.port, this.config.mysql.charset) + : null + /** 사용자 정보 & 길드 정보 & 마이리스트 정보 불러오는 모듈 (입맛대로 고쳐쓰셈)) */ + this.gi = this.db && this.classes.GetInf ? new this.classes.GetInf(this.db, 'userdata', 'serverdata', 'mylist') : null + this.login(this.config.token) } - let server = await db.select('serverdata', { id: msg.guild.id }) - server = server[0] - if (!server) { - db.insert('serverdata', { id: msg.guild.id, owner: msg.guild.ownerID }) - server = { id: msg.guild.id, lang: 'en', owner: msg.guild.ownerID } + is (flag, u, perm) { + /** flag (1 === Owner, 2 === Admin) */ + return flag === 1 ? this.config.owners.includes(u.id) : flag === 2 ? this.is(1, u) || u.hasPermission(perm || 0) : true } - if (!msg.content.startsWith(config.prefix)) return // 레벨링 시스템 추가되면 제거될 예정 - console.info(msg.guild.name + '> ' + msg.author.username + '> ' + msg.content) - - if (msg.content === config.prefix) { - // UpTime Caculator Start - let totalSeconds = (seoa.uptime / 1000) - const days = Math.floor(totalSeconds / 86400) - totalSeconds %= 86400 - const hours = Math.floor(totalSeconds / 3600) - totalSeconds %= 3600 - const minutes = Math.floor(totalSeconds / 60) - const seconds = Math.floor(totalSeconds % 60) - // UpTime Caculator End - const inline = true - const botInfoEmbed = { - title: i18n.__({ phrase: 'Info', locale: server.lang }, seoa.user.username), - description: i18n.__({ phrase: 'From', locale: server.lang }, msg.author.username), - thumbnail: { url: seoa.user.avatarURL }, - color: parseInt(randomHexColor().substring(1), 16), - fields: [ - { - name: '\u200B', - value: '\u200B', - inline - }, - { - name: i18n.__({ phrase: 'Name&Tag', locale: server.lang }, seoa.user.username), - value: seoa.user.tag, - inline - }, - { - name: i18n.__({ phrase: 'ID', locale: server.lang }, seoa.user.username), - value: seoa.user.id, - inline - }, - { - name: i18n.__({ phrase: 'CommandSize', locale: server.lang }, seoa.user.username), - value: seoa.commands.size, - inline - }, - { - name: i18n.__({ phrase: 'UsersSize', locale: server.lang }, seoa.user.username), - value: seoa.users.size, - inline - }, - { - name: i18n.__({ phrase: 'ChannelsSize', locale: server.lang }, seoa.user.username), - value: seoa.channels.size, - inline - }, - { - name: i18n.__({ phrase: 'ServersSize', locale: server.lang }, seoa.user.username), - value: seoa.guilds.size, - inline - }, - { - name: i18n.__({ phrase: 'BotDay', locale: server.lang }, seoa.user.username), - value: seoa.user.createdAt, - inline - }, - { - name: i18n.__({ phrase: 'UpdataDay', locale: server.lang }, seoa.user.username), - value: seoa.readyAt, - inline - }, - { - name: i18n.__({ phrase: 'UpTime', locale: server.lang }, seoa.user.username), - value: i18n.__({ phrase: 'Time', locale: server.lang }, days, hours, minutes, seconds), - inline - }, - { - name: i18n.__({ phrase: 'APIPING', locale: server.lang }, seoa.user.username), - value: Math.round(seoa.ping), - inline - } - ] - } - msg.channel.send({ embed: botInfoEmbed }) - } else { - const query = { - fullText: msg.content, - message: msg.content.split(config.prefix)[1], - command: msg.content.split(config.prefix)[1].split(' ')[0], - args: msg.content.split(config.prefix)[1].split(' ').slice(1) - } - - const runCommand = seoa.commands.get(query.command.toLowerCase()) - if (runCommand) runCommand.run(seoa, msg, query) + load (loadKeys) { + (loadKeys || this.loadKeys).forEach(lK => { + /** 모듈 리로드를 위해 캐시 제거 */ + delete require.cache[path.resolve(this.config.path[lK], './index.js')] + const temp = require(this.config.path[lK]) + /** 모듈 리로드를 위해 캐시 제거 */ + Object.keys(temp).forEach(k => { delete require.cache[path.resolve(this.config.path[lK], `./${k}.js`)] }) + this[lK] = require(this.config.path[lK]) + }) + + /** 커맨드 초기화 */ + this.commands = new Map() + /** 기존에 할당 된 이벤트 초기화 및 새로운 이벤트 할당 */ + Object.values(this.removeAllListeners().events).forEach(_ => new _(this)) + /** 커맨드 할당 */ + Object.values(this.commandsOrigin).forEach(_ => { + const command = new _() + command.alias.forEach(alia => { + this.commands.set(alia, command) + }) + }) } -}) +} -/** @copyright (c) 2019. Seoa Development Team. all rights reserved. */ +module.exports = Seoa diff --git a/seoa.sql b/seoa.sql index 23f7291..2ddcd1d 100644 --- a/seoa.sql +++ b/seoa.sql @@ -25,11 +25,15 @@ DROP TABLE IF EXISTS `serverdata`; CREATE TABLE `serverdata` ( `id` text NOT NULL, `lang` varchar(4) NOT NULL DEFAULT 'en', - `owner` text NOT NULL, + `owner` text, `channelnoticeid` text -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +) ENGINE=InnoDB; /*!40101 SET character_set_client = @saved_cs_client */; +-- +-- Table structure for table `userdata` +-- + DROP TABLE IF EXISTS `userdata`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!50503 SET character_set_client = utf8mb4 */; @@ -37,8 +41,25 @@ CREATE TABLE `userdata` ( `id` text NOT NULL, `quizPoint` int(11) NOT NULL DEFAULT '0', `lang` varchar(4) NOT NULL DEFAULT 'en' -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; +) ENGINE=InnoDB; /*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `mylist` +-- + +DROP TABLE IF EXISTS `mylist`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `mylist` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` text NOT NULL, + `list` text NOT NULL, + `author` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1; +/*!40101 SET character_set_client = @saved_cs_client */; + /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; @@ -48,4 +69,4 @@ CREATE TABLE `userdata` ( /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2019-08-10 20:17:07 +-- Dump completed on 2019-08-10 20:17:07 \ No newline at end of file diff --git a/shard.js b/shard.js deleted file mode 100644 index 0d19133..0000000 --- a/shard.js +++ /dev/null @@ -1,8 +0,0 @@ -const { ShardingManager: Shard } = require('discord.js') -const manager = new Shard('./seoa.js') - -manager.spawn(5) - -manager.on('launch', (shard) => { - console.log('Sharded: ' + shard.id) -}) diff --git a/stream/dummy b/stream/dummy deleted file mode 100644 index bac6b5d..0000000 --- a/stream/dummy +++ /dev/null @@ -1,2 +0,0 @@ -와! 이것을 읽으셨군요! -더미 파일인데 읽으셨다니! \ No newline at end of file diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 35e2c04..0000000 --- a/yarn.lock +++ /dev/null @@ -1,2279 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== - dependencies: - "@babel/highlight" "^7.0.0" - -"@babel/highlight@^7.0.0": - version "7.5.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" - integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== - dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^4.0.0" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -acorn-jsx@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" - integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg== - -acorn@^6.0.7: - version "6.2.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51" - integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q== - -ajv@^6.10.0, ajv@^6.10.2: - version "6.10.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" - integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ambi@^2.2.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/ambi/-/ambi-2.5.0.tgz#7c8e372be48891157e7cea01cb6f9143d1f74220" - integrity sha1-fI43K+SIkRV+fOoBy2+RQ9H3QiA= - dependencies: - editions "^1.1.1" - typechecker "^4.3.0" - -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-regex@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== - -async.eachof@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/async.eachof/-/async.eachof-0.5.2.tgz#637fff6e7030275342257ff5f58b3b84f61ceca6" - integrity sha1-Y3//bnAwJ1NCJX/19Ys7hPYc7KY= - dependencies: - async.util.keyiterator "0.5.2" - async.util.noop "0.5.2" - async.util.once "0.5.2" - async.util.onlyonce "0.5.2" - -async.parallel@~0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/async.parallel/-/async.parallel-0.5.2.tgz#c2fd995a47eb891952fa9de0dd0b61da6fadbf11" - integrity sha1-wv2ZWkfriRlS+p3g3Qth2m+tvxE= - dependencies: - async.eachof "0.5.2" - async.util.parallel "0.5.2" - -async.util.isarray@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/async.util.isarray/-/async.util.isarray-0.5.2.tgz#e62dac8f2636f65875dcf7521c2d24d0dfb2bbdf" - integrity sha1-5i2sjyY29lh13PdSHC0k0N+yu98= - -async.util.isarraylike@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/async.util.isarraylike/-/async.util.isarraylike-0.5.2.tgz#8e7f87da9141f2f0996e8040477d0d4efe3f50f8" - integrity sha1-jn+H2pFB8vCZboBAR30NTv4/UPg= - dependencies: - async.util.isarray "0.5.2" - -async.util.keyiterator@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/async.util.keyiterator/-/async.util.keyiterator-0.5.2.tgz#339e6ce8f89d000433fb7814e22728f3f175090d" - integrity sha1-M55s6PidAAQz+3gU4ico8/F1CQ0= - dependencies: - async.util.isarraylike "0.5.2" - async.util.keys "0.5.2" - -async.util.keys@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/async.util.keys/-/async.util.keys-0.5.2.tgz#5c34ddd8a3edb7a7883c9b5fe2126781b2098af6" - integrity sha1-XDTd2KPtt6eIPJtf4hJngbIJivY= - -async.util.noop@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/async.util.noop/-/async.util.noop-0.5.2.tgz#bdd62b97cb0aa3f60b586ad148468698975e58b9" - integrity sha1-vdYrl8sKo/YLWGrRSEaGmJdeWLk= - -async.util.once@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/async.util.once/-/async.util.once-0.5.2.tgz#1453cb7404cad0822694fababc47a96e5caa7216" - integrity sha1-FFPLdATK0IImlPq6vEepblyqchY= - -async.util.onlyonce@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/async.util.onlyonce/-/async.util.onlyonce-0.5.2.tgz#b8e6fc004adc923164d79e32f2813ee465c24ff2" - integrity sha1-uOb8AErckjFk154y8oE+5GXCT/I= - -async.util.parallel@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/async.util.parallel/-/async.util.parallel-0.5.2.tgz#233524e3d6faffd5e995d75476b8d924f96808cd" - integrity sha1-IzUk49b6/9XplddUdrjZJPloCM0= - dependencies: - async.util.isarraylike "0.5.2" - async.util.noop "0.5.2" - async.util.restparam "0.5.2" - -async.util.restparam@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/async.util.restparam/-/async.util.restparam-0.5.2.tgz#03efebf3c0277b97220e525aba750f5e04fc80cd" - integrity sha1-A+/r88Ane5ciDlJaunUPXgT8gM0= - -async@~1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -bignumber.js@7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" - integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== - -bindings@1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bindings@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11" - integrity sha1-FK1hE4EtLTfXLme0ystLtyZQXxE= - -"bluebird@>= 2.3.2 < 3": - version "2.11.0" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" - integrity sha1-U0uQM8AiyVecVro7Plpcqvu2UOE= - -boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -cheerio@~0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" - integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4= - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" - -cli-color@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.2.0.tgz#3a5ae74fd76b6267af666e69e2afbbd01def34d1" - integrity sha1-OlrnT9drYmevZm5p4q+70B3vNNE= - dependencies: - ansi-regex "^2.1.1" - d "1" - es5-ext "^0.10.12" - es6-iterator "2" - memoizee "^0.4.3" - timers-ext "0.1" - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -commander@^2.9.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -csextends@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/csextends/-/csextends-1.2.0.tgz#6374b210984b54d4495f29c99d3dd069b80543e5" - integrity sha512-S/8k1bDTJIwuGgQYmsRoE+8P+ohV32WhQ0l4zqrc0XDdxOhjQQD7/wTZwCzoZX53jSX3V/qwjT+OkPTxWQcmjg== - -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - -d@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" - integrity sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8= - dependencies: - es5-ext "^0.10.9" - -dasu@0.0.23: - version "0.0.23" - resolved "https://registry.yarnpkg.com/dasu/-/dasu-0.0.23.tgz#c4a966667ee7a83ca43c5f81ddf8af8ba90a9b2c" - integrity sha1-xKlmZn7nqDykPF+B3fivi6kKmyw= - -debug-log@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" - integrity sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8= - -debug@*, debug@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -debug@2, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -deglob@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/deglob/-/deglob-3.1.0.tgz#1868193193d3432a5326e8fb2052b439a43a454e" - integrity sha512-al10l5QAYaM/PeuXkAr1Y9AQz0LCtWsnJG23pIgh44hDxHFOj36l6qvhfjnIWBYwZOqM1fXUFV9tkjL7JPdGvw== - dependencies: - find-root "^1.0.0" - glob "^7.0.5" - ignore "^5.0.0" - pkg-config "^1.1.0" - run-parallel "^1.1.2" - uniq "^1.0.1" - -discord.js-lavalink@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/discord.js-lavalink/-/discord.js-lavalink-2.2.3.tgz#be52b6b2d503dbc55284ae162d3aae57abcf6c6a" - integrity sha512-HR7LJ8EhJ3iVeRmfjBOdvBA5/eO25ncbnZOn12x0Sj/JVFd0h5ClGi6w4giWPrnw8fDvCVxKl7+c0Y/6tLgBDQ== - dependencies: - ws "^6.1.4" - -discord.js@^11.5.1: - version "11.5.1" - resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-11.5.1.tgz#910fb9f6410328581093e044cafb661783a4d9e8" - integrity sha512-tGhV5xaZXE3Z+4uXJb3hYM6gQ1NmnSxp9PClcsSAYFVRzH6AJH74040mO3afPDMWEAlj8XsoPXXTJHTxesqcGw== - dependencies: - long "^4.0.0" - prism-media "^0.0.3" - snekfetch "^3.6.4" - tweetnacl "^1.0.0" - ws "^6.0.0" - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-serializer@0, dom-serializer@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -eachr@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/eachr/-/eachr-2.0.4.tgz#466f7caa10708f610509e32c807aafe57fc122bf" - integrity sha1-Rm98qhBwj2EFCeMsgHqv5X/BIr8= - dependencies: - typechecker "^2.0.8" - -editions@^1.1.1, editions@^1.3.3: - version "1.3.4" - resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.4.tgz#3662cb592347c3168eb8e498a0ff73271d67f50b" - integrity sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg== - -editions@^2.1.0, editions@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/editions/-/editions-2.1.3.tgz#727ccf3ec2c7b12dcc652c71000f16c4824d6f7d" - integrity sha512-xDZyVm0A4nLgMNWVVLJvcwMjI80ShiH/27RyLiCnW1L273TcJIA25C4pwJ33AWV01OX6UriP35Xu+lH4S7HWQw== - dependencies: - errlop "^1.1.1" - semver "^5.6.0" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -errlop@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/errlop/-/errlop-1.1.1.tgz#d9ae4c76c3e64956c5d79e6e035d6343bfd62250" - integrity sha512-WX7QjiPHhsny7/PQvrhS5VMizXXKoKCS3udaBp8gjlARdbn+XmK300eKBAAN0hGyRaTCtRpOaxK+xFVPUJ3zkw== - dependencies: - editions "^2.1.2" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.7.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" - integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== - dependencies: - es-to-primitive "^1.2.0" - function-bind "^1.1.1" - has "^1.0.3" - is-callable "^1.1.4" - is-regex "^1.0.4" - object-keys "^1.0.12" - -es-to-primitive@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" - integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es5-ext@^0.10.12, es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: - version "0.10.50" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.50.tgz#6d0e23a0abdb27018e5ac4fd09b412bc5517a778" - integrity sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw== - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.1" - next-tick "^1.0.0" - -es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" - integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= - dependencies: - d "1" - es5-ext "~0.10.14" - -es6-weak-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" - integrity sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8= - dependencies: - d "1" - es5-ext "^0.10.14" - es6-iterator "^2.0.1" - es6-symbol "^3.1.1" - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -eslint-config-standard-jsx@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-7.0.0.tgz#05c737d9eab524860fe6853cfd535045c3e07e5b" - integrity sha512-OiKOF3MFVmWOCVfsi8GHlVorOEiBsPzAnUhM3c6HML94O2krbdQ/eMABySHgHHOIBYRls9sR9I3lo6O0vXhVEg== - -eslint-config-standard@13.0.1, eslint-config-standard@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-13.0.1.tgz#c9c6ffe0cfb8a51535bc5c7ec9f70eafb8c6b2c0" - integrity sha512-zLKp4QOgq6JFgRm1dDCVv1Iu0P5uZ4v5Wa4DTOkg2RFMxdCX/9Qf7lz9ezRj2dBRa955cWQF/O/LWEiYWAHbTw== - -eslint-import-resolver-node@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" - integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== - dependencies: - debug "^2.6.9" - resolve "^1.5.0" - -eslint-module-utils@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c" - integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw== - dependencies: - debug "^2.6.8" - pkg-dir "^2.0.0" - -eslint-plugin-es@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6" - integrity sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw== - dependencies: - eslint-utils "^1.3.0" - regexpp "^2.0.1" - -eslint-plugin-import@^2.18.2, eslint-plugin-import@~2.18.0: - version "2.18.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" - integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== - dependencies: - array-includes "^3.0.3" - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.2" - eslint-module-utils "^2.4.0" - has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.0" - read-pkg-up "^2.0.0" - resolve "^1.11.0" - -eslint-plugin-node@^9.1.0, eslint-plugin-node@~9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-9.1.0.tgz#f2fd88509a31ec69db6e9606d76dabc5adc1b91a" - integrity sha512-ZwQYGm6EoV2cfLpE1wxJWsfnKUIXfM/KM09/TlorkukgCAwmkgajEJnPCmyzoFPQQkmvo5DrW/nyKutNIw36Mw== - dependencies: - eslint-plugin-es "^1.4.0" - eslint-utils "^1.3.1" - ignore "^5.1.1" - minimatch "^3.0.4" - resolve "^1.10.1" - semver "^6.1.0" - -eslint-plugin-promise@^4.2.1, eslint-plugin-promise@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" - integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== - -eslint-plugin-react@~7.14.2: - version "7.14.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz#911030dd7e98ba49e1b2208599571846a66bdf13" - integrity sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA== - dependencies: - array-includes "^3.0.3" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.1.0" - object.entries "^1.1.0" - object.fromentries "^2.0.0" - object.values "^1.1.0" - prop-types "^15.7.2" - resolve "^1.10.1" - -eslint-plugin-standard@^4.0.0, eslint-plugin-standard@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz#f845b45109c99cd90e77796940a344546c8f6b5c" - integrity sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA== - -eslint-scope@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" - integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.3.0, eslint-utils@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.0.tgz#e2c3c8dba768425f897cf0f9e51fe2e241485d4c" - integrity sha512-7ehnzPaP5IIEh1r1tkjuIrxqhNkzUJa9z3R92tLJdZIVdWaczEhr3EbhGtsMrVxi1KeR8qA7Off6SWc5WNQqyQ== - dependencies: - eslint-visitor-keys "^1.0.0" - -eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" - integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== - -eslint@^6.1.0, eslint@~6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.1.0.tgz#06438a4a278b1d84fb107d24eaaa35471986e646" - integrity sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^6.0.0" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^6.4.1" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.0.0.tgz#716fc1f5a245ef5b9a7fdb1d7b0d3f02322e75f6" - integrity sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q== - dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== - dependencies: - estraverse "^4.0.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== - dependencies: - estraverse "^4.1.0" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= - -event-emitter@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= - dependencies: - d "1" - es5-ext "~0.10.14" - -extendr@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/extendr/-/extendr-2.1.0.tgz#301aa0bbea565f4d2dc8f570f2a22611a8527b56" - integrity sha1-MBqgu+pWX00tyPVw8qImEahSe1Y= - dependencies: - typechecker "~2.0.1" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extract-opts@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/extract-opts/-/extract-opts-2.2.0.tgz#1fa28eba7352c6db480f885ceb71a46810be6d7d" - integrity sha1-H6KOunNSxttID4hc63GkaBC+bX0= - dependencies: - typechecker "~2.0.1" - -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -ffmpeg@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/ffmpeg/-/ffmpeg-0.0.4.tgz#1c460df8e7da5127f62ceef4bfa06c59c89630cb" - integrity sha1-HEYN+OfaUSf2LO70v6BsWciWMMs= - dependencies: - when ">= 0.0.1" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -find-root@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -get-stdin@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" - integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== - -glob-parent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954" - integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg== - dependencies: - is-glob "^4.0.1" - -glob@^7.0.5, glob@^7.1.3: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@~6.0.4: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" - integrity sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.7.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -graceful-fs@*: - version "4.2.1" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d" - integrity sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw== - -graceful-fs@^4.1.15, graceful-fs@^4.1.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" - integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= - -has@^1.0.1, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hosted-git-info@^2.1.4: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== - -html-entities@^1.1.3: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= - -htmlparser2@^3.9.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -i18n@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/i18n/-/i18n-0.8.3.tgz#2d8cf1c24722602c2041d01ba6ae5eaa51388f0e" - integrity sha1-LYzxwkciYCwgQdAbpq5eqlE4jw4= - dependencies: - debug "*" - make-plural "^3.0.3" - math-interval-parser "^1.1.0" - messageformat "^0.3.1" - mustache "*" - sprintf-js ">=1.0.3" - -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.0.0, ignore@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.2.tgz#e28e584d43ad7e92f96995019cc43b9e1ac49558" - integrity sha512-vdqWBp7MyzdmHkkRWV5nY+PfGRbYbahfuvsBCh277tq+w9zyNi7h5CYJCK0kmzti9kU+O/cB7sE8HvKv6aXAKQ== - -ignorefs@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ignorefs/-/ignorefs-1.2.0.tgz#da59fb858976e4a5e43702ccd1f282fdbc9e5756" - integrity sha1-2ln7hYl25KXkNwLM0fKC/byeV1Y= - dependencies: - editions "^1.3.3" - ignorepatterns "^1.1.0" - -ignorepatterns@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ignorepatterns/-/ignorepatterns-1.1.0.tgz#ac8f436f2239b5dfb66d5f0d3a904a87ac67cc5e" - integrity sha1-rI9DbyI5td+2bV8NOpBKh6xnzF4= - -import-fresh@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" - integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -inquirer@^6.4.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" - integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-callable@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" - integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== - -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-glob@^4.0.0, is-glob@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-promise@^2.1, is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-regex@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= - dependencies: - has "^1.0.1" - -is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== - dependencies: - has-symbols "^1.0.0" - -isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -jsx-ast-utils@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz#4d4973ebf8b9d2837ee91a8208cc66f3a2776cfb" - integrity sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ== - dependencies: - array-includes "^3.0.3" - object.assign "^4.1.0" - -keypress@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.2.1.tgz#1e80454250018dbad4c3fe94497d6e67b6269c77" - integrity sha1-HoBFQlABjbrUw/6USX1uZ7YmnHc= - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -load-json-file@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" - integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== - dependencies: - graceful-fs "^4.1.15" - parse-json "^4.0.0" - pify "^4.0.1" - strip-bom "^3.0.0" - type-fest "^0.3.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -lodash.assignin@^4.0.9: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= - -lodash.bind@^4.1.4: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" - integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU= - -lodash.defaults@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - -lodash.filter@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" - integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= - -lodash.flatten@^4.2.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - -lodash.foreach@^4.3.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" - integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= - -lodash.map@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= - -lodash.merge@^4.4.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.pick@^4.2.1: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= - -lodash.reduce@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs= - -lodash.reject@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU= - -lodash.some@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" - integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= - -lodash@^4.17.12, lodash@^4.17.14: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - -long@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== - -loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lru-queue@0.1: - version "0.1.0" - resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" - integrity sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM= - dependencies: - es5-ext "~0.10.2" - -m3u8stream@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/m3u8stream/-/m3u8stream-0.6.2.tgz#c2c62ddce88156d80378dd59be010c8b8e9d120b" - integrity sha512-WsuM2bd5pPN80xvfrB+1DZqr4M7+kJl8byi6+ZCy6cmVjEiHhmr/desN53Ngsa6Hs13kYumeVgT4wL0oIJ+v6g== - dependencies: - miniget "^1.4.0" - sax "^1.2.4" - -make-plural@^3.0.3, make-plural@~3.0.3: - version "3.0.6" - resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-3.0.6.tgz#2033a03bac290b8f3bb91258f65b9df7e8b01ca7" - integrity sha1-IDOgO6wpC487uRJY9lud9+iwHKc= - optionalDependencies: - minimist "^1.2.0" - -math-interval-parser@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/math-interval-parser/-/math-interval-parser-1.1.0.tgz#dbeda5b06b3249973c6df6170fde2386f0afd893" - integrity sha1-2+2lsGsySZc8bfYXD94jhvCv2JM= - dependencies: - xregexp "^2.0.0" - -memoizee@^0.4.3: - version "0.4.14" - resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.14.tgz#07a00f204699f9a95c2d9e77218271c7cd610d57" - integrity sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg== - dependencies: - d "1" - es5-ext "^0.10.45" - es6-weak-map "^2.0.2" - event-emitter "^0.3.5" - is-promise "^2.1" - lru-queue "0.1" - next-tick "1" - timers-ext "^0.1.5" - -messageformat@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/messageformat/-/messageformat-0.3.1.tgz#e58fff8245e9b3971799e5b43db58b3e9417f5a2" - integrity sha1-5Y//gkXps5cXmeW0PbWLPpQX9aI= - dependencies: - async "~1.5.2" - glob "~6.0.4" - make-plural "~3.0.3" - nopt "~3.0.6" - watchr "~2.4.13" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -miniget@^1.4.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/miniget/-/miniget-1.5.2.tgz#6e61597b1582fed0ec7368af7f16b14a0a569a1d" - integrity sha512-1mTy+imFGBfK0vNGNiVqcZu7Qmm+JnJYZ3sTCXGC6yQwYU9ZqCl2ILcr2TrIyNaPs0BwO/BUkWQcHpLiWd8Hew== - -miniget@^1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/miniget/-/miniget-1.5.3.tgz#d796c7291970d1dfa28b646d9aba3fa6b377c5e8" - integrity sha512-6xiJs3ZGBdrNMlPNlEWirHhY53hSW33nG1Ytub9Cg5+jLhFPn9PGe4FmPZK9WlmDE1N7/8DEL7PGr7r9kbxwgw== - -"minimatch@2 || 3", minimatch@^3.0.4, minimatch@~3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.1.0, minimist@^1.2.0, minimist@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -mustache@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mustache/-/mustache-3.0.1.tgz#873855f23aa8a95b150fb96d9836edbc5a1d248a" - integrity sha512-jFI/4UVRsRYdUbuDTKT7KzfOp7FiD5WzYmmwNwXyUVypC0xjoTL78Fqc0jHUPIvvGD+6DQSPHIt1NE7D1ArsqA== - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -mysql@^2.17.1: - version "2.17.1" - resolved "https://registry.yarnpkg.com/mysql/-/mysql-2.17.1.tgz#62bba4a039a9b2f73638cd1652ce50fc6f682899" - integrity sha512-7vMqHQ673SAk5C8fOzTG2LpPcf3bNt0oL3sFpxPEEFp1mdlDcrLK0On7z8ZYKaaHrHwNcQ/MTUz7/oobZ2OyyA== - dependencies: - bignumber.js "7.2.1" - readable-stream "2.3.6" - safe-buffer "5.1.2" - sqlstring "2.3.1" - -nan@2, nan@^2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -next-tick@1, next-tick@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-fetch@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== - -node-fzf@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/node-fzf/-/node-fzf-0.1.2.tgz#c8bfb4383e3c9ca480acda5455b08c8fb61e0e01" - integrity sha512-BGQk7yZypMIXTdIz/+9sYTe41g/j+TygSwSkcXkqennqRDxWdOlmVZ9Nlzz2UBCr2n0Arzn79qOGG0ouRyfzcQ== - dependencies: - cli-color "~1.2.0" - keypress "~0.2.1" - minimist "~1.2.0" - redstar "0.0.2" - string-width "~2.1.1" - ttys "0.0.3" - -node-opus@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/node-opus/-/node-opus-0.3.2.tgz#5a20084e02f86116eadc2c7fd49b233e2260190d" - integrity sha512-o7hKgNncfbgF1j25lCK7cPqs9DEMroP3LWW0BMb/Ismc33cXo7LcaLqS0+/VV+NOotIy43fb7juLg6akflzBEw== - dependencies: - bindings "~1.2.1" - commander "^2.9.0" - nan "^2.14.0" - optionalDependencies: - ogg-packet "^1.0.0" - -nopt@~3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-keys@^1.0.11, object-keys@^1.0.12: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.entries@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" - integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.12.0" - function-bind "^1.1.1" - has "^1.0.3" - -object.fromentries@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" - integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA== - dependencies: - define-properties "^1.1.2" - es-abstract "^1.11.0" - function-bind "^1.1.1" - has "^1.0.1" - -object.values@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" - integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.12.0" - function-bind "^1.1.1" - has "^1.0.3" - -ogg-packet@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ogg-packet/-/ogg-packet-1.0.1.tgz#6b7d6c7a743c5f1ae9277c3b1271cac256af4785" - integrity sha512-dW1ok3BMnMikyXGDIgVEckWnlViW8JLWQV4qj9aN/rNRVqHlDYSlcIEtSIMH7tpuUOiIxAhY3+OxNdIOm6s17A== - dependencies: - ref-struct "*" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -optionator@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -os@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/os/-/os-0.1.1.tgz#208845e89e193ad4d971474b93947736a56d13f3" - integrity sha1-IIhF6J4ZOtTZcUdLk5R3NqVtE/M= - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" - integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pkg-conf@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-3.1.0.tgz#d9f9c75ea1bae0e77938cde045b276dac7cc69ae" - integrity sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ== - dependencies: - find-up "^3.0.0" - load-json-file "^5.2.0" - -pkg-config@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4" - integrity sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q= - dependencies: - debug-log "^1.0.0" - find-root "^1.0.0" - xtend "^4.0.1" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prism-media@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/prism-media/-/prism-media-0.0.3.tgz#8842d4fae804f099d3b48a9a38e3c2bab6f4855b" - integrity sha512-c9KkNifSMU/iXT8FFTaBwBMr+rdVcN+H/uNv1o+CuFeTThNZNTOrQ+RgXA1yL/DeLk098duAeRPP3QNPNbhxYQ== - -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -random-hex-color@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/random-hex-color/-/random-hex-color-1.0.1.tgz#3518cbccf1ddd43cd6a9c054d6787a3c978b4751" - integrity sha1-NRjLzPHd1DzWqcBU1nh6PJeLR1E= - -react-is@^16.8.1: - version "16.8.6" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" - integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -readable-stream@2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.1.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" - integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -redstar@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/redstar/-/redstar-0.0.2.tgz#9d56a6980638c9851a100b0cb3bf7d3eb90205cb" - integrity sha1-nVammAY4yYUaEAsMs799PrkCBcs= - dependencies: - minimatch "~3.0.4" - -ref-struct@*: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ref-struct/-/ref-struct-1.1.0.tgz#5d5ee65ad41cefc3a5c5feb40587261e479edc13" - integrity sha1-XV7mWtQc78Olxf60BYcmHkee3BM= - dependencies: - debug "2" - ref "1" - -ref@1: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ref/-/ref-1.3.5.tgz#0e33f080cdb94a3d95312b2b3b1fd0f82044ca0f" - integrity sha512-2cBCniTtxcGUjDpvFfVpw323a83/0RLSGJJY5l5lcomZWhYpU2cuLdsvYqMixvsdLJ9+sTdzEkju8J8ZHDM2nA== - dependencies: - bindings "1" - debug "2" - nan "2" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.5.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" - integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== - dependencies: - path-parse "^1.0.6" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -rethinkdb@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/rethinkdb/-/rethinkdb-2.3.3.tgz#3dc6586e22fa1dabee0d254e64bd0e379fad2f72" - integrity sha1-PcZYbiL6HavuDSVOZL0ON5+tL3I= - dependencies: - bluebird ">= 2.3.2 < 3" - -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -run-async@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" - integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= - dependencies: - is-promise "^2.1.0" - -run-parallel@^1.1.2: - version "1.1.9" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" - integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== - -rxjs@^6.4.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" - integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== - dependencies: - tslib "^1.9.0" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safefs@^3.1.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/safefs/-/safefs-3.2.2.tgz#8170c1444d7038e08caea05a374fae2fa349e15c" - integrity sha1-gXDBRE1wOOCMrqBaN0+uL6NJ4Vw= - dependencies: - graceful-fs "*" - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sax@^1.1.3, sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -scandirectory@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/scandirectory/-/scandirectory-2.5.0.tgz#6ce03f54a090b668e3cbedbf20edf9e310593e72" - integrity sha1-bOA/VKCQtmjjy+2/IO354xBZPnI= - dependencies: - ignorefs "^1.0.0" - safefs "^3.1.2" - taskgroup "^4.0.5" - -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== - -semver@^6.1.0, semver@^6.1.2: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -snekfetch@^3.6.4: - version "3.6.4" - resolved "https://registry.yarnpkg.com/snekfetch/-/snekfetch-3.6.4.tgz#d13e80a616d892f3d38daae4289f4d258a645120" - integrity sha512-NjxjITIj04Ffqid5lqr7XdgwM7X61c/Dns073Ly170bPQHLm6jkmelye/eglS++1nfTWktpP6Y2bFXjdPlQqdw== - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== - -sprintf-js@>=1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" - integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sqlstring@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40" - integrity sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A= - -standard-engine@~11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-11.0.1.tgz#943d710be54537dbedaf8a90367d271f4023fe7c" - integrity sha512-WZQ5PpEDfRzPFk+H9xvKVQPQIxKnAQB2cb2Au4NyTCtdw5R0pyMBUZLbPXyFjnlhe8Ae+zfNrWU4m6H5b7cEAg== - dependencies: - deglob "^3.0.0" - get-stdin "^7.0.0" - minimist "^1.1.0" - pkg-conf "^3.1.0" - -standard@^13.1.0: - version "13.1.0" - resolved "https://registry.yarnpkg.com/standard/-/standard-13.1.0.tgz#3de68ac1248d563a445edc806504987a11ea7496" - integrity sha512-h3NaMzsa88+/xtjXCMvdn6EWWdlodsI/HvtsQF+EGwrF9kVNwNha9TkFABU6bSBoNfC79YDyIAq9ekxOMBFkuw== - dependencies: - eslint "~6.1.0" - eslint-config-standard "13.0.1" - eslint-config-standard-jsx "7.0.0" - eslint-plugin-import "~2.18.0" - eslint-plugin-node "~9.1.0" - eslint-plugin-promise "~4.2.1" - eslint-plugin-react "~7.14.2" - eslint-plugin-standard "~4.0.0" - standard-engine "~11.0.1" - -string-width@^2.1.0, string-width@~2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string_decoder@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" - integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== - dependencies: - safe-buffer "~5.1.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-json-comments@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -table@^5.2.3: - version "5.4.4" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.4.tgz#6e0f88fdae3692793d1077fd172a4667afe986a6" - integrity sha512-IIfEAUx5QlODLblLrGTTLJA7Tk0iLSGBvgY8essPRVNGHAzThujww1YqHLs6h3HfTg55h++RzLHH5Xw/rfv+mg== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -taskgroup@^4.0.5, taskgroup@^4.2.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/taskgroup/-/taskgroup-4.3.1.tgz#7de193febd768273c457730497024d512c27915a" - integrity sha1-feGT/r12gnPEV3MElwJNUSwnkVo= - dependencies: - ambi "^2.2.0" - csextends "^1.0.3" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -timers-ext@0.1, timers-ext@^0.1.5: - version "0.1.7" - resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" - integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ== - dependencies: - es5-ext "~0.10.46" - next-tick "1" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tslib@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== - -ttys@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/ttys/-/ttys-0.0.3.tgz#15bacde7831020de5f2f28f01b1732ef03651f4d" - integrity sha1-FbrN54MQIN5fLyjwGxcy7wNlH00= - -tweetnacl@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.1.tgz#2594d42da73cd036bd0d2a54683dd35a6b55ca17" - integrity sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A== - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-fest@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== - -typechecker@^2.0.8: - version "2.1.0" - resolved "https://registry.yarnpkg.com/typechecker/-/typechecker-2.1.0.tgz#d1c2093a54ff8a19f58cff877eeaa54f2242d383" - integrity sha1-0cIJOlT/ihn1jP+HfuqlTyJC04M= - -typechecker@^4.3.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/typechecker/-/typechecker-4.7.0.tgz#5249f427358f45b7250c4924fd4d01ed9ba435e9" - integrity sha512-4LHc1KMNJ6NDGO+dSM/yNfZQRtp8NN7psYrPHUblD62Dvkwsp3VShsbM78kOgpcmMkRTgvwdKOTjctS+uMllgQ== - dependencies: - editions "^2.1.0" - -typechecker@~2.0.1: - version "2.0.8" - resolved "https://registry.yarnpkg.com/typechecker/-/typechecker-2.0.8.tgz#e83da84bb64c584ccb345838576c40b0337db82e" - integrity sha1-6D2oS7ZMWEzLNFg4V2xAsDN9uC4= - -umysql@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/umysql/-/umysql-0.1.1.tgz#ef0c5857e43ecf0e8c3319aa8034cecd10299ef4" - integrity sha512-tI4IZ12E2DuUguOmxSgG97sKdd4GE++ZEJJp5uEcbUkJuLnsT/Mh2jdLKD+wa9bxrZ2xlfz6NRaDgGHAPp29zA== - dependencies: - mysql "^2.17.1" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -v8-compile-cache@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" - integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -watchr@~2.4.13: - version "2.4.13" - resolved "https://registry.yarnpkg.com/watchr/-/watchr-2.4.13.tgz#d74847bb4d6f90f61fe2c74f9f68662aa0e07601" - integrity sha1-10hHu01vkPYf4sdPn2hmKqDgdgE= - dependencies: - eachr "^2.0.2" - extendr "^2.1.0" - extract-opts "^2.2.0" - ignorefs "^1.0.0" - safefs "^3.1.2" - scandirectory "^2.5.0" - taskgroup "^4.2.0" - typechecker "^2.0.8" - -"when@>= 0.0.1": - version "3.7.8" - resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82" - integrity sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I= - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -ws@^6.0.0, ws@^6.1.4: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== - dependencies: - async-limiter "~1.0.0" - -xregexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= - -xtend@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -yt-search@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/yt-search/-/yt-search-0.4.1.tgz#2720d80d64680788c0300a7f7d5a63d830171866" - integrity sha512-YnmLUl2RlNv083efzaQlFitIAeQd3vHDOfSV3ipQUjBcuVefU/NLeCHo2uX2QDU8ef1LzKL0tiJHQyV4+al2uA== - dependencies: - async.parallel "~0.5.2" - cheerio "~0.22.0" - dasu "0.0.23" - minimist "~1.2.0" - node-fzf "~0.1.2" - -ytdl-core@^0.29.5: - version "0.29.5" - resolved "https://registry.yarnpkg.com/ytdl-core/-/ytdl-core-0.29.5.tgz#278052a1a5a1a75c5931c229b804c0798f18858c" - integrity sha512-6WOoLQCeovo/aFYeMKeEXjvS/L+0j/vq85AYF86KSmkSA3lMzUzMdtmlo0GjsrOUN79S03MDkSgXEWOZBWL1Rg== - dependencies: - html-entities "^1.1.3" - m3u8stream "^0.6.2" - miniget "^1.5.3" - sax "^1.1.3"