diff --git a/.commitlintrc.js b/.commitlintrc.js index c34aa79d07..ccc63e8d77 100644 --- a/.commitlintrc.js +++ b/.commitlintrc.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { extends: ['@commitlint/config-conventional'] }; diff --git a/.copywrite.hcl b/.copywrite.hcl new file mode 100644 index 0000000000..02592d0ec5 --- /dev/null +++ b/.copywrite.hcl @@ -0,0 +1,17 @@ +schema_version = 1 + +project { + license = "BUSL-1.1" + copyright_holder = "Forward Email LLC" + header_ignore = [ + "app/models/journals.js", + "app/models/mailboxes.js", + "app/models/messages.js", + "app/models/threads.js", + "helpers/imap-notifier.js", + "helpers/imap/**", + "helpers/socket-error.js", + "imap-server.js", + "test/imap/**" + ] +} diff --git a/.env.defaults b/.env.defaults index 079c84e7b8..f3b1da1691 100644 --- a/.env.defaults +++ b/.env.defaults @@ -154,6 +154,13 @@ EMAILS_MONGO_PORT=27017 EMAILS_MONGO_NAME=forwardemail_emails_{{NODE_ENV}} EMAILS_MONGO_URI="mongodb://{{EMAILS_MONGO_HOST}}:{{EMAILS_MONGO_PORT}}/{{EMAILS_MONGO_NAME}}" +IMAP_MONGO_USER= +IMAP_MONGO_PASS= +IMAP_MONGO_HOST=localhost +IMAP_MONGO_PORT=27017 +IMAP_MONGO_NAME=forwardemail_imap_{{NODE_ENV}} +IMAP_MONGO_URI="mongodb://{{IMAP_MONGO_HOST}}:{{IMAP_MONGO_PORT}}/{{IMAP_MONGO_NAME}}" + ########### ## redis ## ########### @@ -183,6 +190,11 @@ MANDARIN_REDIS_USERNAME={{REDIS_USERNAME}} MANDARIN_REDIS_PORT={{REDIS_PORT}} MANDARIN_REDIS_HOST={{REDIS_HOST}} MANDARIN_REDIS_PASSWORD={{REDIS_PASSWORD}} +IMAP_REDIS_TLS={{REDIS_TLS}} +IMAP_REDIS_USERNAME={{REDIS_USERNAME}} +IMAP_REDIS_PORT={{REDIS_PORT}} +IMAP_REDIS_HOST={{REDIS_HOST}} +IMAP_REDIS_PASSWORD={{REDIS_PASSWORD}} ############# ## certbot ## @@ -253,6 +265,7 @@ API_RESTRICTED_SYMBOL=API_RESTRICTED_SYMBOL ########################## ## smtp mirrored config ## ########################## +SMTP_ALLOW_INSECURE_AUTH=false SMTP_TRANSPORT_USER="{{EMAIL_DEFAULT_FROM_EMAIL}}" SMTP_TRANSPORT_PASS="" SMTP_TRANSPORT_HOST={{SMTP_HOST}} @@ -265,6 +278,12 @@ SMTP_EXCHANGE_DOMAINS=mx1.forwardemail.net,mx2.forwardemail.net TRUTH_SOURCES= MAX_RECIPIENTS=50 +########## +## imap ## +########## +IMAP_HOST=localhost +IMAP_PORT=2143 + ##################### ## email retention ## ##################### diff --git a/.env.schema b/.env.schema index f2296dacf9..ddd57632ad 100644 --- a/.env.schema +++ b/.env.schema @@ -155,6 +155,13 @@ EMAILS_MONGO_PORT= EMAILS_MONGO_NAME= EMAILS_MONGO_URI= +IMAP_MONGO_USER= +IMAP_MONGO_PASS= +IMAP_MONGO_HOST= +IMAP_MONGO_PORT= +IMAP_MONGO_NAME= +IMAP_MONGO_URI= + ########### ## redis ## ########### @@ -179,6 +186,11 @@ MANDARIN_REDIS_TLS= MANDARIN_REDIS_PORT= MANDARIN_REDIS_HOST= MANDARIN_REDIS_PASSWORD= +IMAP_REDIS_TLS= +IMAP_REDIS_USERNAME= +IMAP_REDIS_PORT= +IMAP_REDIS_HOST= +IMAP_REDIS_PASSWORD= ############# ## certbot ## @@ -248,16 +260,25 @@ API_RESTRICTED_SYMBOL= ########################## ## smtp mirrored config ## ########################## +SMTP_ALLOW_INSECURE_AUTH= SMTP_TRANSPORT_USER= SMTP_TRANSPORT_PASS= SMTP_TRANSPORT_HOST= SMTP_TRANSPORT_PORT= SMTP_TRANSPORT_SECURE= +SMTP_HOST= +SMTP_PORT= SMTP_MESSAGE_MAX_SIZE= SMTP_EXCHANGE_DOMAINS= TRUTH_SOURCES= MAX_RECIPIENTS= +########## +## imap ## +########## +IMAP_HOST= +IMAP_PORT= + ##################### ## email retention ## ##################### diff --git a/.lintstagedrc.js b/.lintstagedrc.js index 51f7ae9bc4..9ff60102bc 100644 --- a/.lintstagedrc.js +++ b/.lintstagedrc.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { '*.md,!test/snapshots/**/*.md,!test/**/snapshots/**/*.md,!locales/README.md': [(filenames) => filenames.map((filename) => `remark ${filename} -qfo`)], diff --git a/.postcssrc.js b/.postcssrc.js index 211f6b865e..5923e1e534 100644 --- a/.postcssrc.js +++ b/.postcssrc.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { plugins: { 'stylelint': {}, diff --git a/.prettierrc.js b/.prettierrc.js index 39b7ac0729..09422367c4 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { plugins: [require('@prettier/plugin-pug')], singleQuote: true, diff --git a/.pug-lintrc.js b/.pug-lintrc.js index 7bf25ebab2..8a92c74025 100644 --- a/.pug-lintrc.js +++ b/.pug-lintrc.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { extends: '@ladjs/pug-lint-config-lad', diff --git a/.remarkrc.js b/.remarkrc.js index bf36d79e76..633395bc91 100644 --- a/.remarkrc.js +++ b/.remarkrc.js @@ -1,10 +1,16 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { plugins: [ 'preset-github', [ 'remark-license', { - file: 'https://github.com/forwardemail/forwardemail.net/blob/master/LICENSE' + file: 'https://github.com/forwardemail/forwardemail.net/blob/master/LICENSE.md', + heading: '## License' } ] ] diff --git a/.stylelintrc.js b/.stylelintrc.js index 47b5d89887..c8f0647c02 100644 --- a/.stylelintrc.js +++ b/.stylelintrc.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { "extends": ["stylelint-config-recommended-scss"] }; diff --git a/.xo-config.js b/.xo-config.js index fd8ee0613a..a03f140236 100644 --- a/.xo-config.js +++ b/.xo-config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { prettier: true, space: true, diff --git a/.yamllint.yml b/.yamllint.yml index 75da2b7021..5711de67ef 100644 --- a/.yamllint.yml +++ b/.yamllint.yml @@ -1,3 +1,6 @@ +# Copyright (c) Forward Email LLC +# SPDX-License-Identifier: BUSL-1.1 + --- extends: default diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 30fc660c72..0000000000 --- a/LICENSE +++ /dev/null @@ -1,108 +0,0 @@ -License text copyright (c) 2019 MariaDB Corporation Ab, All Rights Reserved. -"Business Source License" is a trademark of MariaDB Corporation Ab. - -Parameters - -Licensor: Forward Email LLC -Licensed Work: Forward Email - The Licensed Work is (c) 2023 Forward Email LLC -Additional Use Grant: You may use the Licensed Work, provided that you do not - use the Licensed Work for an Email Service. - - An "Email Service" is a commercial offering that allows - third parties (other than your employees and contractors) - to access the functionality of the Licensed Work so that - such third parties directly benefit from the email - forwarding (or other) features of the Licensed Work. - -Change Date: 2027-06-01 - -Change License: Apache License, Version 2.0 - -For information about alternative licensing arrangements for the Software, -please visit: https://forwardemail.net - -Notice - -The Business Source License (this document, or the "License") is not an Open -Source license. However, the Licensed Work will eventually be made available -under an Open Source License, as stated in this License. - -For more information on the use of the Business Source License for MariaDB -products, please visit the MariaDB Business Source License FAQ at -https://mariadb.com/bsl-faq-mariadb. - -For more information on the use of the Business Source License generally, -please visit the Adopting and Developing Business Source License FAQ at -https://mariadb.com/bsl-faq-adopting. - ------------------------------------------------------------------------------ - -Business Source License 1.1 - -Terms - -The Licensor hereby grants you the right to copy, modify, create derivative -works, redistribute, and make non-production use of the Licensed Work. The -Licensor may make an Additional Use Grant, above, permitting limited -production use. - -Effective on the Change Date, or the fourth anniversary of the first publicly -available distribution of a specific version of the Licensed Work under this -License, whichever comes first, the Licensor hereby grants you rights under -the terms of the Change License, and the rights granted in the paragraph -above terminate. - -If your use of the Licensed Work does not comply with the requirements -currently in effect as described in this License, you must purchase a -commercial license from the Licensor, its affiliated entities, or authorized -resellers, or you must refrain from using the Licensed Work. - -All copies of the original and modified Licensed Work, and derivative works -of the Licensed Work, are subject to this License. This License applies -separately for each version of the Licensed Work and the Change Date may vary -for each version of the Licensed Work released by Licensor. - -You must conspicuously display this License on each original or modified copy -of the Licensed Work. If you receive the Licensed Work in original or -modified form from a third party, the terms and conditions set forth in this -License apply to your use of that work. - -Any use of the Licensed Work in violation of this License will automatically -terminate your rights under this License for the current and all other -versions of the Licensed Work. - -This License does not grant you any right in any trademark or logo of -Licensor or its affiliates (provided that you may use a trademark or logo of -Licensor as expressly required by this License). - -TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON -AN "AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, -EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND -TITLE. - -MariaDB hereby grants you permission to use this License’s text to license -your works, and to refer to it using the trademark "Business Source License", -as long as you comply with the Covenants of Licensor below. - -Covenants of Licensor - -In consideration of the right to use this License’s text and the "Business -Source License" name and trademark, Licensor covenants to MariaDB, and to all -other recipients of the licensed work to be provided by Licensor: - -1. To specify as the Change License the GPL Version 2.0 or any later version, - or a license that is compatible with GPL Version 2.0 or a later version, - where "compatible" means that software provided under the Change License can - be included in a program with software provided under GPL Version 2.0 or a - later version. Licensor may specify additional Change Licenses without - limitation. - -2. To either: (a) specify an additional grant of rights to use that does not - impose any additional restriction on the right granted in this License, as - the Additional Use Grant; or (b) insert the text "None". - -3. To specify a Change Date. - -4. Not to modify this License in any other way. diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000000..4140c07150 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,482 @@ +# License + + +## Table of Contents + +* [Copyright](#copyright) +* [Disclaimer](#disclaimer) +* [Mozilla Public License 2.0](#mozilla-public-license-20) +* [Business Source License 1.1](#business-source-license-11) + + +## Copyright + +Copyright (c) 2023 Forward Email LLC • + + +## Disclaimer + +This license applies apart from third-party linked files published with their own license. + +The following files (excluding linked files contained therein) are +licensed under the [Mozilla Public License 2.0](mozilla-public-license-20) below. + +* [app/models/journals.js](https://github.com/forwardemail/forwardemail.net/blob/master/app/models/journals.js) +* [app/models/mailboxes.js](https://github.com/forwardemail/forwardemail.net/blob/master/app/models/mailboxes.js) +* [app/models/messages.js](https://github.com/forwardemail/forwardemail.net/blob/master/app/models/messages.js) +* [app/models/threads.js](https://github.com/forwardemail/forwardemail.net/blob/master/app/models/threads.js) +* [helpers/imap-notifier.js](https://github.com/forwardemail/forwardemail.net/blob/master/helpers/imap-notifier.js) +* [helpers/imap/\*\*/\*](https://github.com/forwardemail/forwardemail.net/blob/master/helpers/imap) +* [helpers/socket-error.js](https://github.com/forwardemail/forwardemail.net/blob/master/helpers/socket-error.js) +* [imap-server.js](https://github.com/forwardemail/forwardemail.net/blob/master/imap-server.js) +* [test/imap/\*\*/\*](https://github.com/forwardemail/forwardemail.net/blob/master/test/imap) + +Note that `**/*` indicates all files recursively under a distinct path. + +All other files are licensed under the [Business Source License 1.1](#business-source-license-11) below. + + +## Mozilla Public License 2.0 + +```txt +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. +``` + + +## Business Source License 1.1 + +```txt +License text copyright (c) 2020 MariaDB Corporation Ab, All Rights Reserved. +“Business Source License” is a trademark of MariaDB Corporation Ab. + +Parameters + +Licensor: Forward Email LLC +Licensed Work: Forward Email. The Licensed Work is (c) 2023 Forward Email LLC +Additional Use Grant: You may make production use of the Licensed Work, + provided such use does not include offering the Licensed Work + to third parties on a hosted or embedded basis which is + competitive with Forward Email's products. +Change Date: Four years from the date the Licensed Work is published. +Change License: Mozilla Public License 2.0 (MPL-2.0) + +For information about alternative licensing arrangements for the Licensed Work, +please contact . + +Notice + +Business Source License 1.1 + +Terms + +The Licensor hereby grants you the right to copy, modify, create derivative +works, redistribute, and make non-production use of the Licensed Work. The +Licensor may make an Additional Use Grant, above, permitting limited production use. + +Effective on the Change Date, or the fourth anniversary of the first publicly +available distribution of a specific version of the Licensed Work under this +License, whichever comes first, the Licensor hereby grants you rights under +the terms of the Change License, and the rights granted in the paragraph +above terminate. + +If your use of the Licensed Work does not comply with the requirements +currently in effect as described in this License, you must purchase a +commercial license from the Licensor, its affiliated entities, or authorized +resellers, or you must refrain from using the Licensed Work. + +All copies of the original and modified Licensed Work, and derivative works +of the Licensed Work, are subject to this License. This License applies +separately for each version of the Licensed Work and the Change Date may vary +for each version of the Licensed Work released by Licensor. + +You must conspicuously display this License on each original or modified copy +of the Licensed Work. If you receive the Licensed Work in original or +modified form from a third party, the terms and conditions set forth in this +License apply to your use of that work. + +Any use of the Licensed Work in violation of this License will automatically +terminate your rights under this License for the current and all other +versions of the Licensed Work. + +This License does not grant you any right in any trademark or logo of +Licensor or its affiliates (provided that you may use a trademark or logo of +Licensor as expressly required by this License). + +TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON +AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, +EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND +TITLE. +``` diff --git a/NOTICE b/NOTICE deleted file mode 100644 index c64bfc72aa..0000000000 --- a/NOTICE +++ /dev/null @@ -1,4 +0,0 @@ -Forward Email (https://forwardemail.net/) -(c) 2023 Forward Email LLC - -This product includes software developed by Forward Email LLC diff --git a/README.md b/README.md index 14fec43b3e..2646c9bc10 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ build status code style styled with prettier - license + license
@@ -326,7 +326,7 @@ Follow the [Deployment](#deployment) guide below for automatic provisioning and ## License -[Business Source License 1.1](https://github.com/forwardemail/forwardemail.net/blob/master/LICENSE) © [Forward Email](https://forwardemail.net) +[(BUSL-1.1 AND MPL-2.0)](LICENSE.md) © [Forward Email LLC](https://forwardemail.net) ## diff --git a/ansible-playbook.js b/ansible-playbook.js index 01910594bf..962ecd7452 100644 --- a/ansible-playbook.js +++ b/ansible-playbook.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const process = require('process'); const fs = require('fs'); const path = require('path'); diff --git a/ansible/playbooks/bree.yml b/ansible/playbooks/bree.yml index 63fa62bfc0..9846571d09 100644 --- a/ansible/playbooks/bree.yml +++ b/ansible/playbooks/bree.yml @@ -1,3 +1,6 @@ +# Copyright (c) Forward Email LLC +# SPDX-License-Identifier: BUSL-1.1 + --- - name: Import security playbook ansible.builtin.import_playbook: security.yml diff --git a/ansible/playbooks/certificates.yml b/ansible/playbooks/certificates.yml index fb63605f7b..5b64e093a0 100644 --- a/ansible/playbooks/certificates.yml +++ b/ansible/playbooks/certificates.yml @@ -1,3 +1,6 @@ +# Copyright (c) Forward Email LLC +# SPDX-License-Identifier: BUSL-1.1 + --- - hosts: smtp:http:bree name: Certificates diff --git a/ansible/playbooks/deployment-keys.yml b/ansible/playbooks/deployment-keys.yml index 43118223c3..eca65492d9 100644 --- a/ansible/playbooks/deployment-keys.yml +++ b/ansible/playbooks/deployment-keys.yml @@ -1,3 +1,6 @@ +# Copyright (c) Forward Email LLC +# SPDX-License-Identifier: BUSL-1.1 + --- - hosts: smtp:http:bree name: Deployment Keys diff --git a/ansible/playbooks/ecosystem.yml b/ansible/playbooks/ecosystem.yml index 1139adb9cc..865116e0ee 100644 --- a/ansible/playbooks/ecosystem.yml +++ b/ansible/playbooks/ecosystem.yml @@ -1,3 +1,6 @@ +# Copyright (c) Forward Email LLC +# SPDX-License-Identifier: BUSL-1.1 + --- - hosts: localhost name: Ecosystem diff --git a/ansible/playbooks/env.yml b/ansible/playbooks/env.yml index 6478caca3e..9bde3458be 100644 --- a/ansible/playbooks/env.yml +++ b/ansible/playbooks/env.yml @@ -1,3 +1,6 @@ +# Copyright (c) Forward Email LLC +# SPDX-License-Identifier: BUSL-1.1 + --- - hosts: smtp:http:bree name: Env diff --git a/ansible/playbooks/gapp-creds.yml b/ansible/playbooks/gapp-creds.yml index e697f0722e..b5f13e50b8 100644 --- a/ansible/playbooks/gapp-creds.yml +++ b/ansible/playbooks/gapp-creds.yml @@ -1,3 +1,6 @@ +# Copyright (c) Forward Email LLC +# SPDX-License-Identifier: BUSL-1.1 + --- - hosts: smtp:http:bree name: Google Application Credentials diff --git a/ansible/playbooks/http.yml b/ansible/playbooks/http.yml index 9d057503c9..08db964b72 100644 --- a/ansible/playbooks/http.yml +++ b/ansible/playbooks/http.yml @@ -1,3 +1,6 @@ +# Copyright (c) Forward Email LLC +# SPDX-License-Identifier: BUSL-1.1 + --- - name: Import security playbook ansible.builtin.import_playbook: security.yml diff --git a/ansible/playbooks/node.yml b/ansible/playbooks/node.yml index e3b1ea2f86..1adbefd56e 100644 --- a/ansible/playbooks/node.yml +++ b/ansible/playbooks/node.yml @@ -1,3 +1,6 @@ +# Copyright (c) Forward Email LLC +# SPDX-License-Identifier: BUSL-1.1 + --- - hosts: smtp:http:bree name: Node.js diff --git a/ansible/playbooks/security.yml b/ansible/playbooks/security.yml index aeac2d1da2..74ae7114ff 100644 --- a/ansible/playbooks/security.yml +++ b/ansible/playbooks/security.yml @@ -1,3 +1,6 @@ +# Copyright (c) Forward Email LLC +# SPDX-License-Identifier: BUSL-1.1 + --- - hosts: smtp:http:bree name: Security diff --git a/ansible/playbooks/smtp.yml b/ansible/playbooks/smtp.yml index 986ee0b7eb..7294283870 100644 --- a/ansible/playbooks/smtp.yml +++ b/ansible/playbooks/smtp.yml @@ -1,3 +1,6 @@ +# Copyright (c) Forward Email LLC +# SPDX-License-Identifier: BUSL-1.1 + --- - name: Import security playbook ansible.builtin.import_playbook: security.yml diff --git a/ansible/playbooks/ssh-keys.yml b/ansible/playbooks/ssh-keys.yml index e98d4d5cdc..508461bb68 100644 --- a/ansible/playbooks/ssh-keys.yml +++ b/ansible/playbooks/ssh-keys.yml @@ -1,3 +1,6 @@ +# Copyright (c) Forward Email LLC +# SPDX-License-Identifier: BUSL-1.1 + --- - hosts: smtp:http:bree name: SSH Keys diff --git a/ansible/playbooks/templates/hosts.yml b/ansible/playbooks/templates/hosts.yml index e4f7bc6e27..30febdda38 100644 --- a/ansible/playbooks/templates/hosts.yml +++ b/ansible/playbooks/templates/hosts.yml @@ -1,3 +1,6 @@ +# Copyright (c) Forward Email LLC +# SPDX-License-Identifier: BUSL-1.1 + --- all: children: diff --git a/ansible/requirements.yml b/ansible/requirements.yml index 092ee4c06a..1543ef11fd 100644 --- a/ansible/requirements.yml +++ b/ansible/requirements.yml @@ -1,3 +1,6 @@ +# Copyright (c) Forward Email LLC +# SPDX-License-Identifier: BUSL-1.1 + --- - name: swapfile src: oefenweb.swapfile diff --git a/api.js b/api.js index 0358dee224..e2e592ade9 100644 --- a/api.js +++ b/api.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const process = require('process'); // eslint-disable-next-line import/no-unassigned-import diff --git a/app/controllers/api/index.js b/app/controllers/api/index.js index 11c04ea38c..0a03ab5039 100644 --- a/app/controllers/api/index.js +++ b/app/controllers/api/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const v1 = require('./v1'); module.exports = { v1 }; diff --git a/app/controllers/api/v1/aliases.js b/app/controllers/api/v1/aliases.js index 2b3b0c8ec6..546cc836cf 100644 --- a/app/controllers/api/v1/aliases.js +++ b/app/controllers/api/v1/aliases.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const ObjectID = require('bson-objectid'); const _ = require('lodash'); const pickOriginal = require('@ladjs/pick-original'); diff --git a/app/controllers/api/v1/domains.js b/app/controllers/api/v1/domains.js index 0010a4ab22..1d9cff77ca 100644 --- a/app/controllers/api/v1/domains.js +++ b/app/controllers/api/v1/domains.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const _ = require('lodash'); const pickOriginal = require('@ladjs/pick-original'); diff --git a/app/controllers/api/v1/emails.js b/app/controllers/api/v1/emails.js index 14deeefa59..257afac3e9 100644 --- a/app/controllers/api/v1/emails.js +++ b/app/controllers/api/v1/emails.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const _ = require('lodash'); const pickOriginal = require('@ladjs/pick-original'); diff --git a/app/controllers/api/v1/enforce-paid-plan.js b/app/controllers/api/v1/enforce-paid-plan.js index 1c9b40d6fb..c23404b2c9 100644 --- a/app/controllers/api/v1/enforce-paid-plan.js +++ b/app/controllers/api/v1/enforce-paid-plan.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); async function enforcePaidPlan(ctx, next) { diff --git a/app/controllers/api/v1/index.js b/app/controllers/api/v1/index.js index 4cb2589ccc..23370678a2 100644 --- a/app/controllers/api/v1/index.js +++ b/app/controllers/api/v1/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const aliases = require('./aliases'); const domains = require('./domains'); const enforcePaidPlan = require('./enforce-paid-plan'); diff --git a/app/controllers/api/v1/log.js b/app/controllers/api/v1/log.js index c5cd366279..d394b89314 100644 --- a/app/controllers/api/v1/log.js +++ b/app/controllers/api/v1/log.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const auth = require('basic-auth'); const parseLogs = require('parse-logs'); diff --git a/app/controllers/api/v1/lookup.js b/app/controllers/api/v1/lookup.js index 1dc223b238..975735520a 100644 --- a/app/controllers/api/v1/lookup.js +++ b/app/controllers/api/v1/lookup.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const RE2 = require('re2'); const _ = require('lodash'); diff --git a/app/controllers/api/v1/max-forwarded-addresses.js b/app/controllers/api/v1/max-forwarded-addresses.js index d2e8434bb6..c5bcdd0289 100644 --- a/app/controllers/api/v1/max-forwarded-addresses.js +++ b/app/controllers/api/v1/max-forwarded-addresses.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const isFQDN = require('is-fqdn'); const isSANB = require('is-string-and-not-blank'); diff --git a/app/controllers/api/v1/paypal.js b/app/controllers/api/v1/paypal.js index 4e056ba9b5..976d6f6084 100644 --- a/app/controllers/api/v1/paypal.js +++ b/app/controllers/api/v1/paypal.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const { promisify } = require('util'); const Boom = require('@hapi/boom'); @@ -330,7 +335,7 @@ async function processEvent(ctx) { if ( !_.isObject(res.body) || res.body.intent !== 'CAPTURE' || - !['APPROVED', 'COMPLETED'].includes(res.body.status) || + !['APPROVED', 'COMPLETED', 'CREATED'].includes(res.body.status) || !_.isArray(res.body.purchase_units) || _.isEmpty(res.body.purchase_units) || !_.isObject(res.body.payer) || diff --git a/app/controllers/api/v1/port.js b/app/controllers/api/v1/port.js index e9b2962c8c..80a5b5898f 100644 --- a/app/controllers/api/v1/port.js +++ b/app/controllers/api/v1/port.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const isFQDN = require('is-fqdn'); const isSANB = require('is-string-and-not-blank'); diff --git a/app/controllers/api/v1/restricted.js b/app/controllers/api/v1/restricted.js index ec5229b3ed..ad7655364b 100644 --- a/app/controllers/api/v1/restricted.js +++ b/app/controllers/api/v1/restricted.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const auth = require('basic-auth'); diff --git a/app/controllers/api/v1/self-test.js b/app/controllers/api/v1/self-test.js index 1bb8a1e800..9dc6501615 100644 --- a/app/controllers/api/v1/self-test.js +++ b/app/controllers/api/v1/self-test.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const os = require('os'); const Boom = require('@hapi/boom'); diff --git a/app/controllers/api/v1/settings.js b/app/controllers/api/v1/settings.js index 302993320b..3b5ad1eee7 100644 --- a/app/controllers/api/v1/settings.js +++ b/app/controllers/api/v1/settings.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const isFQDN = require('is-fqdn'); const isSANB = require('is-string-and-not-blank'); diff --git a/app/controllers/api/v1/stripe.js b/app/controllers/api/v1/stripe.js index 971fb186a9..8aa7758011 100644 --- a/app/controllers/api/v1/stripe.js +++ b/app/controllers/api/v1/stripe.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const Stripe = require('stripe'); const _ = require('lodash'); diff --git a/app/controllers/api/v1/test.js b/app/controllers/api/v1/test.js index c0e520b873..e0852fc3d8 100644 --- a/app/controllers/api/v1/test.js +++ b/app/controllers/api/v1/test.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const cryptoRandomString = require('crypto-random-string'); const slug = require('speakingurl'); const isSANB = require('is-string-and-not-blank'); diff --git a/app/controllers/api/v1/upgrade.js b/app/controllers/api/v1/upgrade.js index 5ccb0ecba2..46602a5100 100644 --- a/app/controllers/api/v1/upgrade.js +++ b/app/controllers/api/v1/upgrade.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const isFQDN = require('is-fqdn'); diff --git a/app/controllers/api/v1/users.js b/app/controllers/api/v1/users.js index cdb570ab1d..f72effc9af 100644 --- a/app/controllers/api/v1/users.js +++ b/app/controllers/api/v1/users.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const isSANB = require('is-string-and-not-blank'); diff --git a/app/controllers/index.js b/app/controllers/index.js index 13fcc3400c..de3b698ba5 100644 --- a/app/controllers/index.js +++ b/app/controllers/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const web = require('./web'); const api = require('./api'); diff --git a/app/controllers/web/admin/allowlist.js b/app/controllers/web/admin/allowlist.js index decf5013e1..624b729427 100644 --- a/app/controllers/web/admin/allowlist.js +++ b/app/controllers/web/admin/allowlist.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const RE2 = require('re2'); const _ = require('lodash'); diff --git a/app/controllers/web/admin/dashboard.js b/app/controllers/web/admin/dashboard.js index 2c638056d7..68b5b99a3d 100644 --- a/app/controllers/web/admin/dashboard.js +++ b/app/controllers/web/admin/dashboard.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const _ = require('lodash'); const dayjs = require('dayjs-with-plugins'); const humanize = require('humanize-string'); diff --git a/app/controllers/web/admin/denylist.js b/app/controllers/web/admin/denylist.js index 65c8093eee..47f48705c8 100644 --- a/app/controllers/web/admin/denylist.js +++ b/app/controllers/web/admin/denylist.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const RE2 = require('re2'); const _ = require('lodash'); diff --git a/app/controllers/web/admin/domains.js b/app/controllers/web/admin/domains.js index efb8504ac5..28040a0f71 100644 --- a/app/controllers/web/admin/domains.js +++ b/app/controllers/web/admin/domains.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const isSANB = require('is-string-and-not-blank'); diff --git a/app/controllers/web/admin/emails.js b/app/controllers/web/admin/emails.js index 0868cde0eb..b7dd322f37 100644 --- a/app/controllers/web/admin/emails.js +++ b/app/controllers/web/admin/emails.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const paginate = require('koa-ctx-paginate'); diff --git a/app/controllers/web/admin/index.js b/app/controllers/web/admin/index.js index f376051509..dc721637eb 100644 --- a/app/controllers/web/admin/index.js +++ b/app/controllers/web/admin/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const users = require('./users'); const domains = require('./domains'); const dashboard = require('./dashboard'); diff --git a/app/controllers/web/admin/logs.js b/app/controllers/web/admin/logs.js index a1b525540a..16a3e8d55f 100644 --- a/app/controllers/web/admin/logs.js +++ b/app/controllers/web/admin/logs.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const paginate = require('koa-ctx-paginate'); diff --git a/app/controllers/web/admin/users.js b/app/controllers/web/admin/users.js index dd7cb065c7..d364da62c7 100644 --- a/app/controllers/web/admin/users.js +++ b/app/controllers/web/admin/users.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const isSANB = require('is-string-and-not-blank'); diff --git a/app/controllers/web/api.js b/app/controllers/web/api.js index 6867daf084..c7d827d009 100644 --- a/app/controllers/web/api.js +++ b/app/controllers/web/api.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const childProcess = require('child_process'); const path = require('path'); const util = require('util'); diff --git a/app/controllers/web/auth.js b/app/controllers/web/auth.js index a9baa869a9..55346f37a7 100644 --- a/app/controllers/web/auth.js +++ b/app/controllers/web/auth.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const Stripe = require('stripe'); const _ = require('lodash'); diff --git a/app/controllers/web/denylist.js b/app/controllers/web/denylist.js index f820fafea4..02394c8ef8 100644 --- a/app/controllers/web/denylist.js +++ b/app/controllers/web/denylist.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const dayjs = require('dayjs-with-plugins'); const isFQDN = require('is-fqdn'); diff --git a/app/controllers/web/faq.js b/app/controllers/web/faq.js index 15a25950cb..cfac6acb92 100644 --- a/app/controllers/web/faq.js +++ b/app/controllers/web/faq.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const isSANB = require('is-string-and-not-blank'); const slug = require('speakingurl'); const { boolean } = require('boolean'); diff --git a/app/controllers/web/guides.js b/app/controllers/web/guides.js index dd45ee717f..6243d55d9e 100644 --- a/app/controllers/web/guides.js +++ b/app/controllers/web/guides.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const path = require('path'); const Meta = require('koa-meta'); diff --git a/app/controllers/web/help.js b/app/controllers/web/help.js index 6666f5a208..e553659c78 100644 --- a/app/controllers/web/help.js +++ b/app/controllers/web/help.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const sanitize = require('sanitize-html'); const isSANB = require('is-string-and-not-blank'); const Boom = require('@hapi/boom'); diff --git a/app/controllers/web/index.js b/app/controllers/web/index.js index 97a9108116..6b8c81fbe6 100644 --- a/app/controllers/web/index.js +++ b/app/controllers/web/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const fs = require('node:fs'); const path = require('node:path'); const { Buffer } = require('node:buffer'); diff --git a/app/controllers/web/my-account/cancel-email-change.js b/app/controllers/web/my-account/cancel-email-change.js index cdd08ea042..5fdf345683 100644 --- a/app/controllers/web/my-account/cancel-email-change.js +++ b/app/controllers/web/my-account/cancel-email-change.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const config = require('#config'); diff --git a/app/controllers/web/my-account/cancel-subscription.js b/app/controllers/web/my-account/cancel-subscription.js index 9cdb56026a..729a8ca5dd 100644 --- a/app/controllers/web/my-account/cancel-subscription.js +++ b/app/controllers/web/my-account/cancel-subscription.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const Stripe = require('stripe'); const isSANB = require('is-string-and-not-blank'); diff --git a/app/controllers/web/my-account/create-alias-form.js b/app/controllers/web/my-account/create-alias-form.js index 8badf9a2d8..a22b7b28ed 100644 --- a/app/controllers/web/my-account/create-alias-form.js +++ b/app/controllers/web/my-account/create-alias-form.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + function createAliasForm(ctx, next) { ctx.state.breadcrumbHeaderCentered = true; ctx.state.breadcrumbs = [ diff --git a/app/controllers/web/my-account/create-alias.js b/app/controllers/web/my-account/create-alias.js index 1c7054ffc7..edffa240ec 100644 --- a/app/controllers/web/my-account/create-alias.js +++ b/app/controllers/web/my-account/create-alias.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const isSANB = require('is-string-and-not-blank'); const { boolean } = require('boolean'); diff --git a/app/controllers/web/my-account/create-domain-billing.js b/app/controllers/web/my-account/create-domain-billing.js index 8ee3e03b8a..cb326af4be 100644 --- a/app/controllers/web/my-account/create-domain-billing.js +++ b/app/controllers/web/my-account/create-domain-billing.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const Stripe = require('stripe'); const _ = require('lodash'); diff --git a/app/controllers/web/my-account/create-domain-form.js b/app/controllers/web/my-account/create-domain-form.js index 603289d428..0b4656362a 100644 --- a/app/controllers/web/my-account/create-domain-form.js +++ b/app/controllers/web/my-account/create-domain-form.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + function createDomainForm(ctx, next) { const header = ctx.translate('ADD_DOMAIN'); ctx.state.breadcrumbHeaderCentered = true; diff --git a/app/controllers/web/my-account/create-domain.js b/app/controllers/web/my-account/create-domain.js index e9d72a725a..f3aa110638 100644 --- a/app/controllers/web/my-account/create-domain.js +++ b/app/controllers/web/my-account/create-domain.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const { boolean } = require('boolean'); diff --git a/app/controllers/web/my-account/create-invite.js b/app/controllers/web/my-account/create-invite.js index 1cdc9ebbab..a0afbf0abf 100644 --- a/app/controllers/web/my-account/create-invite.js +++ b/app/controllers/web/my-account/create-invite.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const isSANB = require('is-string-and-not-blank'); const { isEmail } = require('validator'); diff --git a/app/controllers/web/my-account/ensure-alias-admin.js b/app/controllers/web/my-account/ensure-alias-admin.js index 07d3f0140a..8a17f45436 100644 --- a/app/controllers/web/my-account/ensure-alias-admin.js +++ b/app/controllers/web/my-account/ensure-alias-admin.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); function ensureAliasAdmin(ctx, next) { diff --git a/app/controllers/web/my-account/ensure-domain-admin.js b/app/controllers/web/my-account/ensure-domain-admin.js index 0656bf43e3..08668b9138 100644 --- a/app/controllers/web/my-account/ensure-domain-admin.js +++ b/app/controllers/web/my-account/ensure-domain-admin.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); function ensureDomainAdmin(ctx, next) { diff --git a/app/controllers/web/my-account/ensure-not-banned.js b/app/controllers/web/my-account/ensure-not-banned.js index 98f1e2e802..8589376046 100644 --- a/app/controllers/web/my-account/ensure-not-banned.js +++ b/app/controllers/web/my-account/ensure-not-banned.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const config = require('#config'); diff --git a/app/controllers/web/my-account/ensure-paid-to-date.js b/app/controllers/web/my-account/ensure-paid-to-date.js index c1c308f8e4..1193836cdf 100644 --- a/app/controllers/web/my-account/ensure-paid-to-date.js +++ b/app/controllers/web/my-account/ensure-paid-to-date.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const ms = require('ms'); diff --git a/app/controllers/web/my-account/ensure-smtp-access.js b/app/controllers/web/my-account/ensure-smtp-access.js index 14a2dd2dcd..764b12b795 100644 --- a/app/controllers/web/my-account/ensure-smtp-access.js +++ b/app/controllers/web/my-account/ensure-smtp-access.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const isSANB = require('is-string-and-not-blank'); diff --git a/app/controllers/web/my-account/ensure-team-plan.js b/app/controllers/web/my-account/ensure-team-plan.js index 753256b0cc..cd6a5d6404 100644 --- a/app/controllers/web/my-account/ensure-team-plan.js +++ b/app/controllers/web/my-account/ensure-team-plan.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + function ensureTeamPlan(ctx, next) { ctx.state.isTeamPlanRequired = ctx.state.domain.plan !== 'team'; return next(); diff --git a/app/controllers/web/my-account/ensure-upgraded-plan.js b/app/controllers/web/my-account/ensure-upgraded-plan.js index 497c7ae9c6..74ecc3ff00 100644 --- a/app/controllers/web/my-account/ensure-upgraded-plan.js +++ b/app/controllers/web/my-account/ensure-upgraded-plan.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); function ensureUpgradedPlan(ctx, next) { diff --git a/app/controllers/web/my-account/generate-alias-password.js b/app/controllers/web/my-account/generate-alias-password.js index 8c5ac09d75..fd6049bf95 100644 --- a/app/controllers/web/my-account/generate-alias-password.js +++ b/app/controllers/web/my-account/generate-alias-password.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const noReplyList = require('reserved-email-addresses-list/no-reply-list.json'); diff --git a/app/controllers/web/my-account/import-aliases.js b/app/controllers/web/my-account/import-aliases.js index 35fe1f1212..f563e2e03b 100644 --- a/app/controllers/web/my-account/import-aliases.js +++ b/app/controllers/web/my-account/import-aliases.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const isFQDN = require('is-fqdn'); diff --git a/app/controllers/web/my-account/index.js b/app/controllers/web/my-account/index.js index cf03feed70..43957212e0 100644 --- a/app/controllers/web/my-account/index.js +++ b/app/controllers/web/my-account/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const cancelEmailChange = require('./cancel-email-change'); const cancelSubscription = require('./cancel-subscription'); const createAlias = require('./create-alias'); diff --git a/app/controllers/web/my-account/list-aliases.js b/app/controllers/web/my-account/list-aliases.js index 989f36f7bf..2a3c878f13 100644 --- a/app/controllers/web/my-account/list-aliases.js +++ b/app/controllers/web/my-account/list-aliases.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + async function listAliases(ctx) { ctx.state.isContainerFluid = true; diff --git a/app/controllers/web/my-account/list-billing.js b/app/controllers/web/my-account/list-billing.js index bdf76d66d6..b0a4ae5a2e 100644 --- a/app/controllers/web/my-account/list-billing.js +++ b/app/controllers/web/my-account/list-billing.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const RE2 = require('re2'); const _ = require('lodash'); // const dayjs = require('dayjs-with-plugins'); diff --git a/app/controllers/web/my-account/list-domains.js b/app/controllers/web/my-account/list-domains.js index d4686062d8..6f9be6c8a8 100644 --- a/app/controllers/web/my-account/list-domains.js +++ b/app/controllers/web/my-account/list-domains.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const _ = require('lodash'); const isSANB = require('is-string-and-not-blank'); const paginate = require('koa-ctx-paginate'); diff --git a/app/controllers/web/my-account/list-emails.js b/app/controllers/web/my-account/list-emails.js index 47d6724667..450a79fd78 100644 --- a/app/controllers/web/my-account/list-emails.js +++ b/app/controllers/web/my-account/list-emails.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const isFQDN = require('is-fqdn'); diff --git a/app/controllers/web/my-account/list-logs.js b/app/controllers/web/my-account/list-logs.js index ab5a72afc4..89c4940baf 100644 --- a/app/controllers/web/my-account/list-logs.js +++ b/app/controllers/web/my-account/list-logs.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const zlib = require('node:zlib'); const { Buffer } = require('node:buffer'); const { isIP } = require('node:net'); diff --git a/app/controllers/web/my-account/recovery-keys.js b/app/controllers/web/my-account/recovery-keys.js index 593179c15b..f3259f2a7b 100644 --- a/app/controllers/web/my-account/recovery-keys.js +++ b/app/controllers/web/my-account/recovery-keys.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const config = require('#config'); async function recoveryKeys(ctx) { diff --git a/app/controllers/web/my-account/remove-alias.js b/app/controllers/web/my-account/remove-alias.js index 6dd950ad91..a20d06d6b7 100644 --- a/app/controllers/web/my-account/remove-alias.js +++ b/app/controllers/web/my-account/remove-alias.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const { Aliases } = require('#models'); async function removeAlias(ctx, next) { diff --git a/app/controllers/web/my-account/remove-domain.js b/app/controllers/web/my-account/remove-domain.js index e72f18391c..2d6c53e189 100644 --- a/app/controllers/web/my-account/remove-domain.js +++ b/app/controllers/web/my-account/remove-domain.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const isSANB = require('is-string-and-not-blank'); const Boom = require('@hapi/boom'); diff --git a/app/controllers/web/my-account/remove-email.js b/app/controllers/web/my-account/remove-email.js index 8a08289a88..a31a58ea97 100644 --- a/app/controllers/web/my-account/remove-email.js +++ b/app/controllers/web/my-account/remove-email.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const parseErr = require('parse-err'); diff --git a/app/controllers/web/my-account/remove-invite.js b/app/controllers/web/my-account/remove-invite.js index 22098d7a3b..ca04b4893d 100644 --- a/app/controllers/web/my-account/remove-invite.js +++ b/app/controllers/web/my-account/remove-invite.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const isSANB = require('is-string-and-not-blank'); const { isEmail } = require('validator'); diff --git a/app/controllers/web/my-account/remove-member.js b/app/controllers/web/my-account/remove-member.js index f972752869..900e34fbb0 100644 --- a/app/controllers/web/my-account/remove-member.js +++ b/app/controllers/web/my-account/remove-member.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const isSANB = require('is-string-and-not-blank'); diff --git a/app/controllers/web/my-account/remove.js b/app/controllers/web/my-account/remove.js index 5e6cd6377c..1f8647fa67 100644 --- a/app/controllers/web/my-account/remove.js +++ b/app/controllers/web/my-account/remove.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const Stripe = require('stripe'); const _ = require('lodash'); diff --git a/app/controllers/web/my-account/resend-email-change.js b/app/controllers/web/my-account/resend-email-change.js index c5dc915f68..c3799bcf96 100644 --- a/app/controllers/web/my-account/resend-email-change.js +++ b/app/controllers/web/my-account/resend-email-change.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const cryptoRandomString = require('crypto-random-string'); diff --git a/app/controllers/web/my-account/resend-verification.js b/app/controllers/web/my-account/resend-verification.js index 4fcfdca7d1..a8362bf308 100644 --- a/app/controllers/web/my-account/resend-verification.js +++ b/app/controllers/web/my-account/resend-verification.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const isSANB = require('is-string-and-not-blank'); diff --git a/app/controllers/web/my-account/reset-api-token.js b/app/controllers/web/my-account/reset-api-token.js index 5ca1d1415e..2028a3db83 100644 --- a/app/controllers/web/my-account/reset-api-token.js +++ b/app/controllers/web/my-account/reset-api-token.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const config = require('#config'); async function resetAPIToken(ctx) { diff --git a/app/controllers/web/my-account/retrieve-alias.js b/app/controllers/web/my-account/retrieve-alias.js index 432ac29dc7..9601e9e1ba 100644 --- a/app/controllers/web/my-account/retrieve-alias.js +++ b/app/controllers/web/my-account/retrieve-alias.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const isSANB = require('is-string-and-not-blank'); const Aliases = require('#models/aliases'); diff --git a/app/controllers/web/my-account/retrieve-aliases.js b/app/controllers/web/my-account/retrieve-aliases.js index 8a598332bb..6e6a61a5a5 100644 --- a/app/controllers/web/my-account/retrieve-aliases.js +++ b/app/controllers/web/my-account/retrieve-aliases.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const _ = require('lodash'); const isSANB = require('is-string-and-not-blank'); const paginate = require('koa-ctx-paginate'); diff --git a/app/controllers/web/my-account/retrieve-billing.js b/app/controllers/web/my-account/retrieve-billing.js index 260f0f5bea..3c4c0d2160 100644 --- a/app/controllers/web/my-account/retrieve-billing.js +++ b/app/controllers/web/my-account/retrieve-billing.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const { Payments } = require('#models'); async function retrieveBilling(ctx, next) { diff --git a/app/controllers/web/my-account/retrieve-domain-billing.js b/app/controllers/web/my-account/retrieve-domain-billing.js index 85f235daed..735f69273e 100644 --- a/app/controllers/web/my-account/retrieve-domain-billing.js +++ b/app/controllers/web/my-account/retrieve-domain-billing.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const Stripe = require('stripe'); const _ = require('lodash'); diff --git a/app/controllers/web/my-account/retrieve-domain.js b/app/controllers/web/my-account/retrieve-domain.js index 48c79407c5..a73ecdeddf 100644 --- a/app/controllers/web/my-account/retrieve-domain.js +++ b/app/controllers/web/my-account/retrieve-domain.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const path = require('node:path'); const Boom = require('@hapi/boom'); diff --git a/app/controllers/web/my-account/retrieve-domains.js b/app/controllers/web/my-account/retrieve-domains.js index e04a756c98..d85934c41f 100644 --- a/app/controllers/web/my-account/retrieve-domains.js +++ b/app/controllers/web/my-account/retrieve-domains.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const _ = require('lodash'); const isSANB = require('is-string-and-not-blank'); diff --git a/app/controllers/web/my-account/retrieve-email.js b/app/controllers/web/my-account/retrieve-email.js index ebd7e18e55..26691946c7 100644 --- a/app/controllers/web/my-account/retrieve-email.js +++ b/app/controllers/web/my-account/retrieve-email.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const isSANB = require('is-string-and-not-blank'); const previewEmail = require('preview-email'); diff --git a/app/controllers/web/my-account/retrieve-invite.js b/app/controllers/web/my-account/retrieve-invite.js index 2578cbfbca..4555ac9c09 100644 --- a/app/controllers/web/my-account/retrieve-invite.js +++ b/app/controllers/web/my-account/retrieve-invite.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const isSANB = require('is-string-and-not-blank'); diff --git a/app/controllers/web/my-account/retrieve-log.js b/app/controllers/web/my-account/retrieve-log.js index 1f55d31215..168862377c 100644 --- a/app/controllers/web/my-account/retrieve-log.js +++ b/app/controllers/web/my-account/retrieve-log.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const isSANB = require('is-string-and-not-blank'); const mongoose = require('mongoose'); diff --git a/app/controllers/web/my-account/retrieve-profile.js b/app/controllers/web/my-account/retrieve-profile.js index 0f03757b40..d7479763b8 100644 --- a/app/controllers/web/my-account/retrieve-profile.js +++ b/app/controllers/web/my-account/retrieve-profile.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const countryList = require('country-list'); // country list with USA at the top diff --git a/app/controllers/web/my-account/retrieve-receipt.js b/app/controllers/web/my-account/retrieve-receipt.js index 915145a640..489679d20d 100644 --- a/app/controllers/web/my-account/retrieve-receipt.js +++ b/app/controllers/web/my-account/retrieve-receipt.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const dayjs = require('dayjs-with-plugins'); const getStream = require('get-stream'); diff --git a/app/controllers/web/my-account/set-conversion-and-refund-state-helpers.js b/app/controllers/web/my-account/set-conversion-and-refund-state-helpers.js index 34cc71de48..d0332f8b41 100644 --- a/app/controllers/web/my-account/set-conversion-and-refund-state-helpers.js +++ b/app/controllers/web/my-account/set-conversion-and-refund-state-helpers.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const dayjs = require('dayjs-with-plugins'); const ms = require('ms'); @@ -34,6 +39,7 @@ async function setConversionAndRefundStateHelpers(ctx, next) { // NOTE: must be greater than 30 days ago or after their plan was set // (whichever is sooner/greater) $gte: + // TODO: there is a bug here where if the plan was changed within an hour or something it bugged out new Date( ctx.state.user[config.userFields.planSetAt] ).getTime() > THIRTY_DAYS_AGO diff --git a/app/controllers/web/my-account/sorted-domains.js b/app/controllers/web/my-account/sorted-domains.js index d1f9b8dc13..207f8750f5 100644 --- a/app/controllers/web/my-account/sorted-domains.js +++ b/app/controllers/web/my-account/sorted-domains.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const _ = require('lodash'); const isFQDN = require('is-fqdn'); const isSANB = require('is-string-and-not-blank'); diff --git a/app/controllers/web/my-account/update-alias.js b/app/controllers/web/my-account/update-alias.js index ffa47da2f4..c2deb0085d 100644 --- a/app/controllers/web/my-account/update-alias.js +++ b/app/controllers/web/my-account/update-alias.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); diff --git a/app/controllers/web/my-account/update-card.js b/app/controllers/web/my-account/update-card.js index 90d57aa5ef..a933e54e33 100644 --- a/app/controllers/web/my-account/update-card.js +++ b/app/controllers/web/my-account/update-card.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const isSANB = require('is-string-and-not-blank'); const Boom = require('@hapi/boom'); const Stripe = require('stripe'); diff --git a/app/controllers/web/my-account/update-domain.js b/app/controllers/web/my-account/update-domain.js index 96554f95bc..60b2da7ee0 100644 --- a/app/controllers/web/my-account/update-domain.js +++ b/app/controllers/web/my-account/update-domain.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const isSANB = require('is-string-and-not-blank'); diff --git a/app/controllers/web/my-account/update-member.js b/app/controllers/web/my-account/update-member.js index 0da466ac2b..2c837ed5b7 100644 --- a/app/controllers/web/my-account/update-member.js +++ b/app/controllers/web/my-account/update-member.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const isSANB = require('is-string-and-not-blank'); const reservedAdminList = require('reserved-email-addresses-list/admin-list.json'); diff --git a/app/controllers/web/my-account/update-profile.js b/app/controllers/web/my-account/update-profile.js index b04dddc70b..0b941fea84 100644 --- a/app/controllers/web/my-account/update-profile.js +++ b/app/controllers/web/my-account/update-profile.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const cryptoRandomString = require('crypto-random-string'); diff --git a/app/controllers/web/my-account/validate-alias.js b/app/controllers/web/my-account/validate-alias.js index 8b911b8f49..5ab7b06f5a 100644 --- a/app/controllers/web/my-account/validate-alias.js +++ b/app/controllers/web/my-account/validate-alias.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const _ = require('lodash'); const isSANB = require('is-string-and-not-blank'); const slug = require('speakingurl'); diff --git a/app/controllers/web/my-account/validate-domain.js b/app/controllers/web/my-account/validate-domain.js index 0f1bc2b89b..7003fbc12f 100644 --- a/app/controllers/web/my-account/validate-domain.js +++ b/app/controllers/web/my-account/validate-domain.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const isFQDN = require('is-fqdn'); diff --git a/app/controllers/web/my-account/verify-records.js b/app/controllers/web/my-account/verify-records.js index 6947399082..5a29dae4c2 100644 --- a/app/controllers/web/my-account/verify-records.js +++ b/app/controllers/web/my-account/verify-records.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); diff --git a/app/controllers/web/my-account/verify-smtp.js b/app/controllers/web/my-account/verify-smtp.js index 9e52e07486..c4708e6253 100644 --- a/app/controllers/web/my-account/verify-smtp.js +++ b/app/controllers/web/my-account/verify-smtp.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); diff --git a/app/controllers/web/onboard.js b/app/controllers/web/onboard.js index da92778da1..365062fe13 100644 --- a/app/controllers/web/onboard.js +++ b/app/controllers/web/onboard.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const Email = require('email-templates'); const Meta = require('koa-meta'); diff --git a/app/controllers/web/otp/disable.js b/app/controllers/web/otp/disable.js index 2d8ab2d09e..c357a05010 100644 --- a/app/controllers/web/otp/disable.js +++ b/app/controllers/web/otp/disable.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const isSANB = require('is-string-and-not-blank'); diff --git a/app/controllers/web/otp/index.js b/app/controllers/web/otp/index.js index 8db3cabc09..9a5e706a3a 100644 --- a/app/controllers/web/otp/index.js +++ b/app/controllers/web/otp/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const disable = require('./disable'); const recovery = require('./recovery'); const setup = require('./setup'); diff --git a/app/controllers/web/otp/keys.js b/app/controllers/web/otp/keys.js index 8e902d2554..591f92e9d9 100644 --- a/app/controllers/web/otp/keys.js +++ b/app/controllers/web/otp/keys.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + async function keys(ctx) { // this is like a migration, it will automatically add token + keys if needed await ctx.state.user.save(); diff --git a/app/controllers/web/otp/recovery.js b/app/controllers/web/otp/recovery.js index cab9ba04e9..8a3e913733 100644 --- a/app/controllers/web/otp/recovery.js +++ b/app/controllers/web/otp/recovery.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const config = require('#config'); const sendVerificationEmail = require('#helpers/send-verification-email'); diff --git a/app/controllers/web/otp/setup.js b/app/controllers/web/otp/setup.js index fb74989114..704ce542e0 100644 --- a/app/controllers/web/otp/setup.js +++ b/app/controllers/web/otp/setup.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const isSANB = require('is-string-and-not-blank'); const qrcode = require('qrcode'); diff --git a/app/controllers/web/report.js b/app/controllers/web/report.js index ffd4c986f2..b0e684dd75 100644 --- a/app/controllers/web/report.js +++ b/app/controllers/web/report.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + async function report(ctx) { ctx.body = 'OK'; } diff --git a/app/controllers/web/sitemap.js b/app/controllers/web/sitemap.js index c851ae6cb5..3878870059 100644 --- a/app/controllers/web/sitemap.js +++ b/app/controllers/web/sitemap.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const getStream = require('get-stream'); const { SitemapStream } = require('sitemap'); diff --git a/app/models/aliases.js b/app/models/aliases.js index ca5242ca80..5eeae9f328 100644 --- a/app/models/aliases.js +++ b/app/models/aliases.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const crypto = require('node:crypto'); const { Buffer } = require('node:buffer'); const { promisify } = require('node:util'); @@ -29,6 +34,7 @@ const Users = require('./users'); const config = require('#config'); const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); const NO_REPLY_USERNAMES = new Set(noReplyList); @@ -84,6 +90,15 @@ Token.plugin(mongooseCommonPlugin, { }); const Aliases = new mongoose.Schema({ + storageUsed: { + type: Number, + default: 0 + }, + retention: { + type: Number, + default: 0, + min: 0 + }, is_api: { type: Boolean, default: false @@ -170,7 +185,11 @@ const Aliases = new mongoose.Schema({ Aliases.plugin(captainHook); +// eslint-disable-next-line complexity Aliases.pre('validate', function (next) { + // if storage used was below zero then set to zero + if (this.storageUsed < 0) this.storageUsed = 0; + // if name was not a string then generate a random one if (!isSANB(this.name)) { this.name = randomstring({ @@ -310,12 +329,6 @@ Aliases.pre('save', async function (next) { .exec() ]); - // filter out a domain's members without actual users - domain.members = domain.members.filter( - (member) => - _.isObject(member.user) && !member.user[config.userFields.isBanned] - ); - if (!domain) throw Boom.notFound( i18n.translateError('DOMAIN_DOES_NOT_EXIST_ANYWHERE', alias.locale) @@ -324,6 +337,12 @@ Aliases.pre('save', async function (next) { if (!user) throw Boom.notFound(i18n.translateError('INVALID_USER', alias.locale)); + // filter out a domain's members without actual users + domain.members = domain.members.filter( + (member) => + _.isObject(member.user) && !member.user[config.userFields.isBanned] + ); + // find an existing alias match const match = await alias.constructor .findOne({ @@ -519,6 +538,116 @@ Aliases.pre('save', async function (next) { } }); +async function getStorageUsed(alias) { + let storageUsed = 0; + + // + // calculate storage used across entire domain and its admin users domains + // (this is rudimentary storage system and has edge cases) + // (e.g. multi-accounts when users on team plan edge case) + // + const domain = await Domains.findById(alias.domain) + .populate('members.user', `id ${config.userFields.isBanned}`) + .lean() + .exec(); + if (!domain) + throw Boom.notFound( + i18n.translateError('DOMAIN_DOES_NOT_EXIST_ANYWHERE', alias.locale) + ); + + // filter out a domain's members without actual users + const adminMembers = domain.members.filter( + (member) => + _.isObject(member.user) && + !member.user[config.userFields.isBanned] && + member.group === 'admin' + ); + + if (adminMembers.length === 0) + throw Boom.notFound( + i18n.translateError('DOMAIN_DOES_NOT_EXIST_ANYWHERE', alias.locale) + ); + + const ids = domain.members.map((m) => m.user); + + // safeguard + if (ids.length === 0) + throw Boom.notFound( + i18n.translateError('DOMAIN_DOES_NOT_EXIST_ANYWHERE', alias.locale) + ); + + // now get all domains where $elemMatch is the user id and group is admin + const domainIds = await Domains.distinct('_id', { + members: { + $elemMatch: { + user: { $in: ids }, + group: 'admin' + } + } + }); + + // safeguard + if (domainIds.length === 0) + throw Boom.notFound( + i18n.translateError('DOMAIN_DOES_NOT_EXIST_ANYWHERE', alias.locale) + ); + + if (domainIds.length > 0) { + const results = await this.aggregate([ + { + $match: { + domain: { + $in: domainIds + } + } + }, + { + $group: { + _id: '', + storageUsed: { + $sum: '$storageUsed' + } + } + } + ]); + // results [ { _id: '', storageUsed: 91360 } ] + if ( + results.length !== 1 || + typeof results[0] !== 'object' || + typeof results[0].storageUsed !== 'number' + ) + throw Boom.notFound( + i18n.translateError('DOMAIN_DOES_NOT_EXIST_ANYWHERE', alias.locale) + ); + + storageUsed += results[0].storageUsed; + } + + // now get all aliases that belong to any of these domains and sum the storageQuota + return storageUsed; +} + +Aliases.statics.getStorageUsed = getStorageUsed; + +Aliases.statics.isOverQuota = async function (alias, size = 0) { + const storageUsed = await getStorageUsed.call(this, alias); + + const isOverQuota = storageUsed + size > config.maxQuotaPerAlias; + + // log fatal error to admins (so they will get notified by email/text) + if (isOverQuota) { + const err = new Error( + `Alias ID ${alias.id} is over quota (${storageUsed + size}/${ + config.maxQuotaPerAlias + })` + ); + err.isCodeBug = true; // causes admin alerts + logger.fatal(err, { alias }); + } + + return isOverQuota; +}; + Aliases.statics.isValidPassword = async function (tokens = [], password) { if ( typeof tokens !== 'object' || diff --git a/app/models/domains.js b/app/models/domains.js index 029b6dfb06..5e8e0cb7a8 100644 --- a/app/models/domains.js +++ b/app/models/domains.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const crypto = require('node:crypto'); const os = require('node:os'); const punycode = require('node:punycode'); diff --git a/app/models/emails.js b/app/models/emails.js index f802f05e9c..bd61d1cdde 100644 --- a/app/models/emails.js +++ b/app/models/emails.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const punycode = require('node:punycode'); const { Buffer } = require('node:buffer'); const { isIP } = require('node:net'); @@ -62,156 +67,163 @@ const scanner = new SpamScanner({ clamscan: env.NODE_ENV === 'test' }); -const Emails = new mongoose.Schema({ - // - // NOTE: `mongoose-common-plugin` will automatically set `timestamps` for us - // - // - created_at: { - type: Date, - expires: config.emailRetention, - index: true - }, - blocked_hashes: [ - { +const Emails = new mongoose.Schema( + { + // + // NOTE: `mongoose-common-plugin` will automatically set `timestamps` for us + // + // + created_at: { + type: Date, + expires: config.emailRetention, + index: true + }, + blocked_hashes: [ + { + type: String, + index: true + } + ], + has_blocked_hashes: { + type: Boolean, + index: true, + default: false + }, + hard_bounces: [String], // 5xx bounces (an array for storage to prevent duplicates) + soft_bounces: [String], // 4xx bounces (an array for storage to prevent duplicates) + is_bounce: { + type: Boolean, + default: false, + index: true + }, + priority: { + type: Number, + default: 0, + min: 0 + }, + alias: { + type: mongoose.Schema.ObjectId, + ref: Aliases, + required: true, + index: true + }, + domain: { + type: mongoose.Schema.ObjectId, + ref: Domains, + required: true, + index: true + }, + user: { + type: mongoose.Schema.ObjectId, + ref: Users, + required: true, + index: true + }, + // postfix inspired + status: { type: String, + required: true, + index: true, + default: 'queued', + enum: [ + // pending means that it was stored successfully to be processed + // (we can also leverage this for future edge cases and safeguards) + 'pending', + + // manually put into "queued" state by admins + // (until bree job checks for spam) and then `locked_at` is set + 'queued', + + // 2xx + 'sent', + + // mix of 2xx and 5xx + 'partially_sent', + + // 4xx + 'deferred', + + // 5xx (if and only if all were bounced) + 'bounced', + + // rejected means it was denied by an admin or bree detected spam/limitations + 'rejected' + ] + }, + // boolean used for querying + is_locked: { + type: Boolean, + default: false, index: true - } - ], - has_blocked_hashes: { - type: Boolean, - index: true, - default: false - }, - hard_bounces: [String], // 5xx bounces (an array for storage to prevent duplicates) - soft_bounces: [String], // 4xx bounces (an array for storage to prevent duplicates) - is_bounce: { - type: Boolean, - default: false, - index: true - }, - priority: { - type: Number, - default: 0, - min: 0 - }, - alias: { - type: mongoose.Schema.ObjectId, - ref: Aliases, - required: true, - index: true - }, - domain: { - type: mongoose.Schema.ObjectId, - ref: Domains, - required: true, - index: true - }, - user: { - type: mongoose.Schema.ObjectId, - ref: Users, - required: true, - index: true - }, - // postfix inspired - status: { - type: String, - required: true, - index: true, - default: 'queued', - enum: [ - // pending means that it was stored successfully to be processed - // (we can also leverage this for future edge cases and safeguards) - 'pending', - - // manually put into "queued" state by admins - // (until bree job checks for spam) and then `locked_at` is set - 'queued', - - // 2xx - 'sent', - - // mix of 2xx and 5xx - 'partially_sent', - - // 4xx - 'deferred', - - // 5xx (if and only if all were bounced) - 'bounced', - - // rejected means it was denied by an admin or bree detected spam/limitations - 'rejected' - ] - }, - // boolean used for querying - is_locked: { - type: Boolean, - default: false, - index: true - }, - // `locked_by` is the IP address of which smtp server locked it for sending - locked_by: String, - // every 1m the job "unlock-emails" will unlock emails frozen for more than 5m - locked_at: { - type: Date, - index: true - }, - // envelope - envelope: { - from: { + }, + // `locked_by` is the IP address of which smtp server locked it for sending + locked_by: String, + // every 1m the job "unlock-emails" will unlock emails frozen for more than 5m + locked_at: { + type: Date, + index: true + }, + // envelope + envelope: { + from: { + type: String, + required: true, + lowercase: true, + trim: true, + validate: isEmail + }, + // list of email addresses to sent to + // (combined To, Cc, Bcc - and then Bcc is removed from headers) + to: mongoose.Schema.Types.Mixed + }, + // email to be sent (with date, message-id, etc headers already set) + message: { + type: mongoose.Schema.Types.Mixed, + required: true + }, + // message-id header + messageId: { type: String, required: true, - lowercase: true, - trim: true, - validate: isEmail + index: true }, - // list of email addresses to sent to - // (combined To, Cc, Bcc - and then Bcc is removed from headers) - to: mongoose.Schema.Types.Mixed - }, - // email to be sent (with date, message-id, etc headers already set) - message: { - type: mongoose.Schema.Types.Mixed, - required: true - }, - // message-id header - messageId: { - type: String, - required: true, - index: true - }, - // headers parsed from "message" when initially saved - headers: { - type: mongoose.Schema.Types.Mixed, - required: true - }, - // date header (same value as `headers.Date`) - date: { - type: Date, - required: true, - index: true - }, - // subject header (same value as `headers.Subject`) - subject: { - type: String, - index: true - }, - // accepted (Array of emails already accepted so we don't resend) - accepted: [ - { + // headers parsed from "message" when initially saved + headers: { + type: mongoose.Schema.Types.Mixed, + required: true + }, + // date header (same value as `headers.Date`) + date: { + type: Date, + required: true, + index: true + }, + // subject header (same value as `headers.Subject`) + subject: { type: String, - lowercase: true, - trim: true, - validate: isEmail + index: true + }, + // accepted (Array of emails already accepted so we don't resend) + accepted: [ + { + type: String, + lowercase: true, + trim: true, + validate: isEmail + } + ], + // + // an array of errors with `err.recipient` as the email address rejected + // (we only store the most recent `rejectedError` per recipient) + // + rejectedErrors: [mongoose.Schema.Types.Mixed] + }, + { + writeConcern: { + w: 'majority' } - ], - // - // an array of errors with `err.recipient` as the email address rejected - // (we only store the most recent `rejectedError` per recipient) - // - rejectedErrors: [mongoose.Schema.Types.Mixed] -}); + } +); Emails.plugin(mongooseCommonPlugin, { object: 'email', @@ -1017,6 +1029,7 @@ Emails.statics.queue = async function ( const status = _.isDate(domain.smtp_suspended_sent_at) ? 'pending' : 'queued'; + // TODO: encrypt and compress message const email = await this.create({ alias: alias._id, domain: domain._id, diff --git a/app/models/index.js b/app/models/index.js index 3f11c8881e..208f9cb662 100644 --- a/app/models/index.js +++ b/app/models/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Aliases = require('./aliases'); const Domains = require('./domains'); const Inquiries = require('./inquiries'); @@ -7,6 +12,10 @@ const SelfTests = require('./self-tests'); const UpgradeReminders = require('./upgrade-reminders'); const Users = require('./users'); const Emails = require('./emails'); +const Mailboxes = require('./mailboxes'); +const Messages = require('./messages'); +const Threads = require('./threads'); +const Journals = require('./journals'); module.exports = { Aliases, @@ -17,5 +26,9 @@ module.exports = { SelfTests, UpgradeReminders, Users, - Emails + Emails, + Mailboxes, + Messages, + Threads, + Journals }; diff --git a/app/models/inquiries.js b/app/models/inquiries.js index af726dbce7..fb4b235e24 100644 --- a/app/models/inquiries.js +++ b/app/models/inquiries.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const mongoose = require('mongoose'); const _ = require('lodash'); const mongooseCommonPlugin = require('mongoose-common-plugin'); diff --git a/app/models/journals.js b/app/models/journals.js new file mode 100644 index 0000000000..304efe9553 --- /dev/null +++ b/app/models/journals.js @@ -0,0 +1,88 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const mongoose = require('mongoose'); +const mongooseCommonPlugin = require('mongoose-common-plugin'); + +const Mailboxes = require('./mailboxes'); +const Messages = require('./messages'); +const Threads = require('./threads'); + +// +mongoose.Error.messages = require('@ladjs/mongoose-error-messages'); + +const Journals = new mongoose.Schema( + { + mailbox: { + type: mongoose.Schema.ObjectId, + ref: Mailboxes, + required: true, + index: true + }, + message: { + type: mongoose.Schema.ObjectId, + ref: Messages + }, + thread: { + type: mongoose.Schema.ObjectId, + ref: Threads + }, + path: { + type: String + }, + uid: { + type: Number + }, + created: { + type: Date + }, + modseq: { + type: Number + }, + command: { + type: String, + trim: true, + uppercase: true + }, + // session ID to ignore from notifier if any + ignore: { + type: String + }, + unseen: { + type: Boolean + }, + idate: { + type: Date + }, + junk: { + type: Boolean + } + }, + { + writeConcern: { + w: 'majority' + } + } +); + +Journals.plugin(mongooseCommonPlugin, { + object: 'journal', + locale: false +}); + +const conn = mongoose.connections.find( + (conn) => conn[Symbol.for('connection.name')] === 'IMAP_MONGO_URI' +); +module.exports = conn.model('Journals', Journals); diff --git a/app/models/logs.js b/app/models/logs.js index bca7a69a13..c2f721c156 100644 --- a/app/models/logs.js +++ b/app/models/logs.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const dns = require('node:dns'); const os = require('node:os'); const { Buffer } = require('node:buffer'); diff --git a/app/models/mailboxes.js b/app/models/mailboxes.js new file mode 100644 index 0000000000..4d1bcd6d3d --- /dev/null +++ b/app/models/mailboxes.js @@ -0,0 +1,190 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const Boom = require('@hapi/boom'); +const mongoose = require('mongoose'); +const mongooseCommonPlugin = require('mongoose-common-plugin'); +const ms = require('ms'); + +const Aliases = require('./aliases'); + +const i18n = require('#helpers/i18n'); +const config = require('#config'); + +// +mongoose.Error.messages = require('@ladjs/mongoose-error-messages'); + +const locale = i18n.config.defaultLocale; + +const Mailboxes = new mongoose.Schema( + { + alias: { + type: mongoose.Schema.ObjectId, + ref: Aliases, + required: true, + index: true + }, + path: { + type: String, + required: true, + index: true + }, + uidValidity: { + type: Number, + required: true, + default: () => Math.floor(Date.now() / 1000) + }, + uidNext: { + type: Number, + required: true, + default: 1 + }, + modifyIndex: { + type: Number, + required: true, + default: 0 + }, + subscribed: { + type: Boolean, + required: true, + default: true, + index: true + }, + flags: { + type: Array, + required: true, + default: [] + }, + retention: { + type: Number, + required: true, + default: 0, + min: 0, + max: Number.MAX_VALUE + }, + specialUse: { + type: String, + default: '', + index: true, + enum: [ + '', + '\\Inbox', + '\\Sent', + '\\Junk', + '\\Trash', + '\\Drafts', + '\\All', + '\\Archive', + '\\Flagged' + ] + } + }, + { + writeConcern: { + w: 'majority' + } + } +); + +Mailboxes.plugin(mongooseCommonPlugin, { + object: 'mailbox', + locale: false +}); + +Mailboxes.pre('validate', function (next) { + if (this.path.toLowerCase().trim() === 'inbox') this.path = 'INBOX'; + + switch (this.path) { + case 'INBOX': { + this.specialUse = '\\Inbox'; + break; + } + + case 'Sent Mail': { + this.specialUse = '\\Sent'; + break; + } + + case 'Spam': + case 'Junk': { + this.specialUse = '\\Junk'; + break; + } + + case 'Trash': { + this.specialUse = '\\Trash'; + break; + } + + case 'Drafts': { + this.specialUse = '\\Drafts'; + break; + } + + case 'All Mail': { + this.specialUse = '\\All'; + break; + } + + case 'Archive': { + this.specialUse = '\\Archive'; + break; + } + + default: { + this.specialUse = ''; + } + } + + next(); +}); + +// +// we have this in a pre-save hook because `this.alias` is required after validation +// +Mailboxes.pre('save', async function (next) { + // ensure alias exists and re-use existing `alias.retention` value + try { + const alias = await Aliases.findById(this.alias) + .populate('user', `id ${config.userFields.isBanned}`) + .lean() + .exec(); + + if (!alias) + throw Boom.forbidden(i18n.translateError('ALIAS_DOES_NOT_EXIST', locale)); + + // alias must not have banned user + if (alias.user[config.userFields.isBanned]) + throw Boom.forbidden(i18n.translateError('ALIAS_ACCOUNT_BANNED', locale)); + + // alias must be enabled + if (!alias.is_enabled) + throw Boom.notFound(i18n.translateError('ALIAS_IS_NOT_ENABLED', locale)); + + // default to `alias.retention` or 0 + this.retention = ['\\Trash', '\\Junk'].includes(this.specialUse) + ? ms('30d') + : alias.retention; + + next(); + } catch (err) { + next(err); + } +}); + +const conn = mongoose.connections.find( + (conn) => conn[Symbol.for('connection.name')] === 'IMAP_MONGO_URI' +); +module.exports = conn.model('Mailboxes', Mailboxes); diff --git a/app/models/messages.js b/app/models/messages.js new file mode 100644 index 0000000000..3f01d6b410 --- /dev/null +++ b/app/models/messages.js @@ -0,0 +1,313 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const _ = require('lodash'); +const mongoose = require('mongoose'); +const mongooseCommonPlugin = require('mongoose-common-plugin'); + +const Aliases = require('./aliases'); +const Mailboxes = require('./mailboxes'); +const Threads = require('./threads'); + +const env = require('#config/env'); + +// +mongoose.Error.messages = require('@ladjs/mongoose-error-messages'); + +// +const Str = mongoose.Schema.Types.String; +Str.checkRequired((v) => v !== null); + +const Messages = new mongoose.Schema( + { + alias: { + type: mongoose.Schema.ObjectId, + ref: Aliases, + required: true, + index: true + }, + mailbox: { + type: mongoose.Schema.ObjectId, + ref: Mailboxes, + required: true, + index: true + }, + thread: { + type: mongoose.Schema.ObjectId, + ref: Threads, + required: true, + index: true + }, + + // TODO: preserve original id when COPY or MOVE + root: { + type: mongoose.Schema.ObjectId, + ref: 'Messages', + required: true + }, + + // expires and retention date + exp: { + type: Boolean, + required: true + }, + rdate: { + type: Date, + required: true + }, + + // internal date + idate: { + type: Date, + required: true, + index: true + }, + // header date + hdate: { + type: Date, + required: true, + index: true + }, + + // TODO: does it need to be [{ type: String, index: true }] (?) + // message flags (e.g. "\\Seen" or "\\Draft") + flags: { + type: Array, + required: true, + index: true + }, + + // bytes + size: { + type: Number, + required: true, + index: true + }, + + // parsed + // TODO: optimize this similar to SMTP keywords for search + headers: { + type: mongoose.Schema.Types.Mixed, + required: true + }, + + mimeTree: { + type: mongoose.Schema.Types.Mixed, + required: true + }, + envelope: { + type: Array, + required: true + }, + bodystructure: { + type: Array, + required: true + }, + + msgid: { + type: String, + required: true + }, + + // booleans for search + unseen: { + type: Boolean, + required: true, + index: true + }, + flagged: { + type: Boolean, + required: true, + index: true + }, + undeleted: { + type: Boolean, + required: true, + index: true + }, + draft: { + type: Boolean, + required: true, + index: true + }, + + // NOTE: attachment magic number for incremental storage (not used right now) + magic: { + type: Number, + required: true + }, + + // parsed message Subject header + subject: { + type: String, + required: true + }, + + // TODO: don't archive messages that have been copied + copied: { + type: Boolean, + required: true + }, + + // + // TODO: `meta` object with metadata? (e.g. IP address) + // + + // attachments + attachments: { + type: Array, + required: true, + default: [] + }, + + // has attachments boolean + ha: { + type: Boolean, + required: true + }, + + // uid and modseq + uid: { + type: Number, + required: true, + index: true + }, + modseq: { + type: Number, + required: true, + index: true + }, + + // misc booleans + searchable: { + type: Boolean, + required: true, + index: true + }, + junk: { + type: Boolean, + required: true + }, + + // IP address of creation + remoteAddress: { + type: String, + required: true + }, + + // transaction type (e.g. "APPEND") + transaction: { + type: String, + trim: true, + uppercase: true, + required: true + }, + + // raw message (Buffer or GridFS reference) + raw: { + type: mongoose.Schema.Types.Mixed, + required: true + }, + + // text string (used for text index) + text: { + type: Str, + required: true, + trim: true + } + }, + { + writeConcern: { + w: 'majority' + } + } +); + +// +// TODO: use spamscanner v6 for parsing language specific tokens for text index for subject +// (note that we'd have to feed the search query the search parsed tokens from message) +// (but at that point we might want to simply do another hash query lookup by tokens parsed) +// +Messages.index( + { + alias: 1, + 'headers.value': 'text', + text: 'text' + }, + { default_language: 'english' } +); + +Messages.plugin(mongooseCommonPlugin, { + object: 'message', + locale: false +}); + +/* +Messages.pre('validate', async function (next) { + // attempt to parse tokens for text field + this.text = ''; + try { + const { tokens } = await scanner.getTokensAndMailFromSource(this.raw); + // right now search is filtered out for the following (from spamscanner v5) + // - url + // - email + // - number + // - currency + // - initialism + // - abbreviation + // - emoji + // - hexa + // - mac + // - phone + // - bitcoin + // - cc + this.text = _.pullAll( + _.uniq(tokens), + Object.values(scanner.config.replacements) + ).join(' '); + + next(); + } catch (err) { + logger.fatal(err, { message: this }); + next(); + } +}); +*/ + +Messages.pre('validate', function (next) { + // make flags unique + this.flags = _.uniq(this.flags); + + // set boolean flags + this.unseen = !this.flags.includes('\\Seen'); + this.flagged = this.flags.includes('\\Flagged'); + this.undeleted = !this.flags.includes('\\Deleted'); + this.draft = this.flags.includes('\\Draft'); + + // replace "@wildduck.email" in msgid + if (this.isNew) + this.msgid = this.msgid.replace('@wildduck.email', `@${env.WEB_HOST}`); + + // update boolean based off attachments + this.ha = + Array.isArray(this.attachments) && this.attachments.some((a) => !a.related); + + next(); +}); + +const conn = mongoose.connections.find( + (conn) => conn[Symbol.for('connection.name')] === 'IMAP_MONGO_URI' +); +module.exports = conn.model('Messages', Messages); diff --git a/app/models/payments.js b/app/models/payments.js index 2c63dabfdb..f73e30aafb 100644 --- a/app/models/payments.js +++ b/app/models/payments.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const path = require('path'); const numeral = require('numeral'); diff --git a/app/models/self-tests.js b/app/models/self-tests.js index 8052854c05..f43f043113 100644 --- a/app/models/self-tests.js +++ b/app/models/self-tests.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const mongoose = require('mongoose'); const mongooseCommonPlugin = require('mongoose-common-plugin'); const { isEmail } = require('validator'); diff --git a/app/models/threads.js b/app/models/threads.js new file mode 100644 index 0000000000..936adad958 --- /dev/null +++ b/app/models/threads.js @@ -0,0 +1,128 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const crypto = require('node:crypto'); + +const mongoose = require('mongoose'); +const mongooseCommonPlugin = require('mongoose-common-plugin'); +const MessageHandler = require('wildduck/lib/message-handler'); + +const Aliases = require('./aliases'); + +// +mongoose.Error.messages = require('@ladjs/mongoose-error-messages'); + +const Threads = new mongoose.Schema( + { + alias: { + type: mongoose.Schema.ObjectId, + ref: Aliases, + required: true, + index: true + }, + ids: [ + { + type: String, + index: true + } + ], + subject: { + type: String, + index: true + } + }, + { + writeConcern: { + w: 'majority' + } + } +); + +Threads.plugin(mongooseCommonPlugin, { + object: 'thread', + locale: false +}); + +// code is inspired from wildduck (rewrite necessary for async/await and different db structure) +async function getThreadId(aliasId, subject, mimeTree) { + let referenceIds = new Set( + [ + [mimeTree.parsedHeader['message-id'] || []].flat().pop() || '', + [mimeTree.parsedHeader['in-reply-to'] || []].flat().pop() || '', + ([mimeTree.parsedHeader['thread-index'] || []].flat().pop() || '').slice( + 0, + 22 + ), + [mimeTree.parsedHeader.references || []].flat().pop() || '' + ] + .join(' ') + .split(/\s+/) + .map((id) => id.replace(/[<>]/g, '').trim()) + .filter(Boolean) + .map((id) => + crypto + .createHash('sha1') + .update(id) + .digest('base64') + .replace(/=+$/g, '') + ) + ); + + subject = MessageHandler.prototype.normalizeSubject(subject, { + removePrefix: true + }); + + referenceIds = [...referenceIds].slice(0, 10); + + let thread = await this.findOneAndUpdate( + { + alias: aliasId, + ids: { $in: referenceIds }, + subject + }, + { + $addToSet: { + ids: { $each: referenceIds } + } + }, + { + returnDocument: 'after' + } + ); + + if (thread) { + // virtual for rollback + thread.isNew = false; + return thread; + } + + thread = await this.create({ + alias: aliasId, + ids: referenceIds, + subject + }); + + // virtual for rollback + thread.isNew = true; + + return thread; +} + +Threads.statics.getThreadId = getThreadId; + +const conn = mongoose.connections.find( + (conn) => conn[Symbol.for('connection.name')] === 'IMAP_MONGO_URI' +); +module.exports = conn.model('Threads', Threads); diff --git a/app/models/upgrade-reminders.js b/app/models/upgrade-reminders.js index 4395221e5e..b9382b6d92 100644 --- a/app/models/upgrade-reminders.js +++ b/app/models/upgrade-reminders.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const isFQDN = require('is-fqdn'); const mongoose = require('mongoose'); const mongooseCommonPlugin = require('mongoose-common-plugin'); diff --git a/app/models/users.js b/app/models/users.js index 35f98c8c18..da3ee6d681 100644 --- a/app/models/users.js +++ b/app/models/users.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const captainHook = require('captain-hook'); diff --git a/app/views/_footer.pug b/app/views/_footer.pug index d8a4cb8338..dfe7530fd1 100644 --- a/app/views/_footer.pug +++ b/app/views/_footer.pug @@ -136,7 +136,7 @@ footer.mt-auto.small.text-monospace if isBot(ctx.get('User-Agent')) = t("Private Business Email") else - = t("Features") + != t("Features & Pricing") li: a.d-block.text-light.py-2.py-md-0( href=domain && domain.name ? l(`/faq?domain=${domain.name}`) : l("/faq") )= t("Frequently Asked Questions") diff --git a/app/views/docs/best-email-spam-protection-filter/config.js b/app/views/docs/best-email-spam-protection-filter/config.js index bf4b49f1aa..78baa5b62a 100644 --- a/app/views/docs/best-email-spam-protection-filter/config.js +++ b/app/views/docs/best-email-spam-protection-filter/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Best Email Spam Protection Filter', description: diff --git a/app/views/docs/best-practices-for-node-js-logging/config.js b/app/views/docs/best-practices-for-node-js-logging/config.js index abd6343954..5de77741bd 100644 --- a/app/views/docs/best-practices-for-node-js-logging/config.js +++ b/app/views/docs/best-practices-for-node-js-logging/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Best Practices for Node.js Logging', description: diff --git a/app/views/docs/create-send-emails-with-developer-api/config.js b/app/views/docs/create-send-emails-with-developer-api/config.js index b7878e6523..9a6824dfaa 100644 --- a/app/views/docs/create-send-emails-with-developer-api/config.js +++ b/app/views/docs/create-send-emails-with-developer-api/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Create and Send Emails with Developer API', description: "How to create and send emails with code and email API's", diff --git a/app/views/docs/custom-fonts-in-emails/config.js b/app/views/docs/custom-fonts-in-emails/config.js index 61abc8d9d0..fa8f8d7afb 100644 --- a/app/views/docs/custom-fonts-in-emails/config.js +++ b/app/views/docs/custom-fonts-in-emails/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Custom Fonts in Emails', description: diff --git a/app/views/docs/email-address-regex-javascript-node-js/config.js b/app/views/docs/email-address-regex-javascript-node-js/config.js index 5bbb695713..e2e0f327a3 100644 --- a/app/views/docs/email-address-regex-javascript-node-js/config.js +++ b/app/views/docs/email-address-regex-javascript-node-js/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Email Regex JavaScript and Node.js', description: diff --git a/app/views/docs/how-to-javascript-contact-forms-node-js/config.js b/app/views/docs/how-to-javascript-contact-forms-node-js/config.js index fe16701b7f..ee996f898b 100644 --- a/app/views/docs/how-to-javascript-contact-forms-node-js/config.js +++ b/app/views/docs/how-to-javascript-contact-forms-node-js/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'JavaScript Contact Forms Node.js', description: diff --git a/app/views/docs/manage-bulk-email-domains-and-aliases/config.js b/app/views/docs/manage-bulk-email-domains-and-aliases/config.js index 79e9a0df94..dfcda0c07f 100644 --- a/app/views/docs/manage-bulk-email-domains-and-aliases/config.js +++ b/app/views/docs/manage-bulk-email-domains-and-aliases/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Manage Bulk Email Domains and Aliases', description: diff --git a/app/views/docs/node-js-dns-over-https/config.js b/app/views/docs/node-js-dns-over-https/config.js index 0235e544b3..722e89c8bb 100644 --- a/app/views/docs/node-js-dns-over-https/config.js +++ b/app/views/docs/node-js-dns-over-https/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Node.js DNS over HTTPS', description: diff --git a/app/views/docs/node-js-job-scheduler-cron/config.js b/app/views/docs/node-js-job-scheduler-cron/config.js index 33c85175ac..9ba823a32b 100644 --- a/app/views/docs/node-js-job-scheduler-cron/config.js +++ b/app/views/docs/node-js-job-scheduler-cron/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Node.js Job Scheduler', description: diff --git a/app/views/docs/node-js-logging-service/config.js b/app/views/docs/node-js-logging-service/config.js index 4316aba083..88dfb57c25 100644 --- a/app/views/docs/node-js-logging-service/config.js +++ b/app/views/docs/node-js-logging-service/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Node.js Logging Service', description: diff --git a/app/views/docs/regex-routing-rules-for-email-forwarding-policy-matching/config.js b/app/views/docs/regex-routing-rules-for-email-forwarding-policy-matching/config.js index 1bc3ec7a89..1a540760bf 100644 --- a/app/views/docs/regex-routing-rules-for-email-forwarding-policy-matching/config.js +++ b/app/views/docs/regex-routing-rules-for-email-forwarding-policy-matching/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Regex Routing Rules for Email Forwarding Policy Matching', description: diff --git a/app/views/docs/reserved-email-addresses-list/config.js b/app/views/docs/reserved-email-addresses-list/config.js index 3844d0bd32..1809d5dc4d 100644 --- a/app/views/docs/reserved-email-addresses-list/config.js +++ b/app/views/docs/reserved-email-addresses-list/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Reserved Email Addresses', description: diff --git a/app/views/docs/send-emails-with-node-js-javascript/config.js b/app/views/docs/send-emails-with-node-js-javascript/config.js index a601c40495..c085d20871 100644 --- a/app/views/docs/send-emails-with-node-js-javascript/config.js +++ b/app/views/docs/send-emails-with-node-js-javascript/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Node.js Email Templates', description: diff --git a/app/views/docs/send-emails-with-python-example/config.js b/app/views/docs/send-emails-with-python-example/config.js index 6d6f3a7818..d53e32f679 100644 --- a/app/views/docs/send-emails-with-python-example/config.js +++ b/app/views/docs/send-emails-with-python-example/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Send Emails with Python Example', description: diff --git a/app/views/docs/send-emails-with-react-js-node-web-app/config.js b/app/views/docs/send-emails-with-react-js-node-web-app/config.js index 7a60dcc100..f8cacc2078 100644 --- a/app/views/docs/send-emails-with-react-js-node-web-app/config.js +++ b/app/views/docs/send-emails-with-react-js-node-web-app/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Send React Emails', description: diff --git a/app/views/docs/send-emails-with-ruby-example/config.js b/app/views/docs/send-emails-with-ruby-example/config.js index 6962791944..f5284bfdfb 100644 --- a/app/views/docs/send-emails-with-ruby-example/config.js +++ b/app/views/docs/send-emails-with-ruby-example/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Send Emails with Ruby Example', description: diff --git a/app/views/docs/setup-free-email-webhooks-with-real-time-forwarding/config.js b/app/views/docs/setup-free-email-webhooks-with-real-time-forwarding/config.js index da323ded24..c5331ac1ba 100644 --- a/app/views/docs/setup-free-email-webhooks-with-real-time-forwarding/config.js +++ b/app/views/docs/setup-free-email-webhooks-with-real-time-forwarding/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Setup Free Email Webhooks with Real-Time Forwarding', description: diff --git a/app/views/docs/test-preview-email-rendering-browsers-ios-simulator/config.js b/app/views/docs/test-preview-email-rendering-browsers-ios-simulator/config.js index 1a4063cacc..07ca62b592 100644 --- a/app/views/docs/test-preview-email-rendering-browsers-ios-simulator/config.js +++ b/app/views/docs/test-preview-email-rendering-browsers-ios-simulator/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'Email Testing for Browsers and iOS Simulator', description: diff --git a/app/views/docs/url-regex-javascript-node-js/config.js b/app/views/docs/url-regex-javascript-node-js/config.js index 19ac904a91..febf813bcf 100644 --- a/app/views/docs/url-regex-javascript-node-js/config.js +++ b/app/views/docs/url-regex-javascript-node-js/config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { title: 'URL Regex JavaScript and Node.js', description: diff --git a/app/views/home.pug b/app/views/home.pug index e50aea1cf1..0c48a020d1 100644 --- a/app/views/home.pug +++ b/app/views/home.pug @@ -131,7 +131,7 @@ block body ) i.fa.fa-fw.fa-layer-group = " " - = t("Features") + != t("Features & Pricing") li.list-inline-item.d-block.d-md-inline if isBot(ctx.get('User-Agent')) a.btn.btn-dark( diff --git a/app/views/pricing.pug b/app/views/pricing.pug index 623522e0be..3528a75d68 100644 --- a/app/views/pricing.pug +++ b/app/views/pricing.pug @@ -59,7 +59,7 @@ block body a.btn.btn-outline-light(href="#features") i.fa.fa-fw.fa-layer-group = " " - = t("Features") + != t("Features & Pricing") li.list-inline-item.d-block.d-md-inline if isBot(ctx.get('User-Agent')) a.btn.btn-dark( diff --git a/app/views/terms/index.md b/app/views/terms/index.md index 42eccb34ae..b0d3463691 100644 --- a/app/views/terms/index.md +++ b/app/views/terms/index.md @@ -23,7 +23,6 @@ You must be at least eighteen (18) years of age, or between thirteen (13) and se * [Links](#links) * [Site Terms of Use Modifications](#site-terms-of-use-modifications) * [Governing Law](#governing-law) -* [Software License](#software-license) * [Additional Disclosures](#additional-disclosures) @@ -39,6 +38,7 @@ Further, Forward Email does not warrant or make any representations concerning t **You specifically agree that by using the Service that Forward Email shall not be responsible for, shall not be liable for, and you will not create, read, modify, or transmit any of the following with the Service:** +* **You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.** * **If you are using our [Outbound SMTP](/faq#do-you-support-sending-email-with-smtp) service, then you will only use it for [transactional email](https://wikipedia.org/wiki/Email_marketing#Transactional_emails). You are prohibited from sending marketing email (e.g. promotional, bulk, or commercial email to a list of contacts with the same content). This includes examples such as a newsletter or a bulk announcement email.** * Anything that causes interference with the disruption of the Service, its operations, and/or its customers. * Materials that are abusive, defamatory, false, harassing, indecent, libelous, misleading, objectionable, obscene, offensive, profane, threatening, unlawful, and/or vulgar. @@ -128,11 +128,6 @@ Any claim relating to Forward Email's web site shall be governed by the laws of General Terms and Conditions applicable to Use of a Web Site. -## Software License - -[Business Source License 1.1](https://github.com/forwardemail/forwardemail.net/blob/master/LICENSE) - - ## Additional Disclosures This site is protected by Cloudflare and its [Privacy Policy](https://www.cloudflare.com/privacypolicy/) and [Terms of Service](https://www.cloudflare.com/website-terms/) apply. diff --git a/assets/browserconfig.xml b/assets/browserconfig.xml index 6e926a010f..ab1d213bf0 100644 --- a/assets/browserconfig.xml +++ b/assets/browserconfig.xml @@ -1,4 +1,9 @@ + + diff --git a/assets/css/_btn-auth.scss b/assets/css/_btn-auth.scss index fc311139fb..2524fbcd18 100644 --- a/assets/css/_btn-auth.scss +++ b/assets/css/_btn-auth.scss @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // Special thanks to these two sources: // // diff --git a/assets/css/_custom.scss b/assets/css/_custom.scss index fa91eae30c..da36368086 100644 --- a/assets/css/_custom.scss +++ b/assets/css/_custom.scss @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // https://github.com/twbs/bootstrap/issues/24374 .min-vh-80 { min-height: 80vh !important; diff --git a/assets/css/_email.scss b/assets/css/_email.scss index 7dcefb6b05..2b5709c323 100644 --- a/assets/css/_email.scss +++ b/assets/css/_email.scss @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // // body.email { diff --git a/assets/css/_font-awesome.scss b/assets/css/_font-awesome.scss index 1f8ed81554..16e4b6e931 100644 --- a/assets/css/_font-awesome.scss +++ b/assets/css/_font-awesome.scss @@ -1,2 +1,7 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + @import 'node_modules/@fortawesome/fontawesome-free/scss/solid'; @import 'node_modules/@fortawesome/fontawesome-free/scss/brands'; diff --git a/assets/css/_fonts.scss b/assets/css/_fonts.scss index 7d82f6f939..f6123c55af 100644 --- a/assets/css/_fonts.scss +++ b/assets/css/_fonts.scss @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // NOTE: since font magician doesn't support woff2 yet // we do this and link(preload) manually diff --git a/assets/css/_freddy.scss b/assets/css/_freddy.scss index 3383f2572a..5f995a8846 100644 --- a/assets/css/_freddy.scss +++ b/assets/css/_freddy.scss @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + @import 'node_modules/bootstrap/scss/functions'; @import 'node_modules/bootstrap/scss/variables'; @import 'node_modules/bootstrap/scss/mixins'; diff --git a/assets/css/_markdown.scss b/assets/css/_markdown.scss index 02b53e8a54..d7fc214464 100644 --- a/assets/css/_markdown.scss +++ b/assets/css/_markdown.scss @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // stylelint-disable no-invalid-position-at-import-rule @import 'node_modules/github-markdown-css/github-markdown-light'; diff --git a/assets/css/_responsive-backgrounds.scss b/assets/css/_responsive-backgrounds.scss index 23dc5c7285..26a5c2a647 100644 --- a/assets/css/_responsive-backgrounds.scss +++ b/assets/css/_responsive-backgrounds.scss @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + @each $breakpoint in map-keys($grid-breakpoints) { @include media-breakpoint-up($breakpoint) { $infix: breakpoint-infix($breakpoint, $grid-breakpoints); diff --git a/assets/css/_responsive-borders.scss b/assets/css/_responsive-borders.scss index f23fb3d073..641c434771 100644 --- a/assets/css/_responsive-borders.scss +++ b/assets/css/_responsive-borders.scss @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // @each $breakpoint in map-keys($grid-breakpoints) { @include media-breakpoint-up($breakpoint) { diff --git a/assets/css/_responsive-rounded.scss b/assets/css/_responsive-rounded.scss index f6526b01a0..b3adf14342 100644 --- a/assets/css/_responsive-rounded.scss +++ b/assets/css/_responsive-rounded.scss @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // .rounded-top-0 { border-top-left-radius: 0 !important; diff --git a/assets/css/_swal2-dark.scss b/assets/css/_swal2-dark.scss index ec835554bb..d81fcc423f 100644 --- a/assets/css/_swal2-dark.scss +++ b/assets/css/_swal2-dark.scss @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // stylelint-disable scss/no-global-function-names // NOTE: this is from https://github.com/sweetalert2/sweetalert2-themes diff --git a/assets/css/_swal2.scss b/assets/css/_swal2.scss index 5512e7d204..ff62e600bf 100644 --- a/assets/css/_swal2.scss +++ b/assets/css/_swal2.scss @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // prevent resize bug .swal2-height-auto.h-100 { height: 100% !important; diff --git a/assets/css/_variables.scss b/assets/css/_variables.scss index 5e87e4f4cf..6530af91b2 100644 --- a/assets/css/_variables.scss +++ b/assets/css/_variables.scss @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + $fa-font-path: "../fonts"; // $fontAwesomeBrands: 'Font Awesome 5 Brands'; diff --git a/assets/css/app-bot.scss b/assets/css/app-bot.scss index 2021ef00b0..73ffdb41f2 100644 --- a/assets/css/app-bot.scss +++ b/assets/css/app-bot.scss @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // stylelint-disable no-invalid-position-at-import-rule // variables diff --git a/assets/css/app-dark.scss b/assets/css/app-dark.scss index c12f67f39b..d569bef688 100644 --- a/assets/css/app-dark.scss +++ b/assets/css/app-dark.scss @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // stylelint-disable no-invalid-position-at-import-rule @import 'node_modules/bootstrap/scss/functions'; diff --git a/assets/css/app-light.scss b/assets/css/app-light.scss index a890789a16..36495098f4 100644 --- a/assets/css/app-light.scss +++ b/assets/css/app-light.scss @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + @import "fonts"; $blue: #20C1ED; diff --git a/assets/css/codemirror.scss b/assets/css/codemirror.scss index a1695496f3..4c678bfeae 100644 --- a/assets/css/codemirror.scss +++ b/assets/css/codemirror.scss @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // CodeMirror @import 'node_modules/codemirror/lib/codemirror'; @import 'node_modules/codemirror/addon/hint/show-hint'; diff --git a/assets/js/advanced-settings.js b/assets/js/advanced-settings.js index 98a009481b..4f0be87e30 100644 --- a/assets/js/advanced-settings.js +++ b/assets/js/advanced-settings.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const $ = require('jquery'); const CodeMirror = require('codemirror'); const debounce = require('lodash/debounce'); diff --git a/assets/js/billing.js b/assets/js/billing.js index eec5f23e95..f88df65ea7 100644 --- a/assets/js/billing.js +++ b/assets/js/billing.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const $ = require('jquery'); const Swal = require('sweetalert2'); const URLParse = require('url-parse'); diff --git a/assets/js/confetti.js b/assets/js/confetti.js index 2a18d9bd22..dcd1aa11a3 100644 --- a/assets/js/confetti.js +++ b/assets/js/confetti.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const JSConfetti = require('js-confetti'); const jsConfetti = new JSConfetti(); diff --git a/assets/js/core.js b/assets/js/core.js index 925e252989..295864990f 100644 --- a/assets/js/core.js +++ b/assets/js/core.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const $ = require('jquery'); const Clipboard = require('clipboard'); const Lazyload = require('lazyload'); diff --git a/assets/js/logger.js b/assets/js/logger.js index bc1f048feb..0c33e29471 100644 --- a/assets/js/logger.js +++ b/assets/js/logger.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + if (process.env.NODE_ENV === 'production') { const logger = require('../../helpers/logger'); // expose it to the global window object diff --git a/assets/js/open-startup.js b/assets/js/open-startup.js index 9210b1e201..e0bb6f7422 100644 --- a/assets/js/open-startup.js +++ b/assets/js/open-startup.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const $ = require('jquery'); const Apex = require('apexcharts'); const _ = require('lodash'); diff --git a/assets/js/uncaught.js b/assets/js/uncaught.js index c3290f388a..826f88b30e 100644 --- a/assets/js/uncaught.js +++ b/assets/js/uncaught.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const StackTrace = require('stacktrace-js'); const prepareStackTrace = require('prepare-stack-trace'); const uncaught = require('uncaught'); diff --git a/ava.config.js b/ava.config.js index c3e75d974c..82c16d9550 100644 --- a/ava.config.js +++ b/ava.config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const isCI = require('is-ci'); const { familySync, GLIBC } = require('detect-libc'); diff --git a/bree.js b/bree.js index e3f4c8baf4..75d2ca4572 100644 --- a/bree.js +++ b/bree.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/config/api.js b/config/api.js index 5f860f7376..999e291cd9 100644 --- a/config/api.js +++ b/config/api.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const sharedConfig = require('@ladjs/shared-config'); const routes = require('../routes'); diff --git a/config/bree.js b/config/bree.js index ae44dfb709..043bc5928c 100644 --- a/config/bree.js +++ b/config/bree.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const path = require('path'); module.exports = { diff --git a/config/cookies.js b/config/cookies.js index 41f93891f7..4d74b8aad3 100644 --- a/config/cookies.js +++ b/config/cookies.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const process = require('process'); module.exports = { diff --git a/config/env.js b/config/env.js index fddc816dff..77357d1d6a 100644 --- a/config/env.js +++ b/config/env.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const path = require('path'); // eslint-disable-next-line n/prefer-global/process diff --git a/config/filters.js b/config/filters.js index 879ddd3325..0b03ac0439 100644 --- a/config/filters.js +++ b/config/filters.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const I18N = require('@ladjs/i18n'); const isSANB = require('is-string-and-not-blank'); const { parse } = require('node-html-parser'); diff --git a/config/i18n.js b/config/i18n.js index 02f0069a28..92cca2a7d5 100644 --- a/config/i18n.js +++ b/config/i18n.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const path = require('path'); const locales = require('./locales'); diff --git a/config/index.js b/config/index.js index 79b8f46da0..339ce4caa6 100644 --- a/config/index.js +++ b/config/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const path = require('path'); const os = require('os'); @@ -97,6 +102,18 @@ const config = { allowlist: env.RATELIMIT_ALLOWLIST }, + // NOTE: during beta the limit is 1 GB per alias/domain/account (allows user to store Drafts/Sent Mail) + maxQuotaPerAlias: bytes('1GB'), + + // + maxMailboxes: 10000, + + // up to 1024 characters indexed from plaintext + maxPlaintextIndexed: 1024, + + // + authRequiredMessage: 'Authentication is required', + // package.json pkg, diff --git a/config/koa-cash.js b/config/koa-cash.js index 7a2b091f06..ed6f888ab7 100644 --- a/config/koa-cash.js +++ b/config/koa-cash.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const { Buffer } = require('buffer'); const ms = require('ms'); diff --git a/config/locales.js b/config/locales.js index 67fd2e6098..e0c5de6531 100644 --- a/config/locales.js +++ b/config/locales.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = [ 'ar', 'cs', diff --git a/config/logger.js b/config/logger.js index 35d2bb8506..f4f9b5ca90 100644 --- a/config/logger.js +++ b/config/logger.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // this package is ignored in `browser` config in `package.json` // in order to make the client-side payload less kb const signale = require('signale'); diff --git a/config/meta-config.js b/config/meta-config.js index dcf71060c7..108f2812af 100644 --- a/config/meta-config.js +++ b/config/meta-config.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const env = require('./env'); module.exports = { diff --git a/config/meta.js b/config/meta.js index e35d21a6a0..db231e90fe 100644 --- a/config/meta.js +++ b/config/meta.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // turn off max length eslint rule since this is a config file with long strs /* eslint max-len: 0 */ diff --git a/config/mongoose.js b/config/mongoose.js index 67e1f56666..20ee05ec58 100644 --- a/config/mongoose.js +++ b/config/mongoose.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Mongoose = require('@ladjs/mongoose'); const mongoose = require('mongoose'); @@ -22,7 +27,12 @@ const initialConnection = mongoose.connections.find((conn) => conn.id === 0); if (initialConnection) initialConnection.destroy(); // -for (const name of ['MONGO_URI', 'LOGS_MONGO_URI', 'EMAILS_MONGO_URI']) { +for (const name of [ + 'MONGO_URI', + 'LOGS_MONGO_URI', + 'EMAILS_MONGO_URI', + 'IMAP_MONGO_URI' +]) { const uri = env[name]; if (mongoose.connections.some((conn) => conn._connectionString === uri)) continue; diff --git a/config/payments.js b/config/payments.js index e91f97b779..ba4a2d68f8 100644 --- a/config/payments.js +++ b/config/payments.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const process = require('process'); const env = require('./env'); diff --git a/config/phrases.js b/config/phrases.js index 8a438327aa..ed40164ba1 100644 --- a/config/phrases.js +++ b/config/phrases.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const statuses = require('statuses'); const env = require('./env'); @@ -39,7 +44,7 @@ module.exports = { CANNOT_CREATE_TOKEN_FOR_CATCHALL: 'Cannot create token for catch-all alias.', CANNOT_CREATE_TOKEN_FOR_REGEX: 'Cannot create token for regex alias.', ALIAS_GENERATED_PASSWORD: - 'You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


SMTP Username: %s

SMTP Password: %s



This window will automatically close in 30 seconds.
', + 'You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
', PAST_DUE_OR_INVALID_ADMIN: 'Domain has past due balance or does not have at least one valid admin.', ALIAS_ACCOUNT_BANNED: 'Alias user is banned.', @@ -151,6 +156,16 @@ module.exports = { 'We tried to create a new account with this email address, but it already exists. Please log in with this email address if it belongs to you and then try again.', LOGOUT_REQUIRED: 'Please log out to view the page you requested.', ALIAS_DOES_NOT_EXIST: 'Alias does not exist on the domain.', + IMAP_MAILBOX_MAX_EXCEEDED: 'Maximum number of mailboxes exceeded', + IMAP_MAILBOX_INBOX_CANNOT_STORE_DRAFTS: 'Inbox cannot store draft messages', + IMAP_MAILBOX_ALREADY_EXISTS: 'Mailbox already exists', + IMAP_MAILBOX_DOES_NOT_EXIST: 'Mailbox does not exist', + IMAP_MAILBOX_OVER_QUOTA: 'Mailbox is over quota', + IMAP_MAILBOX_RESERVED: 'Mailbox is reserved and cannot be removed', + IMAP_INVALID_SEARCH: 'Invalid search query', + IMAP_WRITE_LOCK_FAILED: 'Failed to acquire write lock', + IMAP_MAILBOX_MESSAGE_EXCEEDS_QUOTA: + 'Mailbox quota would be exceeded by message size', NO_DOMAINS_EXIST: 'Enter your custom domain name to continue.', NO_ALIASES_EXIST: 'Add a new alias to continue.', INVALID_DOMAIN: diff --git a/config/utilities.js b/config/utilities.js index 8b9bdc7046..493faf5473 100644 --- a/config/utilities.js +++ b/config/utilities.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const fs = require('node:fs'); const path = require('node:path'); diff --git a/config/verification-record.js b/config/verification-record.js index b15aa22197..2f9725c2fc 100644 --- a/config/verification-record.js +++ b/config/verification-record.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + module.exports = { length: 10, type: 'alphanumeric' diff --git a/config/web.js b/config/web.js index 47428654f5..eee9069b4e 100644 --- a/config/web.js +++ b/config/web.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const process = require('process'); const Boom = require('@hapi/boom'); diff --git a/ecosystem-imap.json b/ecosystem-imap.json new file mode 100644 index 0000000000..2ac0c7a733 --- /dev/null +++ b/ecosystem-imap.json @@ -0,0 +1,27 @@ +{ + "apps": [ + { + "name": "imap", + "script": "imap.js", + "exec_mode": "cluster", + "wait_ready": true, + "instances": "max", + "pmx": false, + "env_production": { + "NODE_ENV": "production", + "IMAP_PORT": 2993 + } + } + ], + "deploy": { + "production": { + "user": "deploy", + "host": [], + "ref": "origin/master", + "repo": "git@github.com:forwardemail/forwardemail.net.git", + "path": "/var/www/production", + "pre-deploy": "git reset --hard", + "post-deploy": "pnpm install && NODE_ENV=production npm start build && pm2 startOrGracefulReload ecosystem-smtp.json --env production --update-env" + } + } +} diff --git a/emails/self-test/html.pug b/emails/self-test/html.pug index c12162eabc..7c377c5783 100644 --- a/emails/self-test/html.pug +++ b/emails/self-test/html.pug @@ -121,8 +121,9 @@ block content = t("Email API") = " " != "→" - a.btn.btn-lg.btn-success.text-uppercase.font-weight-bold( - href=config.urls.web - ) - = t("Try for free") + .d-block + a.btn.btn-lg.btn-success.text-uppercase.font-weight-bold( + href=config.urls.web + ) + = t("Try for free") .card-footer.small.text-muted= t("If you have any questions or comments, then please let us know.") diff --git a/gulpfile.js b/gulpfile.js index 81f774a392..6d3b375212 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const process = require('process'); const path = require('path'); const fs = require('fs'); diff --git a/helpers/check-srs.js b/helpers/check-srs.js index 834795bcf9..e5f7d020ab 100644 --- a/helpers/check-srs.js +++ b/helpers/check-srs.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const RE2 = require('re2'); const _ = require('lodash'); const parseErr = require('parse-err'); diff --git a/helpers/combine-errors.js b/helpers/combine-errors.js index bea10215dd..05cc159aeb 100644 --- a/helpers/combine-errors.js +++ b/helpers/combine-errors.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + function combineErrors(errors) { let err; if (errors.length === 1) { diff --git a/helpers/create-bounce.js b/helpers/create-bounce.js index 20c8b4d542..beb56faa6d 100644 --- a/helpers/create-bounce.js +++ b/helpers/create-bounce.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const os = require('node:os'); const { isIP } = require('node:net'); diff --git a/helpers/create-session.js b/helpers/create-session.js index aad065b724..5c5868c537 100644 --- a/helpers/create-session.js +++ b/helpers/create-session.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + function createSession(email) { return { envelope: { diff --git a/helpers/create-tangerine.js b/helpers/create-tangerine.js index c2e484d0b8..00a67e06fa 100644 --- a/helpers/create-tangerine.js +++ b/helpers/create-tangerine.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const commands = require('@ioredis/commands'); const Tangerine = require('tangerine'); diff --git a/helpers/email.js b/helpers/email.js index cb98af0388..d25ee23649 100644 --- a/helpers/email.js +++ b/helpers/email.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Email = require('email-templates'); const _ = require('lodash'); const striptags = require('striptags'); diff --git a/helpers/encrypt-decrypt.js b/helpers/encrypt-decrypt.js index 4079926527..2da69146a9 100644 --- a/helpers/encrypt-decrypt.js +++ b/helpers/encrypt-decrypt.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const crypto = require('crypto'); const { Buffer } = require('buffer'); diff --git a/helpers/get-all-paypal-subscription-transactions.js b/helpers/get-all-paypal-subscription-transactions.js index 846919d88b..a8d8a0a2c9 100644 --- a/helpers/get-all-paypal-subscription-transactions.js +++ b/helpers/get-all-paypal-subscription-transactions.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const pWhilst = require('p-whilst'); const { paypalAgent } = require('./paypal'); const logger = require('./logger'); diff --git a/helpers/get-blocked-hashes.js b/helpers/get-blocked-hashes.js index a0f9bcd6e3..1240e8ccd3 100644 --- a/helpers/get-blocked-hashes.js +++ b/helpers/get-blocked-hashes.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const _ = require('lodash'); const dayjs = require('dayjs-with-plugins'); const revHash = require('rev-hash'); diff --git a/helpers/get-bounce-info.js b/helpers/get-bounce-info.js index 3119cb05c1..2244e3ed6b 100644 --- a/helpers/get-bounce-info.js +++ b/helpers/get-bounce-info.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const RE2 = require('re2'); const ip = require('ip'); const zoneMTABounces = require('zone-mta/lib/bounces'); diff --git a/helpers/get-diagnostic-code.js b/helpers/get-diagnostic-code.js index 8031ec21ee..61aacf77c7 100644 --- a/helpers/get-diagnostic-code.js +++ b/helpers/get-diagnostic-code.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const RE2 = require('re2'); const isSANB = require('is-string-and-not-blank'); const { convert } = require('html-to-text'); diff --git a/helpers/get-email-locals.js b/helpers/get-email-locals.js index ebe0f1a2e2..9914363e77 100644 --- a/helpers/get-email-locals.js +++ b/helpers/get-email-locals.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + async function getEmailLocals() { return {}; } diff --git a/helpers/get-error-code.js b/helpers/get-error-code.js index b8e0d75dd4..f9f27e1ca1 100644 --- a/helpers/get-error-code.js +++ b/helpers/get-error-code.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const RE2 = require('re2'); const getBounceInfo = require('./get-bounce-info'); diff --git a/helpers/get-logs-csv.js b/helpers/get-logs-csv.js index 181b7a5fc2..76e934aedf 100644 --- a/helpers/get-logs-csv.js +++ b/helpers/get-logs-csv.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const dayjs = require('dayjs-with-plugins'); const humanize = require('humanize-string'); const titleize = require('titleize'); diff --git a/helpers/get-mongo-query.js b/helpers/get-mongo-query.js index 2784b3f40d..401aa7a0af 100644 --- a/helpers/get-mongo-query.js +++ b/helpers/get-mongo-query.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const _ = require('lodash'); const isSANB = require('is-string-and-not-blank'); diff --git a/helpers/get-transporter.js b/helpers/get-transporter.js index 445e20498d..caa07f614b 100644 --- a/helpers/get-transporter.js +++ b/helpers/get-transporter.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const { callbackify } = require('node:util'); const { isIP } = require('node:net'); diff --git a/helpers/i18n.js b/helpers/i18n.js index 85f238db59..47a840c60f 100644 --- a/helpers/i18n.js +++ b/helpers/i18n.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const I18N = require('@ladjs/i18n'); const logger = require('./logger'); diff --git a/helpers/imap-error.js b/helpers/imap-error.js new file mode 100644 index 0000000000..c493f6609e --- /dev/null +++ b/helpers/imap-error.js @@ -0,0 +1,15 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + +class IMAPError extends Error { + constructor(message, options = {}, ...args) { + super(message, options, ...args); + Error.captureStackTrace(this, IMAPError); + this.responseCode = options?.responseCode || 550; + Object.assign(this, options); + } +} + +module.exports = IMAPError; diff --git a/helpers/imap-notifier.js b/helpers/imap-notifier.js new file mode 100644 index 0000000000..d065c177d2 --- /dev/null +++ b/helpers/imap-notifier.js @@ -0,0 +1,231 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const { EventEmitter } = require('node:events'); + +const _ = require('lodash'); +const safeStringify = require('fast-safe-stringify'); + +const IMAPError = require('#helpers/imap-error'); +const Journals = require('#models/journals'); +const Mailboxes = require('#models/mailboxes'); +const Messages = require('#models/messages'); +const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); + +const IMAP_REDIS_CHANNEL_NAME = 'imap_events'; + +class IMAPNotifier extends EventEmitter { + constructor(options) { + super(); + + const { publisher, subscriber } = options; + + if (!publisher || !subscriber) throw new Error('Options missing'); + + this.publisher = publisher; + this.subscriber = subscriber; + + this.connectionSessions = new WeakMap(); + this.publishTimers = new Map(); + + this._listeners = new EventEmitter(); + this._listeners.setMaxListeners(0); + + const scheduleDataEvent = (ev) => { + let data; + const fire = () => { + clearTimeout(data.timeout); + this.publishTimers.delete(ev); + this._listeners.emit(ev); + }; + + if (this.publishTimers.has(ev)) { + data = this.publishTimers.get(ev) || {}; + clearTimeout(data.timeout); + data.count++; + + if (data.initial < Date.now() - 1000) { + return fire(); + } + } else { + data = { + ev, + count: 1, + initial: Date.now(), + timeout: null + }; + } + + data.timeout = setTimeout(() => { + fire(); + }, 100); + data.timeout.unref(); + + if (!this.publishTimers.has(ev)) { + this.publishTimers.set(ev, data); + } + }; + + this.subscriber.on('message', (channel, message) => { + if (channel === IMAP_REDIS_CHANNEL_NAME) { + let data; + try { + data = JSON.parse(message); + } catch { + return; + } + + if (data.e && !data.p) { + scheduleDataEvent(data.e); + } else if (data.e) { + this._listeners.emit(data.e, data.p); + } + } + }); + + this.subscriber.subscribe(IMAP_REDIS_CHANNEL_NAME); + } + + addListener(session, handler) { + logger.debug('addListener', { session }); + this._listeners.addListener(session.user.alias_id, handler); + } + + removeListener(session, handler) { + logger.debug('removeListener', { session }); + this._listeners.removeListener(session.user.alias_id, handler); + } + + async addEntries(mailboxId, entries) { + if (entries && !Array.isArray(entries)) { + entries = [entries]; + } else if (!entries || entries.length === 0) { + return false; + } + + const updated = entries + .filter((entry) => !entry.modseq && entry.message) + .map((entry) => entry.message); + + if (!mailboxId) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + responseCode: 404, + code: 'NoSuchMailbox' + }); + + // prepare query and prevent additional db call if necessary + const query = {}; + let mailbox; + if (typeof mailboxId === 'object' && typeof mailboxId._id === 'object') { + mailbox = mailboxId; + query._id = mailboxId._id; + } else { + query._id = mailboxId; + } + + // safeguard + if (_.isEmpty(query) || !query._id) throw new Error('Query empty'); + + if (updated.length > 0) + mailbox = await Mailboxes.findOneAndUpdate( + query, + { + $inc: { + modifyIndex: 1 + } + }, + { + returnDocument: 'after' + } + ); + + if (!mailbox) mailbox = await Mailboxes.findOne(query).lean().exec(); + + if (!mailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + responseCode: 404, + code: 'NoSuchMailbox' + }); + + const modseq = mailbox.modifyIndex; + const created = new Date(); + + for (const entry of entries) { + entry.modseq = entry.modseq || modseq; + entry.created = entry.created || created; + entry.mailbox = entry.mailbox || mailbox._id; + entry.alias = mailbox.alias; + } + + if (updated.length > 0) { + logger.debug('updating messages', { + mailbox, + updated, + modseq + }); + + try { + await Messages.updateMany( + { + _id: { + $in: updated + }, + mailbox: mailbox._id + }, + { + $max: { + modseq + } + } + ); + } catch (err) { + logger.fatal(err, { mailbox, updated, modseq }); + } + } + + await Journals.create(entries); + + return entries.length; + } + + fire(aliasId, payload) { + if (!aliasId) throw new Error('Alias ID missing'); + + setImmediate(() => { + this.publisher.publish( + IMAP_REDIS_CHANNEL_NAME, + safeStringify({ + e: aliasId, + p: payload + }) + ); + }); + } + + getUpdates(mailbox, modifyIndex, fn) { + modifyIndex = Number(modifyIndex) || 0; + Journals.collection + .find({ + mailbox: mailbox._id || mailbox, + modseq: { + $gt: modifyIndex + } + }) + .toArray(fn); + } +} + +module.exports = IMAPNotifier; diff --git a/helpers/imap.js b/helpers/imap.js new file mode 100644 index 0000000000..c6bfe3cd64 --- /dev/null +++ b/helpers/imap.js @@ -0,0 +1,6 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + +module.exports = require('./imap/'); diff --git a/helpers/imap/index.js b/helpers/imap/index.js new file mode 100644 index 0000000000..f1cf8a3645 --- /dev/null +++ b/helpers/imap/index.js @@ -0,0 +1,54 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const onAppend = require('./on-append'); +const onCopy = require('./on-copy'); +const onCreate = require('./on-create'); +const onDelete = require('./on-delete'); +const onExpunge = require('./on-expunge'); +const onFetch = require('./on-fetch'); +const onGetQuota = require('./on-get-quota'); +const onGetQuotaRoot = require('./on-get-quota-root'); +const onList = require('./on-list'); +const onLsub = require('./on-lsub'); +const onMove = require('./on-move'); +const onOpen = require('./on-open'); +const onRename = require('./on-rename'); +const onSearch = require('./on-search'); +const onStatus = require('./on-status'); +const onStore = require('./on-store'); +const onSubscribe = require('./on-subscribe'); +const onUnsubscribe = require('./on-unsubscribe'); + +module.exports = { + onAppend, + onCopy, + onCreate, + onDelete, + onExpunge, + onFetch, + onGetQuota, + onGetQuotaRoot, + onList, + onLsub, + onMove, + onOpen, + onRename, + onSearch, + onStatus, + onStore, + onSubscribe, + onUnsubscribe +}; diff --git a/helpers/imap/on-append.js b/helpers/imap/on-append.js new file mode 100644 index 0000000000..691dda5790 --- /dev/null +++ b/helpers/imap/on-append.js @@ -0,0 +1,320 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const splitLines = require('split-lines'); +const { convert } = require('html-to-text'); + +const Aliases = require('#models/aliases'); +const IMAPError = require('#helpers/imap-error'); +const Messages = require('#models/messages'); +const Threads = require('#models/threads'); +const Mailboxes = require('#models/mailboxes'); +const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +// eslint-disable-next-line max-params +async function onAppend(path, flags, date, raw, session, fn) { + logger.debug('APPEND', { path, flags, date, raw, session }); + + let thread; + let storageUsed = 0; + let hasNodeBodies; + let maildata; + let mimeTreeData; + + try { + const { alias } = await this.refreshSession(session, 'APPEND'); + + // check if over quota + const overQuota = await Aliases.isOverQuota(alias); + if (overQuota) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_OVER_QUOTA', 'en'), { + imapResponse: 'OVERQUOTA' + }); + + // + let mailbox = await Mailboxes.findOne({ + path, + alias: alias._id + }) + .lean() + .exec(); + + // + // + // + // > If the destination mailbox does not exist, a server MUST return an + // error, and MUST NOT automatically create the mailbox. Unless it + // is certain that the destination mailbox can not be created, the + // server MUST send the response code "[TRYCREATE]" as the prefix of + // the text of the tagged NO response. This gives a hint to the + // client that it can attempt a CREATE command and retry the APPEND + // if the CREATE is successful. + // + if (!mailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'TRYCREATE' + }); + + const { + id, + mimeTree, + size, + bodystructure, + envelope, + idate, + hdate, + msgid, + subject, + headers + } = await this.prepareMessage({ + flags, + date, + raw + }); + + // store reference for cleanup + mimeTreeData = mimeTree; + + // check if message would be over quota + const exceedsQuota = await Aliases.isOverQuota(alias, size); + if (exceedsQuota) + throw new IMAPError( + i18n.translate('IMAP_MAILBOX_MESSAGE_EXCEEDS_QUOTA', 'en'), + { + imapResponse: 'OVERQUOTA' + } + ); + + maildata = this.indexer.getMaildata(mimeTree); + + // store node bodies + hasNodeBodies = await this.indexer.storeNodeBodiesPromise( + maildata, + mimeTree + ); + + // TODO: we should instead tokenize this with spamscanner + // if (maildata.text) { + // data.text = splitLines(maildata.text).join('\n'); + // // if text is longer than max permitted then trim it + // if (data.text.length > config.maxPlaintextIndexed) + // data.text = data.text.slice(0, Math.max(0, config.maxPlaintextIndexed)); + // } + // prepare text for indexing + let text = ''; + if (maildata.text) { + // replace line breaks for consistency + text = splitLines(maildata.text).join(' ').trim(); + // convert and remove unnecessary things + text = convert(text, { + wordwrap: false, + selectors: [ + { selector: 'img', format: 'skip' }, + { selector: 'ul', options: { itemPrefix: ' ' } }, + { + selector: 'a', + options: { linkBrackets: false } + } + ] + }); + // slice if it's too long + if (text.length > 1024) text = text.slice(0, 1024); + // trim it up + text = text.trim(); + } + + // + // prepare message for creation + // + const data = { + alias: alias._id, + mailbox: mailbox._id, + _id: id, + root: id, + exp: mailbox.retention !== 0, + rdate: Date.now() + mailbox.retention, + idate, + hdate, + flags, + size, + headers, + mimeTree, + envelope, + bodystructure, + msgid, + magic: maildata.magic, + subject, + copied: false, + remoteAddress: session.remoteAddress, + transaction: 'APPEND', + raw, + text + }; + + if (maildata.attachments && maildata.attachments.length > 0) + data.attachments = maildata.attachments; + + // safeguard if alias storage was reduced less than zero + if (alias.storageUsed < 0) + await Aliases.findByIdAndUpdate(alias._id, { + $set: { + storageUsed: 0 + } + }); + + // add to `alias.storageSize` the message `size` + await Aliases.findByIdAndUpdate(alias._id, { + $inc: { + storageUsed: size + } + }); + + // set `storageUsed = size` + storageUsed = size; + + // TODO: encrypt message if it is not a Draft and user has a public key + + // + // TODO: explore modseq usage (for journal sorting by modseq uids in ascending order) + // + + // get new uid and modsec and return original values + mailbox = await Mailboxes.findByIdAndUpdate( + mailbox._id, + { + $inc: { + uidNext: 1, + modifyIndex: 1 + } + }, + { + returnDocument: 'before' + } + ); + + if (!mailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'TRYCREATE' + }); + + // update message object with mailbox values + data.uid = mailbox.uidNext; + data.modseq = mailbox.modifyIndex + 1; + + // store whether searchable or not + // + data.searchable = !flags.includes('\\Deleted'); + + // TODO: notify wildduck about this in GH issues + // if appending to draft then add draft flag + if (mailbox.specialUse === '\\Drafts') data.flags.push('\\Draft'); + + // store whether junk or not + data.junk = mailbox.specialUse === '\\Junk'; + + // get thread ID + thread = await Threads.getThreadId(alias._id, subject, mimeTree); + data.thread = thread._id; + + // store the message + const message = await Messages.create(data); + logger.debug('message created', { + message, + path, + flags, + date, + raw, + session + }); + + try { + await this.server.notifier.addEntries(mailbox, { + // TODO: the wildduck code has this which means messages don't show in Sent folder + // ignore: session.id, + command: 'EXISTS', + uid: message.uid, + mailbox: mailbox._id, + message: message._id, + thread: message.thread, + modseq: message.modseq, + unseen: message.unseen, + idate: message.idate, + junk: message.junk + }); + this.server.notifier.fire(alias.id); + } catch (err) { + logger.fatal(err, { path, flags, date, raw, session }); + } + + const response = { + uidValidity: mailbox.uidValidity, + uid: message.uid, + id, + mailbox: mailbox.id, + mailboxPath: mailbox.path, + size, + status: 'new' + }; + + logger.debug('command response', { response }); + + fn(null, true, response); + } catch (err) { + // delete attachments if we need to cleanup + const attachmentIds = + hasNodeBodies && mimeTreeData?.attachmentMap + ? Object.keys(mimeTreeData.attachmentMap || {}).map( + (key) => mimeTreeData.attachmentMap[key] + ) + : []; + if (attachmentIds.length > 0) + this.attachmentStorage + .deleteManyPromise(attachmentIds, maildata.magic) + .then() + .catch((err) => logger.fatal(err, { storageUsed, session })); + + // rollback storage if there was an error and storage was consumed + if (storageUsed > 0) { + // decrease storage used + Aliases.findOneAndUpdate( + { + id: session.user.alias_id + }, + { + $inc: { + storageUsed: storageUsed * -1 + } + } + ) + .then() + .catch((err) => logger.fatal(err, { storageUsed, session })); + } + + // handle mongodb error + if (err.code === 1100) err.imapResponse = 'ALREADYEXISTS'; + + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { path, flags, date, raw, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onAppend; diff --git a/helpers/imap/on-copy.js b/helpers/imap/on-copy.js new file mode 100644 index 0000000000..86b58dcc80 --- /dev/null +++ b/helpers/imap/on-copy.js @@ -0,0 +1,266 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const mongoose = require('mongoose'); +const ms = require('ms'); +const tools = require('wildduck/lib/tools'); + +const Aliases = require('#models/aliases'); +const IMAPError = require('#helpers/imap-error'); +const Mailboxes = require('#models/mailboxes'); +const Messages = require('#models/messages'); +const ServerShutdownError = require('#helpers/server-shutdown-error'); +const SocketError = require('#helpers/socket-error'); +const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +// eslint-disable-next-line max-params +async function onCopy(connection, mailboxId, update, session, fn) { + logger.debug('COPY', { connection, mailboxId, update, session }); + + try { + const { alias } = await this.refreshSession(session, 'COPY'); + + // check if over quota + const overQuota = await Aliases.isOverQuota(alias); + if (overQuota) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_OVER_QUOTA', 'en'), { + imapResponse: 'OVERQUOTA' + }); + + const mailbox = await Mailboxes.findOne({ + _id: mailboxId, + alias: alias._id + }) + .lean() + .exec(); + + if (!mailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'NONEXISTENT' + }); + + const targetMailbox = await Mailboxes.findOne({ + path: update.destination, + alias: alias._id + }) + .lean() + .exec(); + + if (!targetMailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'TRYCREATE' + }); + + const sourceUid = []; + const destinationUid = []; + + let copiedMessages = 0; + let copiedStorage = 0; + + // start notifying connection of progress + let timeout; + (function update() { + clearTimeout(timeout); + timeout = setTimeout(() => { + connection.send('* OK Copy still in progress...'); + update(); + }, ms('1m')); + })(); + + for await (const message of Messages.find({ + alias: alias._id, + mailbox: mailbox._id, + uid: tools.checkRangeQuery(update.messages) + }) + .sort({ uid: 1 }) + .maxTimeMS(ms('2m')) + .lean() + .cursor()) { + logger.debug('copying message', { message }); + + // check if server is in the process of shutting down + if (this.server._closeTimeout) throw new ServerShutdownError(); + + // check if socket is still connected + const socket = + (session.socket && session.socket._parent) || session.socket; + if (!socket || socket?.destroyed || socket?.readyState !== 'open') + throw new SocketError(); + + // store current query for updating copied state + const query = { + _id: message._id, + uid: message.uid, + alias: alias._id, + mailbox: message.mailbox + }; + + // don't copy in bulk so it doesn't get out of incremental uid sync + sourceUid.unshift(message.uid); + + const updatedMailbox = await Mailboxes.findOneAndUpdate( + { + _id: targetMailbox._id, + alias: alias._id + }, + { + $inc: { + uidNext: 1 + } + }, + { + returnDocument: 'before' + } + ); + + if (!updatedMailbox) + throw new IMAPError( + i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), + { + imapResponse: 'TRYCREATE' + } + ); + + destinationUid.unshift(updatedMailbox.uidNext); + + // copy the message and generate new id + message._id = new mongoose.Types.ObjectId(); + message.id = message._id.toString(); + message.mailbox = targetMailbox._id; + message.uid = updatedMailbox.uidNext; + message.exp = targetMailbox.retention !== 0; + message.rdate = Date.now() + targetMailbox.retention; + message.modseq = updatedMailbox.modifyIndex; + message.junk = targetMailbox.specialUse === '\\Junk'; + message.remoteAddress = session.remoteAddress; + message.transaction = 'COPY'; + + // set existing message as copied + // TODO: may want to check for return value + await Messages.findOneAndUpdate(query, { + $set: { + copied: true + } + }); + + // create new message + const newMessage = await Messages.create(message); + + // update attachment store magic number + const attachmentIds = Object.keys( + newMessage.mimeTree.attachmentMap || {} + ).map((key) => newMessage.mimeTree.attachmentMap[key]); + if (attachmentIds.length > 0) { + try { + await this.attachmentStorage.updateManyPromise( + attachmentIds, + 1, + newMessage.magic + ); + } catch (err) { + logger.fatal(err, { mailboxId, update, session }); + } + } + + // increase counters + copiedMessages++; + copiedStorage += newMessage.size; + + // add entries + try { + await this.server.notifier.addEntries(targetMailbox, { + command: 'EXISTS', + uid: message.uid, + mailbox: newMessage.mailbox, + message: newMessage._id, + thread: newMessage.thread, + unseen: newMessage.unseen, + idate: newMessage.idate, + junk: newMessage.junk + }); + } catch (err) { + logger.fatal(err, { mailboxId, update, session }); + } + } + + // update quota if copied messages + if (copiedMessages > 0 && copiedStorage > 0) { + // send notifications + this.server.notifier.fire(alias.id); + + // + // NOTE: we don't error for quota during copy due to this reasoning + // + // + Aliases.isOverQuota(alias, copiedStorage) + .then((exceedsQuota) => { + if (exceedsQuota) { + const err = new IMAPError( + i18n.translate('IMAP_MAILBOX_MESSAGE_EXCEEDS_QUOTA', 'en'), + { + imapResponse: 'OVERQUOTA', + isCodeBug: true // admins will get an email/sms alert + } + ); + logger.fatal(err, { mailboxId, update, session }); + } + }) + .catch((err) => + logger.fatal(err, { + copiedStorage, + connection, + mailboxId, + update, + session + }) + ); + + // add to `alias.storageSize` the message `size` + Aliases.findByIdAndUpdate(alias._id, { + $inc: { + storageUsed: copiedStorage + } + }) + .then() + .catch((err) => + logger.fatal(err, { + copiedStorage, + connection, + mailboxId, + update, + session + }) + ); + } + + fn(null, true, { + uidValidity: targetMailbox.uidValidity, + sourceUid, + destinationUid + }); + } catch (err) { + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { connection, mailboxId, update, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onCopy; diff --git a/helpers/imap/on-create.js b/helpers/imap/on-create.js new file mode 100644 index 0000000000..995be3b17f --- /dev/null +++ b/helpers/imap/on-create.js @@ -0,0 +1,92 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const Aliases = require('#models/aliases'); +const IMAPError = require('#helpers/imap-error'); +const Mailboxes = require('#models/mailboxes'); +const config = require('#config'); +const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +async function onCreate(path, session, fn) { + logger.debug('CREATE', { path, session }); + + try { + const { alias } = await this.refreshSession(session, 'CREATE'); + + // check if over quota + const overQuota = await Aliases.isOverQuota(alias); + if (overQuota) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_OVER_QUOTA', 'en'), { + imapResponse: 'OVERQUOTA' + }); + + // + // limit the number of mailboxes a user can create + // (Gmail defaults to 10,000 labels) + // + // + const count = await Mailboxes.countDocuments({ + alias: alias._id + }); + + if (count > config.maxMailboxes) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_MAX_EXCEEDED', 'en'), { + imapResponse: 'OVERQUOTA' + }); + + let mailbox = await Mailboxes.findOne({ + path, + alias: alias._id + }) + .lean() + .exec(); + + if (mailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_ALREADY_EXISTS', 'en'), { + imapResponse: 'ALREADYEXISTS' + }); + + mailbox = await Mailboxes.create({ + alias: alias._id, + path + }); + + try { + await this.server.notifier.addEntries(mailbox, { + command: 'CREATE', + mailbox: mailbox._id, + path + }); + this.server.notifier.fire(alias.id); + } catch (err) { + logger.fatal(err, { path, session }); + } + + fn(null, true, mailbox._id); + } catch (err) { + if (err.code === 11000) err.imapResponse = 'ALREADYEXISTS'; + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { path, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onCreate; diff --git a/helpers/imap/on-delete.js b/helpers/imap/on-delete.js new file mode 100644 index 0000000000..a95340bbce --- /dev/null +++ b/helpers/imap/on-delete.js @@ -0,0 +1,100 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const ms = require('ms'); + +const IMAPError = require('#helpers/imap-error'); +const Mailboxes = require('#models/mailboxes'); +const Messages = require('#models/messages'); +const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +async function onDelete(path, session, fn) { + logger.debug('DELETE', { path, session }); + + try { + const { alias } = await this.refreshSession(session, 'DELETE'); + + const mailbox = await Mailboxes.findOne({ + alias: alias._id, + path + }) + .maxTimeMS(ms('3s')) + .lean() + .exec(); + + if (!mailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'NONEXISTENT' + }); + + if (mailbox.specialUse || mailbox.path === 'INBOX') + throw new IMAPError(i18n.translate('IMAP_MAILBOX_RESERVED', 'en'), { + imapResponse: 'CANNOT' + }); + + // delete mailbox + const results = await Mailboxes.deleteOne({ + alias: alias._id, + _id: mailbox._id + }); + + logger.debug('deleted', { results, path, session }); + + // results.deletedCount is mainly for publish/notifier + if (results.deletedCount > 0) { + try { + await this.server.notifier.addEntries(mailbox, { + command: 'DELETE', + mailbox: mailbox._id + }); + this.server.notifier.fire(alias.id); + } catch (err) { + logger.fatal(err, { path, session }); + } + } + + // set messages to expired + await Messages.updateMany( + { + alias: alias._id, + mailbox: mailbox._id + }, + { + $set: { + exp: true, + rdate: Date.now() - 24 * 3600 * 1000 + } + }, + { + multi: true, + w: 1 + } + ); + + fn(null, true, mailbox._id); + } catch (err) { + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { path, session }); + return fn(null, err.imapResponse); + } + + return fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onDelete; diff --git a/helpers/imap/on-expunge.js b/helpers/imap/on-expunge.js new file mode 100644 index 0000000000..feffbdc5d6 --- /dev/null +++ b/helpers/imap/on-expunge.js @@ -0,0 +1,239 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const ms = require('ms'); +const tools = require('wildduck/lib/tools'); + +const Aliases = require('#models/aliases'); +const IMAPError = require('#helpers/imap-error'); +const Mailboxes = require('#models/mailboxes'); +const Messages = require('#models/messages'); +const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +// eslint-disable-next-line complexity +async function onExpunge(mailboxId, update, session, fn) { + logger.debug('EXPUNGE', { mailboxId, update, session }); + + try { + const { alias } = await this.refreshSession(session, 'EXPUNGE'); + + const mailbox = await Mailboxes.findOne({ + alias: alias._id, + _id: mailboxId + }) + .maxTimeMS(ms('3s')) + .lean() + .exec(); + + if (!mailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'NONEXISTENT' + }); + + const lock = await this.server.lock.waitAcquireLock( + `mbwr:${mailbox.id}`, + ms('5m'), + ms('1m') + ); + + if (!lock.success) + throw new IMAPError(i18n.translate('IMAP_WRITE_LOCK_FAILED')); + + let storageUsed = 0; + + const query = { + mailbox: mailbox._id, + alias: alias._id, + undeleted: false + }; + + if (update.isUid) query.uid = tools.checkRangeQuery(update.messages); + + // eslint-disable-next-line unicorn/no-array-callback-reference + const cursor = Messages.find(query) + .sort({ + uid: 1 + }) + .maxTimeMS('2m') + .lean() + .cursor(); + + logger.debug('expunge query', { query }); + + let err; + + try { + for await (const message of cursor) { + logger.debug('expunge message', { + message, + mailboxId, + update, + session + }); + + // + // TODO: will edge cases like this in cursor() usage ever occur (?) + // + if (!message) { + logger.fatal('message not expunged', { mailboxId, update, session }); + // write to stream + if ( + !update.silent && + session?.selected?.uidList && + Array.isArray(session.selected.uidList) + ) + session.writeStream.write({ + tag: '*', + command: String(session.selected.uidList.length), + attributes: [ + { + type: 'atom', + value: 'EXISTS' + } + ] + }); + break; + } + + /* + // archive message (not used yet) + // don't archive drafts nor copies + const shouldArchive = !message.flags.includes('\\Draft') && !message.copied; + if (shouldArchive) { + message.archived = new Date(); + message.exp = true; + message.rdate = new Date(message.archived.getTime() + ms('30d')); + try { + await Archived.insertOne(message); + } catch (err) { + // duplicate error (already archived) + if (err.code === 11000) { + logger.fatal(err, { message. mailboxId, update, session }); + } else { + throw err; + } + } + } + */ + + // delete message + const results = await Messages.deleteOne({ + _id: message._id, + mailbox: mailbox._id, + alias: alias._id, + uid: message.uid + }); + + if (results?.deletedCount === 1) { + // if we deleted a message then adjust storage quota + storageUsed += message.size; + + // delete attachments + const attachmentIds = message?.mimeTree?.attachmentMap + ? Object.keys(message.mimeTree.attachmentMap || {}).map( + (key) => message.mimeTree.attachmentMap[key] + ) + : []; + if (attachmentIds.length > 0) + this.attachmentStorage + .deleteManyPromise(attachmentIds, message.magic) + .then() + .catch((err) => + logger.fatal(err, { mailboxId, update, session }) + ); + + // write to socket we've expunged message + if ( + !update.silent || + (session && + session.selected && + session.selected.mailbox && + session.selected.mailbox.toString() === mailbox.id) + ) + session.writeStream.write( + session.formatResponse('EXPUNGE', message.uid) + ); + + try { + await this.server.notifier.addEntries(mailbox, { + ignore: session.id, + command: 'EXPUNGE', + uid: message.uid, + mailbox: mailbox._id, + message: message._id, + thread: message.thread, + // modseq: message.modseq, + unseen: message.unseen, + idate: message.idate + }); + this.server.notifier.fire(alias.id); + } catch (err) { + logger.fatal(err, { mailboxId, update, session }); + } + } + } + } catch (_err) { + err = _err; + } + + // close cursor for cleanup + try { + await cursor.close(); + } catch (err) { + logger.fatal(err, { mailboxId, update, session }); + } + + // release lock + try { + await this.server.lock.releaseLock(lock); + } catch (err) { + logger.fatal(err, { mailboxId, update, session }); + } + + // update storage quota + if (storageUsed > 0) + Aliases.findOneAndUpdate( + { + _id: alias._id + }, + { + $inc: { + storageUsed: storageUsed * -1 + } + } + ) + .then() + .catch((err) => + logger.fatal(err, { storageUsed, mailboxId, update, session }) + ); + + // throw error + if (err) throw err; + + fn(null, true); + } catch (err) { + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { mailboxId, update, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onExpunge; diff --git a/helpers/imap/on-fetch.js b/helpers/imap/on-fetch.js new file mode 100644 index 0000000000..dc41fe9dab --- /dev/null +++ b/helpers/imap/on-fetch.js @@ -0,0 +1,447 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const _ = require('lodash'); +const getStream = require('get-stream'); +const mongoose = require('mongoose'); +const ms = require('ms'); +const tools = require('wildduck/lib/tools'); +const { imapHandler } = require('wildduck/imap-core'); + +const IMAPError = require('#helpers/imap-error'); +const Mailboxes = require('#models/mailboxes'); +const Messages = require('#models/messages'); +const ServerShutdownError = require('#helpers/server-shutdown-error'); +const SocketError = require('#helpers/socket-error'); +const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +const LIMITED_PROJECTION_KEYS = new Set(['_id', 'flags', 'modseq', 'uid']); +const MAX_PAGE_SIZE = 2500; +const MAX_BULK_WRITE_SIZE = 150; + +// eslint-disable-next-line complexity +async function getMessages(opts = {}) { + logger.debug('getting messages', opts); + + const { + server, + session, + options, + projection, + query, + mailbox, + alias, + attachmentStorage + } = opts; + + // safeguard + if (!_.isObject(query) || _.isEmpty(query)) + throw new Error('Query cannot be empty'); + + // safeguard for mailbox + if (!query?.mailbox || !mongoose.Types.ObjectId.isValid(query.mailbox)) + throw new Error('Mailbox missing from query'); + + // safeguard for alias + if (!query?.alias || !mongoose.Types.ObjectId.isValid(query.alias)) + throw new Error('Alias missing from query'); + + if (!_.isObject(attachmentStorage)) + throw new Error('Attachment storage missing'); + + let { entries, bulkWrite, successful, lastUid, rowCount, totalBytes } = opts; + + // + // extra safeguards for development + // + if (!Array.isArray(entries)) throw new Error('Entries is not an array'); + + if (!Array.isArray(bulkWrite)) throw new Error('Bulk write is not an array'); + + if (typeof successful !== 'boolean') + throw new Error('Successful is not a boolean'); + + if (typeof lastUid !== 'number' && lastUid !== null) + throw new Error('Last uid must be a number or null'); + + if (typeof rowCount !== 'number' || rowCount < 0) + throw new Error('Row count must be a number >= 0'); + + if (typeof totalBytes !== 'number' || totalBytes < 0) + throw new Error('Total bytes must be a number >= 0'); + + let queryAll; + let count = 0; + + const pageQuery = { ...query }; + + // `1:*` + if (options.messages.length === session.selected.uidList.length) + queryAll = true; + // NOTE: don't use uid for `1:*` + else pageQuery.uid = tools.checkRangeQuery(options.messages, false); + + if (lastUid) { + if (pageQuery.uid) + pageQuery.$and = [ + { + uid: pageQuery.uid + }, + { uid: { $gt: lastUid } } + ]; + else pageQuery.uid = { $gt: lastUid }; + } + + // eslint-disable-next-line unicorn/no-array-callback-reference, unicorn/no-array-method-this-argument + const cursor = Messages.find(pageQuery, projection) + // sort required for IMAP UIDPLUS + .sort({ uid: 1 }) + .limit(MAX_PAGE_SIZE) + // + .read('sp') + .maxTimeMS(ms('2m')) + .lean() + .cursor({ + // + // NOTE: use larger batch size if the query was limited in its projection + // + // max batch size in mongoose is 5000 + // + // + // the default in mongodb for find query is 101 + // + // + // eslint-disable-next-line no-negated-condition + batchSize: !Object.keys(projection).some( + (key) => !LIMITED_PROJECTION_KEYS.has(key) + ) + ? 1000 + : 101 + }); + + for await (const message of cursor) { + logger.debug('fetched message', { + message, + session, + options, + query, + pageQuery + }); + + // check if server is in the process of shutting down + if (server._closeTimeout) throw new ServerShutdownError(); + + // check if socket is still connected + const socket = (session.socket && session.socket._parent) || session.socket; + if (!socket || socket?.destroyed || socket?.readyState !== 'open') + throw new SocketError(); + + // break out of cursor if no message retrieved + // TODO: does this actually occur as an edge case (?) + if (!message) { + logger.fatal('message not fetched', { + session, + options, + query, + pageQuery + }); + // close cursor for cleanup + try { + await cursor.close(); + } catch (err) { + logger.fatal(err, { session, options, query, pageQuery }); + } + + // may have more pages, try to fetch more + if (count === MAX_PAGE_SIZE) { + const results = await getMessages({ + server: this.server, + session, + options, + projection, + query, + mailbox, + alias, + attachmentStorage, + entries, + bulkWrite, + successful, + lastUid, + rowCount, + totalBytes + }); + // re-assign variables (or we could return early here with `results`) + entries = results.entries; + bulkWrite = results.bulkWrite; + successful = results.successful; + lastUid = results.lastUid; + rowCount = results.rowCount; + totalBytes = results.totalBytes; + } + + break; + } + + // store counter for how many messages we processed + count++; + + // store reference to last message uid + lastUid = message.uid; + + // don't process messages that are new since query started + if ( + queryAll && + typeof session?.selected?.uidList === 'object' && + Array.isArray(session.selected.uidList) && + !session.selected.uidList.includes(message.uid) + ) + continue; + + const markAsSeen = + options.markAsSeen && message.flags && !message.flags.includes('\\Seen'); + if (markAsSeen) message.flags.unshift('\\Seen'); + + // write the response early since we don't need to perform db operation + if (options.metadataOnly && !markAsSeen) { + const values = await Promise.all( + session + .getQueryResponse(options.query, message, { + logger, + fetchOptions: {}, + // database + attachmentStorage, + acceptUTF8Enabled: session.isUTF8Enabled() + }) + .map((obj) => { + if ( + typeof obj !== 'object' || + obj.type !== 'stream' || + typeof obj.value !== 'object' + ) + return obj; + return getStream(obj.value); + }) + ); + const data = session.formatResponse('FETCH', message.uid, { + query: options.query, + values + }); + const compiled = imapHandler.compiler(data); + // `compiled` is a 'binary' string + totalBytes += compiled.length; + session.writeStream.write({ compiled }); + rowCount++; + + // + // NOTE: we may need to pass indexer options here as similar to wildduck (through the use of `eachAsync`) + // + // (e.g. so we can do `await Promise.resolve((resolve) => setImmediate(resolve));`) + // + + // move along to next cursor + continue; + } + + // + // NOTE: wildduck uses streams and a TTL limiter/counter however we can + // simplify this for now just by writing to the socket writable stream + // + const values = await Promise.all( + session + .getQueryResponse(options.query, message, { + logger, + fetchOptions: {}, + // database + attachmentStorage, + acceptUTF8Enabled: session.isUTF8Enabled() + }) + .map((obj) => { + if ( + typeof obj !== 'object' || + obj.type !== 'stream' || + typeof obj.value !== 'object' + ) + return obj; + return getStream(obj.value); + }) + ); + + const data = session.formatResponse('FETCH', message.uid, { + query: options.query, + values + }); + const compiled = imapHandler.compiler(data); + // `compiled` is a 'binary' string + totalBytes += compiled.length; + session.writeStream.write({ compiled }); + rowCount++; + + // add operation to bulkWrite + if (!markAsSeen) + bulkWrite.push({ + updateOne: { + filter: { + _id: message._id, + mailbox: mailbox._id, + alias: alias._id, + uid: message.uid + }, + update: { + $addToSet: { + flags: '\\Seen' + }, + $set: { + unseen: false + } + } + } + }); + + if (bulkWrite.length >= MAX_BULK_WRITE_SIZE) { + try { + await Messages.bulkWrite(bulkWrite, { + ordered: false, + w: 1 + }); + bulkWrite = []; + if (entries.length >= MAX_BULK_WRITE_SIZE) { + try { + await server.notifier.addEntries(mailbox, entries); + entries = []; + server.notifier.fire(alias.id); + } catch (err) { + logger.fatal(err, { message, session, options, query }); + } + } + } catch (err) { + bulkWrite = []; + entries = []; + logger.fatal(err, { message, session, options, query }); + + // close cursor for cleanup + try { + await cursor.close(); + } catch (err) { + logger.fatal(err, { message, session, options, query }); + } + + successful = false; + break; + } + } + } + + return { + entries, + bulkWrite, + successful, + lastUid, + rowCount, + totalBytes + }; +} + +async function onFetch(mailboxId, options, session, fn) { + logger.debug('FETCH', { mailboxId, options, session }); + + try { + const { alias } = await this.refreshSession(session, 'FETCH'); + + const mailbox = await Mailboxes.findOne({ + _id: mailboxId, + alias: alias._id + }) + .lean() + .exec(); + + if (!mailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'NONEXISTENT' + }); + + const projection = { + _id: true, + uid: true, + modseq: true + }; + + if (options.flagsExist) projection.flags = true; + if (options.idateExist) projection.idate = true; + if (options.bodystructureExist) projection.bodystructure = true; + if (options.rfc822sizeExist) projection.size = true; + if (options.envelopeExist) projection.envelope = true; + if (!options.metadataOnly) projection.mimeTree = true; + + const query = { + mailbox: mailbox._id, + alias: alias._id + }; + + if (options.changedSince) + query.modseq = { + $gt: options.changedSince + }; + + const results = await getMessages({ + server: this.server, + session, + options, + projection, + query, + mailbox, + alias, + attachmentStorage: this.attachmentStorage, + entries: [], + bulkWrite: [], + successful: true, + lastUid: null, + rowCount: 0, + totalBytes: 0 + }); + + // mark messages as Seen + if (results.bulkWrite.length > 0) + await Messages.bulkWrite(results.bulkWrite, { + ordered: false, + w: 1 + }); + + if (results.entries.length > 0) { + try { + await this.server.notifier.addEntries(mailbox, results.entries); + this.server.notifier.fire(alias.id); + } catch (err) { + logger.fatal(err, { mailboxId, options, session }); + } + } + + fn(null, results.successful, { + rowCount: results.rowCount, + totalBytes: results.totalBytes + }); + } catch (err) { + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { mailboxId, options, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onFetch; diff --git a/helpers/imap/on-get-quota-root.js b/helpers/imap/on-get-quota-root.js new file mode 100644 index 0000000000..1bafa20e41 --- /dev/null +++ b/helpers/imap/on-get-quota-root.js @@ -0,0 +1,60 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const Aliases = require('#models/aliases'); +const IMAPError = require('#helpers/imap-error'); +const Mailboxes = require('#models/mailboxes'); +const config = require('#config'); +const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +async function onGetQuotaRoot(path, session, fn) { + logger.debug('GETQUOTAROOT', { path, session }); + + try { + const { alias } = await this.refreshSession(session, 'GETQUOTAROOT'); + + const mailbox = await Mailboxes.findOne({ + path, + alias: alias._id + }) + .lean() + .exec(); + + if (!mailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'NONEXISTENT' + }); + + const storageUsed = await Aliases.getStorageUsed(alias); + + fn(null, { + root: '', + quota: config.maxQuotaPerAlias, + storageUsed + }); + } catch (err) { + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { path, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onGetQuotaRoot; diff --git a/helpers/imap/on-get-quota.js b/helpers/imap/on-get-quota.js new file mode 100644 index 0000000000..b01ea1989d --- /dev/null +++ b/helpers/imap/on-get-quota.js @@ -0,0 +1,49 @@ +/* istanbul ignore file */ + +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const Aliases = require('#models/aliases'); +const config = require('#config'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +async function onGetQuota(path, session, fn) { + logger.debug('GETQUOTA', { path, session }); + + try { + const { alias } = await this.refreshSession(session, 'GETQUOTA'); + + if (path !== '') return fn(null, 'NONEXISTENT'); + + const storageUsed = await Aliases.getStorageUsed(alias); + + fn(null, { + root: '', + quota: config.maxQuotaPerAlias, + storageUsed + }); + } catch (err) { + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { path, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onGetQuota; diff --git a/helpers/imap/on-list.js b/helpers/imap/on-list.js new file mode 100644 index 0000000000..66d0855469 --- /dev/null +++ b/helpers/imap/on-list.js @@ -0,0 +1,47 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const ms = require('ms'); + +const Mailboxes = require('#models/mailboxes'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +async function onList(query, session, fn) { + logger.debug('LIST', { query, session }); + + try { + const { alias } = await this.refreshSession(session, 'LIST'); + + const mailboxes = await Mailboxes.find({ + alias: alias._id + }) + .maxTimeMS(ms('3s')) + .lean() + .exec(); + + fn(null, mailboxes); + } catch (err) { + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { query, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onList; diff --git a/helpers/imap/on-lsub.js b/helpers/imap/on-lsub.js new file mode 100644 index 0000000000..d88eb08f2a --- /dev/null +++ b/helpers/imap/on-lsub.js @@ -0,0 +1,48 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const ms = require('ms'); + +const Mailboxes = require('#models/mailboxes'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +async function onLsub(query, session, fn) { + logger.debug('LSUB', { query, session }); + + try { + const { alias } = await this.refreshSession(session, 'LSUB'); + + const mailboxes = await Mailboxes.find({ + alias: alias._id, + subscribed: true + }) + .maxTimeMS(ms('3s')) + .lean() + .exec(); + + fn(null, mailboxes); + } catch (err) { + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { query, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onLsub; diff --git a/helpers/imap/on-move.js b/helpers/imap/on-move.js new file mode 100644 index 0000000000..d6bd206121 --- /dev/null +++ b/helpers/imap/on-move.js @@ -0,0 +1,349 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const ms = require('ms'); +const mongoose = require('mongoose'); +const tools = require('wildduck/lib/tools'); + +const IMAPError = require('#helpers/imap-error'); +const Mailboxes = require('#models/mailboxes'); +const Messages = require('#models/messages'); +const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +const BULK_BATCH_SIZE = 150; + +// eslint-disable-next-line complexity +async function onMove(mailboxId, update, session, fn) { + logger.debug('MOVE', { mailboxId, update, session }); + + try { + const { alias } = await this.refreshSession(session, 'MOVE'); + + const [mailbox, targetMailbox] = await Promise.all([ + Mailboxes.findOne({ + alias: alias._id, + _id: mailboxId + }) + .maxTimeMS(ms('3s')) + .lean() + .exec(), + Mailboxes.findOne({ + alias: alias._id, + path: update.destination + }) + .maxTimeMS(ms('3s')) + .lean() + .exec() + ]); + + if (!mailbox || !targetMailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'TRYCREATE' + }); + + const lock = await this.server.lock.waitAcquireLock( + `mbwr:${mailbox.id}`, + ms('5m'), + ms('1m') + ); + + if (!lock.success) + throw new IMAPError(i18n.translate('IMAP_WRITE_LOCK_FAILED')); + + let err; + + let existEntries = []; + let expungeEntries = []; + + const sourceUid = []; + const destinationUid = []; + + const cursor = Messages.find({ + mailbox: mailbox._id, + alias: alias._id, + uid: tools.checkRangeQuery(update.messages) + }) + // sort required for IMAP UIDPLUS + .sort({ uid: 1 }) + .lean(); + + try { + // increment modification index to indicate a change occurred + const updatedMailbox = await Mailboxes.findOneAndUpdate( + { + _id: mailbox._id, + alias: alias._id + }, + { + $inc: { + modifyIndex: 1 + } + }, + { + returnDocument: 'after', + projection: { + _id: true, + uidNext: true, + modifyIndex: true + } + } + ); + + // + // NOTE: wildduck does not check that the result exists nor does it pass NONEXISTENT on this edge case + // (e.g. `throw new IMAPError('...', { imapResponse: 'NONEXISTENT' });`) + // + if (!updatedMailbox) + throw new IMAPError( + i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en') + ); + + const newModseq = updatedMailbox.modifyIndex || 1; + + for await (let message of cursor.cursor()) { + logger.debug('fetched message', { + message, + mailboxId, + update, + session + }); + + // return early if no message + // TODO: does this actually occur as an edge case (?) + if (!message) { + logger.fatal('message not fetched', { + mailboxId, + update, + session + }); + break; + } + + // + // this is a fix for clients like Thunderbird which + // do not display Draft flagged messages in the Inbox + // (even though they exist in the Inbox) + // + // TODO: notify wildduck about this in GH issues + // + // if (targetMailbox.specialUse !== '\\Drafts') + // message.flags = _.pull(message.flags, '\\Draft'); + + // store reference to existing message data + const existingMessageId = message._id; + const existingMailboxId = message.mailbox; + const existingMessageUid = message.uid; + + // add to source uid array + sourceUid.push(existingMessageUid); + + const updatedTargetMailbox = await Mailboxes.findOneAndUpdate( + { + _id: targetMailbox._id, + alias: alias._id, + path: update.destination + }, + { + $inc: { + uidNext: 1 + } + }, + { + projection: { + uidNext: true, + modifyIndex: true + }, + returnDocument: 'before' + } + ); + + // NOTE: wildduck does not pass NONEXISTENT on this edge case + // + // (e.g. `throw new IMAPError('...', { imapResponse: 'NONEXISTENT' });`) + if (!updatedTargetMailbox) + throw new IMAPError( + i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en') + ); + + // push new destination uid + destinationUid.push(updatedTargetMailbox.uidNext); + + const { unseen } = message; + + // update message + message._id = new mongoose.Types.ObjectId(); + message.id = message._id.toString(); + message.mailbox = targetMailbox._id; + message.uid = updatedTargetMailbox.uidNext; + message.exp = targetMailbox.retention !== 0; + message.rdate = Date.now() + targetMailbox.retention; + message.modseq = updatedTargetMailbox.modifyIndex; + message.junk = targetMailbox.specialUse === '\\Junk'; + message.remoteAddress = session.remoteAddress; + message.transaction = 'MOVE'; + message.searchable = !message.flags.includes('\\Deleted'); + + // create new message (in new target mailbox) + message = await Messages.create(message); + + existEntries.push({ + // ignore: session.id, + command: 'EXISTS', + uid: message.uid, + // mailbox: message.mailbox, + message: message._id, + thread: message.thread, + // modseq: message.modseq, + unseen: message.unseen, + idate: message.idate, + ...(message.junk ? { junk: true } : {}) + }); + + // delete old message + const results = await Messages.deleteOne({ + _id: existingMessageId, + mailbox: existingMailboxId, + uid: existingMessageUid, + alias: alias._id + }); + + if (results && results.deletedCount) { + session.writeStream.write( + session.formatResponse('EXPUNGE', sourceUid) + ); + session.writeStream.write( + session.formatResponse('EXPUNGE', existingMessageUid) + ); + expungeEntries.push({ + ignore: session.id, + command: 'EXPUNGE', + uid: existingMessageUid, + modseq: newModseq, + unseen, + idate: message.idate, + mailbox: existingMailboxId, + message: existingMessageId, + thread: message.thread + }); + } else { + logger.fatal(new Error('failed to delete old message'), { + mailboxId, + update, + session + }); + } + + // + // iterate over entries if necessary + // + if (expungeEntries.length >= BULK_BATCH_SIZE) { + // expunge messages from old mailbox + try { + await this.server.notifier.addEntries(mailbox, expungeEntries); + expungeEntries = []; + this.server.notifier.fire(alias.id); + } catch (err) { + logger.fatal(err, { mailboxId, update, session }); + } + } + + if (existEntries.length >= BULK_BATCH_SIZE) { + // add new messages to new mailbox + try { + await this.server.notifier.addEntries( + targetMailbox._id, + existEntries + ); + existEntries = []; + this.server.notifier.fire(alias.id); + } catch (err) { + logger.fatal(err, { mailboxId, update, session }); + } + } + } + } catch (_err) { + err = _err; + } + + // release lock + try { + await this.server.lock.releaseLock(lock); + } catch (err) { + logger.fatal(err, { mailboxId, update, session }); + } + + // write any if needed + if (sourceUid.length > 0) + session.writeStream.write({ + tag: '*', + command: String(session.selected.uidList.length), + attributes: [ + { + type: 'atom', + value: 'EXISTS' + } + ] + }); + + // + // iterate over entries if necessary + // + if (expungeEntries.length > 0) { + // expunge messages from old mailbox + try { + await this.server.notifier.addEntries(mailbox, expungeEntries); + this.server.notifier.fire(alias.id); + } catch (err) { + logger.fatal(err, { mailboxId, update, session }); + } + } + + if (existEntries.length > 0) { + // add new messages to new mailbox + try { + await this.server.notifier.addEntries(targetMailbox, existEntries); + this.server.notifier.fire(alias.id); + } catch (err) { + logger.fatal(err, { mailboxId, update, session }); + } + } + + // throw error if any + if (err) throw err; + + // send response + const response = { + uidValidity: targetMailbox.uidValidity, + sourceUid, + destinationUid, + mailbox: mailbox._id, + target: targetMailbox._id, + status: 'moved' + }; + fn(null, true, response); + } catch (err) { + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { mailboxId, update, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onMove; diff --git a/helpers/imap/on-open.js b/helpers/imap/on-open.js new file mode 100644 index 0000000000..a2ff6e7b6c --- /dev/null +++ b/helpers/imap/on-open.js @@ -0,0 +1,72 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const ms = require('ms'); + +const IMAPError = require('#helpers/imap-error'); +const Mailboxes = require('#models/mailboxes'); +const Messages = require('#models/messages'); +const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +async function onOpen(path, session, fn) { + logger.debug('OPEN', { path, session }); + + try { + const { alias } = await this.refreshSession(session, 'OPEN'); + + const mailbox = await Mailboxes.findOne({ + path, + alias: alias._id + }) + .maxTimeMS(ms('3s')) + .lean() + .exec(); + + if (!mailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'NONEXISTENT' + }); + + // + // distinct has a limited response size of 16 MB + // + // > 'The maximum BSON document size is 16 megabytes' + // + // + // TODO: rewrite this to use cursor and sort { uid: 1 } + // + const uidList = await Messages.distinct('uid', { + mailbox: mailbox._id, + alias: alias._id + }).maxTimeMS(ms('2s')); + + mailbox.uidList = uidList.sort(); + + // send response + fn(null, mailbox); + } catch (err) { + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { path, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onOpen; diff --git a/helpers/imap/on-rename.js b/helpers/imap/on-rename.js new file mode 100644 index 0000000000..ddb50b9097 --- /dev/null +++ b/helpers/imap/on-rename.js @@ -0,0 +1,104 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const ms = require('ms'); + +const Mailboxes = require('#models/mailboxes'); +const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); +const IMAPError = require('#helpers/imap-error'); + +async function onRename(path, newPath, session, fn) { + logger.debug('RENAME', { path, newPath, session }); + + try { + const { alias } = await this.refreshSession(session, 'RENAME'); + + const [mailbox, targetMailbox] = await Promise.all([ + Mailboxes.findOne({ + path, + alias: alias._id + }) + .maxTimeMS(ms('3s')) + .lean() + .exec(), + Mailboxes.findOne({ + path: newPath, + alias: alias._id + }) + .maxTimeMS(ms('3s')) + .lean() + .exec() + ]); + + if (!mailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'NONEXISTENT' + }); + + if (mailbox.path === 'INBOX') + throw new IMAPError(i18n.translate('IMAP_MAILBOX_RESERVED', 'en'), { + imapResponse: 'CANNOT' + }); + + if (targetMailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_ALREADY_EXISTS', 'en'), { + imapResponse: 'ALREADYEXISTS' + }); + + const renamedMailbox = await Mailboxes.findOneAndUpdate( + { + _id: mailbox._id, + alias: alias._id + }, + { + $set: { + path: newPath + } + } + ); + + // could not write/lock mailbox + if (!renamedMailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'NONEXISTENT' + }); + + try { + await this.server.notifier.addEntries(mailbox, { + command: 'RENAME', + mailbox: mailbox._id, + path: renamedMailbox.path + }); + this.server.notifier.fire(alias.id); + } catch (err) { + logger.fatal(err, { path, session }); + } + + // send response + fn(null, true, renamedMailbox._id); + } catch (err) { + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { path, newPath, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onRename; diff --git a/helpers/imap/on-search.js b/helpers/imap/on-search.js new file mode 100644 index 0000000000..9e46ac7bb6 --- /dev/null +++ b/helpers/imap/on-search.js @@ -0,0 +1,498 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const { Buffer } = require('node:buffer'); + +const _ = require('lodash'); +const ms = require('ms'); +const tools = require('wildduck/lib/tools'); + +const IMAPError = require('#helpers/imap-error'); +const Messages = require('#models/messages'); +const Mailboxes = require('#models/mailboxes'); +const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +async function onSearch(mailboxId, options, session, fn) { + logger.debug('SEARCH', { mailboxId, options, session, fn }); + + try { + const { alias } = await this.refreshSession(session, 'SEARCH'); + + const mailbox = await Mailboxes.findOne({ + _id: mailboxId, + alias: alias._id + }) + .maxTimeMS(ms('3s')) + .lean() + .exec(); + + if (!mailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'NONEXISTENT' + }); + + // prepare query for search + const query = { + mailbox: mailbox._id, + alias: alias._id + }; + + const uidList = []; + + let highestModseq = 0; + let returned; + + // eslint-disable-next-line complexity + const walkQuery = (parent, ne, node) => { + if (returned) { + return; + } + + for (const term of node) { + // + if (returned) break; + switch (term.key) { + case 'all': { + if (ne) { + parent.push({ + // should not match anything + _id: -1 + }); + } + + break; + } + + case 'not': { + walkQuery(parent, !ne, [term.value || []].flat()); + break; + } + + case 'or': { + const $or = []; + + for (const entry of [term.value || []].flat()) { + walkQuery($or, false, [entry || []].flat()); + } + + if ($or.length > 0) { + parent.push({ + $or + }); + } + + break; + } + + case 'text': // search over entire email + case 'body': { + // search over email body + if (term.value && !ne) { + // fulltext can only be in the root of the query, not in $not, $or expressions + // https://docs.mongodb.com/v3.4/tutorial/text-search-in-aggregation/#restrictions + query.alias = alias._id; + query.searchable = true; + query.$text = { + $search: term.value + }; + } else { + // can not search by text + parent.push({ + // should not match anything + _id: -1 + }); + } + + break; + } + + case 'modseq': { + parent.push({ + modseq: { + [ne ? '$lt' : '$gte']: term.value + } + }); + break; + } + + case 'uid': { + if (Array.isArray(term.value)) { + if (term.value.length === 0) { + // trying to find a message that does not exist + returned = true; + fn(null, { + uidList: [], + highestModseq: 0 + }); + continue; + } + + if (term.value.length !== session.selected.uidList.length) { + // not 1:* + parent.push({ + uid: tools.checkRangeQuery(term.value, ne) + }); + } else if (ne) { + parent.push({ + // should not match anything + _id: -1 + }); + } + } else { + parent.push({ + uid: { + [ne ? '$ne' : '$eq']: term.value + } + }); + } + + break; + } + + case 'flag': { + switch (term.value) { + case '\\Seen': + case '\\Deleted': { + // message object has "unseen" and "undeleted" properties + if (term.exists) { + parent.push({ + ['un' + term.value.toLowerCase().slice(1)]: ne + }); + } else { + parent.push({ + ['un' + term.value.toLowerCase().slice(1)]: !ne + }); + } + + break; + } + + case '\\Flagged': + case '\\Draft': { + if (term.exists) { + parent.push({ + [term.value.toLowerCase().slice(1)]: !ne + }); + } else { + parent.push({ + [term.value.toLowerCase().slice(1)]: ne + }); + } + + break; + } + + default: { + if (term.exists) { + parent.push({ + flags: { + [ne ? '$ne' : '$eq']: term.value + } + }); + } else { + parent.push({ + flags: { + [ne ? '$eq' : '$ne']: term.value + } + }); + } + } + } + + break; + } + + case 'header': { + { + // + // NOTE: we can use using lodash instead of `tools.escapeRegexStr` + // since the usage is the same (but perf slightly better in lodash) + // + // + const regex = _.escapeRegExp( + Buffer.from(term.value, 'binary').toString() + ); + const entry = term.value + ? { + headers: { + $elemMatch: { + key: term.header, + value: ne + ? { + // not can not have a regex, so try exact match instead even if it fails + $not: { + $eq: Buffer.from(term.value, 'binary') + .toString() + .toLowerCase() + .trim() + } + } + : { + $regex: regex, + $options: 'i' + } + } + } + } + : { + 'headers.key': ne + ? { + $ne: term.header + } + : term.header + }; + parent.push(entry); + } + + break; + } + + case 'internaldate': { + { + let op = false; + const value = new Date(term.value + ' GMT'); + switch (term.operator) { + case '<': { + op = '$lt'; + break; + } + + case '<=': { + op = '$lte'; + break; + } + + case '>': { + op = '$gt'; + break; + } + + case '>=': { + op = '$gte'; + break; + } + + default: { + // TODO: should we log an error here (?) + break; + } + } + + let entry = op + ? { + [op]: value + } + : [ + { + $gte: value + }, + { + $lt: new Date(value.getTime() + 24 * 3600 * 1000) + } + ]; + + entry = { + idate: ne + ? { + $not: entry + } + : entry + }; + + parent.push(entry); + } + + break; + } + + case 'headerdate': { + { + let op = false; + const value = new Date(term.value + ' GMT'); + switch (term.operator) { + case '<': { + op = '$lt'; + break; + } + + case '<=': { + op = '$lte'; + break; + } + + case '>': { + op = '$gt'; + break; + } + + case '>=': { + op = '$gte'; + break; + } + + default: { + // TODO: should we log an error here (?) + break; + } + } + + let entry = op + ? { + [op]: value + } + : [ + { + $gte: value + }, + { + $lt: new Date(value.getTime() + 24 * 3600 * 1000) + } + ]; + + entry = { + hdate: ne + ? { + $not: entry + } + : entry + }; + + parent.push(entry); + } + + break; + } + + case 'size': { + { + let op = '$eq'; + const value = Number(term.value) || 0; + switch (term.operator) { + case '<': { + op = '$lt'; + break; + } + + case '<=': { + op = '$lte'; + break; + } + + case '>': { + op = '$gt'; + break; + } + + case '>=': { + op = '$gte'; + break; + } + + default: { + // TODO: should we log an error here (?) + break; + } + } + + let entry = { + [op]: value + }; + + entry = { + size: ne + ? { + $not: entry + } + : entry + }; + + parent.push(entry); + } + + break; + } + + default: { + // TODO: should we log an error here (?) + break; + } + } + } + }; + + const $and = []; + walkQuery($and, false, options.query); + + if (returned) return; + + if ($and.length > 0) query.$and = $and; + + // eslint-disable-next-line unicorn/no-array-callback-reference, unicorn/no-array-method-this-argument + const cursor = Messages.find(query, { + uid: true, + modseq: true + }) + // + .read('sp') + .maxTimeMS(ms('2m')) + .lean() + .cursor(); + + try { + for await (const message of cursor) { + logger.debug('fetched message', { + message, + mailboxId, + options, + session + }); + + if (!message) break; + + if (highestModseq < message.modseq) highestModseq = message.modseq; + + uidList.push(message.uid); + } + } catch (err) { + logger.fatal(err, { mailboxId, options, session }); + throw new IMAPError(i18n.translateError('IMAP_INVALID_SEARCH')); + } + + // close cursor for cleanup + try { + await cursor.close(); + } catch (err) { + logger.fatal(err, { mailboxId, options, session }); + } + + // send response + fn(null, { + uidList, + highestModseq + }); + } catch (err) { + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { mailboxId, options, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onSearch; diff --git a/helpers/imap/on-status.js b/helpers/imap/on-status.js new file mode 100644 index 0000000000..e36b6f86fc --- /dev/null +++ b/helpers/imap/on-status.js @@ -0,0 +1,77 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const ms = require('ms'); + +const IMAPError = require('#helpers/imap-error'); +const Mailboxes = require('#models/mailboxes'); +const Messages = require('#models/messages'); +const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +async function onStatus(path, session, fn) { + logger.debug('STATUS', { path, session }); + + try { + const { alias } = await this.refreshSession(session, 'STATUS'); + + const mailbox = await Mailboxes.findOne({ + alias: alias._id, + path + }) + .maxTimeMS(ms('3s')) + .lean() + .exec(); + + if (!mailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'NONEXISTENT' + }); + + const [messages, unseen] = await Promise.all([ + Messages.countDocuments( + { mailbox: mailbox._id, alias: alias._id }, + { + maxTimeMS: ms('2m') + } + ), + Messages.countDocuments( + { mailbox: mailbox._id, alias: alias._id, unseen: true }, + { + maxTimeMS: ms('2m') + } + ) + ]); + + fn(null, { + messages, + uidNext: mailbox.uidNext, + uidValidity: mailbox.uidValidity, + unseen, + highestModseq: mailbox.modifyIndex || 0 + }); + } catch (err) { + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { path, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onStatus; diff --git a/helpers/imap/on-store.js b/helpers/imap/on-store.js new file mode 100644 index 0000000000..48d6bfa0e8 --- /dev/null +++ b/helpers/imap/on-store.js @@ -0,0 +1,460 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const imapTools = require('wildduck/imap-core/lib/imap-tools'); +const ms = require('ms'); +const tools = require('wildduck/lib/tools'); + +const IMAPError = require('#helpers/imap-error'); +const Mailboxes = require('#models/mailboxes'); +const Messages = require('#models/messages'); +const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +const MAX_BULK_WRITE_SIZE = 150; + +function getFlag(f) { + return f.trim().toLowerCase(); +} + +async function getModseq(mailbox, alias) { + const updatedMailbox = await Mailboxes.findOneAndUpdate( + { + _id: mailbox._id, + alias: alias._id + }, + { + $inc: { + modifyIndex: 1 + } + }, + { + returnDocument: 'after', + maxTimeMS: ms('3s') + } + ); + return updatedMailbox && updatedMailbox.modifyIndex; +} + +// eslint-disable-next-line complexity +async function onStore(mailboxId, update, session, fn) { + logger.debug('STORE', { mailboxId, update, session }); + + try { + const { alias } = await this.refreshSession(session, 'STORE'); + + const mailbox = await Mailboxes.findOne({ + _id: mailboxId, + alias: alias._id + }) + .lean() + .exec(); + + if (!mailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'NONEXISTENT' + }); + + const condstoreEnabled = Boolean(session.selected.condstoreEnabled); + + const query = { + mailbox: mailbox._id, + alias: alias._id + }; + + const modified = []; + + let entries = []; + let bulkWrite = []; + let newModseq; + + let queryAll; + // `1:*` + if (update.messages.length === session.selected.uidList.length) + queryAll = true; + // NOTE: don't use uid for `1:*` + else query.uid = tools.checkRangeQuery(update.messages); + + // eslint-disable-next-line unicorn/no-array-callback-reference, unicorn/no-array-method-this-argument + const cursor = Messages.find(query, { + _id: true, + uid: true, + flags: true, + modseq: true + }) + .sort({ uid: 1 }) + .maxTimeMS(ms('2m')) + .lean() + .cursor(); + + let err; + + try { + for await (const message of cursor) { + logger.debug('fetched message', { + message, + mailboxId, + update, + session + }); + + // return early if no message + // TODO: does this actually occur as an edge case (?) + if (!message) { + logger.fatal('message not fetched', { + mailboxId, + update, + session + }); + break; + } + + // skip messages if necessary + if ( + queryAll && + session?.selected?.uidList && + Array.isArray(session.selected.uidList) && + !session.selected.uidList.includes(message.uid) + ) + continue; + + if (update.unchangedSince && message.modseq > update.unchangedSince) { + modified.push(message.uid); + continue; + } + + // TODO: trim() on flags in message model (?) + const existingFlags = new Set(message.flags.map((f) => getFlag(f))); + + let flagsUpdate; + let updated; + + switch (update.action) { + case 'set': { + // operation is only an update if flags are different + if ( + existingFlags.size !== update.value.length || + update.value.some((f) => !existingFlags.has(getFlag(f))) + ) + updated = true; + + message.flags = [update.value].flat(); + + // set flags + if (updated) { + flagsUpdate = { + $set: { + flags: message.flags, + unseen: !message.flags.includes('\\Seen'), + flagged: message.flags.includes('\\Flagged'), + undeleted: !message.flags.includes('\\Deleted'), + draft: message.flags.includes('\\Draft') + } + }; + + if (message.flags.includes('\\Deleted')) + flagsUpdate.$unset = { + searchable: '' + }; + else flagsUpdate.$set.searchable = true; + } + + break; + } + + case 'add': { + const newFlags = []; + message.flags = [ + ...message.flags, + ...update.value.filter((f) => { + if (!existingFlags.has(getFlag(f))) { + updated = true; + newFlags.push(f); + return true; + } + + return false; + }) + ]; + + // add flags + if (updated) { + flagsUpdate = { + $addToSet: { + flags: { + $each: newFlags + } + } + }; + + if ( + newFlags.includes('\\Seen') || + newFlags.includes('\\Flagged') || + newFlags.includes('\\Deleted') || + newFlags.includes('\\Draft') + ) { + flagsUpdate.$set = {}; + + if (newFlags.includes('\\Seen')) { + flagsUpdate.$set = { + unseen: false + }; + } + + if (newFlags.includes('\\Flagged')) { + flagsUpdate.$set = { + flagged: true + }; + } + + if (newFlags.includes('\\Deleted')) { + flagsUpdate.$set = { + undeleted: false + }; + flagsUpdate.$unset = { + searchable: '' + }; + } + + if (newFlags.includes('\\Draft')) { + flagsUpdate.$set = { + draft: true + }; + } + } + } + + break; + } + + case 'remove': { + // operation is only an update if flags are different + const oldFlags = []; + const flagUpdates = new Set(update.value.map((f) => getFlag(f))); + message.flags = message.flags.filter((f) => { + if (!flagUpdates.has(getFlag(f))) return true; + + oldFlags.push(f); + updated = true; + return false; + }); + + // remove flags + if (updated) { + flagsUpdate = { + $pull: { + flags: { + $in: oldFlags + } + } + }; + if ( + oldFlags.includes('\\Seen') || + oldFlags.includes('\\Flagged') || + oldFlags.includes('\\Deleted') || + oldFlags.includes('\\Draft') + ) { + flagsUpdate.$set = {}; + if (oldFlags.includes('\\Seen')) { + flagsUpdate.$set = { + unseen: true + }; + } + + if (oldFlags.includes('\\Flagged')) { + flagsUpdate.$set = { + flagged: false + }; + } + + if (oldFlags.includes('\\Deleted')) { + flagsUpdate.$set = { + undeleted: true + }; + if (!['\\Junk', '\\Trash'].includes(mailbox.specialUse)) { + flagsUpdate.$set.searchable = true; + } + } + + if (oldFlags.includes('\\Draft')) { + flagsUpdate.$set = { + draft: false + }; + } + } + } + + break; + } + + default: { + throw new TypeError('Unknown action'); + } + } + + // return early if not updated + if (!updated) continue; + + // get modseq + const modseq = newModseq || (await getModseq(mailbox, alias)); + + if (!update.silent || condstoreEnabled) { + // write to socket the response + session.writeStream.write( + session.formatResponse('FETCH', message.uid, { + uid: update.isUid ? message.uid : false, + flags: message.flags, + modseq: condstoreEnabled ? modseq : false + }) + ); + } + + if (!flagsUpdate.$set) flagsUpdate.$set = {}; + + flagsUpdate.$set.modseq = modseq; + + bulkWrite.push({ + updateOne: { + filter: { + _id: message._id, + mailbox: mailbox._id, + uid: message.uid, + modseq: { + $lt: modseq + } + }, + update: flagsUpdate + } + }); + + entries.push({ + // ignore: session.id, + command: 'FETCH', + uid: message.uid, + message: message._id, + mailbox: mailbox._id, + thread: message.thread, + modseq, + unseen: update.value && update.value.includes('\\Seen'), + idate: message.idate + }); + + if (bulkWrite.length >= MAX_BULK_WRITE_SIZE) { + try { + await Messages.bulkWrite(bulkWrite, { + ordered: false, + w: 1 + }); + bulkWrite = []; + } catch (err) { + bulkWrite = []; + logger.fatal(err, { mailboxId, update, session }); + throw err; + } + + if (entries.length > 0) { + try { + await this.server.notifier.addEntries(mailbox, entries); + this.server.notifier.fire(alias.id); + entries = []; + } catch (err) { + logger.fatal(err, { mailboxId, update, session }); + } + } + } + } + } catch (_err) { + err = _err; + } + + // close cursor for cleanup + try { + await cursor.close(); + } catch (err) { + logger.fatal(err, { mailboxId, update, session }); + } + + // update messages + if (bulkWrite.length > 0) + await Messages.bulkWrite(bulkWrite, { + ordered: false, + w: 1 + }); + + if (entries.length > 0) { + try { + await this.server.notifier.addEntries(mailbox, entries); + this.server.notifier.fire(alias.id); + } catch (err) { + logger.fatal(err, { mailboxId, update, session }); + } + } + + // update mailbox flags + if (update.action !== 'remove') { + const mailboxFlags = [ + ...imapTools.systemFlags, + ...(mailbox.flags || []) + ].map((f) => getFlag(f)); + const newFlags = []; + + // find flags that don't yet exist for mailbox to add + for (const flag of update.value) { + // limit mailbox flags by 100 + if (mailboxFlags.length + newFlags.length >= 100) continue; + + // add flag if mailbox does not include it + if (!mailboxFlags.includes(getFlag(flag))) newFlags.push(flag); + } + + if (newFlags.length > 0) { + // TODO: see FIXME from wildduck at + await Mailboxes.updateOne( + { + _id: mailbox._id, + alias: alias._id + }, + { + $addToSet: { + flags: { + $each: newFlags + } + } + }, + { + maxTimeMS: ms('3s') + } + ); + } + } + + // if there was an error during cursor then throw + if (err) throw err; + + // send response + fn(null, true, modified); + } catch (err) { + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { mailboxId, update, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onStore; diff --git a/helpers/imap/on-subscribe.js b/helpers/imap/on-subscribe.js new file mode 100644 index 0000000000..98a632617c --- /dev/null +++ b/helpers/imap/on-subscribe.js @@ -0,0 +1,59 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const IMAPError = require('#helpers/imap-error'); +const Mailboxes = require('#models/mailboxes'); +const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +async function onSubscribe(path, session, fn) { + logger.debug('SUBSCRIBE', { path, session }); + + try { + const { alias } = await this.refreshSession(session, 'SUBSCRIBE'); + + const mailbox = await Mailboxes.findOneAndUpdate( + { + path, + alias: alias._id + }, + { + $set: { + subscribed: true + } + } + ) + .lean() + .exec(); + + if (!mailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'NONEXISTENT' + }); + + fn(null, true); + } catch (err) { + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { path, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onSubscribe; diff --git a/helpers/imap/on-unsubscribe.js b/helpers/imap/on-unsubscribe.js new file mode 100644 index 0000000000..a5a562f202 --- /dev/null +++ b/helpers/imap/on-unsubscribe.js @@ -0,0 +1,59 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const IMAPError = require('#helpers/imap-error'); +const Mailboxes = require('#models/mailboxes'); +const i18n = require('#helpers/i18n'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +async function onUnsubscribe(path, session, fn) { + logger.debug('UNSUBSCRIBE', { path, session }); + + try { + const { alias } = await this.refreshSession(session, 'UNSUBSCRIBE'); + + const mailbox = await Mailboxes.findOneAndUpdate( + { + path, + alias: alias._id + }, + { + $set: { + subscribed: false + } + } + ) + .lean() + .exec(); + + if (!mailbox) + throw new IMAPError(i18n.translate('IMAP_MAILBOX_DOES_NOT_EXIST', 'en'), { + imapResponse: 'NONEXISTENT' + }); + + fn(null, true); + } catch (err) { + // NOTE: wildduck uses `imapResponse` so we are keeping it consistent + if (err.imapResponse) { + logger.error(err, { path, session }); + return fn(null, err.imapResponse); + } + + fn(refineAndLogError(err, session, true)); + } +} + +module.exports = onUnsubscribe; diff --git a/helpers/index.js b/helpers/index.js index 7e879c2abf..27fa2c015d 100644 --- a/helpers/index.js +++ b/helpers/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const email = require('./email'); const getEmailLocals = require('./get-email-locals'); const i18n = require('./i18n'); @@ -45,6 +50,15 @@ const RetryClient = require('./retry-client'); const retryRequest = require('./retry-request'); const getBounceInfo = require('./get-bounce-info'); const getLogsCsv = require('./get-logs-csv'); +const smtp = require('./smtp'); +const imap = require('./imap'); +const ServerShutdownError = require('./server-shutdown-error'); +const refineAndLogError = require('./refine-and-log-error'); +const validateAlias = require('./validate-alias'); +const validateDomain = require('./validate-domain'); +const IMAPError = require('./imap-error'); +const SocketError = require('./socket-error'); +const IMAPNotifier = require('./imap-notifier'); module.exports = { decrypt, @@ -94,5 +108,14 @@ module.exports = { RetryClient, retryRequest, getBounceInfo, - getLogsCsv + getLogsCsv, + smtp, + imap, + ServerShutdownError, + refineAndLogError, + validateAlias, + validateDomain, + IMAPError, + SocketError, + IMAPNotifier }; diff --git a/helpers/is-code-bug.js b/helpers/is-code-bug.js index cc20eaa5a8..b3916a7df6 100644 --- a/helpers/is-code-bug.js +++ b/helpers/is-code-bug.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const { CONNECTION_CLOSED_ERROR_MSG } = require('ioredis/built/utils'); const { boolean } = require('boolean'); @@ -13,7 +18,8 @@ function isCodeBug(err) { isErrorConstructorName(err, 'RangeError') || isErrorConstructorName(err, 'URIError') || isErrorConstructorName(err, 'EvalError') || - isErrorConstructorName(err, 'MongooseError') || + (isErrorConstructorName(err, 'MongooseError') && + !isErrorConstructorName(err, 'ValidationError')) || isErrorConstructorName(err, 'MongoError') || isErrorConstructorName(err, 'RedisError') ); diff --git a/helpers/is-error-constructor-name.js b/helpers/is-error-constructor-name.js index b9912c6684..d0f8f77e35 100644 --- a/helpers/is-error-constructor-name.js +++ b/helpers/is-error-constructor-name.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // // NOTE: this is copied from `koa-better-error-handler` but it belongs in its own package // and then used here and in that package as well diff --git a/helpers/is-retryable-error.js b/helpers/is-retryable-error.js index 998122fa9e..40333c6ca1 100644 --- a/helpers/is-retryable-error.js +++ b/helpers/is-retryable-error.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const isTimeoutError = require('./is-timeout-error'); const isSocketError = require('./is-socket-error'); diff --git a/helpers/is-socket-error.js b/helpers/is-socket-error.js index d94e503e3c..8393ef694e 100644 --- a/helpers/is-socket-error.js +++ b/helpers/is-socket-error.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + function isSocketError(err) { if (typeof err !== 'object') return false; for (const key of ['message', 'response']) { diff --git a/helpers/is-ssl-error.js b/helpers/is-ssl-error.js index ff058d4df4..f12a8273d4 100644 --- a/helpers/is-ssl-error.js +++ b/helpers/is-ssl-error.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const { boolean } = require('boolean'); const RE2 = require('re2'); diff --git a/helpers/is-timeout-error.js b/helpers/is-timeout-error.js index 6b8ffea8b3..96bf442d7c 100644 --- a/helpers/is-timeout-error.js +++ b/helpers/is-timeout-error.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + function isTimeoutError(err) { if (typeof err !== 'object') return false; diff --git a/helpers/is-tls-error.js b/helpers/is-tls-error.js index fed61dcef4..b2f2c036e6 100644 --- a/helpers/is-tls-error.js +++ b/helpers/is-tls-error.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const { boolean } = require('boolean'); const RE2 = require('re2'); diff --git a/helpers/logger.js b/helpers/logger.js index 8eeb0d4a53..2efe7586a1 100644 --- a/helpers/logger.js +++ b/helpers/logger.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Axe = require('axe'); const Cabin = require('cabin'); const cuid = require('cuid'); diff --git a/helpers/markdown.js b/helpers/markdown.js index 6cad40121f..928a43fb9e 100644 --- a/helpers/markdown.js +++ b/helpers/markdown.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const markdownIt = require('markdown-it'); const markdownItEmoji = require('markdown-it-emoji'); const markdownItGitHubHeadings = require('markdown-it-github-headings'); diff --git a/helpers/on-auth.js b/helpers/on-auth.js new file mode 100644 index 0000000000..158654eaf6 --- /dev/null +++ b/helpers/on-auth.js @@ -0,0 +1,272 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + +const punycode = require('node:punycode'); + +const isSANB = require('is-string-and-not-blank'); +const { IMAPServer } = require('wildduck/imap-core'); +const { isEmail } = require('validator'); + +const SMTPError = require('./smtp-error'); +const ServerShutdownError = require('./server-shutdown-error'); +const SocketError = require('./socket-error'); +const logger = require('./logger'); +const parseRootDomain = require('./parse-root-domain'); +const refineAndLogError = require('./refine-and-log-error'); +const validateAlias = require('./validate-alias'); +const validateDomain = require('./validate-domain'); + +const Aliases = require('#models/aliases'); +const Domains = require('#models/domains'); +const Mailboxes = require('#models/mailboxes'); +const config = require('#config'); +const env = require('#config/env'); + +const REQUIRED_PATHS = [ + 'INBOX', + 'Drafts', + 'Sent Mail', + // + // NOTE: we could use "All Mail" to match existing standards (e.g. instead of "Archive") + // + // + // 'All Mail' but we would need to use labels + // + 'Archive', + 'Spam', + 'Trash' +]; + +// eslint-disable-next-line complexity +async function onAuth(auth, session, fn) { + logger.debug('AUTH', { auth, session }); + + // TODO: credit system + domain billing rules (assigned billing manager -> person who gets credits deducted) + // TODO: salt/hash/deprecate legacy API token + remove from API docs page + // TODO: replace usage of config.recordPrefix with config.paidPrefix and config.freePrefix + + // + // TODO: add support for domain-wide tokens (right now it's only alias-specific) + // `auth.username` must be an alias that exists in the system + // `auth.password` must be domain-wide or alias-specific generated token + // (password visible only once to user upon creation) + // + try { + // check if server is in the process of shutting down + if (this.server._closeTimeout) throw new ServerShutdownError(); + + // check if socket is still connected (only applicable for IMAP) + if (this.server instanceof IMAPServer) { + const socket = + (session.socket && session.socket._parent) || session.socket; + if (!socket || socket?.destroyed || socket?.readyState !== 'open') + throw new SocketError(); + } + + // username must be a valid email address + if ( + typeof auth.username !== 'string' || + !isSANB(auth.username) || + !isEmail(auth.username.trim()) || + // + auth.username === 'my_user' || + // + auth.username === 'REPLACE-WITH-YOUR-ALIAS@YOURDOMAIN.COM' + ) + throw new SMTPError( + `Invalid username, please enter a valid email address (e.g. "alias@example.com"); use one of your domain's aliases at ${config.urls.web}/my-account/domains`, + { + responseCode: 535, + ignoreHook: true + } + ); + + let [name, domainName] = auth.username.trim().toLowerCase().split('@'); + + domainName = punycode.toUnicode(domainName); + + // password must be a 24 character long generated string + if ( + typeof auth.password !== 'string' || + !isSANB(auth.password) || + auth.password.length > 128 || + // + auth.password === 'my_password' || + // + auth.password === 'REPLACE-WITH-YOUR-GENERATED-PASSWORD' + ) + throw new SMTPError( + `Invalid password, please try again or go to ${config.urls.web}/my-account/domains/${domainName}/aliases and click "Generate Password"`, + { + responseCode: 535, + ignoreHook: true + } + ); + + const verifications = []; + try { + const records = await this.resolver.resolveTxt(domainName); + for (const record_ of records) { + const record = record_.join('').trim(); // join chunks together + if (record.startsWith(config.paidPrefix)) + verifications.push(record.replace(config.paidPrefix, '').trim()); + } + } catch (err) { + logger.error(err, { session }); + } + + if (verifications.length === 0) + throw new SMTPError( + `Domain is missing TXT verification record, go to ${config.urls.web}/my-account/domains/${domainName} and click "Verify"`, + { + responseCode: 535, + ignoreHook: true + } + ); + + if (verifications.length > 1) + throw new SMTPError( + `Domain has more than one TXT verification record, go to ${config.urls.web}/my-account/domains/${domainName} and click "Verify"`, + { + responseCode: 535, + ignoreHook: true + } + ); + + const domain = await Domains.findOne({ + name: domainName, + verification_record: verifications[0], + plan: { $ne: 'free' } + }) + .populate( + 'members.user', + `id plan ${config.userFields.isBanned} ${config.userFields.hasVerifiedEmail} ${config.userFields.planExpiresAt}` + ) + .lean() + .exec(); + + // validate domain + validateDomain(domain, domainName); + + const alias = await Aliases.findOne({ + name, + domain: domain._id + }) + .populate( + 'user', + `id ${config.userFields.isBanned} ${config.userFields.smtpLimit}` + ) + .select('+tokens.hash +tokens.salt') + .lean() + .exec(); + + // validate alias + validateAlias(alias, domain, name); + + // validate the `auth.password` provided + if (!Array.isArray(alias.tokens) || alias.tokens.length === 0) + throw new SMTPError( + `Alias does not have any generated passwords yet, go to ${config.urls.web}/my-account/domains/${domain.name}/aliases and click "Generate Password"`, + { + responseCode: 535, + ignoreHook: true + } + ); + + // + // rate limiting + // + if ( + // do not rate limit IP addresses corresponding to our servers + !session.resolvedClientHostname || + parseRootDomain(session.resolvedClientHostname) !== env.WEB_HOST + ) { + // rate limit to X failed attempts per day by IP address + const limit = await this.rateLimiter.get({ + id: session.remoteAddress, + max: config.smtpLimitAuth, + duration: config.smtpLimitAuthDuration + }); + + // return 550 error code + if (!limit.remaining) + throw new SMTPError( + `You have exceeded the maximum number of failed authentication attempts. Please try again later or contact us at ${config.supportEmail}` + // { ignoreHook: true } + ); + } + + // ensure that the token is valid + const isValid = await Aliases.isValidPassword( + alias.tokens, + auth.password.trim() + ); + + if (!isValid) + throw new SMTPError( + `Invalid password, please try again or go to ${config.urls.web}/my-account/domains/${domainName}/aliases and click "Generate Password"`, + { + responseCode: 535 + // ignoreHook: true + } + ); + + // Clear authentication limit for this IP address (in the background) + this.client + .del(`${this.rateLimiter.namespace}:${session.remoteAddress}`) + .then() + .catch((err) => this.config.logger.fatal(err)); + + // + // If this was IMAP server then ensure the user has all essential folders + // + if (this.server instanceof IMAPServer) { + try { + const paths = await Mailboxes.distinct('path', { + alias: alias._id + }); + const required = []; + for (const path of REQUIRED_PATHS) { + if (!paths.includes(path)) required.push(path); + } + + if (required.length > 0) { + logger.debug('creating required', { required }); + await Mailboxes.create( + required.map((path) => ({ + alias: alias._id, + path + })) + ); + } + } catch (err) { + logger.fatal(err, { session }); + } + } + + // this response object sets `session.user` to have `domain` and `alias` + // + fn(null, { + user: { + // + id: alias.id, + username: `${alias.name}@${domain.name}`, + alias_id: alias.id, + alias_name: alias.name, + domain_id: domain.id, + domain_name: domain.name + } + }); + } catch (err) { + // + // NOTE: we should actually share error message if it was not a code bug + // (otherwise it won't be intuitive to users if they're late on payment) + // + // + fn(refineAndLogError(err, session, this.server instanceof IMAPServer)); + } +} + +module.exports = onAuth; diff --git a/helpers/parse-login-success-redirect.js b/helpers/parse-login-success-redirect.js index 44409c6282..1462d1596d 100644 --- a/helpers/parse-login-success-redirect.js +++ b/helpers/parse-login-success-redirect.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const config = require('#config'); const { Users, Domains } = require('#models'); diff --git a/helpers/parse-root-domain.js b/helpers/parse-root-domain.js index bbecb3171b..0aff24057d 100644 --- a/helpers/parse-root-domain.js +++ b/helpers/parse-root-domain.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const { fromUrl, parseDomain, ParseResultType } = require('parse-domain'); function parseRootDomain(name) { diff --git a/helpers/paypal.js b/helpers/paypal.js index d57f1e6884..a7d51de68b 100644 --- a/helpers/paypal.js +++ b/helpers/paypal.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const { promisify } = require('util'); const paypal = require('paypal-rest-sdk'); diff --git a/helpers/policies.js b/helpers/policies.js index a2fdf49e88..1d7eec144c 100644 --- a/helpers/policies.js +++ b/helpers/policies.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Policies = require('@ladjs/policies'); const { diff --git a/helpers/process-email.js b/helpers/process-email.js index be92028802..14f7202809 100644 --- a/helpers/process-email.js +++ b/helpers/process-email.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const os = require('node:os'); const { Buffer } = require('node:buffer'); diff --git a/helpers/rate-limit.js b/helpers/rate-limit.js index 5fca066c88..2cb0a91ca4 100644 --- a/helpers/rate-limit.js +++ b/helpers/rate-limit.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const _ = require('lodash'); const isSANB = require('is-string-and-not-blank'); const ms = require('ms'); diff --git a/helpers/refine-and-log-error.js b/helpers/refine-and-log-error.js new file mode 100644 index 0000000000..86d4d13045 --- /dev/null +++ b/helpers/refine-and-log-error.js @@ -0,0 +1,96 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + +const _ = require('lodash'); +const splitLines = require('split-lines'); +const { convert } = require('html-to-text'); + +const getErrorCode = require('./get-error-code'); +const isCodeBug = require('./is-code-bug'); +const logger = require('./logger'); + +const env = require('#config/env'); + +// this is sourced from FE original codebase +function refineAndLogError(err, session, isIMAP = false) { + // handle programmer mistakes + // (don't re-check if we already checked) + if (typeof err.isCodeBug !== 'boolean') { + err.isCodeBug = isCodeBug(err); + if (err.isCodeBug) { + logger.fatal(err, { session }); + err.responseCode = 421; + } + } + + // if it was HTTP error and no `responseCode` set then try to parse it + // into a SMTP-friendly format for error handling + err.responseCode = getErrorCode(err); + + // rewrite message to keep the underlying code issue private to end users + // (this also prevents double logger invocation for code bugs) + if (err.isCodeBug) { + err.message = + 'An internal server error has occurred, please try again later.'; + // wildduck uses `responseMessage` in some instances + err.responseMessage = err.message; + } else { + logger.error(err, { session }); + } + + // + // TODO: we should also mirror this to FE MX source + // + // NOTE: this was inspired from `koa-better-error-handler` response for API endpoints + // (and it is used because some errors are translated with HTML tags, e.g. notranslate) + // + err.message = convert(err.message, { + wordwrap: false, + selectors: [ + { + selector: 'a', + options: { + hideLinkHrefIfSameAsText: true, + baseUrl: env.ERROR_HANDLER_BASE_URL || '' + } + }, + { selector: 'img', format: 'skip' } + ], + linkBrackets: false + }); + + // + // replace linebreaks + // + // (otherwise you will get DATA command failed if this is RCPT TO command if you have multiple linebreaks) + // + const lines = splitLines(err.message); + + // + // NOTE: we join lines together by ";", then split, then make unique, then join again + // + // set the new message + err.message = _.uniq(lines.join('; ').split('; ')) + .join('; ') + .split(';;') + .join(';'); + + // + // NOTE: IMAP expects "response" of "NO" for permanent errors + // (otherwise it's a "TEMPFAIL") + // + // + // + if (isIMAP) { + // wildduck uses `responseMessage` in some instances + err.responseMessage = err.message; + if (err.isCodeBug) err.response = 'TEMPFAIL'; + else if (err.responseCode >= 500) err.response = 'NO'; + } + + return err; +} + +module.exports = refineAndLogError; diff --git a/helpers/refund.js b/helpers/refund.js index 9f207ff58b..b6af8c6b0a 100644 --- a/helpers/refund.js +++ b/helpers/refund.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Stripe = require('stripe'); const { paypalAgent } = require('./paypal'); diff --git a/helpers/retry-client.js b/helpers/retry-client.js index ef2678084d..e4490d416c 100644 --- a/helpers/retry-client.js +++ b/helpers/retry-client.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const undici = require('undici'); const delay = require('delay'); const ms = require('ms'); diff --git a/helpers/retry-request.js b/helpers/retry-request.js index e52fed2053..55edcd9130 100644 --- a/helpers/retry-request.js +++ b/helpers/retry-request.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const undici = require('undici'); const delay = require('delay'); const ms = require('ms'); diff --git a/helpers/send-email.js b/helpers/send-email.js index 133d1b5ab5..d4e78a71d8 100644 --- a/helpers/send-email.js +++ b/helpers/send-email.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const _ = require('lodash'); const isSANB = require('is-string-and-not-blank'); const previewEmail = require('preview-email'); diff --git a/helpers/send-verification-email.js b/helpers/send-verification-email.js index cb0e54b317..b0ae552dfe 100644 --- a/helpers/send-verification-email.js +++ b/helpers/send-verification-email.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const email = require('./email'); diff --git a/helpers/server-shutdown-error.js b/helpers/server-shutdown-error.js new file mode 100644 index 0000000000..f8047eaa08 --- /dev/null +++ b/helpers/server-shutdown-error.js @@ -0,0 +1,15 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + +class ServerShutdownError extends Error { + // NOTE: smtp-server does not have an affixed "." in the server shutdown message + constructor(message = 'Server shutting down', ...args) { + super(message, ...args); + Error.captureStackTrace(this, ServerShutdownError); + this.responseCode = 421; + } +} + +module.exports = ServerShutdownError; diff --git a/helpers/setup-mongoose.js b/helpers/setup-mongoose.js index 40cf71bdcd..d308266a3e 100644 --- a/helpers/setup-mongoose.js +++ b/helpers/setup-mongoose.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const pRetry = require('p-retry'); const mongoose = require('mongoose'); diff --git a/helpers/should-throw.js b/helpers/should-throw.js index 96182797fe..31af8ba05c 100644 --- a/helpers/should-throw.js +++ b/helpers/should-throw.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const getErrorCode = require('./get-error-code'); const isCodeBug = require('./is-code-bug'); const isRetryableError = require('./is-retryable-error'); diff --git a/helpers/smtp-error.js b/helpers/smtp-error.js index 4748dfa777..716ddcbbd8 100644 --- a/helpers/smtp-error.js +++ b/helpers/smtp-error.js @@ -1,9 +1,14 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + class SMTPError extends Error { constructor(message, options = {}, ...args) { super(message, options, ...args); Error.captureStackTrace(this, SMTPError); this.responseCode = options?.responseCode || 550; - if (options.ignoreHook === true) this.ignoreHook = true; + Object.assign(this, options); } } diff --git a/helpers/smtp.js b/helpers/smtp.js new file mode 100644 index 0000000000..681f186f2a --- /dev/null +++ b/helpers/smtp.js @@ -0,0 +1,6 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + +module.exports = require('./smtp/'); diff --git a/helpers/smtp/index.js b/helpers/smtp/index.js new file mode 100644 index 0000000000..30e795ab0c --- /dev/null +++ b/helpers/smtp/index.js @@ -0,0 +1,16 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + +const onData = require('./on-data'); +const onConnect = require('./on-connect'); +const onMailFrom = require('./on-mail-from'); +const onRcptTo = require('./on-rcpt-to'); + +module.exports = { + onData, + onConnect, + onMailFrom, + onRcptTo +}; diff --git a/helpers/smtp/on-connect.js b/helpers/smtp/on-connect.js new file mode 100644 index 0000000000..c5ed46f8fb --- /dev/null +++ b/helpers/smtp/on-connect.js @@ -0,0 +1,99 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + +const punycode = require('node:punycode'); + +const isFQDN = require('is-fqdn'); +const { boolean } = require('boolean'); + +const SMTPError = require('#helpers/smtp-error'); +const ServerShutdownError = require('#helpers/server-shutdown-error'); +const config = require('#config'); +const env = require('#config/env'); +const logger = require('#helpers/logger'); +const parseRootDomain = require('#helpers/parse-root-domain'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +async function onConnect(session, fn) { + logger.debug('CONNECT', { session }); + + if (this.server._closeTimeout) + return setImmediate(() => fn(new ServerShutdownError())); + + // this is used for setting Date header if missing on SMTP submission + session.arrivalDate = new Date(); + + // lookup the client hostname + try { + const [clientHostname] = await this.resolver.reverse(session.remoteAddress); + if (isFQDN(clientHostname)) { + // do we need this still (?) + let domain = clientHostname.toLowerCase().trim(); + try { + domain = punycode.toASCII(domain); + } catch { + // ignore punycode conversion errors + } + + session.resolvedClientHostname = domain; + } + } catch (err) { + // + // NOTE: the native Node.js DNS module would throw an error previously + // + // + if (env.NODE_ENV !== 'test') logger.debug(err); + } + + try { + // get root domain if available + let rootDomain; + if (session.resolvedClientHostname) + rootDomain = parseRootDomain(session.resolvedClientHostname); + + // check if allowlisted + const result = await this.client.get( + `allowlist:${rootDomain || session.remoteAddress}` + ); + + if (!boolean(result)) { + // + // prevent connections from backscatter, silent ban, and denylist + // + const arr = [ + `backscatter:${session.remoteAddress}`, + `denylist:${session.remoteAddress}`, + `silent:${session.remoteAddress}` + ]; + + if (rootDomain) + arr.push( + `backscatter:${rootDomain}`, + `denylist:${rootDomain}`, + `silent:${rootDomain}` + ); + + const results = await this.client.mget(arr); + if (results.some((result) => boolean(result))) { + throw new SMTPError( + `The ${rootDomain ? 'domain' : 'IP'} ${ + rootDomain || session.remoteAddress + } is denylisted by ${ + config.urls.web + }. To request removal, you must visit ${config.urls.web}/denylist?q=${ + rootDomain || session.remoteAddress + }.`, + { ignoreHook: true } + ); + } + } + + setImmediate(fn); + } catch (err) { + setImmediate(() => fn(refineAndLogError(err, session))); + } +} + +module.exports = onConnect; diff --git a/helpers/smtp/on-data.js b/helpers/smtp/on-data.js new file mode 100644 index 0000000000..3304f6258f --- /dev/null +++ b/helpers/smtp/on-data.js @@ -0,0 +1,193 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + +const bytes = require('bytes'); +const getStream = require('get-stream'); +const safeStringify = require('fast-safe-stringify'); +const { isEmail } = require('validator'); + +const Aliases = require('#models/aliases'); +const Domains = require('#models/domains'); +const Emails = require('#models/emails'); +const Users = require('#models/users'); +const SMTPError = require('#helpers/smtp-error'); +const ServerShutdownError = require('#helpers/server-shutdown-error'); +const config = require('#config'); +const createSession = require('#helpers/create-session'); +const env = require('#config/env'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); +const validateAlias = require('#helpers/validate-alias'); +const validateDomain = require('#helpers/validate-domain'); + +const MAX_BYTES = bytes(env.SMTP_MESSAGE_MAX_SIZE); + +// +// NOTE: we can merge SMTP/FE codebase in future and simply check if auth disabled +// then this will act as a forwarding server only (MTA) +// +async function onData(stream, _session, fn) { + if (this.server._closeTimeout) + return setImmediate(() => fn(new ServerShutdownError())); + + // store clone of session since it gets modified/destroyed + const session = JSON.parse(safeStringify(_session)); + + logger.debug('DATA', { session }); + + try { + // we have to consume the stream + const raw = await getStream.buffer(stream, { + maxBuffer: MAX_BYTES + }); + + // + // NOTE: we don't share the full alias and domain object + // in between onAuth and onData because there could + // be a time gap between the SMTP commands are sent + // (we want the most real-time information) + // + // ensure that user is authenticated + if ( + typeof session.user !== 'object' || + typeof session.user.alias_id !== 'string' || + typeof session.user.domain_id !== 'string' + ) + throw new SMTPError(config.authRequiredMessage, { + responseCode: 530 + }); + + // shorthand variables for alias and domain + const [alias, domain] = await Promise.all([ + Aliases.findOne({ id: session.user.alias_id }) + .populate( + 'user', + `id ${config.userFields.isBanned} ${config.userFields.smtpLimit}` + ) + .lean() + .exec(), + Domains.findOne({ id: session.user.domain_id, plan: { $ne: 'free' } }) + .populate( + 'members.user', + `id plan ${config.userFields.isBanned} ${config.userFields.hasVerifiedEmail} ${config.userFields.planExpiresAt}` + ) + .lean() + .exec() + ]); + + if (!domain) + throw new Error( + 'Domain does not exist with current TXT verification record' + ); + + // validate domain + validateDomain(domain, session.user.domain_name); + + // alias must exist + if (!alias) throw new Error('Alias does not exist'); + + // validate alias + validateAlias(alias, session.user.domain_name, session.user.alias_name); + + // TODO: document storage of outbound SMTP email in FAQ/Privacy + // (it will be retained for 30d after + enable 30d expiry) + // TODO: document suspension process in Terms of Use + // (e.g. after 30d unpaid access, API access restrictions, etc) + // TODO: suspend domains with has_smtp that have past due balance + + // prepare envelope + const envelope = {}; + + if ( + isEmail(session?.envelope?.mailFrom?.address, { ignore_max_length: true }) + ) + envelope.from = session.envelope.mailFrom.address; + + if ( + Array.isArray(session?.envelope?.rcptTo) && + session.envelope.rcptTo.length > 0 + ) { + const to = []; + for (const rcpt of session.envelope.rcptTo) { + if (isEmail(rcpt.address, { ignore_max_length: true })) to.push(rcpt); + } + + if (to.length > 0) envelope.to = to; + } + + // if any of the domain admins are admins then don't rate limit + const adminExists = await Users.exists({ + _id: { + $in: domain.members + .filter((m) => m.group === 'admin') + .map((m) => + typeof m.user === 'object' && typeof m.user._id === 'object' + ? m.user._id + : m.user + ) + }, + group: 'admin' + }); + + if (!adminExists) { + // rate limit to X emails per day by domain id then denylist + { + const limit = await this.rateLimiter.get({ + id: domain.id, + max: + alias.user[config.userFields.smtpLimit] || config.smtpLimitMessages + }); + + // return 550 error code + if (!limit.remaining) + throw new SMTPError('Rate limit exceeded', { ignoreHook: true }); + } + + // rate limit to X emails per day by alias user id then denylist + { + const limit = await this.rateLimiter.get({ + id: alias.user.id, + max: + alias.user[config.userFields.smtpLimit] || config.smtpLimitMessages + }); + + // return 550 error code + if (!limit.remaining) + throw new SMTPError('Rate limit exceeded', { ignoreHook: true }); + } + } + + // queue the email + const email = await Emails.queue({ + message: { + envelope, + raw + }, + alias, + domain, + user: alias.user, + date: new Date(session.arrivalDate) + }); + + // TODO: implement credit system + + logger.info('email created', { + session: { + ...session, + ...createSession(email) + }, + user: email.user, + email: email._id, + domains: [email.domain], + ignore_hook: false + }); + + setImmediate(fn); + } catch (err) { + setImmediate(() => fn(refineAndLogError(err, session))); + } +} + +module.exports = onData; diff --git a/helpers/smtp/on-mail-from.js b/helpers/smtp/on-mail-from.js new file mode 100644 index 0000000000..81074d06ff --- /dev/null +++ b/helpers/smtp/on-mail-from.js @@ -0,0 +1,41 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + +const isSANB = require('is-string-and-not-blank'); +const { isEmail } = require('validator'); + +const SMTPError = require('#helpers/smtp-error'); +const ServerShutdownError = require('#helpers/server-shutdown-error'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +function onMailFrom(address, session, fn) { + logger.debug('MAIL FROM', { address, session }); + + if (this.server._closeTimeout) + return setImmediate(() => fn(new ServerShutdownError())); + + // validate email address + if ( + typeof address === 'object' && + isSANB(address.address) && + !isEmail(address.address, { ignore_max_length: true }) + ) + return setImmediate(() => + fn( + refineAndLogError( + new SMTPError('Address is not a valid RFC 5321 email address', { + responseCode: 553, + ignoreHook: true + }), + session + ) + ) + ); + + setImmediate(fn); +} + +module.exports = onMailFrom; diff --git a/helpers/smtp/on-rcpt-to.js b/helpers/smtp/on-rcpt-to.js new file mode 100644 index 0000000000..64db09f75a --- /dev/null +++ b/helpers/smtp/on-rcpt-to.js @@ -0,0 +1,59 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + +const isSANB = require('is-string-and-not-blank'); +const { isEmail } = require('validator'); + +const SMTPError = require('#helpers/smtp-error'); +const ServerShutdownError = require('#helpers/server-shutdown-error'); +const config = require('#config'); +const logger = require('#helpers/logger'); +const refineAndLogError = require('#helpers/refine-and-log-error'); + +function onRcptTo(address, session, fn) { + logger.debug('RCPT TO', { address, session }); + + if (this.server._closeTimeout) + return setImmediate(() => fn(new ServerShutdownError())); + + // + if ( + session.envelope.rcptTo && + session.envelope.rcptTo.length >= config.maxRecipients + ) + return setImmediate(() => + fn( + refineAndLogError( + new SMTPError('Too many recipients', { + responseCode: 452, + ignoreHook: true + }) + ), + session + ) + ); + + // validate email address + if ( + typeof address === 'object' && + isSANB(address.address) && + !isEmail(address.address, { ignore_max_length: true }) + ) + return setImmediate(() => + fn( + refineAndLogError( + new SMTPError('Address is not a valid RFC 5321 email address', { + responseCode: 553, + ignoreHook: true + }) + ), + session + ) + ); + + setImmediate(fn); +} + +module.exports = onRcptTo; diff --git a/helpers/socket-error.js b/helpers/socket-error.js new file mode 100644 index 0000000000..0a0a7c214e --- /dev/null +++ b/helpers/socket-error.js @@ -0,0 +1,27 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +class SocketError extends Error { + constructor(message = 'Socket is closed', options = {}, ...args) { + super(message, options, ...args); + Error.captureStackTrace(this, SocketError); + // wildduck uses `responseMessage` in some instances + this.responseMessage = message; + this.responseCode = 550; + this.response = 'NO'; + } +} + +module.exports = SocketError; diff --git a/helpers/split-spaces.js b/helpers/split-spaces.js index f5d7738f09..93098c868a 100644 --- a/helpers/split-spaces.js +++ b/helpers/split-spaces.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // function splitSpaces(str) { // eslint-disable-next-line unicorn/no-array-reduce diff --git a/helpers/sync-paypal-order-payment-by-payment-id.js b/helpers/sync-paypal-order-payment-by-payment-id.js index 52ecbc108d..d6ea9510ed 100644 --- a/helpers/sync-paypal-order-payment-by-payment-id.js +++ b/helpers/sync-paypal-order-payment-by-payment-id.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const delay = require('delay'); const ms = require('ms'); const _ = require('lodash'); diff --git a/helpers/sync-paypal-subscription-payments-by-user.js b/helpers/sync-paypal-subscription-payments-by-user.js index e4fd111f37..0693238f00 100644 --- a/helpers/sync-paypal-subscription-payments-by-user.js +++ b/helpers/sync-paypal-subscription-payments-by-user.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const dayjs = require('dayjs-with-plugins'); const isSANB = require('is-string-and-not-blank'); const ms = require('ms'); diff --git a/helpers/sync-stripe-payment-intent.js b/helpers/sync-stripe-payment-intent.js index aa593c19fd..b20f06d9c9 100644 --- a/helpers/sync-stripe-payment-intent.js +++ b/helpers/sync-stripe-payment-intent.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Stripe = require('stripe'); const _ = require('lodash'); const dayjs = require('dayjs-with-plugins'); diff --git a/helpers/threshold-error.js b/helpers/threshold-error.js index 20d2a0b3d7..0eca0ee4e0 100644 --- a/helpers/threshold-error.js +++ b/helpers/threshold-error.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const combineErrors = require('./combine-errors'); class ThresholdError extends Error { diff --git a/helpers/to-object.js b/helpers/to-object.js index a15102e87f..28442e6b64 100644 --- a/helpers/to-object.js +++ b/helpers/to-object.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const ObjectID = require('bson-objectid'); const _ = require('lodash'); diff --git a/helpers/validate-alias.js b/helpers/validate-alias.js new file mode 100644 index 0000000000..f31207e30f --- /dev/null +++ b/helpers/validate-alias.js @@ -0,0 +1,45 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + +const noReplyList = require('reserved-email-addresses-list/no-reply-list.json'); + +const SMTPError = require('#helpers/smtp-error'); +const config = require('#config'); + +const NO_REPLY_USERNAMES = new Set(noReplyList); + +function validateAlias(alias, domain, name) { + if (!alias) + throw new SMTPError( + `Alias does not exist, go to ${config.urls.web}/my-account/domains/${domain.name} and add the alias of "${name}"`, + { responseCode: 535, ignoreHook: true } + ); + + // alias must not have banned user + if (alias.user[config.userFields.isBanned]) + throw new SMTPError('Alias user is banned'); + + // + // it is bad practice to send outbound email from a no-reply or unmonitored mailbox + // (consider using "Reply-To" header with a "no-reply" address) + // + const string = alias.name.replace(/[^\da-z]/g, ''); + if (NO_REPLY_USERNAMES.has(string)) + throw new SMTPError( + 'You cannot use a "no-reply" username to send outbound mail (it is bad practice to send from an unmonitored mailbox).' + ); + + // alias must be enabled + if (!alias.is_enabled) throw new SMTPError('Alias is disabled'); + + // alias must not be catch-all + if (alias.name === '*') throw new SMTPError('Alias cannot be a catch-all'); + + // alias cannot be regex + if (alias.name.startsWith('/')) + throw new SMTPError('Alias cannot be a regex'); +} + +module.exports = validateAlias; diff --git a/helpers/validate-domain.js b/helpers/validate-domain.js new file mode 100644 index 0000000000..ecd2f8914f --- /dev/null +++ b/helpers/validate-domain.js @@ -0,0 +1,70 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + +const _ = require('lodash'); + +const SMTPError = require('#helpers/smtp-error'); +const i18n = require('#helpers/i18n'); + +const config = require('#config'); + +function validateDomain(domain, domainName) { + if (!domain) + throw new SMTPError( + `Domain does not exist with current TXT verification record, go to ${config.urls.web}/my-account/domains/${domainName} and click "Verify"`, + { responseCode: 535, ignoreHook: true } + ); + + if (domain.is_global) + throw new SMTPError( + i18n.translate('EMAIL_SMTP_GLOBAL_NOT_PERMITTED', 'en') + ); + + // + // NOTE: if the domain is suspended then the state is "pending" not queued + // + // if (_.isDate(domain.smtp_suspended_sent_at)) + // throw new SMTPError('Domain is suspended from outbound SMTP access'); + + if (!domain.has_smtp) { + if (!_.isDate(domain.smtp_verified_at)) + throw new SMTPError( + `Domain is not configured for outbound SMTP, go to ${config.urls.web}/my-account/domains/${domain.name}/verify-smtp and click "Verify"`, + { + responseCode: 535, + ignoreHook: true + } + ); + + throw new SMTPError( + `Domain is pending admin approval for outbound SMTP access, please check your inbox and provide us with requested information or contact us at ${config.supportEmail}`, + { + responseCode: 535, + ignoreHook: true + } + ); + } + + // + // validate that at least one paying, non-banned admin on >= same plan without expiration + // + const validPlans = + domain.plan === 'team' ? ['team'] : ['team', 'enhanced_protection']; + + if ( + !domain.members.some( + (m) => + !m.user[config.userFields.isBanned] && + m.user[config.userFields.hasVerifiedEmail] && + validPlans.includes(m.user.plan) && + new Date(m.user[config.userFields.planExpiresAt]).getTime() >= + Date.now() && + m.group === 'admin' + ) + ) + throw new SMTPError(i18n.translate('PAST_DUE_OR_INVALID_ADMIN', 'en')); +} + +module.exports = validateDomain; diff --git a/imap-server.js b/imap-server.js new file mode 100644 index 0000000000..0d277c72d0 --- /dev/null +++ b/imap-server.js @@ -0,0 +1,285 @@ +/* + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following copyright and + * permission notice: + * + * WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. + * https://github.com/nodemailer/wildduck + */ + +const fs = require('node:fs'); +const os = require('node:os'); + +const AttachmentStorage = require('wildduck/lib/attachment-storage'); +const Indexer = require('wildduck/imap-core/lib/indexer/indexer'); +const Lock = require('ioredfour'); +const MessageHandler = require('wildduck/lib/message-handler'); +const RateLimiter = require('async-ratelimiter'); +const bytes = require('bytes'); +const isSANB = require('is-string-and-not-blank'); +const pify = require('pify'); +const { IMAPServer } = require('wildduck/imap-core'); + +const Aliases = require('#models/aliases'); +const Domains = require('#models/domains'); +const IMAPError = require('#helpers/imap-error'); +const IMAPNotifier = require('#helpers/imap-notifier'); +const Messages = require('#models/messages'); +const ServerShutdownError = require('#helpers/server-shutdown-error'); +const SocketError = require('#helpers/socket-error'); +const config = require('#config'); +const createTangerine = require('#helpers/create-tangerine'); +const env = require('#config/env'); +const imap = require('#helpers/imap'); +const logger = require('#helpers/logger'); +const onAuth = require('#helpers/on-auth'); +const validateAlias = require('#helpers/validate-alias'); +const validateDomain = require('#helpers/validate-domain'); + +// TODO: future items +// - [ ] rewrite onOpen to use cursor instead of distinct +// - [ ] add rate limitations (e.g. wildduck ttl and counters everywhere including notifier) +// - [ ] remove setImmediate from SMTP server +// - [ ] remove or enforce maxTimeMS for all imap handlers +// - [ ] projection on all handlers (instead of returning entire document) +// - [ ] allow aliases to configure retention in the future (default is 0) +// - [ ] delete old threads over time +// + +// TODO: documentation +// - [ ] reference IMAP in docs +// - [ ] document/reference IMAP Protocol Differences and other readme notes +// - [ ] 1GB limit per alias/domain/account +// - [ ] increase limit to 30gb with paid-addon + +// TODO: urgent items +// - [ ] enforce billing for IMAP support +// - [ ] when users delete their account then delete all Emails, Messages, and Mailboxes in the system +// - [ ] auto expunge in bree job when message gets a Deleted flag +// - [ ] message.exp needs to be deleted after time (message.rtime) via background job +// - [ ] investigate `ignore` usage +// - [ ] cleanup journal items (e.g. expire after 30d or something) +// - [ ] `rg "attachmentStorage"` cleanup and `messageData.magic` usage + +// TODO: other items +// - [ ] axe should parse out streams + +const IMAP_COMMANDS = new Set([ + 'APPEND', + 'COPY', + 'CREATE', + 'DELETE', + 'EXPUNGE', + 'FETCH', + 'GETQUOTAROOT', + 'GETQUOTA', + 'LIST', + 'LSUB', + 'MOVE', + 'OPEN', + 'RENAME', + 'SEARCH', + 'STATUS', + 'STORE', + 'SUBSCRIBE', + 'UNSUBSCRIBE' +]); + +class IMAP { + constructor(options = {}, secure = env.IMAP_PORT === 2993) { + this.client = options.client; + this.subscriber = options.subscriber; + this.resolver = createTangerine(this.client, logger); + + // + // NOTE: hard-coded values for now (switch to env later) + // (current limit is 10 failed login attempts per hour) + // + this.rateLimiter = new RateLimiter({ + db: this.client, + max: config.smtpLimitMessages, + duration: config.smtpLimitDuration, + namespace: config.smtpLimitNamespace + }); + + const server = new IMAPServer({ + secure, + secured: false, + disableSTARTTLS: secure, + ignoreSTARTTLS: !secure, + useProxy: false, + ignoredHosts: [], + id: { + name: os.hostname(), + version: config.pkg.version, + vendor: config.pkg.author + }, + logger: config.env === 'development' ? logger : false, + maxMessage: bytes('50MB'), + + // NOTE: we don't need this since we have custom logic + // settingsHandler: imap.settingsHandler.bind(this) + + enableCompression: false, + skipFetchLog: false, + + // NOTE: a default `SNICallback` function is created already + // + // SNICallback: function + + logoutMessages: ['Logging out'], + + ...(config.env === 'production' + ? { + key: fs.readFileSync(env.WEB_SSL_KEY_PATH), + cert: fs.readFileSync(env.WEB_SSL_CERT_PATH), + ca: fs.readFileSync(env.WEB_SSL_CA_PATH) + } + : {}) + }); + + // server.loggelf = + // config.env === 'development' ? (...args) => logger.info(...args) : false; + + server.lock = new Lock({ + redis: this.client, + namespace: 'mail' + }); + + server.onAuth = onAuth.bind(this); + server.onAppend = imap.onAppend.bind(this); + server.onCopy = imap.onCopy.bind(this); + server.onCreate = imap.onCreate.bind(this); + server.onDelete = imap.onDelete.bind(this); + server.onExpunge = imap.onExpunge.bind(this); + server.onFetch = imap.onFetch.bind(this); + server.onGetQuota = imap.onGetQuota.bind(this); + server.onGetQuotaRoot = imap.onGetQuotaRoot.bind(this); + server.onList = imap.onList.bind(this); + server.onLsub = imap.onLsub.bind(this); + server.onMove = imap.onMove.bind(this); + server.onOpen = imap.onOpen.bind(this); + server.onRename = imap.onRename.bind(this); + server.onSearch = imap.onSearch.bind(this); + server.onStatus = imap.onStatus.bind(this); + server.onStore = imap.onStore.bind(this); + server.onSubscribe = imap.onSubscribe.bind(this); + server.onUnsubscribe = imap.onUnsubscribe.bind(this); + + // kind of hacky but I filed a GH issue + // + server.address = server.server.address.bind(server.server); + + server.on('error', (err) => { + logger.warn(err); + }); + + // + // NOTE: it is using a lock under `wildduck` prefix + // (to override set `this.attachmentStorage.storage.lock = new Lock(...)`) + // + this.attachmentStorage = new AttachmentStorage({ + gridfs: Messages.db, + options: { + type: 'gridstore', + bucket: 'attachments', + decodeBase64: true + }, + redis: this.client + }); + this.attachmentStorage.updateManyPromise = pify( + this.attachmentStorage.updateMany + ); + this.attachmentStorage.deleteManyPromise = pify( + this.attachmentStorage.deleteMany + ); + + this.indexer = new Indexer({ attachmentStorage: this.attachmentStorage }); + this.indexer.storeNodeBodiesPromise = pify(this.indexer.storeNodeBodies); + + // promisified version of prepare message from wildduck message handler + this.prepareMessage = pify( + MessageHandler.prototype.prepareMessage.bind({ + indexer: this.indexer, + normalizeSubject: MessageHandler.prototype.normalizeSubject, + generateIndexedHeaders: MessageHandler.prototype.generateIndexedHeaders + }) + ); + + // + // the notifier is utilized in the IMAP connection (see `wildduck/imap-core/lib/imap-connection.js`) + // in order to `getUpdates` and send them over the socket (e.g. `EXIST`, `EXPUNGE`, `FETCH`) + // + // + server.notifier = new IMAPNotifier({ + publisher: this.client, + subscriber: this.subscriber + }); + + this.server = server; + this.refreshSession = this.refreshSession.bind(this); + this.listen = this.listen.bind(this); + this.close = this.close.bind(this); + } + + async refreshSession(session, command) { + if (!command) throw new Error('Command required'); + command = command.toUpperCase().trim(); + if (!IMAP_COMMANDS.has(command)) throw new Error('Invalid command'); + + // check if server is in the process of shutting down + if (this.server._closeTimeout) throw new ServerShutdownError(); + + // check if socket is still connected + const socket = (session.socket && session.socket._parent) || session.socket; + if (!socket || socket?.destroyed || socket?.readyState !== 'open') + throw new SocketError(); + + if (!isSANB(session?.user?.domain_id)) + throw new IMAPError('Domain does not exist on session'); + + if (!isSANB(session?.user?.alias_id)) + throw new IMAPError('Alias does not exist on session'); + + const [domain, alias] = await Promise.all([ + Domains.findById(session.user.domain_id) + .populate( + 'members.user', + `id plan ${config.userFields.isBanned} ${config.userFields.hasVerifiedEmail} ${config.userFields.planExpiresAt}` + ) + .lean() + .exec(), + Aliases.findById(session.user.alias_id) + .populate( + 'user', + `id ${config.userFields.isBanned} ${config.userFields.smtpLimit}` + ) + .lean() + .exec() + ]); + + // validate domain (in case tampered with during session) + validateDomain(domain, session.user.domain_name); + + // validate alias (in case tampered with during session) + validateAlias(alias, session.user.domain_name, session.user.alias_name); + + return { domain, alias }; + } + + async listen(port = env.IMAP_PORT, host = '::', ...args) { + await pify(this.server.listen).bind(this.server)(port, host, ...args); + } + + async close() { + await pify(this.server.close).bind(this.server); + } +} + +module.exports = IMAP; diff --git a/imap.js b/imap.js new file mode 100644 index 0000000000..0be038904d --- /dev/null +++ b/imap.js @@ -0,0 +1,54 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + +const process = require('node:process'); + +// eslint-disable-next-line import/no-unassigned-import +require('#config/env'); +// eslint-disable-next-line import/no-unassigned-import +require('#config/mongoose'); + +const Graceful = require('@ladjs/graceful'); +const Redis = require('@ladjs/redis'); +const ip = require('ip'); +const mongoose = require('mongoose'); +const sharedConfig = require('@ladjs/shared-config'); + +const IMAP = require('./imap-server'); +const logger = require('#helpers/logger'); +const setupMongoose = require('#helpers/setup-mongoose'); + +const imapSharedConfig = sharedConfig('IMAP'); +const client = new Redis(imapSharedConfig.redis, logger); +const subscriber = new Redis(imapSharedConfig.redis, logger); + +const imap = new IMAP({ client, subscriber }); + +const graceful = new Graceful({ + mongooses: [mongoose], + servers: [imap.server], + redisClients: [client, subscriber], + logger +}); +graceful.listen(); + +(async () => { + try { + await imap.listen(); + if (process.send) process.send('ready'); + logger.info( + `IMAP server listening on ${ + imap.server.address().port + } (LAN: ${ip.address()}:${imap.server.address().port})`, + { hide_meta: true } + ); + await setupMongoose(logger); + } catch (err) { + logger.error(err); + process.exit(1); + } +})(); + +logger.info('IMAP server started', { hide_meta: true }); diff --git a/jobs/account-updates.js b/jobs/account-updates.js index 3d7e35324d..210fceb8b4 100644 --- a/jobs/account-updates.js +++ b/jobs/account-updates.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/billing.js b/jobs/billing.js index 878dcf50f9..6c209d9b16 100644 --- a/jobs/billing.js +++ b/jobs/billing.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const process = require('process'); const os = require('os'); const { parentPort } = require('worker_threads'); diff --git a/jobs/bounce-report.js b/jobs/bounce-report.js index 24570f28d5..3e1add095d 100644 --- a/jobs/bounce-report.js +++ b/jobs/bounce-report.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/check-bad-domains.js b/jobs/check-bad-domains.js index ee161490bb..6441b5b1cd 100644 --- a/jobs/check-bad-domains.js +++ b/jobs/check-bad-domains.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/check-disposable.js b/jobs/check-disposable.js index 27bc93893e..3ea9a425aa 100644 --- a/jobs/check-disposable.js +++ b/jobs/check-disposable.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/check-domains.js b/jobs/check-domains.js index 93136cba79..19f7af505b 100644 --- a/jobs/check-domains.js +++ b/jobs/check-domains.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/check-expires-at-outliers.js b/jobs/check-expires-at-outliers.js index 2a36e97293..eb47acab39 100644 --- a/jobs/check-expires-at-outliers.js +++ b/jobs/check-expires-at-outliers.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/check-smtp-frozen-queue.js b/jobs/check-smtp-frozen-queue.js index 62f0f465a4..57672bb99d 100644 --- a/jobs/check-smtp-frozen-queue.js +++ b/jobs/check-smtp-frozen-queue.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/check-smtp-queue-count.js b/jobs/check-smtp-queue-count.js index f214cb81e0..7d9471984f 100644 --- a/jobs/check-smtp-queue-count.js +++ b/jobs/check-smtp-queue-count.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/check-total-amount-overdue.js b/jobs/check-total-amount-overdue.js index 40a8af8cec..4c8c121737 100644 --- a/jobs/check-total-amount-overdue.js +++ b/jobs/check-total-amount-overdue.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/check-unknown-payment-methods.js b/jobs/check-unknown-payment-methods.js index 996f70bb15..ee0d0feb79 100644 --- a/jobs/check-unknown-payment-methods.js +++ b/jobs/check-unknown-payment-methods.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/cleanup-aliases.js b/jobs/cleanup-aliases.js index 09c20ad049..a01ce3700d 100644 --- a/jobs/cleanup-aliases.js +++ b/jobs/cleanup-aliases.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/cleanup-database.js b/jobs/cleanup-database.js index cf5648e3df..32a5c02a0b 100644 --- a/jobs/cleanup-database.js +++ b/jobs/cleanup-database.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/cleanup-upgrade-reminders.js b/jobs/cleanup-upgrade-reminders.js index d2985920df..ad2384deb9 100644 --- a/jobs/cleanup-upgrade-reminders.js +++ b/jobs/cleanup-upgrade-reminders.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/clear-uceprotect.js b/jobs/clear-uceprotect.js index 1816730788..cdfce037fd 100644 --- a/jobs/clear-uceprotect.js +++ b/jobs/clear-uceprotect.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/crawl-sitemap.js b/jobs/crawl-sitemap.js index 5717556168..359a3b5349 100644 --- a/jobs/crawl-sitemap.js +++ b/jobs/crawl-sitemap.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/delete-emails.js b/jobs/delete-emails.js index 63ffcb75ae..c92af89d25 100644 --- a/jobs/delete-emails.js +++ b/jobs/delete-emails.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/delete-logs.js b/jobs/delete-logs.js index 04c11a78c2..4ce5edba77 100644 --- a/jobs/delete-logs.js +++ b/jobs/delete-logs.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/domain-restrictions-reminder.js b/jobs/domain-restrictions-reminder.js index 5ece0ebfee..9efafa3410 100644 --- a/jobs/domain-restrictions-reminder.js +++ b/jobs/domain-restrictions-reminder.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const process = require('process'); const os = require('os'); const { parentPort } = require('worker_threads'); diff --git a/jobs/ensure-paid-domains-have-aliases.js b/jobs/ensure-paid-domains-have-aliases.js index 2bb5a4984c..626ea3979c 100644 --- a/jobs/ensure-paid-domains-have-aliases.js +++ b/jobs/ensure-paid-domains-have-aliases.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const process = require('process'); const os = require('os'); const { parentPort } = require('worker_threads'); diff --git a/jobs/fix-all-plan-set-at.js b/jobs/fix-all-plan-set-at.js index 0aa0724e44..fffda86155 100644 --- a/jobs/fix-all-plan-set-at.js +++ b/jobs/fix-all-plan-set-at.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/fix-free-credit-date.js b/jobs/fix-free-credit-date.js index 6409efe6ac..e10e66d035 100644 --- a/jobs/fix-free-credit-date.js +++ b/jobs/fix-free-credit-date.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/fix-missing-invoice-at.js b/jobs/fix-missing-invoice-at.js index 786efae956..1d01ce450f 100644 --- a/jobs/fix-missing-invoice-at.js +++ b/jobs/fix-missing-invoice-at.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/fix-non-free-users.js b/jobs/fix-non-free-users.js index 687cab65a9..a4bed85564 100644 --- a/jobs/fix-non-free-users.js +++ b/jobs/fix-non-free-users.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/fix-null-alias-data.js b/jobs/fix-null-alias-data.js index c99cfb0562..0cf616ac51 100644 --- a/jobs/fix-null-alias-data.js +++ b/jobs/fix-null-alias-data.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/fix-null-domain-data.js b/jobs/fix-null-domain-data.js index 20e41993ec..f6c47baf71 100644 --- a/jobs/fix-null-domain-data.js +++ b/jobs/fix-null-domain-data.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/fix-null-payment-data.js b/jobs/fix-null-payment-data.js index 28a82cd435..fe9968330d 100644 --- a/jobs/fix-null-payment-data.js +++ b/jobs/fix-null-payment-data.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/fix-null-user-data.js b/jobs/fix-null-user-data.js index 11761df032..ea2cc4a383 100644 --- a/jobs/fix-null-user-data.js +++ b/jobs/fix-null-user-data.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/fix-paypal-plan-set-at.js b/jobs/fix-paypal-plan-set-at.js index 0d6c93bced..3c3ce70ccf 100644 --- a/jobs/fix-paypal-plan-set-at.js +++ b/jobs/fix-paypal-plan-set-at.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/index.js b/jobs/index.js index c74d8aa2d0..9ae855a443 100644 --- a/jobs/index.js +++ b/jobs/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const path = require('path'); const process = require('process'); diff --git a/jobs/launch-email.js b/jobs/launch-email.js index 15e10ad493..7f292c6765 100644 --- a/jobs/launch-email.js +++ b/jobs/launch-email.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/migration.js b/jobs/migration.js index 3961beb09a..f31c43d52a 100644 --- a/jobs/migration.js +++ b/jobs/migration.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/parse-logs.js b/jobs/parse-logs.js index ce09e12397..6005e158fd 100644 --- a/jobs/parse-logs.js +++ b/jobs/parse-logs.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/payment-email.js b/jobs/payment-email.js index 1feaaeb4ca..8ffa58567f 100644 --- a/jobs/payment-email.js +++ b/jobs/payment-email.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/paypal/dup-tx-id.js b/jobs/paypal/dup-tx-id.js index 252548965f..dcd1fb31b2 100644 --- a/jobs/paypal/dup-tx-id.js +++ b/jobs/paypal/dup-tx-id.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const process = require('process'); const { parentPort } = require('worker_threads'); const os = require('os'); diff --git a/jobs/paypal/index.js b/jobs/paypal/index.js index 4d2402c18c..93d5acfbf9 100644 --- a/jobs/paypal/index.js +++ b/jobs/paypal/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const process = require('process'); const { parentPort } = require('worker_threads'); diff --git a/jobs/paypal/sync-paypal-order-payments.js b/jobs/paypal/sync-paypal-order-payments.js index 8ef2509de3..67b1a5c0d1 100644 --- a/jobs/paypal/sync-paypal-order-payments.js +++ b/jobs/paypal/sync-paypal-order-payments.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const pMapSeries = require('p-map-series'); const parseErr = require('parse-err'); diff --git a/jobs/paypal/sync-paypal-subscription-payments.js b/jobs/paypal/sync-paypal-subscription-payments.js index cf42ab5ddd..a953ec1611 100644 --- a/jobs/paypal/sync-paypal-subscription-payments.js +++ b/jobs/paypal/sync-paypal-subscription-payments.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const pReduce = require('p-reduce'); const Users = require('#models/users'); diff --git a/jobs/recipient-verification-email.js b/jobs/recipient-verification-email.js index feed65102e..ee5c96ac0a 100644 --- a/jobs/recipient-verification-email.js +++ b/jobs/recipient-verification-email.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/save-users.js b/jobs/save-users.js index 747761a1da..2b36dad776 100644 --- a/jobs/save-users.js +++ b/jobs/save-users.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/send-emails.js b/jobs/send-emails.js index 246d8bb0d2..ca5b73d0c2 100644 --- a/jobs/send-emails.js +++ b/jobs/send-emails.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/stripe/check-subscription-accuracy.js b/jobs/stripe/check-subscription-accuracy.js index d964108593..34bc143bda 100644 --- a/jobs/stripe/check-subscription-accuracy.js +++ b/jobs/stripe/check-subscription-accuracy.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Stripe = require('stripe'); const pMapSeries = require('p-map-series'); const _ = require('lodash'); diff --git a/jobs/stripe/get-all-stripe-customers.js b/jobs/stripe/get-all-stripe-customers.js index 63d96d50a7..279a3339e9 100644 --- a/jobs/stripe/get-all-stripe-customers.js +++ b/jobs/stripe/get-all-stripe-customers.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + /* eslint-disable no-await-in-loop */ const Stripe = require('stripe'); const _ = require('lodash'); diff --git a/jobs/stripe/get-all-stripe-payment-intents.js b/jobs/stripe/get-all-stripe-payment-intents.js index 6819c558c9..532af7d818 100644 --- a/jobs/stripe/get-all-stripe-payment-intents.js +++ b/jobs/stripe/get-all-stripe-payment-intents.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const pWhilst = require('p-whilst'); const Stripe = require('stripe'); const _ = require('lodash'); diff --git a/jobs/stripe/index.js b/jobs/stripe/index.js index 0525f1add6..a93b471b5d 100644 --- a/jobs/stripe/index.js +++ b/jobs/stripe/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const os = require('os'); const process = require('process'); const { parentPort } = require('worker_threads'); diff --git a/jobs/stripe/sync-stripe-payments.js b/jobs/stripe/sync-stripe-payments.js index db4437dec1..f1187ffdcc 100644 --- a/jobs/stripe/sync-stripe-payments.js +++ b/jobs/stripe/sync-stripe-payments.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Stripe = require('stripe'); const isSANB = require('is-string-and-not-blank'); const pReduce = require('p-reduce'); diff --git a/jobs/sync-paid-alias-allowlist.js b/jobs/sync-paid-alias-allowlist.js index 8bbfb4ffc5..d02ce6e45d 100644 --- a/jobs/sync-paid-alias-allowlist.js +++ b/jobs/sync-paid-alias-allowlist.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // TODO: remove user.email for all users from denylist const { isIP } = require('node:net'); diff --git a/jobs/translate-markdown.js b/jobs/translate-markdown.js index 7123dc0288..116ac240bd 100644 --- a/jobs/translate-markdown.js +++ b/jobs/translate-markdown.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/translate-phrases.js b/jobs/translate-phrases.js index 1a07a4e32f..1f2690f330 100644 --- a/jobs/translate-phrases.js +++ b/jobs/translate-phrases.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/two-factor-reminder.js b/jobs/two-factor-reminder.js index 888901a4d1..188ba7bb71 100644 --- a/jobs/two-factor-reminder.js +++ b/jobs/two-factor-reminder.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/unlock-emails.js b/jobs/unlock-emails.js index af2de9c485..98f2b2d855 100644 --- a/jobs/unlock-emails.js +++ b/jobs/unlock-emails.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/update-uceprotect.js b/jobs/update-uceprotect.js index b97e8e7caf..a6e3459048 100644 --- a/jobs/update-uceprotect.js +++ b/jobs/update-uceprotect.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/update-umbrella.js b/jobs/update-umbrella.js index dbb1b1e71e..0bef4d044c 100644 --- a/jobs/update-umbrella.js +++ b/jobs/update-umbrella.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/upgrade-reminder-email.js b/jobs/upgrade-reminder-email.js index 3227099644..a302c1f79d 100644 --- a/jobs/upgrade-reminder-email.js +++ b/jobs/upgrade-reminder-email.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/vanity-domains.js b/jobs/vanity-domains.js index 76186d9135..3a8429e4d2 100644 --- a/jobs/vanity-domains.js +++ b/jobs/vanity-domains.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/visa-trial-subscription-requirement.js b/jobs/visa-trial-subscription-requirement.js index 51de548e32..d528979277 100644 --- a/jobs/visa-trial-subscription-requirement.js +++ b/jobs/visa-trial-subscription-requirement.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/jobs/welcome-email.js b/jobs/welcome-email.js index 1d1c12f87a..7bff77934a 100644 --- a/jobs/welcome-email.js +++ b/jobs/welcome-email.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/locales/ar.json b/locales/ar.json index 190ff22590..4a69168c28 100644 --- a/locales/ar.json +++ b/locales/ar.json @@ -4915,5 +4915,18 @@ "Gzip": "غزيب", "Retrieve via API": "استرداد عبر API", "For MacOS:": "لنظام التشغيل MacOS:", - "For Linux and Ubuntu:": "بالنسبة لنظام التشغيل Linux وUbuntu:" + "For Linux and Ubuntu:": "بالنسبة لنظام التشغيل Linux وUbuntu:", + "Mailbox does not exist": "صندوق البريد غير موجود", + "Mailbox is over quota": "لقد تجاوز صندوق البريد الحصة النسبية", + "Mailbox already exists": "صندوق البريد موجود بالفعل", + "Invalid search query": "استعلام بحث غير صالح", + "Add Alias | Forward Email": "إضافة اسم مستعار | إعادة توجيه البريد الإلكتروني", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "لا يمكن التراجع عن حذف النطاق الخاص بك. يرجى توخي الحذر الشديد عند حذف النطاق الخاص بك.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "لن تستخدم خدمتنا لتشغيل خدمة تسمح لأطراف ثالثة (بخلاف الموظفين والمقاولين لديك) بالوصول إلى خدمتنا أو استخدامها أو الاستفادة منها. إذا كنت تريد منا تقديم استثناء لك بخصوص هذا، فيرجى الاتصال بنا لمناقشة اتفاقية المؤسسة.", + "Inbox cannot store draft messages": "لا يمكن لصندوق الوارد تخزين مسودات الرسائل", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "لقد نجحت في إنشاء كلمة المرور المستعارة أدناه - يجب عليك نسخها وتخزينها بشكل آمن قبل إغلاق هذه النافذة.

لن يتم عرض كلمة المرور أدناه مرة أخرى بمجرد النقر فوق "موافق".


اسم المستخدم: %s

كلمة المرور: %s



سيتم إغلاق هذه النافذة تلقائيًا خلال 30 ثانية.
", + "Maximum number of mailboxes exceeded": "تم تجاوز الحد الأقصى لعدد صناديق البريد", + "Mailbox is reserved and cannot be removed": "صندوق البريد محجوز ولا يمكن إزالته", + "Failed to acquire write lock": "فشل الحصول على قفل الكتابة", + "Mailbox quota would be exceeded by message size": "سيتم تجاوز الحصة النسبية لصندوق البريد حسب حجم الرسالة" } \ No newline at end of file diff --git a/locales/cs.json b/locales/cs.json index 75ba64a3bf..f2e05b28eb 100644 --- a/locales/cs.json +++ b/locales/cs.json @@ -4915,5 +4915,18 @@ "Gzip": "Gzip", "Retrieve via API": "Načíst přes API", "For MacOS:": "Pro MacOS:", - "For Linux and Ubuntu:": "Pro Linux a Ubuntu:" + "For Linux and Ubuntu:": "Pro Linux a Ubuntu:", + "Mailbox does not exist": "Poštovní schránka neexistuje", + "Mailbox is over quota": "Poštovní schránka překročila kvótu", + "Mailbox already exists": "Poštovní schránka již existuje", + "Invalid search query": "Neplatný vyhledávací dotaz", + "Add Alias | Forward Email": "Přidat alias | Přeposlat e-mail", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "Smazání domény je nevratné. Při mazání domény buďte velmi opatrní.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "Nebudete používat naši službu k provozování služby, která třetím stranám (jiným než vašim vlastním zaměstnancům a dodavatelům) umožňuje přístup, používání nebo užitek z naší služby. Pokud potřebujete, abychom vám v této věci udělali výjimku, kontaktujte nás, abychom projednali podnikovou smlouvu.", + "Inbox cannot store draft messages": "Inbox nemůže ukládat koncepty zpráv", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Úspěšně jste vygenerovali níže uvedené aliasové heslo – před zavřením tohoto okna jej musíte zkopírovat a bezpečně uložit.

Po kliknutí na OK se níže uvedené heslo znovu nezobrazí.


Uživatelské jméno: %s

Heslo: %s



Toto okno se automaticky zavře za 30 sekund.
", + "Maximum number of mailboxes exceeded": "Byl překročen maximální počet poštovních schránek", + "Mailbox is reserved and cannot be removed": "Schránka je rezervovaná a nelze ji odebrat", + "Failed to acquire write lock": "Nepodařilo se získat zámek zápisu", + "Mailbox quota would be exceeded by message size": "Kvóta poštovní schránky by byla překročena velikostí zprávy" } \ No newline at end of file diff --git a/locales/da.json b/locales/da.json index 0482ba2854..83a8194b9d 100644 --- a/locales/da.json +++ b/locales/da.json @@ -4651,5 +4651,18 @@ "Gzip": "Gzip", "Retrieve via API": "Hent via API", "For MacOS:": "Til MacOS:", - "For Linux and Ubuntu:": "Til Linux og Ubuntu:" + "For Linux and Ubuntu:": "Til Linux og Ubuntu:", + "Mailbox does not exist": "Postkasse findes ikke", + "Mailbox is over quota": "Postkassen er over kvoten", + "Mailbox already exists": "Postkasse findes allerede", + "Invalid search query": "Ugyldig søgeforespørgsel", + "Add Alias | Forward Email": "Tilføj Alias | Videresend e-mail", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "Det er irreversibelt at slette dit domæne. Vær yderst forsigtig, når du sletter dit domæne.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "Du vil ikke bruge vores tjeneste til at drive en tjeneste, som tillader tredjeparter (bortset fra dine egne medarbejdere og kontrahenter) at få adgang til, bruge eller drage fordel af vores tjeneste. Hvis du har brug for, at vi gør en undtagelse for dig vedrørende dette, så kontakt os venligst for at drøfte en virksomhedsaftale.", + "Inbox cannot store draft messages": "Inbox kan ikke gemme kladdebeskeder", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Du har med succes genereret aliasadgangskoden nedenfor - du skal kopiere og opbevare den sikkert, før du lukker dette vindue.

Adgangskoden nedenfor vil ikke blive vist igen, når du klikker på OK.


Brugernavn: %s

Adgangskode: %s



Dette vindue lukkes automatisk om 30 sekunder.
", + "Maximum number of mailboxes exceeded": "Det maksimale antal postkasser er overskredet", + "Mailbox is reserved and cannot be removed": "Postkasse er reserveret og kan ikke fjernes", + "Failed to acquire write lock": "Kunne ikke hente skrivelås", + "Mailbox quota would be exceeded by message size": "Postkassekvoten ville blive overskredet af beskedstørrelse" } \ No newline at end of file diff --git a/locales/de.json b/locales/de.json index 8d62d025ab..dd13b13233 100644 --- a/locales/de.json +++ b/locales/de.json @@ -3943,5 +3943,18 @@ "Gzip": "Gzip", "Retrieve via API": "Über API abrufen", "For MacOS:": "Für MacOS:", - "For Linux and Ubuntu:": "Für Linux und Ubuntu:" + "For Linux and Ubuntu:": "Für Linux und Ubuntu:", + "Mailbox does not exist": "Postfach existiert nicht", + "Mailbox is over quota": "Das Postfach hat sein Kontingent überschritten", + "Mailbox already exists": "Postfach existiert bereits", + "Invalid search query": "Ungültige Suchanfrage", + "Add Alias | Forward Email": "Alias hinzufügen | Email weiterleiten", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "Die Löschung Ihrer Domain ist unwiderruflich. Bitte seien Sie beim Löschen Ihrer Domain äußerst vorsichtig.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "Sie werden unseren Dienst nicht dazu nutzen, einen Dienst zu betreiben, der es Dritten (außer Ihren eigenen Mitarbeitern und Auftragnehmern) ermöglicht, auf unseren Dienst zuzugreifen, ihn zu nutzen oder von ihm zu profitieren. Wenn wir diesbezüglich eine Ausnahme für Sie machen müssen, kontaktieren Sie uns bitte, um eine Unternehmensvereinbarung zu besprechen.", + "Inbox cannot store draft messages": "Im Posteingang können keine Nachrichtenentwürfe gespeichert werden", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Sie haben das Alias-Passwort unten erfolgreich generiert – Sie müssen es kopieren und sicher aufbewahren, bevor Sie dieses Fenster schließen.

Das untenstehende Passwort wird nicht mehr angezeigt, sobald Sie auf OK klicken.


Benutzername: %s

Passwort: %s



Dieses Fenster wird nach 30 Sekunden automatisch geschlossen.
", + "Maximum number of mailboxes exceeded": "Maximale Anzahl an Postfächern überschritten", + "Mailbox is reserved and cannot be removed": "Das Postfach ist reserviert und kann nicht entfernt werden", + "Failed to acquire write lock": "Die Schreibsperre konnte nicht erworben werden", + "Mailbox quota would be exceeded by message size": "Das Postfachkontingent würde durch die Nachrichtengröße überschritten" } \ No newline at end of file diff --git a/locales/en.json b/locales/en.json index 73d538c81f..d07afc90bb 100644 --- a/locales/en.json +++ b/locales/en.json @@ -4691,5 +4691,16 @@ "Gzip": "Gzip", "Retrieve via API": "Retrieve via API", "For MacOS:": "For MacOS:", - "For Linux and Ubuntu:": "For Linux and Ubuntu:" + "For Linux and Ubuntu:": "For Linux and Ubuntu:", + "Mailbox does not exist": "Mailbox does not exist", + "Mailbox is over quota": "Mailbox is over quota", + "Mailbox already exists": "Mailbox already exists", + "Invalid search query": "Invalid search query", + "Add Alias | Forward Email": "Add Alias | Forward Email", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


SMTP Username: %s

SMTP Password: %s



This window will automatically close in 30 seconds.
": "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


SMTP Username: %s

SMTP Password: %s



This window will automatically close in 30 seconds.
", + "%s approved for outbound SMTP access": "%s approved for outbound SMTP access", + "

Your domain %s was approved for outbound SMTP access.

Complete Setup

": "

Your domain %s was approved for outbound SMTP access.

Complete Setup

", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.", + "Inbox cannot store draft messages": "Inbox cannot store draft messages" } \ No newline at end of file diff --git a/locales/es.json b/locales/es.json index 72e1990b11..39dd48cfae 100644 --- a/locales/es.json +++ b/locales/es.json @@ -4913,5 +4913,18 @@ "Gzip": "zip", "Retrieve via API": "Recuperar a través de API", "For MacOS:": "Para Mac OS:", - "For Linux and Ubuntu:": "Para Linux y Ubuntu:" + "For Linux and Ubuntu:": "Para Linux y Ubuntu:", + "Mailbox does not exist": "El buzón no existe", + "Mailbox is over quota": "El buzón ha superado la cuota", + "Mailbox already exists": "El buzón ya existe", + "Invalid search query": "Consulta de búsqueda no válida", + "Add Alias | Forward Email": "Agregar alias | Redirigir correo", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "Eliminar su dominio es irreversible. Tenga mucho cuidado al eliminar su dominio.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "No utilizará nuestro servicio para operar un servicio que permita a terceros (que no sean sus propios empleados y contratistas) acceder, utilizar o beneficiarse de nuestro servicio. Si necesita que hagamos una excepción con respecto a esto, contáctenos para discutir un acuerdo empresarial.", + "Inbox cannot store draft messages": "La bandeja de entrada no puede almacenar borradores de mensajes", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Ha generado con éxito la contraseña de alias a continuación; debe copiarla y almacenarla de forma segura antes de cerrar esta ventana.

La contraseña a continuación no se mostrará nuevamente una vez que haga clic en Aceptar.


Nombre de usuario: %s

Contraseña: %s



Esta ventana se cerrará automáticamente en 30 segundos.
", + "Maximum number of mailboxes exceeded": "Se superó el número máximo de buzones", + "Mailbox is reserved and cannot be removed": "El buzón está reservado y no se puede eliminar.", + "Failed to acquire write lock": "No se pudo adquirir el bloqueo de escritura", + "Mailbox quota would be exceeded by message size": "La cuota del buzón se excedería por el tamaño del mensaje" } \ No newline at end of file diff --git a/locales/fi.json b/locales/fi.json index 5e5d6cfaff..e984494177 100644 --- a/locales/fi.json +++ b/locales/fi.json @@ -4760,5 +4760,18 @@ "Gzip": "Gzip", "Retrieve via API": "Hae API:n kautta", "For MacOS:": "MacOS:", - "For Linux and Ubuntu:": "Linux ja Ubuntu:" + "For Linux and Ubuntu:": "Linux ja Ubuntu:", + "Mailbox does not exist": "Postilaatikkoa ei ole olemassa", + "Mailbox is over quota": "Postilaatikko on ylittänyt kiintiön", + "Mailbox already exists": "Postilaatikko on jo olemassa", + "Invalid search query": "Virheellinen hakukysely", + "Add Alias | Forward Email": "Lisää Alias | Lähetä sähköposti eteenpäin", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "Verkkotunnuksen poistaminen on peruuttamaton. Ole erittäin varovainen poistaessasi verkkotunnustasi.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "Et käytä palveluamme sellaisen palvelun käyttämiseen, joka sallii kolmansien osapuolien (muiden kuin omien työntekijöiden ja urakoitsijoiden) pääsyn palveluumme, käyttää palveluamme tai hyötyä siitä. Jos haluat meidän tekevän sinulle poikkeuksen tässä asiassa, ota meihin yhteyttä keskustellaksemme yrityssopimuksesta.", + "Inbox cannot store draft messages": "Inbox ei voi tallentaa luonnosviestejä", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Olet luonut alla olevan alias-salasanan onnistuneesti – sinun on kopioitava ja tallennettava se turvallisesti ennen tämän ikkunan sulkemista.

Alla olevaa salasanaa ei näytetä uudelleen, kun napsautat OK.


Käyttäjätunnus: %s

Salasana: %s



Tämä ikkuna sulkeutuu automaattisesti 30 sekunnin kuluttua.
", + "Maximum number of mailboxes exceeded": "Postilaatikoiden enimmäismäärä ylitetty", + "Mailbox is reserved and cannot be removed": "Postilaatikko on varattu, eikä sitä voi poistaa", + "Failed to acquire write lock": "Kirjoituslukon hankkiminen epäonnistui", + "Mailbox quota would be exceeded by message size": "Postilaatikon kiintiö ylittyisi viestin koon vuoksi" } \ No newline at end of file diff --git a/locales/fr.json b/locales/fr.json index 85aba70e5b..78798761d6 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -4915,5 +4915,18 @@ "Gzip": "Gzip", "Retrieve via API": "Récupérer via API", "For MacOS:": "Pour Mac OS :", - "For Linux and Ubuntu:": "Pour Linux et Ubuntu :" + "For Linux and Ubuntu:": "Pour Linux et Ubuntu :", + "Mailbox does not exist": "La boîte aux lettres n'existe pas", + "Mailbox is over quota": "La boîte aux lettres dépasse le quota", + "Mailbox already exists": "La boîte aux lettres existe déjà", + "Invalid search query": "Requête de recherche invalide", + "Add Alias | Forward Email": "Ajouter un alias | Un courriel transféré", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "La suppression de votre domaine est irréversible. Veuillez être extrêmement prudent lorsque vous supprimez votre domaine.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "Vous n'utiliserez pas notre service pour exploiter un service permettant à des tiers (autres que vos propres employés et sous-traitants) d'accéder, d'utiliser ou de bénéficier de notre service. Si vous souhaitez que nous fassions une exception à ce sujet, veuillez nous contacter pour discuter d'un accord d'entreprise.", + "Inbox cannot store draft messages": "La boîte de réception ne peut pas stocker les brouillons de messages", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Vous avez généré avec succès le mot de passe alias ci-dessous – vous devez le copier et le stocker en toute sécurité avant de fermer cette fenêtre.

Le mot de passe ci-dessous ne s'affichera plus une fois que vous aurez cliqué sur OK.


Nom d'utilisateur : %s

Mot de passe : %s



Cette fenêtre se fermera automatiquement dans 30 secondes.
", + "Maximum number of mailboxes exceeded": "Nombre maximum de boîtes aux lettres dépassé", + "Mailbox is reserved and cannot be removed": "La boîte aux lettres est réservée et ne peut pas être supprimée", + "Failed to acquire write lock": "Échec de l'acquisition du verrou en écriture", + "Mailbox quota would be exceeded by message size": "Le quota de boîte aux lettres serait dépassé par la taille du message" } \ No newline at end of file diff --git a/locales/he.json b/locales/he.json index d5d4d7d0e8..ea6405eac2 100644 --- a/locales/he.json +++ b/locales/he.json @@ -4915,5 +4915,18 @@ "Gzip": "Gzip", "Retrieve via API": "אחזור דרך API", "For MacOS:": "עבור MacOS:", - "For Linux and Ubuntu:": "עבור לינוקס ואובונטו:" + "For Linux and Ubuntu:": "עבור לינוקס ואובונטו:", + "Mailbox does not exist": "תיבת דואר לא קיימת", + "Mailbox is over quota": "תיבת הדואר חורגת מהמכסה", + "Mailbox already exists": "תיבת דואר כבר קיימת", + "Invalid search query": "שאילתת חיפוש לא חוקית", + "Add Alias | Forward Email": "הוסף כינוי | העברת דוא\"ל", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "מחיקת הדומיין שלך היא בלתי הפיכה. נא לנקוט משנה זהירות בעת מחיקת הדומיין שלך.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "לא תשתמש בשירות שלנו כדי להפעיל שירות המאפשר לצדדים שלישיים (מלבד העובדים והקבלנים שלך) לגשת, להשתמש או ליהנות מהשירות שלנו. אם אתה צריך שנעשה לך חריגה לגבי זה, אנא צור איתנו קשר כדי לדון בהסכם ארגוני.", + "Inbox cannot store draft messages": "Inbox לא יכול לאחסן הודעות טיוטה", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "יצרת בהצלחה את סיסמת הכינוי למטה - עליך להעתיק ולאחסן אותה בצורה מאובטחת לפני סגירת חלון זה.

הסיסמה למטה לא תוצג שוב לאחר שתלחץ על אישור.


שם משתמש: %s

סיסמה: %s



חלון זה ייסגר אוטומטית תוך 30 שניות.
", + "Maximum number of mailboxes exceeded": "חרג מהמספר המרבי של תיבות דואר", + "Mailbox is reserved and cannot be removed": "תיבת הדואר שמורה ולא ניתן להסירה", + "Failed to acquire write lock": "השגת נעילת כתיבה נכשלה", + "Mailbox quota would be exceeded by message size": "גודל ההודעה תחרוג ממכסת תיבת הדואר" } \ No newline at end of file diff --git a/locales/hu.json b/locales/hu.json index 6e138f13d0..0efae6c5a9 100644 --- a/locales/hu.json +++ b/locales/hu.json @@ -4915,5 +4915,18 @@ "Gzip": "Gzip", "Retrieve via API": "Letöltés API-n keresztül", "For MacOS:": "MacOS esetén:", - "For Linux and Ubuntu:": "Linux és Ubuntu esetén:" + "For Linux and Ubuntu:": "Linux és Ubuntu esetén:", + "Mailbox does not exist": "Postafiók nem létezik", + "Mailbox is over quota": "A postafiók túllépte a kvótát", + "Mailbox already exists": "A postafiók már létezik", + "Invalid search query": "Érvénytelen keresési lekérdezés", + "Add Alias | Forward Email": "Alias hozzáadása | E-mail továbbítása", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "A domain törlése visszafordíthatatlan. Kérjük, legyen rendkívül óvatos a domain törlésekor.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "Ön nem használja szolgáltatásunkat olyan szolgáltatás működtetésére, amely lehetővé teszi harmadik felek számára (kivéve a saját alkalmazottait és vállalkozóit), hogy hozzáférjenek szolgáltatásunkhoz, használják vagy részesüljenek abból. Ha arra van szüksége, hogy ezzel kapcsolatban kivételt tegyünk, kérjük, vegye fel velünk a kapcsolatot a vállalkozási szerződés megbeszélése érdekében.", + "Inbox cannot store draft messages": "Az Inbox nem tud piszkozatokat tárolni", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Sikeresen létrehozta az alábbi alias jelszót – az ablak bezárása előtt másolja ki és biztonságosan tárolja.

Az OK gombra kattintva az alábbi jelszó nem jelenik meg újra.


Felhasználónév: %s

Jelszó: %s



Ez az ablak 30 másodpercen belül automatikusan bezárul.
", + "Maximum number of mailboxes exceeded": "Túllépte a postafiókok maximális számát", + "Mailbox is reserved and cannot be removed": "A postafiók le van foglalva és nem távolítható el", + "Failed to acquire write lock": "Nem sikerült megszerezni az írási zárat", + "Mailbox quota would be exceeded by message size": "Az üzenet mérete túllépné a postafiókkvótát" } \ No newline at end of file diff --git a/locales/id.json b/locales/id.json index 873c556281..a486182308 100644 --- a/locales/id.json +++ b/locales/id.json @@ -4915,5 +4915,18 @@ "Gzip": "Gzip", "Retrieve via API": "Ambil melalui API", "For MacOS:": "Untuk MacOS:", - "For Linux and Ubuntu:": "Untuk Linux dan Ubuntu:" + "For Linux and Ubuntu:": "Untuk Linux dan Ubuntu:", + "Mailbox does not exist": "Kotak surat tidak ada", + "Mailbox is over quota": "Kotak surat melebihi kuota", + "Mailbox already exists": "Kotak surat sudah ada", + "Invalid search query": "Kueri penelusuran tidak valid", + "Add Alias | Forward Email": "Tambahkan Alias | Teruskan Email", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "Penghapusan domain Anda tidak dapat dibatalkan. Harap berhati-hati saat menghapus domain Anda.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "Anda tidak akan menggunakan layanan kami untuk mengoperasikan layanan yang memungkinkan pihak ketiga (selain karyawan dan kontraktor Anda sendiri) mengakses, menggunakan, atau mendapatkan manfaat dari layanan kami. Jika Anda membutuhkan kami untuk membuat pengecualian untuk Anda mengenai hal ini, silakan hubungi kami untuk mendiskusikan perjanjian perusahaan.", + "Inbox cannot store draft messages": "Kotak masuk tidak dapat menyimpan pesan draf", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Anda telah berhasil membuat kata sandi alias di bawah ini – Anda harus menyalin dan menyimpannya dengan aman sebelum menutup jendela ini.

Kata sandi di bawah ini tidak akan ditampilkan lagi setelah Anda mengklik OK.


Nama pengguna: %s

Kata sandi: %s



Jendela ini akan ditutup secara otomatis dalam 30 detik.
", + "Maximum number of mailboxes exceeded": "Jumlah maksimum kotak surat terlampaui", + "Mailbox is reserved and cannot be removed": "Kotak surat sudah dipesan dan tidak dapat dihapus", + "Failed to acquire write lock": "Gagal mendapatkan kunci tulis", + "Mailbox quota would be exceeded by message size": "Kuota kotak surat akan terlampaui berdasarkan ukuran pesan" } \ No newline at end of file diff --git a/locales/it.json b/locales/it.json index 550e54263d..6dd9a11b66 100644 --- a/locales/it.json +++ b/locales/it.json @@ -4915,5 +4915,18 @@ "Gzip": "Gzip", "Retrieve via API": "Recupera tramite API", "For MacOS:": "Per MacOS:", - "For Linux and Ubuntu:": "Per Linux e Ubuntu:" + "For Linux and Ubuntu:": "Per Linux e Ubuntu:", + "Mailbox does not exist": "La casella di posta non esiste", + "Mailbox is over quota": "La casella di posta ha superato la quota", + "Mailbox already exists": "La casella di posta esiste già", + "Invalid search query": "Query di ricerca non valida", + "Add Alias | Forward Email": "Aggiungi Alias | Inoltra e-mail", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "L'eliminazione del tuo dominio è irreversibile. Ti preghiamo di prestare la massima attenzione quando elimini il tuo dominio.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "Non utilizzerai il nostro servizio per gestire un servizio che consenta a terzi (diversi dai tuoi dipendenti e appaltatori) di accedere, utilizzare o beneficiare del nostro servizio. Se hai bisogno che facciamo un'eccezione a questo riguardo, contattaci per discutere un accordo aziendale.", + "Inbox cannot store draft messages": "La Posta in arrivo non può archiviare bozze di messaggi", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Hai generato con successo la password alias di seguito: devi copiarla e archiviarla in modo sicuro prima di chiudere questa finestra.

La password riportata di seguito non verrà più visualizzata dopo aver fatto clic su OK.


Nome utente: %s

Parola d'ordine: %s



Questa finestra si chiuderà automaticamente tra 30 secondi.
", + "Maximum number of mailboxes exceeded": "È stato superato il numero massimo di caselle di posta", + "Mailbox is reserved and cannot be removed": "La casella di posta è riservata e non può essere rimossa", + "Failed to acquire write lock": "Impossibile acquisire il blocco di scrittura", + "Mailbox quota would be exceeded by message size": "La quota della casella di posta verrebbe superata dalla dimensione del messaggio" } \ No newline at end of file diff --git a/locales/ja.json b/locales/ja.json index a47f6e1757..79d99e2bef 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -4915,5 +4915,18 @@ "Gzip": "Gzip", "Retrieve via API": "API経由で取得", "For MacOS:": "MacOSの場合:", - "For Linux and Ubuntu:": "Linux および Ubuntu の場合:" + "For Linux and Ubuntu:": "Linux および Ubuntu の場合:", + "Mailbox does not exist": "メールボックスが存在しません", + "Mailbox is over quota": "メールボックスがクォータを超えています", + "Mailbox already exists": "メールボックスはすでに存在します", + "Invalid search query": "無効な検索クエリ", + "Add Alias | Forward Email": "エイリアスの追加 |前方のメール", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "ドメインを削除すると元に戻せません。ドメインを削除する場合は細心の注意を払ってください。", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "お客様は、第三者 (お客様自身の従業員および請負業者を除く) が当社のサービスにアクセス、使用、またはその恩恵を受けることを可能にするサービスを運営するために当社のサービスを使用してはなりません。これに関して例外を設ける必要がある場合は、エンタープライズ契約についてご相談ください。", + "Inbox cannot store draft messages": "受信トレイに下書きメッセージを保存できません", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "以下のエイリアス パスワードが正常に生成されました。このウィンドウを閉じる前に、パスワードをコピーして安全に保存する必要があります。

以下のパスワードは、「OK」をクリックすると再度表示されません。


ユーザー名: %s

パスワード: %s



このウィンドウは 30 秒後に自動的に閉じます。
", + "Maximum number of mailboxes exceeded": "メールボックスの最大数を超えました", + "Mailbox is reserved and cannot be removed": "メールボックスは予約されているため削除できません", + "Failed to acquire write lock": "書き込みロックの取得に失敗しました", + "Mailbox quota would be exceeded by message size": "メールボックスのクォータがメッセージ サイズによって超過される可能性がある" } \ No newline at end of file diff --git a/locales/ko.json b/locales/ko.json index 49dd80d9eb..08a0bae2fe 100644 --- a/locales/ko.json +++ b/locales/ko.json @@ -4915,5 +4915,18 @@ "Gzip": "Gzip", "Retrieve via API": "API를 통해 검색", "For MacOS:": "MacOS의 경우:", - "For Linux and Ubuntu:": "Linux 및 Ubuntu의 경우:" + "For Linux and Ubuntu:": "Linux 및 Ubuntu의 경우:", + "Mailbox does not exist": "사서함이 존재하지 않습니다", + "Mailbox is over quota": "사서함이 할당량을 초과했습니다.", + "Mailbox already exists": "사서함이 이미 존재합니다.", + "Invalid search query": "잘못된 검색어", + "Add Alias | Forward Email": "별칭 추가 | 이메일 전달", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "도메인을 삭제하면 되돌릴 수 없습니다. 도메인을 삭제할 때는 각별히 주의하시기 바랍니다.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "귀하는 제3자(귀하의 직원 및 계약자 제외)가 당사 서비스에 액세스하거나 당사 서비스로부터 혜택을 받을 수 있도록 허용하는 서비스를 운영하기 위해 당사 서비스를 사용해서는 안 됩니다. 이와 관련하여 예외를 적용해야 하는 경우 당사에 연락하여 기업 계약에 대해 논의하시기 바랍니다.", + "Inbox cannot store draft messages": "받은편지함에는 임시 메시지를 저장할 수 없습니다.", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "아래 별칭 비밀번호를 성공적으로 생성했습니다. 이 창을 닫기 전에 비밀번호를 복사하여 안전하게 저장해야 합니다.

확인을 클릭하면 아래 비밀번호가 다시 표시되지 않습니다.


사용자 이름: %s

비밀번호: %s



이 창은 30초 후에 자동으로 닫힙니다.
", + "Maximum number of mailboxes exceeded": "최대 사서함 수를 초과했습니다.", + "Mailbox is reserved and cannot be removed": "사서함은 예약되어 있으므로 제거할 수 없습니다.", + "Failed to acquire write lock": "쓰기 잠금을 획득하지 못했습니다.", + "Mailbox quota would be exceeded by message size": "메시지 크기에 따라 사서함 할당량이 초과됩니다." } \ No newline at end of file diff --git a/locales/nl.json b/locales/nl.json index 440e8f2ecc..e29f590fc1 100644 --- a/locales/nl.json +++ b/locales/nl.json @@ -4915,5 +4915,18 @@ "Gzip": "Gzip", "Retrieve via API": "Ophalen via API", "For MacOS:": "Voor MacOS:", - "For Linux and Ubuntu:": "Voor Linux en Ubuntu:" + "For Linux and Ubuntu:": "Voor Linux en Ubuntu:", + "Mailbox does not exist": "Postbus bestaat niet", + "Mailbox is over quota": "Het postvak heeft het quotum overschreden", + "Mailbox already exists": "Postbus bestaat al", + "Invalid search query": "Ongeldige zoekopdracht", + "Add Alias | Forward Email": "Alias toevoegen | E-mail doorsturen", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "Het verwijderen van uw domein is onomkeerbaar. Wees uiterst voorzichtig bij het verwijderen van uw domein.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "U zult onze service niet gebruiken om een service te exploiteren waarmee derden (anders dan uw eigen werknemers en contractanten) toegang krijgen tot onze service, deze kunnen gebruiken of ervan kunnen profiteren. Wilt u dat wij hiervoor een uitzondering voor u maken, neem dan contact met ons op om een ondernemingsovereenkomst te bespreken.", + "Inbox cannot store draft messages": "Inbox kan geen conceptberichten opslaan", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "U heeft met succes het onderstaande aliaswachtwoord gegenereerd. U moet het kopiëren en veilig opslaan voordat u dit venster sluit.

Het onderstaande wachtwoord wordt niet meer weergegeven zodra u op OK klikt.


Gebruikersnaam: %s

Wachtwoord: %s



Dit venster wordt automatisch na 30 seconden gesloten.
", + "Maximum number of mailboxes exceeded": "Maximaal aantal mailboxen overschreden", + "Mailbox is reserved and cannot be removed": "Mailbox is gereserveerd en kan niet worden verwijderd", + "Failed to acquire write lock": "Kan schrijfvergrendeling niet verkrijgen", + "Mailbox quota would be exceeded by message size": "Het postbusquotum zou worden overschreden door de berichtgrootte" } \ No newline at end of file diff --git a/locales/no.json b/locales/no.json index ff3160db15..5b062179b0 100644 --- a/locales/no.json +++ b/locales/no.json @@ -4920,5 +4920,18 @@ "Gzip": "Gzip", "Retrieve via API": "Hent via API", "For MacOS:": "For MacOS:", - "For Linux and Ubuntu:": "For Linux og Ubuntu:" + "For Linux and Ubuntu:": "For Linux og Ubuntu:", + "Mailbox does not exist": "Postkasse finnes ikke", + "Mailbox is over quota": "Postkassen er over kvoten", + "Mailbox already exists": "Postkasse eksisterer allerede", + "Invalid search query": "Ugyldig søk", + "Add Alias | Forward Email": "Legg til alias | Videresend E-post", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "Å slette domenet ditt er irreversibelt. Vær ekstremt forsiktig når du sletter domenet ditt.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "Du vil ikke bruke tjenesten vår til å drive en tjeneste som lar tredjeparter (annet enn dine egne ansatte og kontraktører) få tilgang til, bruke eller dra nytte av tjenesten vår. Hvis du trenger at vi gjør et unntak for deg angående dette, vennligst kontakt oss for å diskutere en bedriftsavtale.", + "Inbox cannot store draft messages": "Inbox kan ikke lagre utkast til meldinger", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Du har generert aliaspassordet nedenfor – du må kopiere og lagre det sikkert før du lukker dette vinduet.

Passordet nedenfor vil ikke vises igjen når du klikker OK.


Brukernavn: %s

Passord: %s



Dette vinduet lukkes automatisk om 30 sekunder.
", + "Maximum number of mailboxes exceeded": "Maksimalt antall postbokser er overskredet", + "Mailbox is reserved and cannot be removed": "Postkasse er reservert og kan ikke fjernes", + "Failed to acquire write lock": "Kunne ikke hente skrivelås", + "Mailbox quota would be exceeded by message size": "Postbokskvoten vil bli overskredet av meldingsstørrelse" } \ No newline at end of file diff --git a/locales/pl.json b/locales/pl.json index f5ef58e6c0..5b45dc7d10 100644 --- a/locales/pl.json +++ b/locales/pl.json @@ -4915,5 +4915,18 @@ "Gzip": "Gzip", "Retrieve via API": "Pobierz przez API", "For MacOS:": "Dla systemu MacOS:", - "For Linux and Ubuntu:": "Dla Linuksa i Ubuntu:" + "For Linux and Ubuntu:": "Dla Linuksa i Ubuntu:", + "Mailbox does not exist": "Skrzynka pocztowa nie istnieje", + "Mailbox is over quota": "Skrzynka pocztowa przekroczyła limit", + "Mailbox already exists": "Skrzynka pocztowa już istnieje", + "Invalid search query": "Nieprawidłowe zapytanie", + "Add Alias | Forward Email": "Dodaj alias | Przekaż wiadomość e-mail", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "Usunięcie domeny jest nieodwracalne. Podczas usuwania domeny zachowaj szczególną ostrożność.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "Nie będziesz korzystać z naszych usług w celu świadczenia usług, które umożliwiają stronom trzecim (innym niż Twoi pracownicy i kontrahenci) dostęp, korzystanie lub korzystanie z naszych usług. Jeśli chcesz, abyśmy zrobili dla Ciebie wyjątek w tej kwestii, skontaktuj się z nami, aby omówić umowę korporacyjną.", + "Inbox cannot store draft messages": "Skrzynka odbiorcza nie może przechowywać wersji roboczych wiadomości", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Pomyślnie wygenerowałeś poniższy alias hasła – musisz go skopiować i bezpiecznie zapisać przed zamknięciem tego okna.

Poniższe hasło nie zostanie wyświetlone ponownie po kliknięciu OK.


Nazwa użytkownika: %s

Hasło: %s



To okno zamknie się automatycznie po 30 sekundach.
", + "Maximum number of mailboxes exceeded": "Przekroczono maksymalną liczbę skrzynek pocztowych", + "Mailbox is reserved and cannot be removed": "Skrzynka pocztowa jest zarezerwowana i nie można jej usunąć", + "Failed to acquire write lock": "Nie udało się uzyskać blokady zapisu", + "Mailbox quota would be exceeded by message size": "Rozmiar skrzynki pocztowej zostałby przekroczony ze względu na rozmiar wiadomości" } \ No newline at end of file diff --git a/locales/pt.json b/locales/pt.json index 9fa556bbd9..391b6dab07 100644 --- a/locales/pt.json +++ b/locales/pt.json @@ -4915,5 +4915,18 @@ "Gzip": "Gzip", "Retrieve via API": "Recuperar via API", "For MacOS:": "Para MacOS:", - "For Linux and Ubuntu:": "Para Linux e Ubuntu:" + "For Linux and Ubuntu:": "Para Linux e Ubuntu:", + "Mailbox does not exist": "Caixa de correio não existe", + "Mailbox is over quota": "A caixa de correio ultrapassou a cota", + "Mailbox already exists": "A caixa de correio já existe", + "Invalid search query": "Consulta de pesquisa inválida", + "Add Alias | Forward Email": "Adicionar alias | Encaminhar e-mail", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "A exclusão do seu domínio é irreversível. Tenha muito cuidado ao excluir seu domínio.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "Você não usará nosso serviço para operar um serviço que permita que terceiros (além de seus próprios funcionários e contratados) acessem, usem ou se beneficiem de nosso serviço. Se precisar que abramos uma exceção em relação a isso, entre em contato conosco para discutir um acordo empresarial.", + "Inbox cannot store draft messages": "A Caixa de entrada não pode armazenar rascunhos de mensagens", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Você gerou com sucesso a senha do alias abaixo – você deve copiá-la e armazená-la com segurança antes de fechar esta janela.

A senha abaixo não será mostrada novamente depois que você clicar em OK.


Nome de usuário: %s

Senha: %s



Esta janela fechará automaticamente em 30 segundos.
", + "Maximum number of mailboxes exceeded": "Número máximo de caixas de correio excedido", + "Mailbox is reserved and cannot be removed": "A caixa de correio está reservada e não pode ser removida", + "Failed to acquire write lock": "Falha ao adquirir bloqueio de gravação", + "Mailbox quota would be exceeded by message size": "A cota da caixa de correio seria excedida pelo tamanho da mensagem" } \ No newline at end of file diff --git a/locales/ru.json b/locales/ru.json index 3b1bb1fdce..7839ddf8ab 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -4915,5 +4915,18 @@ "Gzip": "Gzip", "Retrieve via API": "Получить через API", "For MacOS:": "Для MacOS:", - "For Linux and Ubuntu:": "Для Linux и Ubuntu:" + "For Linux and Ubuntu:": "Для Linux и Ubuntu:", + "Mailbox does not exist": "Почтовый ящик не существует", + "Mailbox is over quota": "Почтовый ящик превышает квоту", + "Mailbox already exists": "Почтовый ящик уже существует", + "Invalid search query": "Неверный поисковый запрос", + "Add Alias | Forward Email": "Добавить псевдоним | Пересылать сообщения электронной почты", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "Удаление вашего домена является необратимым. Пожалуйста, будьте предельно осторожны при удалении домена.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "Вы не будете использовать нашу службу для управления службой, которая позволяет третьим лицам (кроме ваших собственных сотрудников и подрядчиков) получать доступ, использовать или получать выгоду от нашей службы. Если вам нужно, чтобы мы сделали для вас исключение в этом отношении, свяжитесь с нами, чтобы обсудить корпоративное соглашение.", + "Inbox cannot store draft messages": "В папке «Входящие» не могут храниться черновики сообщений.", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Вы успешно сгенерировали псевдоним пароля, указанный ниже. Вам необходимо скопировать и надежно сохранить его, прежде чем закрывать это окно.

Приведенный ниже пароль больше не будет отображаться после нажатия кнопки «ОК».


Имя пользователя: %s

Пароль: %s



Это окно автоматически закроется через 30 секунд.
", + "Maximum number of mailboxes exceeded": "Превышено максимальное количество почтовых ящиков", + "Mailbox is reserved and cannot be removed": "Почтовый ящик зарезервирован и не может быть удален", + "Failed to acquire write lock": "Не удалось получить блокировку записи.", + "Mailbox quota would be exceeded by message size": "Квота почтового ящика будет превышена из-за размера сообщения" } \ No newline at end of file diff --git a/locales/sv.json b/locales/sv.json index 8135f9d49f..dad5fbd763 100644 --- a/locales/sv.json +++ b/locales/sv.json @@ -4915,5 +4915,18 @@ "Gzip": "Gzip", "Retrieve via API": "Hämta via API", "For MacOS:": "För MacOS:", - "For Linux and Ubuntu:": "För Linux och Ubuntu:" + "For Linux and Ubuntu:": "För Linux och Ubuntu:", + "Mailbox does not exist": "Brevlåda finns inte", + "Mailbox is over quota": "Brevlådan är över kvoten", + "Mailbox already exists": "Brevlådan finns redan", + "Invalid search query": "Ogiltig sökfråga", + "Add Alias | Forward Email": "Lägg till alias | Vidarebefordra e-post", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "Att ta bort din domän är oåterkallelig. Var extremt försiktig när du tar bort din domän.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "Du kommer inte att använda vår tjänst för att driva en tjänst som tillåter tredje part (andra än dina egna anställda och entreprenörer) att få tillgång till, använda eller dra nytta av vår tjänst. Om du behöver att vi gör ett undantag för dig angående detta, vänligen kontakta oss för att diskutera ett företagsavtal.", + "Inbox cannot store draft messages": "Inbox kan inte lagra utkast till meddelanden", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Du har framgångsrikt skapat aliaslösenordet nedan – du måste kopiera och lagra det säkert innan du stänger det här fönstret.

Lösenordet nedan kommer inte att visas igen när du klickar på OK.


Användarnamn: %s

Lösenord: %s



Detta fönster stängs automatiskt efter 30 sekunder.
", + "Maximum number of mailboxes exceeded": "Maximalt antal postlådor har överskridits", + "Mailbox is reserved and cannot be removed": "Mailbox är reserverad och kan inte tas bort", + "Failed to acquire write lock": "Det gick inte att hämta skrivlås", + "Mailbox quota would be exceeded by message size": "Brevlådans kvot skulle överskridas av meddelandestorlek" } \ No newline at end of file diff --git a/locales/th.json b/locales/th.json index 7dfeb56a54..90e404ae1e 100644 --- a/locales/th.json +++ b/locales/th.json @@ -4915,5 +4915,18 @@ "Gzip": "จีซิป", "Retrieve via API": "ดึงข้อมูลผ่าน API", "For MacOS:": "สำหรับ MacOS:", - "For Linux and Ubuntu:": "สำหรับ Linux และ Ubuntu:" + "For Linux and Ubuntu:": "สำหรับ Linux และ Ubuntu:", + "Mailbox does not exist": "ไม่มีกล่องจดหมาย", + "Mailbox is over quota": "กล่องจดหมายเกินโควต้า", + "Mailbox already exists": "มีกล่องจดหมายอยู่แล้ว", + "Invalid search query": "คำค้นหาไม่ถูกต้อง", + "Add Alias | Forward Email": "เพิ่มนามแฝง | ส่งต่ออีเมล", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "การลบโดเมนของคุณไม่สามารถย้อนกลับได้ โปรดใช้ความระมัดระวังอย่างยิ่งในการลบโดเมนของคุณ", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "คุณจะไม่ใช้บริการของเราเพื่อดำเนินการบริการที่อนุญาตให้บุคคลที่สาม (นอกเหนือจากพนักงานและผู้รับเหมาของคุณเอง) เข้าถึง ใช้งาน หรือได้รับประโยชน์จากบริการของเรา หากคุณต้องการให้เรายกเว้นสำหรับคุณเกี่ยวกับเรื่องนี้ โปรดติดต่อเราเพื่อหารือเกี่ยวกับข้อตกลงระดับองค์กร", + "Inbox cannot store draft messages": "Inbox ไม่สามารถจัดเก็บข้อความร่างได้", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "คุณสร้างรหัสผ่านนามแฝงด้านล่างนี้สำเร็จแล้ว คุณต้องคัดลอกและเก็บไว้อย่างปลอดภัยก่อนที่จะปิดหน้าต่างนี้

รหัสผ่านด้านล่างจะไม่แสดงอีกเมื่อคุณคลิกตกลง


ชื่อผู้ใช้: %s

รหัสผ่าน: %s



หน้าต่างนี้จะปิดโดยอัตโนมัติใน 30 วินาที
", + "Maximum number of mailboxes exceeded": "เกินจำนวนกล่องจดหมายสูงสุด", + "Mailbox is reserved and cannot be removed": "กล่องจดหมายถูกสงวนไว้และไม่สามารถลบออกได้", + "Failed to acquire write lock": "ไม่สามารถรับการล็อกการเขียนได้", + "Mailbox quota would be exceeded by message size": "โควต้ากล่องจดหมายจะเกินขนาดข้อความ" } \ No newline at end of file diff --git a/locales/tr.json b/locales/tr.json index 732dfcef3c..316e3cec82 100644 --- a/locales/tr.json +++ b/locales/tr.json @@ -4915,5 +4915,18 @@ "Gzip": "Gzip", "Retrieve via API": "API aracılığıyla al", "For MacOS:": "MacOS için:", - "For Linux and Ubuntu:": "Linux ve Ubuntu için:" + "For Linux and Ubuntu:": "Linux ve Ubuntu için:", + "Mailbox does not exist": "Posta kutusu mevcut değil", + "Mailbox is over quota": "Posta kutusu kotayı aştı", + "Mailbox already exists": "Posta kutusu zaten mevcut", + "Invalid search query": "Geçersiz arama sorgusu", + "Add Alias | Forward Email": "Takma Ad Ekle | E-postayı Yönlendir", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "Alan adınızın silinmesi geri alınamaz. Alan adınızı silerken lütfen çok dikkatli olun.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "Hizmetimizi, üçüncü tarafların (kendi çalışanlarınız ve yüklenicileriniz dışında) hizmetimize erişmesine, kullanmasına veya hizmetten faydalanmasına izin veren bir hizmeti işletmek için kullanmayacaksınız. Bu konuda sizin için bir istisna yapmamızı isterseniz, bir kurumsal anlaşmayı görüşmek üzere lütfen bizimle iletişime geçin.", + "Inbox cannot store draft messages": "Gelen kutusu taslak iletileri depolayamıyor", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Aşağıdaki takma ad şifresini başarıyla oluşturdunuz; bu pencereyi kapatmadan önce onu kopyalayıp güvenli bir şekilde saklamanız gerekir.

Tamam'a tıkladığınızda aşağıdaki şifre tekrar gösterilmeyecektir.


Kullanıcı adı: %s

Şifre: %s



Bu pencere 30 saniye içinde otomatik olarak kapanacaktır.
", + "Maximum number of mailboxes exceeded": "Maksimum posta kutusu sayısı aşıldı", + "Mailbox is reserved and cannot be removed": "Posta kutusu ayrılmıştır ve kaldırılamaz", + "Failed to acquire write lock": "Yazma kilidi alınamadı", + "Mailbox quota would be exceeded by message size": "Posta kutusu kotası ileti boyutuna göre aşılacak" } \ No newline at end of file diff --git a/locales/uk.json b/locales/uk.json index b856313cba..c4aa6f943d 100644 --- a/locales/uk.json +++ b/locales/uk.json @@ -4915,5 +4915,18 @@ "Gzip": "Gzip", "Retrieve via API": "Отримати через API", "For MacOS:": "Для MacOS:", - "For Linux and Ubuntu:": "Для Linux і Ubuntu:" + "For Linux and Ubuntu:": "Для Linux і Ubuntu:", + "Mailbox does not exist": "Поштова скринька не існує", + "Mailbox is over quota": "Поштова скринька перевищила квоту", + "Mailbox already exists": "Поштова скринька вже існує", + "Invalid search query": "Недійсний пошуковий запит", + "Add Alias | Forward Email": "Додати псевдонім | Переслати електронну пошту", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "Видалення вашого домену неможливо відновити. Будьте вкрай обережні, видаляючи свій домен.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "Ви не використовуватимете наш сервіс для керування сервісом, який дозволяє третім сторонам (окрім ваших власних співробітників і підрядників) отримувати доступ до нашого сервісу, використовувати його або отримувати користь від нього. Якщо вам потрібно, щоб ми зробили для вас виняток щодо цього, зв’яжіться з нами, щоб обговорити корпоративну угоду.", + "Inbox cannot store draft messages": "Вхідні не можуть зберігати чернетки повідомлень", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Ви успішно згенерували наведений нижче псевдонім пароля – ви повинні скопіювати та надійно зберегти його, перш ніж закривати це вікно.

Наведений нижче пароль більше не відображатиметься, коли ви натиснете OK.


Ім'я користувача: %s

Пароль: %s



Це вікно автоматично закриється через 30 секунд.
", + "Maximum number of mailboxes exceeded": "Перевищено максимальну кількість поштових скриньок", + "Mailbox is reserved and cannot be removed": "Поштова скринька зарезервована і не може бути видалена", + "Failed to acquire write lock": "Не вдалося отримати блокування запису", + "Mailbox quota would be exceeded by message size": "Розмір повідомлення перевищить квоту поштової скриньки" } \ No newline at end of file diff --git a/locales/vi.json b/locales/vi.json index 707450382b..20b10f6691 100644 --- a/locales/vi.json +++ b/locales/vi.json @@ -4915,5 +4915,18 @@ "Gzip": "Gzip", "Retrieve via API": "Truy xuất qua API", "For MacOS:": "Đối với MacOS:", - "For Linux and Ubuntu:": "Đối với Linux và Ubuntu:" + "For Linux and Ubuntu:": "Đối với Linux và Ubuntu:", + "Mailbox does not exist": "Hộp thư không tồn tại", + "Mailbox is over quota": "Hộp thư vượt quá hạn mức", + "Mailbox already exists": "Hộp thư đã tồn tại", + "Invalid search query": "Truy vấn tìm kiếm không hợp lệ", + "Add Alias | Forward Email": "Thêm bí danh | Chuyển tiếp email", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "Việc xóa miền của bạn là không thể thay đổi được. Hãy hết sức thận trọng khi xóa tên miền của bạn.", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "Bạn sẽ không sử dụng dịch vụ của chúng tôi để vận hành một dịch vụ cho phép các bên thứ ba (không phải là nhân viên và nhà thầu của bạn) truy cập, sử dụng hoặc hưởng lợi từ dịch vụ của chúng tôi. Nếu bạn cần chúng tôi đưa ra một ngoại lệ cho bạn về vấn đề này, vui lòng liên hệ với chúng tôi để thảo luận về thỏa thuận doanh nghiệp.", + "Inbox cannot store draft messages": "Hộp thư đến không thể lưu trữ thư nháp", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "Bạn đã tạo thành công mật khẩu bí danh bên dưới – bạn phải sao chép và lưu trữ nó một cách an toàn trước khi đóng cửa sổ này.

Mật khẩu bên dưới sẽ không được hiển thị lại sau khi bạn nhấp vào OK.


Tên người dùng: %s

Mật khẩu: %s



Cửa sổ này sẽ tự động đóng sau 30 giây.
", + "Maximum number of mailboxes exceeded": "Đã vượt quá số lượng hộp thư tối đa", + "Mailbox is reserved and cannot be removed": "Hộp thư được bảo lưu và không thể xóa được", + "Failed to acquire write lock": "Không lấy được khóa ghi", + "Mailbox quota would be exceeded by message size": "Dung lượng hộp thư sẽ bị vượt quá kích thước thư" } \ No newline at end of file diff --git a/locales/zh.json b/locales/zh.json index ff1f9f29f0..b7b918c7fc 100644 --- a/locales/zh.json +++ b/locales/zh.json @@ -4606,5 +4606,18 @@ "Gzip": "压缩包", "Retrieve via API": "通过API检索", "For MacOS:": "对于 MacOS:", - "For Linux and Ubuntu:": "对于 Linux 和 Ubuntu:" + "For Linux and Ubuntu:": "对于 Linux 和 Ubuntu:", + "Mailbox does not exist": "邮箱不存在", + "Mailbox is over quota": "邮箱超出配额", + "Mailbox already exists": "邮箱已存在", + "Invalid search query": "搜索查询无效", + "Add Alias | Forward Email": "添加别名 |转发邮件", + "Deleting your domain is irreversible. Please take extreme caution when deleting your domain.": "删除您的域名是不可逆的。删除您的域名时请格外小心。", + "You will not use our service to operate a service which allow third parties (other than your own employees and contractors) to access, use, or benefit from our service. If you need us to make an exception for you regarding this, then please contact us to discuss an enterprise agreement.": "您不得使用我们的服务来运营允许第三方(您自己的员工和承包商除外)访问、使用我们的服务或从我们的服务中受益的服务。如果您需要我们在这方面为您破例,请联系我们讨论企业协议。", + "Inbox cannot store draft messages": "收件箱无法存储草稿邮件", + "You have successfully generated the alias password below – you must copy and securely store it before closing this window.

The password below will not be shown again once you click OK.


Username: %s

Password: %s



This window will automatically close in 30 seconds.
": "您已成功生成下面的别名密码 - 您必须在关闭此窗口之前复制并安全存储它。

单击“确定”后,下面的密码将不会再次显示。


用户名: %s

密码: %s



该窗口将在 30 秒后自动关闭。
", + "Maximum number of mailboxes exceeded": "超出邮箱最大数量", + "Mailbox is reserved and cannot be removed": "邮箱已被保留,无法删除", + "Failed to acquire write lock": "获取写锁失败", + "Mailbox quota would be exceeded by message size": "邮件大小超出邮箱配额" } \ No newline at end of file diff --git a/package-scripts.js b/package-scripts.js index 6edbb90f8f..9efad4bac8 100644 --- a/package-scripts.js +++ b/package-scripts.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const { series, concurrent } = require('nps-utils'); module.exports = { @@ -12,6 +17,7 @@ module.exports = { api: 'nodemon api.js', web: 'nodemon web.js', smtp: 'nodemon smtp.js', + imap: 'nodemon imap.js', watch: 'gulp watch', clean: 'gulp clean', diff --git a/package.json b/package.json index faa0eedc59..a3b4bd2127 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "forwardemail-net", "description": "The best open-source and free email forwarding service for custom domains. We do not keep logs nor store emails. We don't track you. Unlimited aliases, catch-alls, wildcards, API access, and disposable addresses. Built-in support for DKIM, SRS, SPF, ARC, DMARC, and more. No credit card required.", "version": "0.4.40", - "author": "Forward Email (https://forwardemail.net)", + "author": "Forward Email LLC (https://forwardemail.net)", "browser": { "signale": false, "mongoose": false, @@ -22,8 +22,8 @@ "@fortawesome/fontawesome-free": "5.15.4", "@hapi/boom": "10.0.1", "@ioredis/commands": "1.2.0", - "@koa/router": "12.0.0", - "@ladjs/api": "14.1.7", + "@koa/router": "12.0.1", + "@ladjs/api": "14.1.8", "@ladjs/assets": "2.1.22", "@ladjs/consolidate": "1.0.3", "@ladjs/env": "4.0.0", @@ -37,13 +37,13 @@ "@ladjs/proxy": "4.0.0", "@ladjs/redis": "1.1.1", "@ladjs/shared-config": "9.1.2", - "@ladjs/web": "21.0.7", + "@ladjs/web": "21.0.8", "@octokit/core": "4.2.4", "@sidoshi/random-string": "1.0.0", "@tkrotoff/bootstrap-floating-label": "0.8", "adm-zip": "0.5.10", "ansi-html-community": "0.0.8", - "apexcharts": "3.42.0", + "apexcharts": "3.43.0", "array-join-conjunction": "1.0.0", "async-ratelimiter": "1.3.11", "axe": "12.2.3", @@ -75,7 +75,7 @@ "fast-xml-parser": "4.3.2", "gemoji": "6", "get-stream": "6", - "github-markdown-css": "5.2.0", + "github-markdown-css": "5.3.0", "got": "11.8.6", "gulp-rename": "2.0.0", "gulp-replace": "1.1.4", @@ -84,7 +84,9 @@ "htmlhint": "1.1.4", "humanize-string": "2", "iconv": "3.0.1", + "imapflow": "1.0.144", "into-stream": "6.0.0", + "ioredfour": "1.2.0-ioredis-07", "ip": "1.1.8", "is-ci": "3.0.1", "is-fqdn": "2.0.1", @@ -137,6 +139,7 @@ "p-retry": "4", "p-series": "2", "p-timeout": "4", + "p-wait-for": "3", "p-whilst": "2", "parse-domain": "5", "parse-err": "1.0.0", @@ -179,20 +182,21 @@ "titleize": "2", "twilio": "4.18.1", "uncaught": "0.0.5", - "undici": "5.25.4", + "undici": "5.26.3", "url-parse": "1.5.10", "url-regex-safe": "4.0.0", "validator": "13.11.0", "web-resource-inliner": "6.0.1", + "wildduck": "1.40.9", "wkhtmltopdf": "0.4.0", - "zone-mta": "3.6.11", + "zone-mta": "3.6.13", "zxcvbn": "4.4.2" }, "devDependencies": { "@babel/cli": "7.23.0", - "@babel/core": "7.23.0", + "@babel/core": "7.23.2", "@babel/polyfill": "7.12.1", - "@babel/preset-env": "7.22.20", + "@babel/preset-env": "7.23.2", "@commitlint/cli": "17.7.2", "@commitlint/config-conventional": "17.7.0", "@ladjs/browserslist-config": "1.0.0", @@ -263,7 +267,7 @@ "remark-cli": "11.0.0", "remark-license": "6.1.0", "remark-preset-github": "4.0.4", - "sass": "1.69.1", + "sass": "1.69.3", "sinon": "15.1.2", "stylelint": "15.10.3", "stylelint-config-recommended-scss": "12.0.0", @@ -313,7 +317,7 @@ "smtp", "spf" ], - "license": "Business Source License 1.1", + "license": "(BUSL-1.1 AND MPL-2.0)", "main": "index.js", "overrides": { "pug-lint": "@ladjs/pug-lint" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000000..7e48cf3d16 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,28012 @@ +lockfileVersion: 5.4 + +overrides: + eslint-plugin-import: 2.26.0 + +specifiers: + '@babel/cli': 7.23.0 + '@babel/core': 7.23.2 + '@babel/polyfill': 7.12.1 + '@babel/preset-env': 7.23.2 + '@commitlint/cli': 17.7.2 + '@commitlint/config-conventional': 17.7.0 + '@forevolve/bootstrap-dark': 4.0.0 + '@fortawesome/fontawesome-free': 5.15.4 + '@hapi/boom': 10.0.1 + '@ioredis/commands': 1.2.0 + '@koa/router': 12.0.1 + '@ladjs/api': 14.1.8 + '@ladjs/assets': 2.1.22 + '@ladjs/browserslist-config': 1.0.0 + '@ladjs/consolidate': 1.0.3 + '@ladjs/env': 4.0.0 + '@ladjs/graceful': 3.2.2 + '@ladjs/gulp-envify': 2.0.1 + '@ladjs/i18n': 8.0.3 + '@ladjs/koa-simple-ratelimit': 4.1.1 + '@ladjs/mongoose': 6.0.1 + '@ladjs/mongoose-error-messages': 1.0.0 + '@ladjs/pick-original': 1.0.0 + '@ladjs/policies': 11.1.1 + '@ladjs/proxy': 4.0.0 + '@ladjs/pug-lint': 2.6.1 + '@ladjs/pug-lint-config-lad': 0.1.1 + '@ladjs/redis': 1.1.1 + '@ladjs/shared-config': 9.1.2 + '@ladjs/web': 21.0.8 + '@octokit/core': 4.2.4 + '@prettier/plugin-pug': 2.5.1 + '@ronilaukkarinen/gulp-stylelint': 14.1.1 + '@sidoshi/random-string': 1.0.0 + '@tkrotoff/bootstrap-floating-label': '0.8' + adm-zip: 0.5.10 + ansi-html-community: 0.0.8 + apexcharts: 3.43.0 + array-join-conjunction: 1.0.0 + async-ratelimiter: 1.3.11 + ava: 5.3.1 + axe: 12.2.3 + babel-eslint: 10.1.0 + basic-auth: 2.0.1 + boolean: 3.2.0 + bootstrap: 4.6.2 + bree: 9.1.3 + browserify: 17.0.0 + bson-objectid: 2.0.4 + bundle-collapser: 1.4.0 + bytes: 3.1.2 + cabin: 13.2.5 + capitalize: 2.0.4 + captain-hook: 0.0.3 + clipboard: 2.0.11 + codemirror: '5' + country-list: 2.2.0 + crypto-random-string: '3' + cssnano: 6.0.1 + cuid: 2.1.8 + custom-fonts-in-emails: 5.0.3 + dashify: 2.0.0 + dayjs: 1.11.10 + dayjs-with-plugins: 1.0.3 + dedent: 0.7.0 + del: 6.1.1 + delay: 5.0.0 + detect-libc: 2.0.2 + email-addresses: 5.0.0 + email-regex-safe: 4.0.0 + email-templates: 11.1.1 + eslint: 8.39.0 + eslint-config-xo-lass: 2.0.1 + eslint-formatter-pretty: 5.0.0 + eslint-plugin-compat: 4.2.0 + eslint-plugin-no-smart-quotes: 1.3.0 + factor-bundle: 2.5.0 + factory-girl: 5.0.4 + fast-safe-stringify: 2.1.1 + fast-xml-parser: 4.3.2 + fixpack: 4.0.0 + gemoji: '6' + get-port: '5' + get-stream: '6' + github-markdown-css: 5.3.0 + globby: '11' + got: 11.8.6 + gulp: 4.0.2 + gulp-babel: 8.0.0 + gulp-cli: 2.3.0 + gulp-concat: 2.6.1 + gulp-filter: 7.0.0 + gulp-imagemin: '7' + gulp-livereload: 4.0.2 + gulp-order: 1.2.0 + gulp-postcss: 9.0.1 + gulp-prettier: 4.0.0 + gulp-pug-linter: 1.5.0 + gulp-purgecss: 5.0.0 + gulp-remark: '9' + gulp-rename: 2.0.0 + gulp-replace: 1.1.4 + gulp-rev: 9.0.0 + gulp-rev-all: 3.0.0 + gulp-rev-sri: 0.0.4 + gulp-sass: 5.1.0 + gulp-sourcemaps: 3.0.0 + gulp-terser: 2.1.0 + gulp-unassert: 3.0.0 + gulp-xo: 0.25.0 + highlight.js: 11.9.0 + html-to-text: 8.2.1 + htmlhint: 1.1.4 + humanize-string: '2' + husky: 8.0.3 + iconv: 3.0.1 + imagemin-pngquant: 9.0.2 + imapflow: 1.0.144 + into-stream: 6.0.0 + ioredfour: 1.2.0-ioredis-07 + ioredis: 5.3.2 + ioredis-mock: 8.9.0 + ip: 1.1.8 + is-ci: 3.0.1 + is-fqdn: 2.0.1 + is-string-and-not-blank: 0.0.2 + isbot: 3.7.0 + jquery: 3.5.1 + js-confetti: 0.11.0 + jsdom: '16' + koa-bodyparser: 4.4.1 + koa-convert: 2.0.0 + koa-ctx-paginate: 0.0.6 + koa-meta: 4.0.2 + koa-passport: 5.0.0 + koa-views-render: 0.0.1 + lazyframe: 2.2.7 + lazyload: 2.0.0-rc.2 + libmime: 5.2.1 + lint-staged: 14.0.1 + lodash: 4.17.21 + mailauth: 4.5.2 + mailparser: 3.6.5 + mailsplit: 5.4.0 + make-dir: 3.1.0 + mandarin: 5.0.6 + manifest-rev: 1.0.3 + markdown-it: 13.0.2 + markdown-it-emoji: 2.0.2 + markdown-it-github-headings: 2.0.1 + markdown-it-highlightjs: 4.0.1 + markdown-it-task-checkbox: 1.0.6 + memoizee: 0.4.15 + mongodb-memory-server: 8.15.1 + mongodb-query-parser: 2.5.0 + mongodb-short-id: 0.3.3 + mongoose: 6.11.1 + mongoose-common-plugin: 4.0.0 + mongoose-omit-common-fields: 0.0.6 + mongoose-unique-validator: 3.1.0 + ms: 2.1.3 + mx-connect: 1.4.4 + node-gzip: 1.1.2 + node-html-parser: 6.1.10 + node-sass: 8.0.0 + nodemailer: 6.9.6 + nodemon: 2.0.22 + npm-run-all: 4.1.5 + nps: 5.10.0 + nps-utils: 1.7.0 + numeral: 2.0.6 + nyc: 15.1.0 + otplib: 12.0.1 + p-event: 4.2.0 + p-filter: '2' + p-map: '4' + p-map-series: '2' + p-queue: '6' + p-reduce: '2' + p-retry: '4' + p-series: '2' + p-timeout: '4' + p-wait-for: '3' + p-whilst: '2' + parse-domain: '5' + parse-err: 1.0.0 + parse-git-config: 3.0.0 + parse-logs: 3.0.2 + passport-local-mongoose: 7.1.2 + paypal-rest-sdk: 1.8.1 + pify: '5' + pluralize: 8.0.0 + popper.js: 1.16.1 + postcss: 8.4.31 + postcss-discard-font-face: 3.0.0 + postcss-inline-base64: 7.3.1 + postcss-preset-env: 9.2.0 + postcss-reporter: 7.0.5 + postcss-scss: 4.0.9 + prepare-stack-trace: 0.0.4 + prettier: 2.8.8 + pretty-ms: '7' + preview-email: 3.0.19 + pug: 3.0.2 + pump: 3.0.0 + purgecss-from-pug: 5.0.0 + qrcode: 1.5.3 + qs: 6.11.2 + rc: 1.2.8 + re2: 1.20.3 + regex-parser: 2.2.11 + remark-cli: 11.0.0 + remark-license: 6.1.0 + remark-preset-github: 4.0.4 + reserved-email-addresses-list: 2.0.13 + rev-hash: '3' + sanitize-html: 2.11.0 + sass: 1.69.3 + scmp: 2.1.0 + sender-rewriting-scheme: 1.0.0 + sharp: 0.32.6 + signale: 1.4.0 + sinon: 15.1.2 + sitemap: 7.1.1 + smtp-server: 3.13.0 + snappy: 7.2.2 + spamscanner: 5.1.5 + speakingurl: 14.0.1 + spinkit: 2.0.1 + split-lines: '2' + stacktrace-js: 2.0.2 + statuses: 2.0.1 + stripe: 10.17.0 + striptags: 3.2.0 + stylelint: 15.10.3 + stylelint-config-recommended-scss: 12.0.0 + stylelint-scss: 5.2.1 + superagent: 8.1.2 + supertest: 6.3.3 + sweetalert2: '8' + tangerine: 1.5.4 + through2: 4.0.2 + titleize: '2' + twilio: 4.18.1 + uncaught: 0.0.5 + undici: 5.26.3 + url-parse: 1.5.10 + url-regex-safe: 4.0.0 + validator: 13.11.0 + web-resource-inliner: 6.0.1 + wildduck: 1.40.9 + wkhtmltopdf: 0.4.0 + xo: 0.53.1 + zone-mta: 3.6.13 + zxcvbn: 4.4.2 + +dependencies: + '@forevolve/bootstrap-dark': 4.0.0 + '@fortawesome/fontawesome-free': 5.15.4 + '@hapi/boom': 10.0.1 + '@ioredis/commands': 1.2.0 + '@koa/router': 12.0.1 + '@ladjs/api': 14.1.8_axe@12.2.3+cabin@13.2.5 + '@ladjs/assets': 2.1.22_spinkit@2.0.1 + '@ladjs/consolidate': 1.0.3_qya2zus74w74bxmr63tupuspuq + '@ladjs/env': 4.0.0 + '@ladjs/graceful': 3.2.2 + '@ladjs/i18n': 8.0.3 + '@ladjs/koa-simple-ratelimit': 4.1.1 + '@ladjs/mongoose': 6.0.1_mongoose@6.11.1 + '@ladjs/mongoose-error-messages': 1.0.0_mongoose@6.11.1 + '@ladjs/pick-original': 1.0.0 + '@ladjs/policies': 11.1.1_undici@5.26.3 + '@ladjs/proxy': 4.0.0 + '@ladjs/redis': 1.1.1 + '@ladjs/shared-config': 9.1.2 + '@ladjs/web': 21.0.8_jqbmnpgnkpyalkwwr6c2ehqbz4 + '@octokit/core': 4.2.4 + '@sidoshi/random-string': 1.0.0 + '@tkrotoff/bootstrap-floating-label': 0.8.0_bootstrap@4.6.2 + adm-zip: 0.5.10 + ansi-html-community: 0.0.8 + apexcharts: 3.43.0 + array-join-conjunction: 1.0.0 + async-ratelimiter: 1.3.11 + axe: 12.2.3 + basic-auth: 2.0.1 + boolean: 3.2.0 + bootstrap: 4.6.2_a2quc6v7zrhtmn4zqsvmmrpbnq + bree: 9.1.3 + bson-objectid: 2.0.4 + bytes: 3.1.2 + cabin: 13.2.5_axe@12.2.3 + capitalize: 2.0.4 + captain-hook: 0.0.3 + clipboard: 2.0.11 + codemirror: 5.65.15 + country-list: 2.2.0 + crypto-random-string: 3.3.1 + cuid: 2.1.8 + custom-fonts-in-emails: 5.0.3 + dashify: 2.0.0 + dayjs: 1.11.10 + dayjs-with-plugins: 1.0.3_dayjs@1.11.10 + dedent: 0.7.0 + delay: 5.0.0 + detect-libc: 2.0.2 + email-addresses: 5.0.0 + email-regex-safe: 4.0.0_re2@1.20.3 + email-templates: 11.1.1_h2kxvyt2qvpqxaqyxjl2vnrrki + fast-safe-stringify: 2.1.1 + fast-xml-parser: 4.3.2 + gemoji: 6.1.0 + get-stream: 6.0.1 + github-markdown-css: 5.3.0 + got: 11.8.6 + gulp-rename: 2.0.0 + gulp-replace: 1.1.4 + highlight.js: 11.9.0 + html-to-text: 8.2.1 + htmlhint: 1.1.4 + humanize-string: 2.1.0 + iconv: 3.0.1 + imapflow: 1.0.144 + into-stream: 6.0.0 + ioredfour: 1.2.0-ioredis-07 + ip: 1.1.8 + is-ci: 3.0.1 + is-fqdn: 2.0.1 + is-string-and-not-blank: 0.0.2 + isbot: 3.7.0 + jquery: 3.5.1 + js-confetti: 0.11.0 + jsdom: 16.7.0 + koa-bodyparser: 4.4.1 + koa-convert: 2.0.0 + koa-ctx-paginate: 0.0.6 + koa-meta: 4.0.2 + koa-passport: 5.0.0 + koa-views-render: 0.0.1 + lazyframe: 2.2.7 + lazyload: 2.0.0-rc.2 + libmime: 5.2.1 + lodash: 4.17.21 + mailauth: 4.5.2 + mailparser: 3.6.5 + mailsplit: 5.4.0 + mandarin: 5.0.6 + manifest-rev: 1.0.3 + markdown-it: 13.0.2 + markdown-it-emoji: 2.0.2 + markdown-it-github-headings: 2.0.1 + markdown-it-highlightjs: 4.0.1 + markdown-it-task-checkbox: 1.0.6 + memoizee: 0.4.15 + mongodb-memory-server: 8.15.1 + mongodb-query-parser: 2.5.0 + mongodb-short-id: 0.3.3_snappy@7.2.2 + mongoose: 6.11.1 + mongoose-common-plugin: 4.0.0_mongoose@6.11.1 + mongoose-omit-common-fields: 0.0.6 + mongoose-unique-validator: 3.1.0_mongoose@6.11.1 + ms: 2.1.3 + mx-connect: 1.4.4 + node-gzip: 1.1.2 + node-html-parser: 6.1.10 + nodemailer: 6.9.6 + numeral: 2.0.6 + otplib: 12.0.1 + p-event: 4.2.0 + p-filter: 2.1.0 + p-map: 4.0.0 + p-map-series: 2.1.0 + p-queue: 6.6.2 + p-reduce: 2.1.0 + p-retry: 4.6.2 + p-series: 2.1.0 + p-timeout: 4.1.0 + p-wait-for: 3.2.0 + p-whilst: 2.1.0 + parse-domain: 5.0.0 + parse-err: 1.0.0 + parse-logs: 3.0.2 + passport-local-mongoose: 7.1.2 + paypal-rest-sdk: 1.8.1 + pify: 5.0.0 + pluralize: 8.0.0 + popper.js: 1.16.1 + postcss-discard-font-face: 3.0.0 + prepare-stack-trace: 0.0.4 + pretty-ms: 7.0.1 + preview-email: 3.0.19 + pug: 3.0.2 + qrcode: 1.5.3 + qs: 6.11.2 + re2: 1.20.3 + regex-parser: 2.2.11 + reserved-email-addresses-list: 2.0.13 + rev-hash: 3.0.0 + sanitize-html: 2.11.0 + scmp: 2.1.0 + sender-rewriting-scheme: 1.0.0 + sharp: 0.32.6 + signale: 1.4.0 + sitemap: 7.1.1 + smtp-server: 3.13.0 + snappy: 7.2.2 + spamscanner: 5.1.5 + speakingurl: 14.0.1 + spinkit: 2.0.1 + split-lines: 2.1.0 + stacktrace-js: 2.0.2 + statuses: 2.0.1 + stripe: 10.17.0 + striptags: 3.2.0 + superagent: 8.1.2 + sweetalert2: 8.19.1 + tangerine: 1.5.4_undici@5.26.3 + titleize: 2.1.0 + twilio: 4.18.1 + uncaught: 0.0.5 + undici: 5.26.3 + url-parse: 1.5.10 + url-regex-safe: 4.0.0_re2@1.20.3 + validator: 13.11.0 + web-resource-inliner: 6.0.1 + wildduck: 1.40.9 + wkhtmltopdf: 0.4.0 + zone-mta: 3.6.13 + zxcvbn: 4.4.2 + +devDependencies: + '@babel/cli': 7.23.0_@babel+core@7.23.2 + '@babel/core': 7.23.2 + '@babel/polyfill': 7.12.1 + '@babel/preset-env': 7.23.2_@babel+core@7.23.2 + '@commitlint/cli': 17.7.2 + '@commitlint/config-conventional': 17.7.0 + '@ladjs/browserslist-config': 1.0.0 + '@ladjs/gulp-envify': 2.0.1 + '@ladjs/pug-lint': 2.6.1 + '@ladjs/pug-lint-config-lad': 0.1.1 + '@prettier/plugin-pug': 2.5.1_prettier@2.8.8 + '@ronilaukkarinen/gulp-stylelint': 14.1.1_stylelint@15.10.3 + ava: 5.3.1 + babel-eslint: 10.1.0_eslint@8.39.0 + browserify: 17.0.0 + bundle-collapser: 1.4.0 + cssnano: 6.0.1_postcss@8.4.31 + del: 6.1.1 + eslint: 8.39.0 + eslint-config-xo-lass: 2.0.1 + eslint-formatter-pretty: 5.0.0 + eslint-plugin-compat: 4.2.0_eslint@8.39.0 + eslint-plugin-no-smart-quotes: 1.3.0 + factor-bundle: 2.5.0 + factory-girl: 5.0.4 + fixpack: 4.0.0 + get-port: 5.1.1 + globby: 11.1.0 + gulp: 4.0.2 + gulp-babel: 8.0.0_@babel+core@7.23.2 + gulp-cli: 2.3.0 + gulp-concat: 2.6.1 + gulp-filter: 7.0.0_gulp@4.0.2 + gulp-imagemin: 7.1.0_gulp@4.0.2 + gulp-livereload: 4.0.2 + gulp-order: 1.2.0 + gulp-postcss: 9.0.1_postcss@8.4.31 + gulp-prettier: 4.0.0 + gulp-pug-linter: 1.5.0 + gulp-purgecss: 5.0.0 + gulp-remark: 9.0.0 + gulp-rev: 9.0.0 + gulp-rev-all: 3.0.0 + gulp-rev-sri: 0.0.4 + gulp-sass: 5.1.0 + gulp-sourcemaps: 3.0.0 + gulp-terser: 2.1.0 + gulp-unassert: 3.0.0 + gulp-xo: 0.25.0_gulp@4.0.2 + husky: 8.0.3 + imagemin-pngquant: 9.0.2 + ioredis: 5.3.2 + ioredis-mock: 8.9.0_ioredis@5.3.2 + lint-staged: 14.0.1 + make-dir: 3.1.0 + node-sass: 8.0.0 + nodemon: 2.0.22 + npm-run-all: 4.1.5 + nps: 5.10.0 + nps-utils: 1.7.0 + nyc: 15.1.0 + parse-git-config: 3.0.0 + postcss: 8.4.31 + postcss-inline-base64: 7.3.1_postcss@8.4.31 + postcss-preset-env: 9.2.0_postcss@8.4.31 + postcss-reporter: 7.0.5_postcss@8.4.31 + postcss-scss: 4.0.9_postcss@8.4.31 + prettier: 2.8.8 + pump: 3.0.0 + purgecss-from-pug: 5.0.0 + rc: 1.2.8 + remark-cli: 11.0.0 + remark-license: 6.1.0 + remark-preset-github: 4.0.4 + sass: 1.69.3 + sinon: 15.1.2 + stylelint: 15.10.3 + stylelint-config-recommended-scss: 12.0.0_gvnhvhfdmzdb2esu35vebkauaa + stylelint-scss: 5.2.1_stylelint@15.10.3 + supertest: 6.3.3 + through2: 4.0.2 + xo: 0.53.1 + +packages: + + /@aashutoshrathi/word-wrap/1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@ampproject/remapping/2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 + + /@aws-crypto/crc32/3.0.0: + resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.428.0 + tslib: 1.14.1 + dev: false + optional: true + + /@aws-crypto/ie11-detection/3.0.0: + resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} + dependencies: + tslib: 1.14.1 + dev: false + optional: true + + /@aws-crypto/sha256-browser/3.0.0: + resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} + dependencies: + '@aws-crypto/ie11-detection': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-crypto/supports-web-crypto': 3.0.0 + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.428.0 + '@aws-sdk/util-locate-window': 3.310.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + dev: false + optional: true + + /@aws-crypto/sha256-js/3.0.0: + resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.428.0 + tslib: 1.14.1 + dev: false + optional: true + + /@aws-crypto/supports-web-crypto/3.0.0: + resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} + dependencies: + tslib: 1.14.1 + dev: false + optional: true + + /@aws-crypto/util/3.0.0: + resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} + dependencies: + '@aws-sdk/types': 3.428.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + dev: false + optional: true + + /@aws-sdk/client-cognito-identity/3.428.0: + resolution: {integrity: sha512-uj296JRU0LlMVtv7oS9cBTutAya1Gl171BJOl9s/SotMgybUAxnmE+hQdXv2HQP8qwy95wAptbcpDDh4kuOiYQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sts': 3.428.0 + '@aws-sdk/credential-provider-node': 3.428.0 + '@aws-sdk/middleware-host-header': 3.428.0 + '@aws-sdk/middleware-logger': 3.428.0 + '@aws-sdk/middleware-recursion-detection': 3.428.0 + '@aws-sdk/middleware-signing': 3.428.0 + '@aws-sdk/middleware-user-agent': 3.428.0 + '@aws-sdk/region-config-resolver': 3.428.0 + '@aws-sdk/types': 3.428.0 + '@aws-sdk/util-endpoints': 3.428.0 + '@aws-sdk/util-user-agent-browser': 3.428.0 + '@aws-sdk/util-user-agent-node': 3.428.0 + '@smithy/config-resolver': 2.0.14 + '@smithy/fetch-http-handler': 2.2.3 + '@smithy/hash-node': 2.0.11 + '@smithy/invalid-dependency': 2.0.11 + '@smithy/middleware-content-length': 2.0.13 + '@smithy/middleware-endpoint': 2.1.1 + '@smithy/middleware-retry': 2.0.16 + '@smithy/middleware-serde': 2.0.11 + '@smithy/middleware-stack': 2.0.5 + '@smithy/node-config-provider': 2.1.1 + '@smithy/node-http-handler': 2.1.7 + '@smithy/protocol-http': 3.0.7 + '@smithy/smithy-client': 2.1.11 + '@smithy/types': 2.3.5 + '@smithy/url-parser': 2.0.11 + '@smithy/util-base64': 2.0.0 + '@smithy/util-body-length-browser': 2.0.0 + '@smithy/util-body-length-node': 2.1.0 + '@smithy/util-defaults-mode-browser': 2.0.15 + '@smithy/util-defaults-mode-node': 2.0.19 + '@smithy/util-retry': 2.0.4 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + optional: true + + /@aws-sdk/client-sso/3.428.0: + resolution: {integrity: sha512-6BuY7cd1licnCZTKuI/IK3ycKATIgsG53TuaK1hZcikwUB2Oiu2z6K+aWpmO9mJuJ6qAoE4dLlAy6lBBBkG6yQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/middleware-host-header': 3.428.0 + '@aws-sdk/middleware-logger': 3.428.0 + '@aws-sdk/middleware-recursion-detection': 3.428.0 + '@aws-sdk/middleware-user-agent': 3.428.0 + '@aws-sdk/region-config-resolver': 3.428.0 + '@aws-sdk/types': 3.428.0 + '@aws-sdk/util-endpoints': 3.428.0 + '@aws-sdk/util-user-agent-browser': 3.428.0 + '@aws-sdk/util-user-agent-node': 3.428.0 + '@smithy/config-resolver': 2.0.14 + '@smithy/fetch-http-handler': 2.2.3 + '@smithy/hash-node': 2.0.11 + '@smithy/invalid-dependency': 2.0.11 + '@smithy/middleware-content-length': 2.0.13 + '@smithy/middleware-endpoint': 2.1.1 + '@smithy/middleware-retry': 2.0.16 + '@smithy/middleware-serde': 2.0.11 + '@smithy/middleware-stack': 2.0.5 + '@smithy/node-config-provider': 2.1.1 + '@smithy/node-http-handler': 2.1.7 + '@smithy/protocol-http': 3.0.7 + '@smithy/smithy-client': 2.1.11 + '@smithy/types': 2.3.5 + '@smithy/url-parser': 2.0.11 + '@smithy/util-base64': 2.0.0 + '@smithy/util-body-length-browser': 2.0.0 + '@smithy/util-body-length-node': 2.1.0 + '@smithy/util-defaults-mode-browser': 2.0.15 + '@smithy/util-defaults-mode-node': 2.0.19 + '@smithy/util-retry': 2.0.4 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + optional: true + + /@aws-sdk/client-sts/3.428.0: + resolution: {integrity: sha512-ko9hgmIkS5FNPYtT3pntGGmp+yi+VXBEgePUBoplEKjCxsX/aTgFcq2Rs9duD9/CzkThd42Z0l0fWsVAErVxWQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/credential-provider-node': 3.428.0 + '@aws-sdk/middleware-host-header': 3.428.0 + '@aws-sdk/middleware-logger': 3.428.0 + '@aws-sdk/middleware-recursion-detection': 3.428.0 + '@aws-sdk/middleware-sdk-sts': 3.428.0 + '@aws-sdk/middleware-signing': 3.428.0 + '@aws-sdk/middleware-user-agent': 3.428.0 + '@aws-sdk/region-config-resolver': 3.428.0 + '@aws-sdk/types': 3.428.0 + '@aws-sdk/util-endpoints': 3.428.0 + '@aws-sdk/util-user-agent-browser': 3.428.0 + '@aws-sdk/util-user-agent-node': 3.428.0 + '@smithy/config-resolver': 2.0.14 + '@smithy/fetch-http-handler': 2.2.3 + '@smithy/hash-node': 2.0.11 + '@smithy/invalid-dependency': 2.0.11 + '@smithy/middleware-content-length': 2.0.13 + '@smithy/middleware-endpoint': 2.1.1 + '@smithy/middleware-retry': 2.0.16 + '@smithy/middleware-serde': 2.0.11 + '@smithy/middleware-stack': 2.0.5 + '@smithy/node-config-provider': 2.1.1 + '@smithy/node-http-handler': 2.1.7 + '@smithy/protocol-http': 3.0.7 + '@smithy/smithy-client': 2.1.11 + '@smithy/types': 2.3.5 + '@smithy/url-parser': 2.0.11 + '@smithy/util-base64': 2.0.0 + '@smithy/util-body-length-browser': 2.0.0 + '@smithy/util-body-length-node': 2.1.0 + '@smithy/util-defaults-mode-browser': 2.0.15 + '@smithy/util-defaults-mode-node': 2.0.19 + '@smithy/util-retry': 2.0.4 + '@smithy/util-utf8': 2.0.0 + fast-xml-parser: 4.2.5 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + optional: true + + /@aws-sdk/credential-provider-cognito-identity/3.428.0: + resolution: {integrity: sha512-amq+gnybLBOyX1D+GdcjEvios8VBL4TaTyuXPnAjkhinv2e6GHQ0/7QeaI5v4dd4YT76+Nz7a577VXfMf/Ijog==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-cognito-identity': 3.428.0 + '@aws-sdk/types': 3.428.0 + '@smithy/property-provider': 2.0.12 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + optional: true + + /@aws-sdk/credential-provider-env/3.428.0: + resolution: {integrity: sha512-e6fbY174Idzw0r5ZMT1qkDh+dpOp1DX3ickhr7J6ipo3cUGLI45Y5lnR9nYXWfB5o/wiNv4zXgN+Y3ORJJHzyA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.428.0 + '@smithy/property-provider': 2.0.12 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/credential-provider-http/3.428.0: + resolution: {integrity: sha512-aLrsmLVRTuO/Gx8AYxIUkZ12DdsFnVK9lbfNpeNOisVjM6ZvjCHqMgDsh12ydkUpmb7C0v+ALj8bHzwKcpyMdA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.428.0 + '@smithy/fetch-http-handler': 2.2.3 + '@smithy/node-http-handler': 2.1.7 + '@smithy/property-provider': 2.0.12 + '@smithy/protocol-http': 3.0.7 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/credential-provider-ini/3.428.0: + resolution: {integrity: sha512-JPc0pVAsP8fOfMxhmPhp7PjddqHaPGBwgVI+wgbkFRUDOmeKCVhoxCB8Womx0R07qRqD5ZCUKBS2NHQ2b3MFRQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.428.0 + '@aws-sdk/credential-provider-process': 3.428.0 + '@aws-sdk/credential-provider-sso': 3.428.0 + '@aws-sdk/credential-provider-web-identity': 3.428.0 + '@aws-sdk/types': 3.428.0 + '@smithy/credential-provider-imds': 2.0.16 + '@smithy/property-provider': 2.0.12 + '@smithy/shared-ini-file-loader': 2.2.0 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + optional: true + + /@aws-sdk/credential-provider-node/3.428.0: + resolution: {integrity: sha512-o8toLXf6/sklBpw2e1mzAUq6SvXQzT6iag7Xbg9E0Z2EgVeXLTnWeVto3ilU3cmhTHXBp6wprwUUq2jbjTxMcg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/credential-provider-env': 3.428.0 + '@aws-sdk/credential-provider-ini': 3.428.0 + '@aws-sdk/credential-provider-process': 3.428.0 + '@aws-sdk/credential-provider-sso': 3.428.0 + '@aws-sdk/credential-provider-web-identity': 3.428.0 + '@aws-sdk/types': 3.428.0 + '@smithy/credential-provider-imds': 2.0.16 + '@smithy/property-provider': 2.0.12 + '@smithy/shared-ini-file-loader': 2.2.0 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + optional: true + + /@aws-sdk/credential-provider-process/3.428.0: + resolution: {integrity: sha512-UG2S2/4Wrskbkbgt9fBlnzwQ2hfTXvLJwUgGOluSOf6+mGCcoDku4zzc9EQdk1MwN5Us+ziyMrIMNY5sbdLg6g==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.428.0 + '@smithy/property-provider': 2.0.12 + '@smithy/shared-ini-file-loader': 2.2.0 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/credential-provider-sso/3.428.0: + resolution: {integrity: sha512-sW2+kSlICSNntsNhLV5apqJkIOXH5hFISCjwVfyB9JXJQDAj8rzkiFfRsKwQ3aTlTYCysrGesIn46+GRP5AgZw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/client-sso': 3.428.0 + '@aws-sdk/token-providers': 3.428.0 + '@aws-sdk/types': 3.428.0 + '@smithy/property-provider': 2.0.12 + '@smithy/shared-ini-file-loader': 2.2.0 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + optional: true + + /@aws-sdk/credential-provider-web-identity/3.428.0: + resolution: {integrity: sha512-ueuUPPlrJFvtDUVTGnClUGt1wxCbEiKArknah/w9cfcc/c1HtFd/M7x/z2Sm0gSItR45sVcK54qjzmhm29DMzg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.428.0 + '@smithy/property-provider': 2.0.12 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/credential-providers/3.428.0: + resolution: {integrity: sha512-BpCrxjiZ4H5PC4vYA7SdTbmvLLrkuaudzHuoPMZ55RGFGfl9xN8caCtXktohzX8+Dn0jutsXuclPwazHOVz9cg==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/client-cognito-identity': 3.428.0 + '@aws-sdk/client-sso': 3.428.0 + '@aws-sdk/client-sts': 3.428.0 + '@aws-sdk/credential-provider-cognito-identity': 3.428.0 + '@aws-sdk/credential-provider-env': 3.428.0 + '@aws-sdk/credential-provider-http': 3.428.0 + '@aws-sdk/credential-provider-ini': 3.428.0 + '@aws-sdk/credential-provider-node': 3.428.0 + '@aws-sdk/credential-provider-process': 3.428.0 + '@aws-sdk/credential-provider-sso': 3.428.0 + '@aws-sdk/credential-provider-web-identity': 3.428.0 + '@aws-sdk/types': 3.428.0 + '@smithy/credential-provider-imds': 2.0.16 + '@smithy/property-provider': 2.0.12 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + optional: true + + /@aws-sdk/middleware-host-header/3.428.0: + resolution: {integrity: sha512-iIHbW5Ym60ol9Q6vsLnaiNdeUIa9DA0OuoOe9LiHC8SYUYVAAhE+xJXUhn1qk/J7z+4qGOkDnVyEvnSaqRPL/w==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.428.0 + '@smithy/protocol-http': 3.0.7 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/middleware-logger/3.428.0: + resolution: {integrity: sha512-1P0V0quL9u2amdNOn6yYT7/ToQUmkLJqCKHPxsRyDB829vBThWndvvH5MkoItj/VgE1zWqMtrzN3xtzD7zx6Qg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.428.0 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/middleware-recursion-detection/3.428.0: + resolution: {integrity: sha512-xC0OMduCByyRdiQz324RXy4kunnCG4LUJCfvdoegM33Elp9ex0D3fcfO1mUgV8qiLwSennIsSRVXHuhNxE2HZA==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.428.0 + '@smithy/protocol-http': 3.0.7 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/middleware-sdk-sts/3.428.0: + resolution: {integrity: sha512-Uutl2niYXTnNP8v84v6umWDHD5no7d5/OqkZE1DsmeKR/dje90J5unJWf7MOsqvYm0JGDEWF4lk9xGVyqsw+Aw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/middleware-signing': 3.428.0 + '@aws-sdk/types': 3.428.0 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/middleware-signing/3.428.0: + resolution: {integrity: sha512-oMSerTPwtsQAR7fIU/G0b0BA30wF+MC4gZSrJjbypF8MK8nPC2yMfKLR8+QavGOGEW7rUMQ0uklThMTTwQEXNQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.428.0 + '@smithy/property-provider': 2.0.12 + '@smithy/protocol-http': 3.0.7 + '@smithy/signature-v4': 2.0.11 + '@smithy/types': 2.3.5 + '@smithy/util-middleware': 2.0.4 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/middleware-user-agent/3.428.0: + resolution: {integrity: sha512-+GAhObeHRick2D5jr3YkPckjcggt5v6uUVtEUQW2AdD65cE5PjIvmksv6FuM/mME/9nNA+wufQnHbLI8teLeaw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.428.0 + '@aws-sdk/util-endpoints': 3.428.0 + '@smithy/protocol-http': 3.0.7 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/region-config-resolver/3.428.0: + resolution: {integrity: sha512-VqyHZ/Hoz3WrXXMx8cAhFBl8IpjodbRsTjBI117QPq1YRCegxNdGvqmGZnJj8N2Ef9MP1iU30ZWQB+sviDcogA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/node-config-provider': 2.1.1 + '@smithy/types': 2.3.5 + '@smithy/util-config-provider': 2.0.0 + '@smithy/util-middleware': 2.0.4 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/token-providers/3.428.0: + resolution: {integrity: sha512-Jciofr//rB1v1FLxADkXoHOCmYyiv2HVNlOq3z5Zkch9ipItOfD6X7f4G4n+IZzElIFzwe4OKoBtJfcnnfo3Pg==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/middleware-host-header': 3.428.0 + '@aws-sdk/middleware-logger': 3.428.0 + '@aws-sdk/middleware-recursion-detection': 3.428.0 + '@aws-sdk/middleware-user-agent': 3.428.0 + '@aws-sdk/types': 3.428.0 + '@aws-sdk/util-endpoints': 3.428.0 + '@aws-sdk/util-user-agent-browser': 3.428.0 + '@aws-sdk/util-user-agent-node': 3.428.0 + '@smithy/config-resolver': 2.0.14 + '@smithy/fetch-http-handler': 2.2.3 + '@smithy/hash-node': 2.0.11 + '@smithy/invalid-dependency': 2.0.11 + '@smithy/middleware-content-length': 2.0.13 + '@smithy/middleware-endpoint': 2.1.1 + '@smithy/middleware-retry': 2.0.16 + '@smithy/middleware-serde': 2.0.11 + '@smithy/middleware-stack': 2.0.5 + '@smithy/node-config-provider': 2.1.1 + '@smithy/node-http-handler': 2.1.7 + '@smithy/property-provider': 2.0.12 + '@smithy/protocol-http': 3.0.7 + '@smithy/shared-ini-file-loader': 2.2.0 + '@smithy/smithy-client': 2.1.11 + '@smithy/types': 2.3.5 + '@smithy/url-parser': 2.0.11 + '@smithy/util-base64': 2.0.0 + '@smithy/util-body-length-browser': 2.0.0 + '@smithy/util-body-length-node': 2.1.0 + '@smithy/util-defaults-mode-browser': 2.0.15 + '@smithy/util-defaults-mode-node': 2.0.19 + '@smithy/util-retry': 2.0.4 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + optional: true + + /@aws-sdk/types/3.428.0: + resolution: {integrity: sha512-4T0Ps2spjg3qbWE6ZK13Vd3FnzpfliaiotqjxUK5YhjDrKXeT36HJp46JhDupElQuHtTkpdiJOSYk2lvY2H4IA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/util-endpoints/3.428.0: + resolution: {integrity: sha512-ToKMhYlUWJ0YrbggpJLZeyZZNDXtQ4NITxqo/oeGltTT9KG4o/LqVY59EveV0f8P32ObDyj9Vh1mnjxeo3DxGw==} + engines: {node: '>=14.0.0'} + dependencies: + '@aws-sdk/types': 3.428.0 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/util-locate-window/3.310.0: + resolution: {integrity: sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/util-user-agent-browser/3.428.0: + resolution: {integrity: sha512-qlc2UoGsmCpuh1ErY3VayZuAGl74TWWcLmhhQMkeByFSb6KooBlwOmDpDzJRtgwJoe0KXnyHBO6lzl9iczcozg==} + dependencies: + '@aws-sdk/types': 3.428.0 + '@smithy/types': 2.3.5 + bowser: 2.11.0 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/util-user-agent-node/3.428.0: + resolution: {integrity: sha512-s721C3H8TkNd0usWLPEAy7yW2lEglR8QAYojdQGzE0e0wymc671nZAFePSZFRtmqZiFOSfk0R602L5fDbP3a8Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + dependencies: + '@aws-sdk/types': 3.428.0 + '@smithy/node-config-provider': 2.1.1 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/util-utf8-browser/3.259.0: + resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@babel/cli/7.23.0_@babel+core@7.23.2: + resolution: {integrity: sha512-17E1oSkGk2IwNILM4jtfAvgjt+ohmpfBky8aLerUfYZhiPNg7ca+CRCxZn8QDxwNhV/upsc2VHBCqGFIR+iBfA==} + engines: {node: '>=6.9.0'} + hasBin: true + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@jridgewell/trace-mapping': 0.3.19 + commander: 4.1.1 + convert-source-map: 2.0.0 + fs-readdir-recursive: 1.1.0 + glob: 7.2.3 + make-dir: 2.1.0 + slash: 2.0.0 + optionalDependencies: + '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 + chokidar: 3.5.3 + dev: true + + /@babel/code-frame/7.12.11: + resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} + dependencies: + '@babel/highlight': 7.22.20 + dev: true + + /@babel/code-frame/7.22.13: + resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.22.20 + chalk: 2.4.2 + + /@babel/compat-data/7.23.2: + resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==} + engines: {node: '>=6.9.0'} + + /@babel/core/7.23.2: + resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-module-transforms': 7.23.0_@babel+core@7.23.2 + '@babel/helpers': 7.23.2 + '@babel/parser': 7.23.0 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /@babel/eslint-parser/7.22.15_fnfqbunzrceougeoy4y7y2tjq4: + resolution: {integrity: sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 + dependencies: + '@babel/core': 7.23.2 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 7.32.0 + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 + dev: true + + /@babel/generator/7.23.0: + resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 + jsesc: 2.5.2 + + /@babel/helper-annotate-as-pure/7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-builder-binary-assignment-operator-visitor/7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-compilation-targets/7.22.15: + resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.2 + '@babel/helper-validator-option': 7.22.15 + browserslist: 4.22.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + /@babel/helper-create-class-features-plugin/7.22.15_@babel+core@7.23.2: + resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20_@babel+core@7.23.2 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: true + + /@babel/helper-create-regexp-features-plugin/7.22.15_@babel+core@7.23.2: + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + dev: true + + /@babel/helper-define-polyfill-provider/0.4.3_@babel+core@7.23.2: + resolution: {integrity: sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-environment-visitor/7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + + /@babel/helper-function-name/7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 + + /@babel/helper-hoist-variables/7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + + /@babel/helper-member-expression-to-functions/7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-module-imports/7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + + /@babel/helper-module-transforms/7.23.0_@babel+core@7.23.2: + resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + + /@babel/helper-optimise-call-expression/7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-plugin-utils/7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-remap-async-to-generator/7.22.20_@babel+core@7.23.2: + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + dev: true + + /@babel/helper-replace-supers/7.22.20_@babel+core@7.23.2: + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: true + + /@babel/helper-simple-access/7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + + /@babel/helper-skip-transparent-expression-wrappers/7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + dev: true + + /@babel/helper-split-export-declaration/7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + + /@babel/helper-string-parser/7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier/7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-option/7.22.15: + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + engines: {node: '>=6.9.0'} + + /@babel/helper-wrap-function/7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.22.15 + '@babel/types': 7.23.0 + dev: true + + /@babel/helpers/7.23.2: + resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + transitivePeerDependencies: + - supports-color + + /@babel/highlight/7.22.20: + resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + + /@babel/parser/7.23.0: + resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.0 + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.22.15_@babel+core@7.23.2: + resolution: {integrity: sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.22.15_@babel+core@7.23.2: + resolution: {integrity: sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.0_@babel+core@7.23.2 + dev: true + + /@babel/plugin-proposal-private-property-in-object/7.21.0-placeholder-for-preset-env.2_@babel+core@7.23.2: + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + dev: true + + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.23.2: + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.23.2: + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.23.2: + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.23.2: + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.23.2: + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-assertions/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-attributes/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.23.2: + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.23.2: + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.23.2: + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.23.2: + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.23.2: + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.23.2: + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.23.2: + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.23.2: + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.23.2: + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.23.2: + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-unicode-sets-regex/7.18.6_@babel+core@7.23.2: + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15_@babel+core@7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-arrow-functions/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-async-generator-functions/7.23.2_@babel+core@7.23.2: + resolution: {integrity: sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20_@babel+core@7.23.2 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.23.2 + dev: true + + /@babel/plugin-transform-async-to-generator/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20_@babel+core@7.23.2 + dev: true + + /@babel/plugin-transform-block-scoped-functions/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-block-scoping/7.23.0_@babel+core@7.23.2: + resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-class-properties/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-class-features-plugin': 7.22.15_@babel+core@7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-class-static-block/7.22.11_@babel+core@7.23.2: + resolution: {integrity: sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-class-features-plugin': 7.22.15_@babel+core@7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.23.2 + dev: true + + /@babel/plugin-transform-classes/7.22.15_@babel+core@7.23.2: + resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20_@babel+core@7.23.2 + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + dev: true + + /@babel/plugin-transform-computed-properties/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 + dev: true + + /@babel/plugin-transform-destructuring/7.23.0_@babel+core@7.23.2: + resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-dotall-regex/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15_@babel+core@7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-duplicate-keys/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-dynamic-import/7.22.11_@babel+core@7.23.2: + resolution: {integrity: sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.23.2 + dev: true + + /@babel/plugin-transform-exponentiation-operator/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-export-namespace-from/7.22.11_@babel+core@7.23.2: + resolution: {integrity: sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.23.2 + dev: true + + /@babel/plugin-transform-for-of/7.22.15_@babel+core@7.23.2: + resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-function-name/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-json-strings/7.22.11_@babel+core@7.23.2: + resolution: {integrity: sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.23.2 + dev: true + + /@babel/plugin-transform-literals/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-logical-assignment-operators/7.22.11_@babel+core@7.23.2: + resolution: {integrity: sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.23.2 + dev: true + + /@babel/plugin-transform-member-expression-literals/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-amd/7.23.0_@babel+core@7.23.2: + resolution: {integrity: sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-module-transforms': 7.23.0_@babel+core@7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-commonjs/7.23.0_@babel+core@7.23.2: + resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-module-transforms': 7.23.0_@babel+core@7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-systemjs/7.23.0_@babel+core@7.23.2: + resolution: {integrity: sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.0_@babel+core@7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/plugin-transform-modules-umd/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-module-transforms': 7.23.0_@babel+core@7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15_@babel+core@7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-new-target/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-nullish-coalescing-operator/7.22.11_@babel+core@7.23.2: + resolution: {integrity: sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.23.2 + dev: true + + /@babel/plugin-transform-numeric-separator/7.22.11_@babel+core@7.23.2: + resolution: {integrity: sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.23.2 + dev: true + + /@babel/plugin-transform-object-rest-spread/7.22.15_@babel+core@7.23.2: + resolution: {integrity: sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.2 + '@babel/core': 7.23.2 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.23.2 + '@babel/plugin-transform-parameters': 7.22.15_@babel+core@7.23.2 + dev: true + + /@babel/plugin-transform-object-super/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20_@babel+core@7.23.2 + dev: true + + /@babel/plugin-transform-optional-catch-binding/7.22.11_@babel+core@7.23.2: + resolution: {integrity: sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.23.2 + dev: true + + /@babel/plugin-transform-optional-chaining/7.23.0_@babel+core@7.23.2: + resolution: {integrity: sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.23.2 + dev: true + + /@babel/plugin-transform-parameters/7.22.15_@babel+core@7.23.2: + resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-private-methods/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-class-features-plugin': 7.22.15_@babel+core@7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-private-property-in-object/7.22.11_@babel+core@7.23.2: + resolution: {integrity: sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15_@babel+core@7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.23.2 + dev: true + + /@babel/plugin-transform-property-literals/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-regenerator/7.22.10_@babel+core@7.23.2: + resolution: {integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.2 + dev: true + + /@babel/plugin-transform-reserved-words/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-shorthand-properties/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-spread/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: true + + /@babel/plugin-transform-sticky-regex/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-template-literals/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-typeof-symbol/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-escapes/7.22.10_@babel+core@7.23.2: + resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-property-regex/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15_@babel+core@7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-regex/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15_@babel+core@7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-sets-regex/7.22.5_@babel+core@7.23.2: + resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-create-regexp-features-plugin': 7.22.15_@babel+core@7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/polyfill/7.12.1: + resolution: {integrity: sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==} + deprecated: 🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information. + dependencies: + core-js: 2.6.12 + regenerator-runtime: 0.13.11 + dev: true + + /@babel/preset-env/7.23.2_@babel+core@7.23.2: + resolution: {integrity: sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.2 + '@babel/core': 7.23.2 + '@babel/helper-compilation-targets': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.15 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15_@babel+core@7.23.2 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15_@babel+core@7.23.2 + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2_@babel+core@7.23.2 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.23.2 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.23.2 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.23.2 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.23.2 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.23.2 + '@babel/plugin-syntax-import-assertions': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-syntax-import-attributes': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.23.2 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.23.2 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.23.2 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.23.2 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.23.2 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.23.2 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.23.2 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.23.2 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.23.2 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.23.2 + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6_@babel+core@7.23.2 + '@babel/plugin-transform-arrow-functions': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-async-generator-functions': 7.23.2_@babel+core@7.23.2 + '@babel/plugin-transform-async-to-generator': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-block-scoped-functions': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-block-scoping': 7.23.0_@babel+core@7.23.2 + '@babel/plugin-transform-class-properties': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-class-static-block': 7.22.11_@babel+core@7.23.2 + '@babel/plugin-transform-classes': 7.22.15_@babel+core@7.23.2 + '@babel/plugin-transform-computed-properties': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-destructuring': 7.23.0_@babel+core@7.23.2 + '@babel/plugin-transform-dotall-regex': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-duplicate-keys': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-dynamic-import': 7.22.11_@babel+core@7.23.2 + '@babel/plugin-transform-exponentiation-operator': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-export-namespace-from': 7.22.11_@babel+core@7.23.2 + '@babel/plugin-transform-for-of': 7.22.15_@babel+core@7.23.2 + '@babel/plugin-transform-function-name': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-json-strings': 7.22.11_@babel+core@7.23.2 + '@babel/plugin-transform-literals': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-logical-assignment-operators': 7.22.11_@babel+core@7.23.2 + '@babel/plugin-transform-member-expression-literals': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-modules-amd': 7.23.0_@babel+core@7.23.2 + '@babel/plugin-transform-modules-commonjs': 7.23.0_@babel+core@7.23.2 + '@babel/plugin-transform-modules-systemjs': 7.23.0_@babel+core@7.23.2 + '@babel/plugin-transform-modules-umd': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-new-target': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11_@babel+core@7.23.2 + '@babel/plugin-transform-numeric-separator': 7.22.11_@babel+core@7.23.2 + '@babel/plugin-transform-object-rest-spread': 7.22.15_@babel+core@7.23.2 + '@babel/plugin-transform-object-super': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-optional-catch-binding': 7.22.11_@babel+core@7.23.2 + '@babel/plugin-transform-optional-chaining': 7.23.0_@babel+core@7.23.2 + '@babel/plugin-transform-parameters': 7.22.15_@babel+core@7.23.2 + '@babel/plugin-transform-private-methods': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-private-property-in-object': 7.22.11_@babel+core@7.23.2 + '@babel/plugin-transform-property-literals': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-regenerator': 7.22.10_@babel+core@7.23.2 + '@babel/plugin-transform-reserved-words': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-shorthand-properties': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-spread': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-sticky-regex': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-template-literals': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-typeof-symbol': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-unicode-escapes': 7.22.10_@babel+core@7.23.2 + '@babel/plugin-transform-unicode-property-regex': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-unicode-regex': 7.22.5_@babel+core@7.23.2 + '@babel/plugin-transform-unicode-sets-regex': 7.22.5_@babel+core@7.23.2 + '@babel/preset-modules': 0.1.6-no-external-plugins_@babel+core@7.23.2 + '@babel/types': 7.23.0 + babel-plugin-polyfill-corejs2: 0.4.6_@babel+core@7.23.2 + babel-plugin-polyfill-corejs3: 0.8.5_@babel+core@7.23.2 + babel-plugin-polyfill-regenerator: 0.5.3_@babel+core@7.23.2 + core-js-compat: 3.33.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-modules/0.1.6-no-external-plugins_@babel+core@7.23.2: + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.23.0 + esutils: 2.0.3 + dev: true + + /@babel/regjsgen/0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + dev: true + + /@babel/runtime/7.23.2: + resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.0 + + /@babel/template/7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + + /@babel/traverse/7.23.2: + resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/generator': 7.23.0 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + /@babel/types/7.23.0: + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + /@breejs/later/4.1.0: + resolution: {integrity: sha512-QgGnZ9b7o4k0Ai1ZbTJWwZpZcFK9d+Gb+DyNt4UT9x6IEIs5HVu0iIlmgzGqN+t9MoJSpSPo9S/Mm51UtHr3JA==} + engines: {node: '>= 10'} + dev: false + + /@cbor-extract/cbor-extract-darwin-arm64/2.1.1: + resolution: {integrity: sha512-blVBy5MXz6m36Vx0DfLd7PChOQKEs8lK2bD1WJn/vVgG4FXZiZmZb2GECHFvVPA5T7OnODd9xZiL3nMCv6QUhA==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@cbor-extract/cbor-extract-darwin-x64/2.1.1: + resolution: {integrity: sha512-h6KFOzqk8jXTvkOftyRIWGrd7sKQzQv2jVdTL9nKSf3D2drCvQB/LHUxAOpPXo3pv2clDtKs3xnHalpEh3rDsw==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@cbor-extract/cbor-extract-linux-arm/2.1.1: + resolution: {integrity: sha512-ds0uikdcIGUjPyraV4oJqyVE5gl/qYBpa/Wnh6l6xLE2lj/hwnjT2XcZCChdXwW/YFZ1LUHs6waoYN8PmK0nKQ==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@cbor-extract/cbor-extract-linux-arm64/2.1.1: + resolution: {integrity: sha512-SxAaRcYf8S0QHaMc7gvRSiTSr7nUYMqbUdErBEu+HYA4Q6UNydx1VwFE68hGcp1qvxcy9yT5U7gA+a5XikfwSQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@cbor-extract/cbor-extract-linux-x64/2.1.1: + resolution: {integrity: sha512-GVK+8fNIE9lJQHAlhOROYiI0Yd4bAZ4u++C2ZjlkS3YmO6hi+FUxe6Dqm+OKWTcMpL/l71N6CQAmaRcb4zyJuA==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@cbor-extract/cbor-extract-win32-x64/2.1.1: + resolution: {integrity: sha512-2Niq1C41dCRIDeD8LddiH+mxGlO7HJ612Ll3D/E73ZWBmycued+8ghTr/Ho3CMOWPUEr08XtyBMVXAjqF+TcKw==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@chainsafe/is-ip/2.0.2: + resolution: {integrity: sha512-ndGqEMG1W5WkGagaqOZHpPU172AGdxr+LD15sv3WIUvT5oCFUrG1Y0CW/v2Egwj4JXEvSibaIIIqImsm98y1nA==} + dev: false + + /@commitlint/cli/17.7.2: + resolution: {integrity: sha512-t3N7TZq7lOeqTOyEgfGcaltHqEJf7YDlPg75MldeVPPyz14jZq/+mbGF9tueDLFX8R6RwdymrN6D+U5XwZ8Iwg==} + engines: {node: '>=v14'} + hasBin: true + dependencies: + '@commitlint/format': 17.4.4 + '@commitlint/lint': 17.7.0 + '@commitlint/load': 17.7.2 + '@commitlint/read': 17.5.1 + '@commitlint/types': 17.4.4 + execa: 5.1.1 + lodash.isfunction: 3.0.9 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + dev: true + + /@commitlint/config-conventional/17.7.0: + resolution: {integrity: sha512-iicqh2o6et+9kWaqsQiEYZzfLbtoWv9uZl8kbI8EGfnc0HeGafQBF7AJ0ylN9D/2kj6txltsdyQs8+2fTMwWEw==} + engines: {node: '>=v14'} + dependencies: + conventional-changelog-conventionalcommits: 6.1.0 + dev: true + + /@commitlint/config-validator/17.6.7: + resolution: {integrity: sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/types': 17.4.4 + ajv: 8.12.0 + dev: true + + /@commitlint/ensure/17.6.7: + resolution: {integrity: sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/types': 17.4.4 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + dev: true + + /@commitlint/execute-rule/17.4.0: + resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==} + engines: {node: '>=v14'} + dev: true + + /@commitlint/format/17.4.4: + resolution: {integrity: sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/types': 17.4.4 + chalk: 4.1.2 + dev: true + + /@commitlint/is-ignored/17.7.0: + resolution: {integrity: sha512-043rA7m45tyEfW7Zv2vZHF++176MLHH9h70fnPoYlB1slKBeKl8BwNIlnPg4xBdRBVNPaCqvXxWswx2GR4c9Hw==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/types': 17.4.4 + semver: 7.5.4 + dev: true + + /@commitlint/lint/17.7.0: + resolution: {integrity: sha512-TCQihm7/uszA5z1Ux1vw+Nf3yHTgicus/+9HiUQk+kRSQawByxZNESeQoX9ujfVd3r4Sa+3fn0JQAguG4xvvbA==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/is-ignored': 17.7.0 + '@commitlint/parse': 17.7.0 + '@commitlint/rules': 17.7.0 + '@commitlint/types': 17.4.4 + dev: true + + /@commitlint/load/17.7.2: + resolution: {integrity: sha512-XA7WTnsjHZ4YH6ZYsrnxgLdXzriwMMq+utZUET6spbOEEIPBCDLdOQXS26P+v3TTO4hUHOEhzUquaBv3jbBixw==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/config-validator': 17.6.7 + '@commitlint/execute-rule': 17.4.0 + '@commitlint/resolve-extends': 17.6.7 + '@commitlint/types': 17.4.4 + '@types/node': 20.5.1 + chalk: 4.1.2 + cosmiconfig: 8.3.6_typescript@5.2.2 + cosmiconfig-typescript-loader: 4.4.0_sq53fofhr2mc3sshhakmkmfwci + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + resolve-from: 5.0.0 + ts-node: 10.9.1_v6somhgbdgtqfeo32plv4xl6zq + typescript: 5.2.2 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + dev: true + + /@commitlint/message/17.4.2: + resolution: {integrity: sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==} + engines: {node: '>=v14'} + dev: true + + /@commitlint/parse/17.7.0: + resolution: {integrity: sha512-dIvFNUMCUHqq5Abv80mIEjLVfw8QNuA4DS7OWip4pcK/3h5wggmjVnlwGCDvDChkw2TjK1K6O+tAEV78oxjxag==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/types': 17.4.4 + conventional-changelog-angular: 6.0.0 + conventional-commits-parser: 4.0.0 + dev: true + + /@commitlint/read/17.5.1: + resolution: {integrity: sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/top-level': 17.4.0 + '@commitlint/types': 17.4.4 + fs-extra: 11.1.1 + git-raw-commits: 2.0.11 + minimist: 1.2.8 + dev: true + + /@commitlint/resolve-extends/17.6.7: + resolution: {integrity: sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/config-validator': 17.6.7 + '@commitlint/types': 17.4.4 + import-fresh: 3.3.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + resolve-global: 1.0.0 + dev: true + + /@commitlint/rules/17.7.0: + resolution: {integrity: sha512-J3qTh0+ilUE5folSaoK91ByOb8XeQjiGcdIdiB/8UT1/Rd1itKo0ju/eQVGyFzgTMYt8HrDJnGTmNWwcMR1rmA==} + engines: {node: '>=v14'} + dependencies: + '@commitlint/ensure': 17.6.7 + '@commitlint/message': 17.4.2 + '@commitlint/to-lines': 17.4.0 + '@commitlint/types': 17.4.4 + execa: 5.1.1 + dev: true + + /@commitlint/to-lines/17.4.0: + resolution: {integrity: sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==} + engines: {node: '>=v14'} + dev: true + + /@commitlint/top-level/17.4.0: + resolution: {integrity: sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==} + engines: {node: '>=v14'} + dependencies: + find-up: 5.0.0 + dev: true + + /@commitlint/types/17.4.4: + resolution: {integrity: sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==} + engines: {node: '>=v14'} + dependencies: + chalk: 4.1.2 + dev: true + + /@cospired/i18n-iso-languages/4.1.0: + resolution: {integrity: sha512-5+JK7YiO9r/FmwtlEPL1tQNt04/9AuN1t9GO/0C2yitqhKwFRa1r7VohNNUnFgB84MW5v4Lwq8ZAUZexuJh1nQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: false + + /@cspotcode/source-map-support/0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@csstools/cascade-layer-name-parser/1.0.5_vhcwb4dquzanhfkhxuqink5gke: + resolution: {integrity: sha512-v/5ODKNBMfBl0us/WQjlfsvSlYxfZLhNMVIsuCPib2ulTwGKYbKJbwqw671+qH9Y4wvWVnu7LBChvml/wBKjFg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.3.2 + '@csstools/css-tokenizer': ^2.2.1 + dependencies: + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + dev: true + + /@csstools/color-helpers/3.0.2: + resolution: {integrity: sha512-NMVs/l7Y9eIKL5XjbCHEgGcG8LOUT2qVcRjX6EzkCdlvftHVKr2tHIPzHavfrULRZ5Q2gxrJ9f44dAlj6fX97Q==} + engines: {node: ^14 || ^16 || >=18} + dev: true + + /@csstools/css-calc/1.1.4_vhcwb4dquzanhfkhxuqink5gke: + resolution: {integrity: sha512-ZV1TSmToiNcQL1P3hfzlzZzA02mmVkVmXGaUDUqpYUG84PmLhVSZpKX+KfxAuOcK7de04UXSQPBrAvaya6iiGg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.3.2 + '@csstools/css-tokenizer': ^2.2.1 + dependencies: + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + dev: true + + /@csstools/css-color-parser/1.4.0_vhcwb4dquzanhfkhxuqink5gke: + resolution: {integrity: sha512-SlGd8E6ron24JYQPQAIzu5tvmWi1H4sDKTdA7UDnwF45oJv7AVESbOlOO1YjfBhrQFuvLWUgKiOY9DwGoAxwTA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.3.2 + '@csstools/css-tokenizer': ^2.2.1 + dependencies: + '@csstools/color-helpers': 3.0.2 + '@csstools/css-calc': 1.1.4_vhcwb4dquzanhfkhxuqink5gke + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + dev: true + + /@csstools/css-parser-algorithms/2.3.2_qabfbasg4cggam7o7issvon7wi: + resolution: {integrity: sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-tokenizer': ^2.2.1 + dependencies: + '@csstools/css-tokenizer': 2.2.1 + dev: true + + /@csstools/css-tokenizer/2.2.1: + resolution: {integrity: sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==} + engines: {node: ^14 || ^16 || >=18} + dev: true + + /@csstools/media-query-list-parser/2.1.5_vhcwb4dquzanhfkhxuqink5gke: + resolution: {integrity: sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + '@csstools/css-parser-algorithms': ^2.3.2 + '@csstools/css-tokenizer': ^2.2.1 + dependencies: + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + dev: true + + /@csstools/postcss-cascade-layers/4.0.0_postcss@8.4.31: + resolution: {integrity: sha512-dVPVVqQG0FixjM9CG/+8eHTsCAxRKqmNh6H69IpruolPlnEF1611f2AoLK8TijTSAsqBSclKd4WHs1KUb/LdJw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/selector-specificity': 3.0.0_c3vcbepomgmxc74cgtawpgpkyi + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /@csstools/postcss-color-function/3.0.7_postcss@8.4.31: + resolution: {integrity: sha512-/PIB20G1TPCXmQlaJLWIYzTZRZpj6csT4ijgnshIj/kcmniIRroAfDa0xSWnfuO1eNo0NptIaPU7jzUukWn55Q==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.4.0_vhcwb4dquzanhfkhxuqink5gke + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + '@csstools/postcss-progressive-custom-properties': 3.0.2_postcss@8.4.31 + postcss: 8.4.31 + dev: true + + /@csstools/postcss-color-mix-function/2.0.7_postcss@8.4.31: + resolution: {integrity: sha512-57/g8aGo5eKFjEeJMiRKh8Qq43K2rCyk5ZZTvJ34TNl4zUtYU5DvLkIkOnhCtL8/a4z9oMA42aOnFPddRrScUQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.4.0_vhcwb4dquzanhfkhxuqink5gke + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + '@csstools/postcss-progressive-custom-properties': 3.0.2_postcss@8.4.31 + postcss: 8.4.31 + dev: true + + /@csstools/postcss-exponential-functions/1.0.1_postcss@8.4.31: + resolution: {integrity: sha512-ZLK2iSK4DUxeypGce2PnQSdYugUqDTwxnhNiq1o6OyKMNYgYs4eKbvEhFG8JKr1sJWbeqBi5jRr0017l2EWVvg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-calc': 1.1.4_vhcwb4dquzanhfkhxuqink5gke + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + postcss: 8.4.31 + dev: true + + /@csstools/postcss-font-format-keywords/3.0.0_postcss@8.4.31: + resolution: {integrity: sha512-ntkGj+1uDa/u6lpjPxnkPcjJn7ChO/Kcy08YxctOZI7vwtrdYvFhmE476dq8bj1yna306+jQ9gzXIG/SWfOaRg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-gamut-mapping/1.0.0_postcss@8.4.31: + resolution: {integrity: sha512-6UQyK8l9YaG5Ao5rBDcCnKHrLsHiQ1E0zeFQuqDJqEtinVzAPb/MwSw3TenZXL1Rnd7th3tb+4CBFHBXdW5tbQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.4.0_vhcwb4dquzanhfkhxuqink5gke + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + postcss: 8.4.31 + dev: true + + /@csstools/postcss-gradients-interpolation-method/4.0.7_postcss@8.4.31: + resolution: {integrity: sha512-GT1CzE/Tyr/ei4j5BwKESkHAgg+Gzys/0mAY7W+UiR+XrcYk5hDbOrE/YJIx1rflfO/7La1bDoZtA0YnLl4qNA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.4.0_vhcwb4dquzanhfkhxuqink5gke + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + '@csstools/postcss-progressive-custom-properties': 3.0.2_postcss@8.4.31 + postcss: 8.4.31 + dev: true + + /@csstools/postcss-hwb-function/3.0.6_postcss@8.4.31: + resolution: {integrity: sha512-uQgWt2Ho2yy2S6qthWY7mD5v57NKxi6dD1NB8nAybU5bJSsm+hLXRGm3/zbOH4xNrqO3Cl60DFSNlSrUME3Xjg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.4.0_vhcwb4dquzanhfkhxuqink5gke + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + postcss: 8.4.31 + dev: true + + /@csstools/postcss-ic-unit/3.0.2_postcss@8.4.31: + resolution: {integrity: sha512-n28Er7W9qc48zNjJnvTKuVHY26/+6YlA9WzJRksIHiAWOMxSH5IksXkw7FpkIOd+jLi59BMrX/BWrZMgjkLBHg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/postcss-progressive-custom-properties': 3.0.2_postcss@8.4.31 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-initial/1.0.0_postcss@8.4.31: + resolution: {integrity: sha512-1l7iHHjIl5qmVeGItugr4ZOlCREDP71mNKqoEyxlosIoiu3Os1nPWMHpuCvDLCLiWI/ONTOg3nzJh7gwHOrqUA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + dev: true + + /@csstools/postcss-is-pseudo-class/4.0.3_postcss@8.4.31: + resolution: {integrity: sha512-/dt5M9Ty/x3Yiq0Nm/5PJJzwkVFchJgdjKVnryBPtoMCb9ohb/nDIJOwr/Wr3hK3FDs1EA1GE6PyRYsUmQPS8Q==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/selector-specificity': 3.0.0_c3vcbepomgmxc74cgtawpgpkyi + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /@csstools/postcss-logical-float-and-clear/2.0.0_postcss@8.4.31: + resolution: {integrity: sha512-Wki4vxsF6icRvRz8eF9bPpAvwaAt0RHwhVOyzfoFg52XiIMjb6jcbHkGxwpJXP4DVrnFEwpwmrz5aTRqOW82kg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + dev: true + + /@csstools/postcss-logical-resize/2.0.0_postcss@8.4.31: + resolution: {integrity: sha512-lCQ1aX8c5+WI4t5EoYf3alTzJNNocMqTb+u1J9CINdDhFh1fjovqK+0aHalUHsNstZmzFPNzIkU4Mb3eM9U8SA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-logical-viewport-units/2.0.3_postcss@8.4.31: + resolution: {integrity: sha512-xeVxqND5rlQyqLGdH7rX34sIm/JbbQKxpKQP8oD1YQqUHHCLQR9NUS57WqJKajxKN6AcNAMWJhb5LUH5RfPcyA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-tokenizer': 2.2.1 + postcss: 8.4.31 + dev: true + + /@csstools/postcss-media-minmax/1.1.0_postcss@8.4.31: + resolution: {integrity: sha512-t5Li/DPC5QmW/6VFLfUvsw/4dNYYseWR0tOXDeJg/9EKUodBgNawz5tuk5vYKtNvoj+Q08odMuXcpS5YJj0AFA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-calc': 1.1.4_vhcwb4dquzanhfkhxuqink5gke + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + '@csstools/media-query-list-parser': 2.1.5_vhcwb4dquzanhfkhxuqink5gke + postcss: 8.4.31 + dev: true + + /@csstools/postcss-media-queries-aspect-ratio-number-values/2.0.3_postcss@8.4.31: + resolution: {integrity: sha512-IPL8AvnwMYW+cWtp+j8cW3MFN0RyXNT4hLOvs6Rf2N+NcbvXhSyKxZuE3W9Cv4KjaNoNoGx1d0UhT6tktq6tUw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + '@csstools/media-query-list-parser': 2.1.5_vhcwb4dquzanhfkhxuqink5gke + postcss: 8.4.31 + dev: true + + /@csstools/postcss-nested-calc/3.0.0_postcss@8.4.31: + resolution: {integrity: sha512-HsB66aDWAouOwD/GcfDTS0a7wCuVWaTpXcjl5VKP0XvFxDiU+r0T8FG7xgb6ovZNZ+qzvGIwRM+CLHhDgXrYgQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-normalize-display-values/3.0.1_postcss@8.4.31: + resolution: {integrity: sha512-nUvRxI+ALJwkxZdPU4EDyuM380vP91sAGvI3jAOHs/sr3jfcCOzLkY6xKI1Mr526kZ3RivmMoYM/xq+XFyE/bw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-oklab-function/3.0.7_postcss@8.4.31: + resolution: {integrity: sha512-vBFTQD3CARB3u/XIGO44wWbcO7xG/4GsYqJlcPuUGRSK8mtxes6n4vvNFlIByyAZy2k4d4RY63nyvTbMpeNTaQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.4.0_vhcwb4dquzanhfkhxuqink5gke + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + '@csstools/postcss-progressive-custom-properties': 3.0.2_postcss@8.4.31 + postcss: 8.4.31 + dev: true + + /@csstools/postcss-progressive-custom-properties/3.0.2_postcss@8.4.31: + resolution: {integrity: sha512-YEvTozk1SxnV/PGL5DllBVDuLQ+jiQhyCSQiZJ6CwBMU5JQ9hFde3i1qqzZHuclZfptjrU0JjlX4ePsOhxNzHw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-relative-color-syntax/2.0.7_postcss@8.4.31: + resolution: {integrity: sha512-2AiFbJSVF4EyymLxme4JzSrbXykHolx8DdZECHjYKMhoulhKLltx5ccYgtrK3BmXGd3v3nJrWFCc8JM8bjuiOg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.4.0_vhcwb4dquzanhfkhxuqink5gke + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + '@csstools/postcss-progressive-custom-properties': 3.0.2_postcss@8.4.31 + postcss: 8.4.31 + dev: true + + /@csstools/postcss-scope-pseudo-class/3.0.0_postcss@8.4.31: + resolution: {integrity: sha512-GFNVsD97OuEcfHmcT0/DAZWAvTM/FFBDQndIOLawNc1Wq8YqpZwBdHa063Lq+Irk7azygTT+Iinyg3Lt76p7rg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /@csstools/postcss-stepped-value-functions/3.0.2_postcss@8.4.31: + resolution: {integrity: sha512-I3wX44MZVv+tDuWfrd3BTvRB/YRIM2F5v1MBtTI89sxpFn47mNpTwpPYUOGPVCgKlRDfZSlxIUYhUQmqRQZZFQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-calc': 1.1.4_vhcwb4dquzanhfkhxuqink5gke + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + postcss: 8.4.31 + dev: true + + /@csstools/postcss-text-decoration-shorthand/3.0.3_postcss@8.4.31: + resolution: {integrity: sha512-d5J9m49HhqXRcw1S6vTZuviHi/iknUKGjBpChiNK1ARg9sSa3b8m5lsWz5Izs8ISORZdv2bZRwbw5Z2R6gQ9kQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/color-helpers': 3.0.2 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /@csstools/postcss-trigonometric-functions/3.0.2_postcss@8.4.31: + resolution: {integrity: sha512-AwzNhF4QOKaLOKvMljwwFkeYXwufhRO15G+kKohHkyoNOL75xWkN+W2Y9ik9tSeAyDv+cYNlYaF+o/a79WjVjg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-calc': 1.1.4_vhcwb4dquzanhfkhxuqink5gke + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + postcss: 8.4.31 + dev: true + + /@csstools/postcss-unset-value/3.0.0_postcss@8.4.31: + resolution: {integrity: sha512-P0JD1WHh3avVyKKRKjd0dZIjCEeaBer8t1BbwGMUDtSZaLhXlLNBqZ8KkqHzYWXOJgHleXAny2/sx8LYl6qhEA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + dev: true + + /@csstools/selector-specificity/3.0.0_c3vcbepomgmxc74cgtawpgpkyi: + resolution: {integrity: sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.13 + dependencies: + postcss-selector-parser: 6.0.13 + dev: true + + /@eslint-community/eslint-utils/4.4.0_eslint@8.39.0: + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.39.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp/4.9.1: + resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc/0.4.3: + resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 7.3.1 + globals: 13.23.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + js-yaml: 3.14.1 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/eslintrc/1.4.1: + resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.23.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/eslintrc/2.1.2: + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.23.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js/8.39.0: + resolution: {integrity: sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@fastify/busboy/2.0.0: + resolution: {integrity: sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==} + engines: {node: '>=14'} + dev: false + + /@fidm/asn1/1.0.4: + resolution: {integrity: sha512-esd1jyNvRb2HVaQGq2Gg8Z0kbQPXzV9Tq5Z14KNIov6KfFD6PTaRIO8UpcsYiTNzOqJpmyzWgVTrUwFV3UF4TQ==} + engines: {node: '>= 8'} + dev: false + + /@fidm/x509/1.2.1: + resolution: {integrity: sha512-nwc2iesjyc9hkuzcrMCBXQRn653XuAUKorfWM8PZyJawiy1QzLj4vahwzaI25+pfpwOLvMzbJ0uKpWLDNmo16w==} + engines: {node: '>= 8'} + dependencies: + '@fidm/asn1': 1.0.4 + tweetnacl: 1.0.3 + dev: false + + /@forevolve/bootstrap-dark/4.0.0: + resolution: {integrity: sha512-jFcAEC+jSl6Na2DRFEYJd1q+G4DpwFqu5/3g1TBN/TZZYiHTdA7aAJX4xqrCPthCO3fx1AUNiYRkd96azTKrWA==} + dependencies: + bootstrap: 4.6.2_a2quc6v7zrhtmn4zqsvmmrpbnq + jquery: 3.5.1 + popper.js: 1.16.1 + dev: false + + /@fortawesome/fontawesome-free/5.15.4: + resolution: {integrity: sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==} + engines: {node: '>=6'} + requiresBuild: true + dev: false + + /@gar/promisify/1.1.3: + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + dev: true + + /@google-cloud/common/4.0.3: + resolution: {integrity: sha512-fUoMo5b8iAKbrYpneIRV3z95AlxVJPrjpevxs4SKoclngWZvTXBSGpNisF5+x5m+oNGve7jfB1e6vNBZBUs7Fw==} + engines: {node: '>=12.0.0'} + dependencies: + '@google-cloud/projectify': 3.0.0 + '@google-cloud/promisify': 3.0.1 + arrify: 2.0.1 + duplexify: 4.1.2 + ent: 2.2.0 + extend: 3.0.2 + google-auth-library: 8.9.0 + retry-request: 5.0.2 + teeny-request: 8.0.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@google-cloud/projectify/3.0.0: + resolution: {integrity: sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==} + engines: {node: '>=12.0.0'} + dev: false + + /@google-cloud/promisify/3.0.1: + resolution: {integrity: sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==} + engines: {node: '>=12'} + dev: false + + /@google-cloud/translate/7.2.2: + resolution: {integrity: sha512-IAJhPKotLH/OF/NzWml/byLDN+OILbs1P4k+7HNUJK618NsShFelRKzh3pRUUQA4DX0je3HaEZw9nR+5uJ6ZEg==} + engines: {node: '>=12.0.0'} + dependencies: + '@google-cloud/common': 4.0.3 + '@google-cloud/promisify': 3.0.1 + arrify: 2.0.1 + extend: 3.0.2 + google-gax: 3.6.1 + is-html: 2.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@grpc/grpc-js/1.8.21: + resolution: {integrity: sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg==} + engines: {node: ^8.13.0 || >=10.10.0} + dependencies: + '@grpc/proto-loader': 0.7.10 + '@types/node': 20.8.5 + dev: false + + /@grpc/proto-loader/0.7.10: + resolution: {integrity: sha512-CAqDfoaQ8ykFd9zqBDn4k6iWT9loLAlc2ETmDFS9JCD70gDcnA4L3AFEo2iV7KyAtAAHFW9ftq1Fz+Vsgq80RQ==} + engines: {node: '>=6'} + hasBin: true + dependencies: + lodash.camelcase: 4.3.0 + long: 5.2.3 + protobufjs: 7.2.4 + yargs: 17.7.2 + dev: false + + /@gulp-sourcemaps/identity-map/2.0.1: + resolution: {integrity: sha512-Tb+nSISZku+eQ4X1lAkevcQa+jknn/OVUgZ3XCxEKIsLsqYuPoJwJOPQeaOk75X3WPftb29GWY1eqE7GLsXb1Q==} + engines: {node: '>= 0.10'} + dependencies: + acorn: 6.4.2 + normalize-path: 3.0.0 + postcss: 7.0.39 + source-map: 0.6.1 + through2: 3.0.2 + dev: true + + /@gulp-sourcemaps/map-sources/1.0.0: + resolution: {integrity: sha512-o/EatdaGt8+x2qpb0vFLC/2Gug/xYPRXb6a+ET1wGYKozKN3krDWC/zZFZAtrzxJHuDL12mwdfEFKcKMNvc55A==} + engines: {node: '>= 0.10'} + dependencies: + normalize-path: 2.1.1 + through2: 2.0.5 + dev: true + + /@hapi/boom/10.0.1: + resolution: {integrity: sha512-ERcCZaEjdH3OgSJlyjVk8pHIFeus91CjKP3v+MpgBNp5IvGzP2l/bRiD78nqYcKPaZdbKkK5vDBVPd2ohHBlsA==} + dependencies: + '@hapi/hoek': 11.0.2 + dev: false + + /@hapi/boom/9.1.4: + resolution: {integrity: sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==} + dependencies: + '@hapi/hoek': 9.3.0 + dev: false + + /@hapi/hoek/11.0.2: + resolution: {integrity: sha512-aKmlCO57XFZ26wso4rJsW4oTUnrgTFw2jh3io7CAtO9w4UltBNwRXvXIVzzyfkaaLRo3nluP/19msA8vDUUuKw==} + dev: false + + /@hapi/hoek/9.3.0: + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + dev: false + + /@hapi/topo/5.1.0: + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + dependencies: + '@hapi/hoek': 9.3.0 + dev: false + + /@hexagon/base64/1.1.28: + resolution: {integrity: sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==} + dev: false + + /@humanwhocodes/config-array/0.11.11: + resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/config-array/0.5.0: + resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer/1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema/1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@ioredis/as-callback/3.0.0: + resolution: {integrity: sha512-Kqv1rZ3WbgOrS+hgzJ5xG5WQuhvzzSTRYvNeyPMLOAM78MHSnuKI20JeJGbpuAt//LCuP0vsexZcorqW7kWhJg==} + dev: true + + /@ioredis/commands/1.2.0: + resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} + + /@isaacs/cliui/8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width/4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi/6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi/7.0.0 + + /@istanbuljs/load-nyc-config/1.1.0: + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + dev: true + + /@istanbuljs/schema/0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true + + /@jridgewell/gen-mapping/0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.19 + + /@jridgewell/resolve-uri/3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + + /@jridgewell/set-array/1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + + /@jridgewell/source-map/0.3.5: + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.19 + dev: true + + /@jridgewell/sourcemap-codec/1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping/0.3.19: + resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + + /@jridgewell/trace-mapping/0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@jsdoc/salty/0.2.5: + resolution: {integrity: sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==} + engines: {node: '>=v12.0.0'} + dependencies: + lodash: 4.17.21 + dev: false + + /@kdf/salt/1.0.1: + resolution: {integrity: sha512-hLZjuL0+VwSdT0R7srD3GInKyEibEAnUDHI1IQ5QDa4PRof98vujxKWtvukOtv+0ZWeSOxmuFmo80QMTHyvgMQ==} + engines: {node: '>=4'} + dev: false + + /@koa/router/12.0.1: + resolution: {integrity: sha512-ribfPYfHb+Uw3b27Eiw6NPqjhIhTpVFzEWLwyc/1Xp+DCdwRRyIlAUODX+9bPARF6aQtUu1+/PHzdNvRzcs/+Q==} + engines: {node: '>= 12'} + dependencies: + debug: 4.3.4 + http-errors: 2.0.0 + koa-compose: 4.1.0 + methods: 1.1.2 + path-to-regexp: 6.2.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@ladjs/api/14.1.8_axe@12.2.3+cabin@13.2.5: + resolution: {integrity: sha512-f4fYupYex79B68DqbjYfdasDIonUj7RcuSTo5AhKadDL+kFNSBg/m503RfEvr8VLMpa63puEtK6xpHNGlq38NA==} + engines: {node: '>=14'} + peerDependencies: + axe: '>= 11' + cabin: '>= 11' + dependencies: + '@koa/router': 12.0.1 + '@ladjs/i18n': 8.0.3 + '@ladjs/koa-simple-ratelimit': 4.1.1 + '@ladjs/passport': 5.0.3 + '@ladjs/redis': 1.1.1 + '@ladjs/shared-config': 9.1.2 + '@ladjs/store-ip-address': 0.0.7 + axe: 12.2.3 + boolean: 3.2.0 + cabin: 13.2.5_axe@12.2.3 + express-request-id: 1.4.1 + kcors: 2.2.2 + koa: 2.14.2 + koa-404-handler: 0.1.0 + koa-basic-auth: 4.0.0 + koa-better-error-handler: 11.0.4 + koa-better-timeout: 0.0.6 + koa-bodyparser: 4.4.1 + koa-compress: 5.1.1 + koa-conditional-get: 3.0.0 + koa-connect: 2.1.0 + koa-etag: 4.0.0 + koa-json: 2.0.2 + lodash: 4.17.21 + multimatch: 5.0.0 + request-received: 0.0.3 + response-time: 2.3.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@ladjs/assets/2.1.22_spinkit@2.0.1: + resolution: {integrity: sha512-A2Bzip0GGv3AAirfe+cvj+hkT8dUuj78Az7M5gEisZuMIVoeP14K0gYsMFIY7iGGsmX4/rII3d3Bs30I1JTmbA==} + engines: {node: '>=14'} + peerDependencies: + spinkit: ^2.0.1 + dependencies: + clipboard: 2.0.11 + is-string-and-not-blank: 0.0.2 + qs: 6.11.2 + spinkit: 2.0.1 + superagent: 8.1.2 + sweetalert2: 8.19.0 + url-parse: 1.5.10 + transitivePeerDependencies: + - supports-color + dev: false + + /@ladjs/browserslist-config/1.0.0: + resolution: {integrity: sha512-ZLPEISY+Ab/8J8k5W3ZtWV4sGSRDik6lbA9LpAiVl+h9UQ6mftgFBAKaAb5qMkGd+wXT9UfS4hhP6SzkJ2qBWA==} + engines: {node: '>=14'} + dev: true + + /@ladjs/consolidate/1.0.3_qya2zus74w74bxmr63tupuspuq: + resolution: {integrity: sha512-zyUeV5nkEFz7FH88pz+moVeMMOygTx1zL5bjXGHCVX5MMpmAtFf5piaQlBDk3nClGoUs8vjYI9TKsbXldGv0VA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.22.5 + arc-templates: ^0.5.3 + atpl: '>=0.7.6' + bracket-template: ^1.1.5 + coffee-script: ^1.12.7 + dot: ^1.1.3 + dust: ^0.3.0 + dustjs-helpers: ^1.7.4 + dustjs-linkedin: ^2.7.5 + eco: ^1.1.0-rc-3 + ect: ^0.5.9 + ejs: ^3.1.5 + haml-coffee: ^1.14.1 + hamlet: ^0.3.3 + hamljs: ^0.6.2 + handlebars: ^4.7.6 + hogan.js: ^3.0.2 + htmling: ^0.0.8 + jazz: ^0.0.18 + jqtpl: ~1.1.0 + just: ^0.1.8 + liquid-node: ^3.0.1 + liquor: ^0.0.5 + lodash: ^4.17.20 + mote: ^0.2.0 + mustache: ^4.0.1 + nunjucks: ^3.2.2 + plates: ~0.4.11 + pug: ^3.0.0 + qejs: ^3.0.5 + ractive: ^1.3.12 + react: '>=16.13.1' + react-dom: '>=16.13.1' + slm: ^2.0.0 + swig: ^1.4.2 + swig-templates: ^2.0.3 + teacup: ^2.0.0 + templayed: '>=0.2.3' + then-pug: '*' + tinyliquid: ^0.2.34 + toffee: ^0.3.6 + twig: ^1.15.2 + twing: ^5.0.2 + underscore: ^1.11.0 + vash: ^0.13.0 + velocityjs: ^2.0.1 + walrus: ^0.10.1 + whiskers: ^0.4.0 + peerDependenciesMeta: + '@babel/core': + optional: true + arc-templates: + optional: true + atpl: + optional: true + bracket-template: + optional: true + coffee-script: + optional: true + dot: + optional: true + dust: + optional: true + dustjs-helpers: + optional: true + dustjs-linkedin: + optional: true + eco: + optional: true + ect: + optional: true + ejs: + optional: true + haml-coffee: + optional: true + hamlet: + optional: true + hamljs: + optional: true + handlebars: + optional: true + hogan.js: + optional: true + htmling: + optional: true + jazz: + optional: true + jqtpl: + optional: true + just: + optional: true + liquid-node: + optional: true + liquor: + optional: true + lodash: + optional: true + mote: + optional: true + mustache: + optional: true + nunjucks: + optional: true + plates: + optional: true + pug: + optional: true + qejs: + optional: true + ractive: + optional: true + react: + optional: true + react-dom: + optional: true + slm: + optional: true + swig: + optional: true + swig-templates: + optional: true + teacup: + optional: true + templayed: + optional: true + then-pug: + optional: true + tinyliquid: + optional: true + toffee: + optional: true + twig: + optional: true + twing: + optional: true + underscore: + optional: true + vash: + optional: true + velocityjs: + optional: true + walrus: + optional: true + whiskers: + optional: true + dependencies: + '@babel/core': 7.23.2 + lodash: 4.17.21 + pug: 3.0.2 + dev: false + + /@ladjs/country-language/0.2.1: + resolution: {integrity: sha512-e3AmT7jUnfNE6e2mx2+cPYiWdFW3McySDGRhQEYE6SksjZTMj0PTp+R9x1xG89tHRTsyMNJFl9J4HtZPWZzi1Q==} + dependencies: + underscore: 1.13.6 + underscore.deep: 0.5.3_underscore@1.13.6 + dev: false + + /@ladjs/country-language/1.0.3: + resolution: {integrity: sha512-FJROu9/hh4eqVAGDyfL8vpv6Vb0qKHX1ozYLRZ+beUzD5xFf+3r0J+SVIWKviEa7W524Qvqou+ta1WrsRgzxGw==} + engines: {node: '>= 14'} + dev: false + + /@ladjs/env/4.0.0: + resolution: {integrity: sha512-Xfj9e/fGTI2PxrOwLEHQk4XKH8UdRWVr92vKDQ2ifeAwHxRubTRC2yQzkFzAOsiRa+frGVLFTwsCbk4dWMs7GA==} + engines: {node: '>=14'} + dependencies: + dotenv-extended: 2.9.0 + dotenv-parse-variables: 2.0.0 + mustache: 4.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@ladjs/format-util/1.0.4: + resolution: {integrity: sha512-hZere0rUga8kTzSTFbHREXpD9E/jwi94+B5RyLAmMIzl/w/EK1z7rFEnMHzPkU4AZkL42JWSsGXoV8LXMihybg==} + dev: false + + /@ladjs/graceful/3.2.2: + resolution: {integrity: sha512-GyL5Cpgh2RlndFW2e4AUHrEDe0tzyXKpAs92wrAQhNKcY0y++qfK8PC+6TOHzN9zvxPY9j1KAU29Gfa9vxWzDg==} + engines: {node: '>=14'} + dependencies: + lil-http-terminator: 1.2.3 + p-is-promise: 3.0.0 + dev: false + + /@ladjs/gulp-envify/2.0.1: + resolution: {integrity: sha512-Vf1B1zsmFar/2K9gTeRwHT/iPYZMccG8HduRrKxNFFsZ/qjTPLTC1oG1Zp7QaaE9nb3/+t1KFnoJDLNo7ulJbw==} + dependencies: + loose-envify: 1.4.0 + plugin-error: 1.0.1 + through2: 2.0.5 + dev: true + + /@ladjs/i18n/8.0.3: + resolution: {integrity: sha512-QYeYGz6uJaH41ZVyNoI2Lt2NyfcpKwpDIBMx3psaE1NBJn8P+jk1m0EIjphfYvnRMnl/QyBpn98FfcTUjTkuBw==} + engines: {node: '>=14'} + dependencies: + '@hapi/boom': 10.0.1 + '@ladjs/country-language': 1.0.3 + boolean: 3.2.0 + i18n: 0.15.1 + i18n-locales: 0.0.5 + lodash: 4.17.21 + multimatch: 5.0.0 + punycode: 2.3.0 + qs: 6.11.2 + titleize: 2.1.0 + tlds: 1.242.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@ladjs/koa-better-static/2.0.1: + resolution: {integrity: sha512-90Uby1lQMYoFjrcGCantSDCJUn6FmKj7XbHYPahQIFjyx1q/m2XD+1Nox2Kl5VJiTVcKol+FzrJBnTE35BWPJg==} + engines: {node: '>=8.3'} + dependencies: + debug: 4.3.4 + resolve-path: 1.4.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@ladjs/koa-cache-responses/0.0.3: + resolution: {integrity: sha512-ZOgKJG/vg9TUu1IQJiNfvL+AfhgzBZ0WlmZLpmx35RebOPcZ3+nL6mz72t0HynrTh7zvwUIISjegsVdTHHpHuQ==} + engines: {node: '>=8.3'} + dependencies: + lodash: 4.17.21 + ms: 2.1.3 + path-to-regexp: 6.2.1 + dev: false + + /@ladjs/koa-isajax/2.0.0: + resolution: {integrity: sha512-XtVbu8hL2gObXKwQtn0CAYWhu74Ysfh7GPV7EShBahRw9mLBxGclCVsNxejUhfNvjXH0xl4lhaYqPFvVbdZB5A==} + dev: false + + /@ladjs/koa-simple-ratelimit/4.1.1: + resolution: {integrity: sha512-slA3mWPeHVIJxlVz2OUEDl5TP3MLDTMp+7WWIBRGhX4ijuZNAWrbJrAPFolgfBf2vxew4MZKJsy6oO8w+C1dQg==} + engines: {node: '>=14'} + dependencies: + ms: 2.1.3 + multimatch: 5.0.0 + dev: false + + /@ladjs/koa-views/9.0.0_qya2zus74w74bxmr63tupuspuq: + resolution: {integrity: sha512-/nzUN3HhB7SIxrE4c2MXCLARXMwgoy7xJogyX8lNJo4VBxM6dVQ47iZWjOoHxTBKGFNAv2OTQ0rWI7HYpiv8kg==} + engines: {node: '>=14'} + peerDependencies: + '@types/koa': ^2.13.1 + peerDependenciesMeta: + '@types/koa': + optional: true + dependencies: + '@ladjs/consolidate': 1.0.3_qya2zus74w74bxmr63tupuspuq + debug: 4.3.4 + get-paths: 0.0.7 + koa-send: 5.0.1 + mz: 2.7.0 + pretty: 2.0.0 + resolve-path: 1.4.0 + transitivePeerDependencies: + - '@babel/core' + - arc-templates + - atpl + - bracket-template + - coffee-script + - dot + - dust + - dustjs-helpers + - dustjs-linkedin + - eco + - ect + - ejs + - haml-coffee + - hamlet + - hamljs + - handlebars + - hogan.js + - htmling + - jazz + - jqtpl + - just + - liquid-node + - liquor + - lodash + - mote + - mustache + - nunjucks + - plates + - pug + - qejs + - ractive + - react + - react-dom + - slm + - supports-color + - swig + - swig-templates + - teacup + - templayed + - then-pug + - tinyliquid + - toffee + - twig + - twing + - underscore + - vash + - velocityjs + - walrus + - whiskers + dev: false + + /@ladjs/mongoose-error-messages/1.0.0_mongoose@6.11.1: + resolution: {integrity: sha512-khokBW3n28aS1Y918r6FGZL3gl34hYkeCapt318z/JHUXN/s1BIIKAafEPXh9u/WRD/O1Z9bbeXi39bqTXxVkQ==} + engines: {node: '>=8.x'} + peerDependencies: + mongoose: '*' + dependencies: + mongoose: 6.11.1 + dev: false + + /@ladjs/mongoose-unique-validator/5.0.0_mongoose@6.11.1: + resolution: {integrity: sha512-wum/Ox8Y/J7VqLSYzaPjuvq3KljrhnNFxys5h01sOCetZVMydSiJ3i72Cnobi9fSJk3RnEh3aEGDfSJbtln28A==} + engines: {node: '>=14'} + peerDependencies: + mongoose: '>= 6.1.0' + dependencies: + '@strikeentco/get': 1.0.1 + mongoose: 6.11.1 + dev: false + + /@ladjs/mongoose/6.0.1_mongoose@6.11.1: + resolution: {integrity: sha512-sFEsKpiCXkP5cBDqNBGNbijZ5+UEufCkb/3bYhHKiVqqMlGTuQiVrYPZwnaYk7pMLBURXQYcufy2aONGEyXyDg==} + engines: {node: '>=14'} + peerDependencies: + mongoose: '>=6' + dependencies: + boolean: 3.2.0 + merge-options: 3.0.4 + mongoose: 6.11.1 + dev: false + + /@ladjs/naivebayes/0.1.0: + resolution: {integrity: sha512-0ft+9eOFCvfh8WDmNM0sCzr3ENiSiy4ChgX/tCRzB+1AZkjhisdF97yYnqj0DQdnPg34anUL9zISQh7lQcnkyQ==} + dependencies: + debug: 4.3.4 + stopword: 1.0.11 + transitivePeerDependencies: + - supports-color + dev: false + + /@ladjs/node-dotify/2.0.0: + resolution: {integrity: sha512-zIHZZWtX4d7dRWKzQHwxGHBzjKu8i7WWeJv9nDXqg04BINZa7ApaWeHYBkeeQyzRNTHDO1iysJWaD0GKyabZfw==} + engines: {node: '>=0.10.0'} + dependencies: + bson-objectid: 1.3.1 + dev: false + + /@ladjs/passport-otp-strategy/2.0.1: + resolution: {integrity: sha512-nzch5N5e1gSCQ+3WzFhjj827m+72OPEVu2M5AcQI9NHBPs6VKIS0siL51FK6oEBrnJQdHJPQbNjDLIJSBorQOQ==} + engines: {node: '>=12.0.0'} + dependencies: + otplib: 12.0.1 + passport-strategy: 1.0.0 + pkginfo: 0.4.1 + dev: false + + /@ladjs/passport/5.0.3: + resolution: {integrity: sha512-fnl1Rd2ZENOf8JntJEtF5yyVEW+wYoK1t5R4UhQDVbkm6FrU919yN50T/oL9NdzLi2OQzLoUIPxhTDhTdVa43w==} + engines: {node: '>=14'} + dependencies: + '@ladjs/passport-otp-strategy': 2.0.1 + '@nicokaiser/passport-apple': 1.0.1 + boolean: 3.2.0 + is-string-and-not-blank: 0.0.2 + koa-passport: 4.1.4 + lodash: 4.17.21 + passport-github2: 0.1.12 + passport-google-oauth20: 2.0.0 + validator: 13.11.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@ladjs/pick-original/1.0.0: + resolution: {integrity: sha512-cwogfBne2dRspUAwMms8wLsA2CFxp7VdkLKwCqJ5LjvEqr4fHwmMTNoHW5WFj/lCx8ik2eZRLNnWke4nHsHshA==} + engines: {node: '>=8.3'} + dependencies: + '@ladjs/node-dotify': 2.0.0 + lodash: 4.17.21 + dev: false + + /@ladjs/policies/11.1.1_undici@5.26.3: + resolution: {integrity: sha512-y8e6++tXaqVND/FwJwKAsO0phxo6pqdhHFP3817eO0j26DKNVtgHWKHZ36QDr25OX+rEQtxTPrmXFAbwc3fSrw==} + engines: {node: '>=14'} + peerDependencies: + undici: '*' + dependencies: + '@hapi/boom': 10.0.1 + basic-auth: 2.0.1 + boolean: 3.2.0 + is-string-and-not-blank: 0.0.2 + undici: 5.26.3 + dev: false + + /@ladjs/proxy/4.0.0: + resolution: {integrity: sha512-ALiMy+UHfnodPBjwXgiFdQuQ5X3z/PtdI5+czQVcdMHr+zltS87DG0aXHEJG9WuVOeQf1mHgcAK3igVqnx6tTg==} + engines: {node: '>=14'} + dependencies: + boolean: 3.2.0 + finalhandler: 1.2.0 + findhit-proxywrap: 0.3.13 + lodash: 4.17.21 + router: 1.3.8 + url-parse: 1.5.10 + transitivePeerDependencies: + - supports-color + dev: false + + /@ladjs/pug-lint-config-lad/0.1.1: + resolution: {integrity: sha512-SvqWXl3YSxDlci7DVe+K0UWdxMqi1/p0bTY2dkUOVo/5JWyIQHQknCG4T0eKjLXyXQcbIxMgHEemb51Uc3O0ow==} + engines: {node: '>= 12'} + dependencies: + assert: 2.1.0 + dev: true + + /@ladjs/pug-lint/2.6.1: + resolution: {integrity: sha512-ZA/KtKoWJtQ3wrhTTczS8XXoQYAVw+7K4gacoqBF59pnIpldWdX9Gao4MgaOR4mOLVjVUN+6Ne+Bjw7bjd3Okg==} + engines: {node: '>= 12'} + hasBin: true + dependencies: + acorn: 4.0.13 + commander: 2.20.3 + css-selector-parser: 1.4.1 + find-line-column: 0.5.2 + glob: 7.2.3 + minimatch: 3.1.2 + path-is-absolute: 1.0.1 + pug-attrs: 2.0.4 + pug-error: 1.3.3 + pug-lexer: 4.1.0 + resolve: 1.22.8 + strip-json-comments: 2.0.1 + void-elements: 2.0.1 + dev: true + + /@ladjs/redis/1.1.1: + resolution: {integrity: sha512-uarHVlyw6SkQgV5ePVIbosZQ1FTwol6tz+6Yfwgez504ygNzos9ui5BToS80ikMzmQO9pbwkeccK1taooU0Q6A==} + engines: {node: '>=14'} + dependencies: + ioredis: 5.3.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@ladjs/shared-config/8.0.0: + resolution: {integrity: sha512-ivFZIM13PqArATHqVB+Ae8zFBN/3fCYWcclnX2S1J8GceYgLimeW4V8ir6SojnKpo312jxJPFsBeuEpR4iKyWQ==} + engines: {node: '>=14'} + dependencies: + boolean: 3.2.0 + dayjs: 1.11.10 + dayjs-with-plugins: 1.0.3_dayjs@1.11.10 + is-string-and-not-blank: 0.0.2 + dev: false + + /@ladjs/shared-config/9.1.2: + resolution: {integrity: sha512-BWyBfwzANVUyEIPidPR8AJS7Dv7bk7Nw1aq9Qeh0/oCjCG7wwQZhPfjCP9YKfuq9e9FM803K5bQ3N/G8tBjqVQ==} + engines: {node: '>=14'} + dependencies: + boolean: 3.2.0 + dayjs: 1.11.10 + dayjs-with-plugins: 1.0.3_dayjs@1.11.10 + is-string-and-not-blank: 0.0.2 + dev: false + + /@ladjs/state-helper/3.0.1: + resolution: {integrity: sha512-KmMc3nxK7Gv25zwLjjXSINlf+bZap3eGW5ZuiZEDd7c0YMC2D5QbC+10k12ePzAEI1IevDaZ7LCAoYBGgg3evw==} + engines: {node: '>=14'} + dependencies: + lodash: 4.17.21 + dev: false + + /@ladjs/store-ip-address/0.0.7: + resolution: {integrity: sha512-6r9bjFD/eUy175jFXgvnA/WmReGCrV77l/Xq/QCS+FGM+u0Y4jpdtMv6U4eqrZIuA3EZMOUQpJp08ca1QP4wiA==} + engines: {node: '>=8.3'} + dependencies: + debug: 4.3.4 + validator: 12.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@ladjs/web/21.0.8_jqbmnpgnkpyalkwwr6c2ehqbz4: + resolution: {integrity: sha512-cVjTxLzEXAQlIONS9z/1LEqx46y6QDBOKPYurp9qio3+AuScgpucSoGn5Urlm8+l/OA8R7k6hMadzApeoblb0A==} + engines: {node: '>=14'} + peerDependencies: + axe: '>= 11' + cabin: '>= 11' + dependencies: + '@koa/router': 12.0.1 + '@ladjs/i18n': 8.0.3 + '@ladjs/koa-better-static': 2.0.1 + '@ladjs/koa-cache-responses': 0.0.3 + '@ladjs/koa-isajax': 2.0.0 + '@ladjs/koa-simple-ratelimit': 4.1.1 + '@ladjs/koa-views': 9.0.0_qya2zus74w74bxmr63tupuspuq + '@ladjs/redis': 1.1.1 + '@ladjs/shared-config': 9.1.2 + '@ladjs/state-helper': 3.0.1 + '@ladjs/store-ip-address': 0.0.7 + axe: 12.2.3 + boolean: 3.2.0 + cabin: 13.2.5_axe@12.2.3 + crypto-random-string: 3.3.1 + express-request-id: 1.4.1 + is-string-and-not-blank: 0.0.2 + kcors: 2.2.2 + koa: 2.14.2 + koa-404-handler: 0.1.0 + koa-basic-auth: 4.0.0 + koa-better-error-handler: 11.0.4 + koa-better-flash: 0.0.4 + koa-better-timeout: 0.0.6 + koa-bodyparser: 4.4.1 + koa-cash: 4.1.1 + koa-compress: 5.1.1 + koa-conditional-get: 3.0.0 + koa-connect: 2.1.0 + koa-etag: 4.0.0 + koa-favicon: 2.1.0 + koa-generic-session: 2.3.1 + koa-helmet: 5.2.0 + koa-json: 2.0.2 + koa-meta: 4.0.2 + koa-methodoverride: 2.0.0 + koa-redirect-loop: 3.0.2 + koa-redis: 4.0.1 + lodash: 4.17.21 + ms: 2.1.3 + request-received: 0.0.3 + response-time: 2.3.2 + transitivePeerDependencies: + - '@babel/core' + - '@types/koa' + - arc-templates + - atpl + - bracket-template + - coffee-script + - dot + - dust + - dustjs-helpers + - dustjs-linkedin + - eco + - ect + - ejs + - haml-coffee + - hamlet + - hamljs + - handlebars + - hogan.js + - htmling + - jazz + - jqtpl + - just + - liquid-node + - liquor + - mote + - mustache + - nunjucks + - plates + - pug + - qejs + - ractive + - react + - react-dom + - slm + - supports-color + - swig + - swig-templates + - teacup + - templayed + - then-pug + - tinyliquid + - toffee + - twig + - twing + - underscore + - vash + - velocityjs + - walrus + - whiskers + dev: false + + /@leichtgewicht/ip-codec/2.0.4: + resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} + dev: false + + /@mdn/browser-compat-data/5.3.22: + resolution: {integrity: sha512-VGaBIW9TlTopBnE9DN+EjG6isAOdGr0IHvMJpLytDq6NGvqjIW1feElACdiVM/WOBF2TEvCMLjYBK5lmBC5nXA==} + dev: true + + /@messageformat/core/3.2.0: + resolution: {integrity: sha512-ppbb/7OYqg/t4WdFk8VAfZEV2sNUq3+7VeBAo5sKFhmF786sh6gB7fUeXa2qLTDIcTHS49HivTBN7QNOU5OFTg==} + dependencies: + '@messageformat/date-skeleton': 1.0.1 + '@messageformat/number-skeleton': 1.2.0 + '@messageformat/parser': 5.1.0 + '@messageformat/runtime': 3.0.1 + make-plural: 7.3.0 + safe-identifier: 0.4.2 + dev: false + + /@messageformat/date-skeleton/1.0.1: + resolution: {integrity: sha512-jPXy8fg+WMPIgmGjxSlnGJn68h/2InfT0TNSkVx0IGXgp4ynnvYkbZ51dGWmGySEK+pBiYUttbQdu5XEqX5CRg==} + dev: false + + /@messageformat/number-skeleton/1.2.0: + resolution: {integrity: sha512-xsgwcL7J7WhlHJ3RNbaVgssaIwcEyFkBqxHdcdaiJzwTZAWEOD8BuUFxnxV9k5S0qHN3v/KzUpq0IUpjH1seRg==} + dev: false + + /@messageformat/parser/5.1.0: + resolution: {integrity: sha512-jKlkls3Gewgw6qMjKZ9SFfHUpdzEVdovKFtW1qRhJ3WI4FW5R/NnGDqr8SDGz+krWDO3ki94boMmQvGke1HwUQ==} + dependencies: + moo: 0.5.2 + dev: false + + /@messageformat/runtime/3.0.1: + resolution: {integrity: sha512-6RU5ol2lDtO8bD9Yxe6CZkl0DArdv0qkuoZC+ZwowU+cdRlVE1157wjCmlA5Rsf1Xc/brACnsZa5PZpEDfTFFg==} + dependencies: + make-plural: 7.3.0 + dev: false + + /@mongodb-js/saslprep/1.1.0: + resolution: {integrity: sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==} + dependencies: + sparse-bitfield: 3.0.3 + dev: false + + /@mrmlnc/readdir-enhanced/2.2.1: + resolution: {integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==} + engines: {node: '>=4'} + dependencies: + call-me-maybe: 1.0.2 + glob-to-regexp: 0.3.0 + dev: true + + /@msgpackr-extract/msgpackr-extract-darwin-arm64/3.0.2: + resolution: {integrity: sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@msgpackr-extract/msgpackr-extract-darwin-x64/3.0.2: + resolution: {integrity: sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@msgpackr-extract/msgpackr-extract-linux-arm/3.0.2: + resolution: {integrity: sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@msgpackr-extract/msgpackr-extract-linux-arm64/3.0.2: + resolution: {integrity: sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@msgpackr-extract/msgpackr-extract-linux-x64/3.0.2: + resolution: {integrity: sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@msgpackr-extract/msgpackr-extract-win32-x64/3.0.2: + resolution: {integrity: sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/snappy-android-arm-eabi/7.2.2: + resolution: {integrity: sha512-H7DuVkPCK5BlAr1NfSU8bDEN7gYs+R78pSHhDng83QxRnCLmVIZk33ymmIwurmoA1HrdTxbkbuNl+lMvNqnytw==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/snappy-android-arm64/7.2.2: + resolution: {integrity: sha512-2R/A3qok+nGtpVK8oUMcrIi5OMDckGYNoBLFyli3zp8w6IArPRfg1yOfVUcHvpUDTo9T7LOS1fXgMOoC796eQw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/snappy-darwin-arm64/7.2.2: + resolution: {integrity: sha512-USgArHbfrmdbuq33bD5ssbkPIoT7YCXCRLmZpDS6dMDrx+iM7eD2BecNbOOo7/v1eu6TRmQ0xOzeQ6I/9FIi5g==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/snappy-darwin-x64/7.2.2: + resolution: {integrity: sha512-0APDu8iO5iT0IJKblk2lH0VpWSl9zOZndZKnBYIc+ei1npw2L5QvuErFOTeTdHBtzvUHASB+9bvgaWnQo4PvTQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/snappy-freebsd-x64/7.2.2: + resolution: {integrity: sha512-mRTCJsuzy0o/B0Hnp9CwNB5V6cOJ4wedDTWEthsdKHSsQlO7WU9W1yP7H3Qv3Ccp/ZfMyrmG98Ad7u7lG58WXA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/snappy-linux-arm-gnueabihf/7.2.2: + resolution: {integrity: sha512-v1uzm8+6uYjasBPcFkv90VLZ+WhLzr/tnfkZ/iD9mHYiULqkqpRuC8zvc3FZaJy5wLQE9zTDkTJN1IvUcZ+Vcg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/snappy-linux-arm64-gnu/7.2.2: + resolution: {integrity: sha512-LrEMa5pBScs4GXWOn6ZYXfQ72IzoolZw5txqUHVGs8eK4g1HR9HTHhb2oY5ySNaKakG5sOgMsb1rwaEnjhChmQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/snappy-linux-arm64-musl/7.2.2: + resolution: {integrity: sha512-3orWZo9hUpGQcB+3aTLW7UFDqNCQfbr0+MvV67x8nMNYj5eAeUtMmUE/HxLznHO4eZ1qSqiTwLbVx05/Socdlw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/snappy-linux-x64-gnu/7.2.2: + resolution: {integrity: sha512-jZt8Jit/HHDcavt80zxEkDpH+R1Ic0ssiVCoueASzMXa7vwPJeF4ZxZyqUw4qeSy7n8UUExomu8G8ZbP6VKhgw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/snappy-linux-x64-musl/7.2.2: + resolution: {integrity: sha512-Dh96IXgcZrV39a+Tej/owcd9vr5ihiZ3KRix11rr1v0MWtVb61+H1GXXlz6+Zcx9y8jM1NmOuiIuJwkV4vZ4WA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/snappy-win32-arm64-msvc/7.2.2: + resolution: {integrity: sha512-9No0b3xGbHSWv2wtLEn3MO76Yopn1U2TdemZpCaEgOGccz1V+a/1d16Piz3ofSmnA13HGFz3h9NwZH9EOaIgYA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/snappy-win32-ia32-msvc/7.2.2: + resolution: {integrity: sha512-QiGe+0G86J74Qz1JcHtBwM3OYdTni1hX1PFyLRo3HhQUSpmi13Bzc1En7APn+6Pvo7gkrcy81dObGLDSxFAkQQ==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@napi-rs/snappy-win32-x64-msvc/7.2.2: + resolution: {integrity: sha512-a43cyx1nK0daw6BZxVcvDEXxKMFLSBSDTAhsFD0VqSKcC7MGUBMaqyoWUcMiI7LBSz4bxUmxDWKfCYzpEmeb3w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@netflix/nerror/1.1.3: + resolution: {integrity: sha512-b+MGNyP9/LXkapreJzNUzcvuzZslj/RGgdVVJ16P2wSlYatfLycPObImqVJSmNAdyeShvNeM/pl3sVZsObFueg==} + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.4.1 + lodash: 4.17.21 + dev: false + + /@nicokaiser/passport-apple/1.0.1: + resolution: {integrity: sha512-Y2x4bg21gUliBhcapLiQnq25tGo6bRNK1Si3yuUxUU3VG3i2HC+VmQCx2ELCyZPA4wRk5Y6uNAH+lk/UY2+zeQ==} + dependencies: + jsonwebtoken: 8.5.1 + jwks-rsa: 2.1.5 + oauth: 0.9.15 + passport-strategy: 1.0.0 + uid2: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@nicolo-ribaudo/chokidar-2/2.1.8-no-fsevents.3: + resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} + requiresBuild: true + dev: true + optional: true + + /@nicolo-ribaudo/eslint-scope-5-internals/5.1.1-v1: + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + dependencies: + eslint-scope: 5.1.1 + dev: true + + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + /@nodelib/fs.stat/1.1.3: + resolution: {integrity: sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==} + engines: {node: '>= 6'} + dev: true + + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + + /@npmcli/config/6.4.0: + resolution: {integrity: sha512-/fQjIbuNVIT/PbXvw178Tm97bxV0E0nVUFKHivMKtSI2pcs8xKdaWkHJxf9dTI0G/y5hp/KuCvgcUu5HwAtI1w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@npmcli/map-workspaces': 3.0.4 + ci-info: 3.9.0 + ini: 4.1.1 + nopt: 7.2.0 + proc-log: 3.0.0 + read-package-json-fast: 3.0.2 + semver: 7.5.4 + walk-up-path: 3.0.1 + dev: true + + /@npmcli/fs/1.1.1: + resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.5.4 + dev: true + + /@npmcli/fs/2.1.2: + resolution: {integrity: sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.5.4 + dev: true + + /@npmcli/fs/3.1.0: + resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + semver: 7.5.4 + dev: false + + /@npmcli/map-workspaces/3.0.4: + resolution: {integrity: sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@npmcli/name-from-folder': 2.0.0 + glob: 10.3.10 + minimatch: 9.0.3 + read-package-json-fast: 3.0.2 + dev: true + + /@npmcli/move-file/1.1.2: + resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} + engines: {node: '>=10'} + deprecated: This functionality has been moved to @npmcli/fs + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + dev: true + + /@npmcli/move-file/2.0.1: + resolution: {integrity: sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This functionality has been moved to @npmcli/fs + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + dev: true + + /@npmcli/name-from-folder/2.0.0: + resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /@octokit/auth-token/3.0.4: + resolution: {integrity: sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==} + engines: {node: '>= 14'} + dev: false + + /@octokit/core/4.2.4: + resolution: {integrity: sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==} + engines: {node: '>= 14'} + dependencies: + '@octokit/auth-token': 3.0.4 + '@octokit/graphql': 5.0.6 + '@octokit/request': 6.2.8 + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.3.2 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.0 + transitivePeerDependencies: + - encoding + dev: false + + /@octokit/endpoint/7.0.6: + resolution: {integrity: sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==} + engines: {node: '>= 14'} + dependencies: + '@octokit/types': 9.3.2 + is-plain-object: 5.0.0 + universal-user-agent: 6.0.0 + dev: false + + /@octokit/graphql/5.0.6: + resolution: {integrity: sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==} + engines: {node: '>= 14'} + dependencies: + '@octokit/request': 6.2.8 + '@octokit/types': 9.3.2 + universal-user-agent: 6.0.0 + transitivePeerDependencies: + - encoding + dev: false + + /@octokit/openapi-types/18.1.1: + resolution: {integrity: sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==} + dev: false + + /@octokit/request-error/3.0.3: + resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==} + engines: {node: '>= 14'} + dependencies: + '@octokit/types': 9.3.2 + deprecation: 2.3.1 + once: 1.4.0 + dev: false + + /@octokit/request/6.2.8: + resolution: {integrity: sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==} + engines: {node: '>= 14'} + dependencies: + '@octokit/endpoint': 7.0.6 + '@octokit/request-error': 3.0.3 + '@octokit/types': 9.3.2 + is-plain-object: 5.0.0 + node-fetch: 2.7.0 + universal-user-agent: 6.0.0 + transitivePeerDependencies: + - encoding + dev: false + + /@octokit/types/9.3.2: + resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==} + dependencies: + '@octokit/openapi-types': 18.1.1 + dev: false + + /@one-ini/wasm/0.1.1: + resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} + dev: false + + /@opensearch-project/opensearch/2.4.0: + resolution: {integrity: sha512-r0ZNIlDxAua1ZecOBJ8qOXshf2ZQhNKmfly7o0aNuACf0pDa6Et/8mWMZuaFOu7xlNEeRNB7IjDQUYFy2SPElw==} + engines: {node: '>=10', yarn: ^1.22.10} + dependencies: + aws4: 1.12.0 + debug: 4.3.4 + hpagent: 1.2.0 + ms: 2.1.3 + secure-json-parse: 2.7.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/api/1.6.0: + resolution: {integrity: sha512-OWlrQAnWn9577PhVgqjUvMr1pg57Bc4jv0iL4w0PRuOSRvq67rvHW9Ie/dZVMvCzhSCB+UxhcY/PmCmFj33Q+g==} + engines: {node: '>=8.0.0'} + dev: false + + /@otplib/core/12.0.1: + resolution: {integrity: sha512-4sGntwbA/AC+SbPhbsziRiD+jNDdIzsZ3JUyfZwjtKyc/wufl1pnSIaG4Uqx8ymPagujub0o92kgBnB89cuAMA==} + dev: false + + /@otplib/plugin-crypto/12.0.1: + resolution: {integrity: sha512-qPuhN3QrT7ZZLcLCyKOSNhuijUi9G5guMRVrxq63r9YNOxxQjPm59gVxLM+7xGnHnM6cimY57tuKsjK7y9LM1g==} + dependencies: + '@otplib/core': 12.0.1 + dev: false + + /@otplib/plugin-thirty-two/12.0.1: + resolution: {integrity: sha512-MtT+uqRso909UkbrrYpJ6XFjj9D+x2Py7KjTO9JDPhL0bJUYVu5kFP4TFZW4NFAywrAtFRxOVY261u0qwb93gA==} + dependencies: + '@otplib/core': 12.0.1 + thirty-two: 1.0.2 + dev: false + + /@otplib/preset-default/12.0.1: + resolution: {integrity: sha512-xf1v9oOJRyXfluBhMdpOkr+bsE+Irt+0D5uHtvg6x1eosfmHCsCC6ej/m7FXiWqdo0+ZUI6xSKDhJwc8yfiOPQ==} + dependencies: + '@otplib/core': 12.0.1 + '@otplib/plugin-crypto': 12.0.1 + '@otplib/plugin-thirty-two': 12.0.1 + dev: false + + /@otplib/preset-v11/12.0.1: + resolution: {integrity: sha512-9hSetMI7ECqbFiKICrNa4w70deTUfArtwXykPUvSHWOdzOlfa9ajglu7mNCntlvxycTiOAXkQGwjQCzzDEMRMg==} + dependencies: + '@otplib/core': 12.0.1 + '@otplib/plugin-crypto': 12.0.1 + '@otplib/plugin-thirty-two': 12.0.1 + dev: false + + /@panva/asn1.js/1.0.0: + resolution: {integrity: sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==} + engines: {node: '>=10.13.0'} + dev: false + + /@peculiar/asn1-schema/2.3.0: + resolution: {integrity: sha512-DtNLAG4vmDrdSJFPe7rypkcj597chNQL7u+2dBtYo5mh7VW2+im6ke+O0NVr8W1f4re4C3F71LhoMb0Yxqa48Q==} + dependencies: + asn1js: 3.0.5 + pvtsutils: 1.3.5 + tslib: 2.6.2 + dev: false + + /@peculiar/asn1-schema/2.3.6: + resolution: {integrity: sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA==} + dependencies: + asn1js: 3.0.5 + pvtsutils: 1.3.5 + tslib: 2.6.2 + dev: false + + /@peculiar/asn1-x509-logotype/2.3.0: + resolution: {integrity: sha512-2/tED8oj5C4bvaUZgMZjj4XlxNUU6NZA4kXG94whE0gSmnY0NA0pw3EUbGMI4jj2qXZlud2ygsDUbnS/BfkjUA==} + dependencies: + '@peculiar/asn1-schema': 2.3.6 + '@peculiar/asn1-x509': 2.3.0 + asn1js: 3.0.5 + tslib: 2.6.2 + dev: false + + /@peculiar/asn1-x509/2.3.0: + resolution: {integrity: sha512-iDRNPHAx/HLwR9wN5xaHDPifpdSW/bquu+zo/kQXurnxg6KQ1jcZw+4a63uTvrzyGU/hHzDqjalG/sQvV02lAw==} + dependencies: + '@peculiar/asn1-schema': 2.3.6 + asn1js: 3.0.5 + ipaddr.js: 2.1.0 + pvtsutils: 1.3.5 + tslib: 2.6.2 + dev: false + + /@peculiar/json-schema/1.1.12: + resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} + engines: {node: '>=8.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + + /@peculiar/webcrypto/1.4.3: + resolution: {integrity: sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A==} + engines: {node: '>=10.12.0'} + dependencies: + '@peculiar/asn1-schema': 2.3.6 + '@peculiar/json-schema': 1.1.12 + pvtsutils: 1.3.5 + tslib: 2.6.2 + webcrypto-core: 1.7.7 + dev: false + + /@phc/format/0.5.0: + resolution: {integrity: sha512-JWtZ5P1bfXU0bAtTzCpOLYHDXuxSVdtL/oqz4+xa97h8w9E5IlVN333wugXVFv8vZ1hbXObKQf1ptXmFFcMByg==} + engines: {node: '>=4'} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /@phc/pbkdf2/1.1.14: + resolution: {integrity: sha512-jfZpOuNhcMABtHa/VJewlTRe4c8CfRcBVoFSkCODWp7qmXndhHskwMa0Uab9swRJMw/ZlEiq+WqRONPpURxjgw==} + engines: {node: '>=4'} + dependencies: + '@kdf/salt': 1.0.1 + '@phc/format': 0.5.0 + tsse: 1.1.6 + dev: false + + /@pkgjs/parseargs/0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + optional: true + + /@postalsys/vmc/1.0.6: + resolution: {integrity: sha512-5VdvQHpB6mIf7Lj0efArfZjRy3NuvjK51ZytoWOpw6I4XMgWsdv++UDbHMq9bKTtnAvGwBZRFVKeBoPAhYWJ7A==} + dependencies: + '@peculiar/asn1-schema': 2.3.0 + '@peculiar/asn1-x509': 2.3.0 + '@peculiar/asn1-x509-logotype': 2.3.0 + dev: false + + /@prettier/plugin-pug/2.5.1_prettier@2.8.8: + resolution: {integrity: sha512-rauAMYyTv6tgoo4DZ+1TwpytjaoJgcg+8btp0CfAUaHwjxfNo4cuAGgsJS6WVT7vx2Sz4Pkos50xuSNZuvJAWQ==} + engines: {node: ^16.13.0 || >=18.0.0, npm: '>=7.10.0'} + peerDependencies: + prettier: ^2.3.0 + dependencies: + prettier: 2.8.8 + pug-lexer: 5.0.1 + dev: true + + /@protobufjs/aspromise/1.1.2: + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + dev: false + + /@protobufjs/base64/1.1.2: + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + dev: false + + /@protobufjs/codegen/2.0.4: + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + dev: false + + /@protobufjs/eventemitter/1.1.0: + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + dev: false + + /@protobufjs/fetch/1.1.0: + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + dev: false + + /@protobufjs/float/1.0.2: + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + dev: false + + /@protobufjs/inquire/1.1.0: + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + dev: false + + /@protobufjs/path/1.1.2: + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + dev: false + + /@protobufjs/pool/1.1.0: + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + dev: false + + /@protobufjs/utf8/1.1.0: + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + dev: false + + /@ronilaukkarinen/gulp-stylelint/14.1.1_stylelint@15.10.3: + resolution: {integrity: sha512-3gXiYu0PkPTXs7l70V6zrHCy9O1KziMTKy9fcDho2KXiAxUcFeBaZ8Gw6Sz46Rj5vJTXMgrVd4fAoRHfxO3tBQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=15.14.0 || >=16.0.0} + peerDependencies: + stylelint: 10 - 15 + dependencies: + '@jridgewell/trace-mapping': 0.3.19 + ansi-colors: 4.1.3 + fancy-log: 2.0.0 + plugin-error: 2.0.1 + stylelint: 15.10.3 + dev: true + + /@root/acme/3.1.0: + resolution: {integrity: sha512-GAyaW63cpSYd2KvVp5lHLbCWeEhJPKZK9nsJvZJOKsD9Uv88KEttn4FpDZEJ+2q3Jsey0DWpuQ2I4ft0JV9p2w==} + requiresBuild: true + dependencies: + '@root/csr': 0.8.1 + '@root/encoding': 1.0.1 + '@root/keypairs': 0.10.3 + '@root/pem': 1.0.4 + '@root/request': 1.9.2 + '@root/x509': 0.7.2 + dev: false + + /@root/asn1/1.0.0: + resolution: {integrity: sha512-0lfZNuOULKJDJmdIkP8V9RnbV3XaK6PAHD3swnFy4tZwtlMDzLKoM/dfNad7ut8Hu3r91wy9uK0WA/9zym5mig==} + dependencies: + '@root/encoding': 1.0.1 + dev: false + + /@root/csr/0.8.1: + resolution: {integrity: sha512-hKl0VuE549TK6SnS2Yn9nRvKbFZXn/oAg+dZJU/tlKl/f/0yRXeuUzf8akg3JjtJq+9E592zDqeXZ7yyrg8fSQ==} + dependencies: + '@root/asn1': 1.0.0 + '@root/pem': 1.0.4 + '@root/x509': 0.7.2 + dev: false + + /@root/encoding/1.0.1: + resolution: {integrity: sha512-OaEub02ufoU038gy6bsNHQOjIn8nUjGiLcaRmJ40IUykneJkIW5fxDqKxQx48cszuNflYldsJLPPXCrGfHs8yQ==} + dev: false + + /@root/keypairs/0.10.3: + resolution: {integrity: sha512-hbmjVbk/G99Z1XlUzJM4VOAaR8jm4vMnfwpZL301FA24ubJ/bOjj6enCrz9gKsQvBO6RY4/R4MgUuWpXeqeZZQ==} + dependencies: + '@root/encoding': 1.0.1 + '@root/pem': 1.0.4 + '@root/x509': 0.7.2 + dev: false + + /@root/pem/1.0.4: + resolution: {integrity: sha512-rEUDiUsHtild8GfIjFE9wXtcVxeS+ehCJQBwbQQ3IVfORKHK93CFnRtkr69R75lZFjcmKYVc+AXDB+AeRFOULA==} + dev: false + + /@root/request/1.9.2: + resolution: {integrity: sha512-wVaL9yVV9oDR9UNbPZa20qgY+4Ch6YN8JUkaE4el/uuS5dmhD8Lusm/ku8qJVNtmQA56XLzEDCRS6/vfpiHK2A==} + dev: false + + /@root/x509/0.7.2: + resolution: {integrity: sha512-ENq3LGYORK5NiMFHEVeNMt+fTXaC7DTS6sQXoqV+dFdfT0vmiL5cDLjaXQhaklJQq0NiwicZegzJRl1ZOTp3WQ==} + dependencies: + '@root/asn1': 1.0.0 + '@root/encoding': 1.0.1 + dev: false + + /@selderee/plugin-htmlparser2/0.11.0: + resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} + dependencies: + domhandler: 5.0.3 + selderee: 0.11.0 + dev: false + + /@selderee/plugin-htmlparser2/0.6.0: + resolution: {integrity: sha512-J3jpy002TyBjd4N/p6s+s90eX42H2eRhK3SbsZuvTDv977/E8p2U3zikdiehyJja66do7FlxLomZLPlvl2/xaA==} + dependencies: + domhandler: 4.3.1 + selderee: 0.6.0 + dev: false + + /@sideway/address/4.1.4: + resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==} + dependencies: + '@hapi/hoek': 9.3.0 + dev: false + + /@sideway/formula/3.0.1: + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + dev: false + + /@sideway/pinpoint/2.0.0: + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + dev: false + + /@sidoshi/random-string/1.0.0: + resolution: {integrity: sha512-imA+e6A8XmeZqWfGQ2EKcSa1FtoJRoFfG3k2qU2wmvbsMBRdw1sogewYQlLbDTbPLFqZHBahrF2x/5+AUYq9xQ==} + dependencies: + randombytes: 2.1.0 + dev: false + + /@sindresorhus/is/0.14.0: + resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} + engines: {node: '>=6'} + dev: true + + /@sindresorhus/is/0.15.0: + resolution: {integrity: sha512-lu8BpxjAtRCAo5ifytTpCPCj99LF7o/2Myn+NXyNCBqvPYn7Pjd76AMmUB5l7XF1U6t0hcWrlEM5ESufW7wAeA==} + engines: {node: '>=6'} + dev: false + + /@sindresorhus/is/0.7.0: + resolution: {integrity: sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==} + engines: {node: '>=4'} + dev: true + + /@sindresorhus/is/4.6.0: + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + dev: false + + /@sindresorhus/is/5.6.0: + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + dev: true + + /@sinonjs/commons/2.0.0: + resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} + dependencies: + type-detect: 4.0.8 + dev: true + + /@sinonjs/commons/3.0.0: + resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + dependencies: + type-detect: 4.0.8 + dev: true + + /@sinonjs/fake-timers/10.3.0: + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + dependencies: + '@sinonjs/commons': 3.0.0 + dev: true + + /@sinonjs/samsam/8.0.0: + resolution: {integrity: sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==} + dependencies: + '@sinonjs/commons': 2.0.0 + lodash.get: 4.4.2 + type-detect: 4.0.8 + dev: true + + /@sinonjs/text-encoding/0.7.2: + resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==} + dev: true + + /@smithy/abort-controller/2.0.11: + resolution: {integrity: sha512-MSzE1qR2JNyb7ot3blIOT3O3H0Jn06iNDEgHRaqZUwBgx5EG+VIx24Y21tlKofzYryIOcWpIohLrIIyocD6LMA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/config-resolver/2.0.14: + resolution: {integrity: sha512-K1K+FuWQoy8j/G7lAmK85o03O89s2Vvh6kMFmzEmiHUoQCRH1rzbDtMnGNiaMHeSeYJ6y79IyTusdRG+LuWwtg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/node-config-provider': 2.1.1 + '@smithy/types': 2.3.5 + '@smithy/util-config-provider': 2.0.0 + '@smithy/util-middleware': 2.0.4 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/credential-provider-imds/2.0.16: + resolution: {integrity: sha512-tKa2xF+69TvGxJT+lnJpGrKxUuAZDLYXFhqnPEgnHz+psTpkpcB4QRjHj63+uj83KaeFJdTfW201eLZeRn6FfA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/node-config-provider': 2.1.1 + '@smithy/property-provider': 2.0.12 + '@smithy/types': 2.3.5 + '@smithy/url-parser': 2.0.11 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/eventstream-codec/2.0.11: + resolution: {integrity: sha512-BQCTjxhCYRZIfXapa2LmZSaH8QUBGwMZw7XRN83hrdixbLjIcj+o549zjkedFS07Ve2TlvWUI6BTzP+nv7snBA==} + dependencies: + '@aws-crypto/crc32': 3.0.0 + '@smithy/types': 2.3.5 + '@smithy/util-hex-encoding': 2.0.0 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/fetch-http-handler/2.2.3: + resolution: {integrity: sha512-0G9sePU+0R+8d7cie+OXzNbbkjnD4RfBlVCs46ZEuQAMcxK8OniemYXSSkOc80CCk8Il4DnlYZcUSvsIs2OB2w==} + dependencies: + '@smithy/protocol-http': 3.0.7 + '@smithy/querystring-builder': 2.0.11 + '@smithy/types': 2.3.5 + '@smithy/util-base64': 2.0.0 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/hash-node/2.0.11: + resolution: {integrity: sha512-PbleVugN2tbhl1ZoNWVrZ1oTFFas/Hq+s6zGO8B9bv4w/StTriTKA9W+xZJACOj9X7zwfoTLbscM+avCB1KqOQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.5 + '@smithy/util-buffer-from': 2.0.0 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/invalid-dependency/2.0.11: + resolution: {integrity: sha512-zazq99ujxYv/NOf9zh7xXbNgzoVLsqE0wle8P/1zU/XdhPi/0zohTPKWUzIxjGdqb5hkkwfBkNkl5H+LE0mvgw==} + dependencies: + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/is-array-buffer/2.0.0: + resolution: {integrity: sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/middleware-content-length/2.0.13: + resolution: {integrity: sha512-Md2kxWpaec3bXp1oERFPQPBhOXCkGSAF7uc1E+4rkwjgw3/tqAXRtbjbggu67HJdwaif76As8AV6XxbD1HzqTQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/protocol-http': 3.0.7 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/middleware-endpoint/2.1.1: + resolution: {integrity: sha512-YAqGagBvHqDEew4EGz9BrQ7M+f+u7ck9EL4zzYirOhIcXeBS/+q4A5+ObHDDwEp38lD6t88YUtFy3OptqEaDQg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/middleware-serde': 2.0.11 + '@smithy/node-config-provider': 2.1.1 + '@smithy/shared-ini-file-loader': 2.2.0 + '@smithy/types': 2.3.5 + '@smithy/url-parser': 2.0.11 + '@smithy/util-middleware': 2.0.4 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/middleware-retry/2.0.16: + resolution: {integrity: sha512-Br5+0yoiMS0ugiOAfJxregzMMGIRCbX4PYo1kDHtLgvkA/d++aHbnHB819m5zOIAMPvPE7AThZgcsoK+WOsUTA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/node-config-provider': 2.1.1 + '@smithy/protocol-http': 3.0.7 + '@smithy/service-error-classification': 2.0.4 + '@smithy/types': 2.3.5 + '@smithy/util-middleware': 2.0.4 + '@smithy/util-retry': 2.0.4 + tslib: 2.6.2 + uuid: 8.3.2 + dev: false + optional: true + + /@smithy/middleware-serde/2.0.11: + resolution: {integrity: sha512-NuxnjMyf4zQqhwwdh0OTj5RqpnuT6HcH5Xg5GrPijPcKzc2REXVEVK4Yyk8ckj8ez1XSj/bCmJ+oNjmqB02GWA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/middleware-stack/2.0.5: + resolution: {integrity: sha512-bVQU/rZzBY7CbSxIrDTGZYnBWKtIw+PL/cRc9B7etZk1IKSOe0NvKMJyWllfhfhrTeMF6eleCzOihIQympAvPw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/node-config-provider/2.1.1: + resolution: {integrity: sha512-1lF6s1YWBi1LBu2O30tD3jyTgMtuvk/Z1twzXM4GPYe4dmZix4nNREPJIPOcfFikNU2o0eTYP80+izx5F2jIJA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/property-provider': 2.0.12 + '@smithy/shared-ini-file-loader': 2.2.0 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/node-http-handler/2.1.7: + resolution: {integrity: sha512-PQIKZXlp3awCDn/xNlCSTFE7aYG/5Tx33M05NfQmWYeB5yV1GZZOSz4dXpwiNJYTXb9jPqjl+ueXXkwtEluFFA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/abort-controller': 2.0.11 + '@smithy/protocol-http': 3.0.7 + '@smithy/querystring-builder': 2.0.11 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/property-provider/2.0.12: + resolution: {integrity: sha512-Un/OvvuQ1Kg8WYtoMCicfsFFuHb/TKL3pCA6ZIo/WvNTJTR94RtoRnL7mY4XkkUAoFMyf6KjcQJ76y1FX7S5rw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/protocol-http/3.0.7: + resolution: {integrity: sha512-HnZW8y+r66ntYueCDbLqKwWcMNWW8o3eVpSrHNluwtBJ/EUWfQHRKSiu6vZZtc6PGfPQWgVfucoCE/C3QufMAA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/querystring-builder/2.0.11: + resolution: {integrity: sha512-b4kEbVMxpmfv2VWUITn2otckTi7GlMteZQxi+jlwedoATOGEyrCJPfRcYQJjbCi3fZ2QTfh3PcORvB27+j38Yg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.5 + '@smithy/util-uri-escape': 2.0.0 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/querystring-parser/2.0.11: + resolution: {integrity: sha512-YXe7jhi7s3dQ0Fu9dLoY/gLu6NCyy8tBWJL/v2c9i7/RLpHgKT+uT96/OqZkHizCJ4kr0ZD46tzMjql/o60KLg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/service-error-classification/2.0.4: + resolution: {integrity: sha512-77506l12I5gxTZqBkx3Wb0RqMG81bMYLaVQ+EqIWFwQDJRs5UFeXogKxSKojCmz1wLUziHZQXm03MBzPQiumQw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.5 + dev: false + optional: true + + /@smithy/shared-ini-file-loader/2.2.0: + resolution: {integrity: sha512-xFXqs4vAb5BdkzHSRrTapFoaqS4/3m/CGZzdw46fBjYZ0paYuLAoMY60ICCn1FfGirG+PiJ3eWcqJNe4/SkfyA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/signature-v4/2.0.11: + resolution: {integrity: sha512-EFVU1dT+2s8xi227l1A9O27edT/GNKvyAK6lZnIZ0zhIHq/jSLznvkk15aonGAM1kmhmZBVGpI7Tt0odueZK9A==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/eventstream-codec': 2.0.11 + '@smithy/is-array-buffer': 2.0.0 + '@smithy/types': 2.3.5 + '@smithy/util-hex-encoding': 2.0.0 + '@smithy/util-middleware': 2.0.4 + '@smithy/util-uri-escape': 2.0.0 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/smithy-client/2.1.11: + resolution: {integrity: sha512-okjMbuBBCTiieK665OFN/ap6u9+Z9z55PMphS5FYCsS6Zfp137Q3qlnt0OgBAnUVnH/mNGyoJV0LBX9gkTWptg==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/middleware-stack': 2.0.5 + '@smithy/types': 2.3.5 + '@smithy/util-stream': 2.0.16 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/types/2.3.5: + resolution: {integrity: sha512-ehyDt8M9hehyxrLQGoA1BGPou8Js1Ocoh5M0ngDhJMqbFmNK5N6Xhr9/ZExWkyIW8XcGkiMPq3ZUEE0ScrhbuQ==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/url-parser/2.0.11: + resolution: {integrity: sha512-h89yXMCCF+S5k9XIoKltMIWTYj+FcEkU/IIFZ6RtE222fskOTL4Iak6ZRG+ehSvZDt8yKEcxqheTDq7JvvtK3g==} + dependencies: + '@smithy/querystring-parser': 2.0.11 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-base64/2.0.0: + resolution: {integrity: sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/util-buffer-from': 2.0.0 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-body-length-browser/2.0.0: + resolution: {integrity: sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==} + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-body-length-node/2.1.0: + resolution: {integrity: sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-buffer-from/2.0.0: + resolution: {integrity: sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/is-array-buffer': 2.0.0 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-config-provider/2.0.0: + resolution: {integrity: sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-defaults-mode-browser/2.0.15: + resolution: {integrity: sha512-2raMZOYKSuke7QlDg/HDcxQdrp0zteJ8z+S0B9Rn23J55ZFNK1+IjG4HkN6vo/0u3Xy/JOdJ93ibiBSB8F7kOw==} + engines: {node: '>= 10.0.0'} + dependencies: + '@smithy/property-provider': 2.0.12 + '@smithy/smithy-client': 2.1.11 + '@smithy/types': 2.3.5 + bowser: 2.11.0 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-defaults-mode-node/2.0.19: + resolution: {integrity: sha512-7pScU4jBFADB2MBYKM3zb5onMh6Nn0X3IfaFVLYPyCarTIZDLUtUl1GtruzEUJPmDzP+uGeqOtU589HDY0Ni6g==} + engines: {node: '>= 10.0.0'} + dependencies: + '@smithy/config-resolver': 2.0.14 + '@smithy/credential-provider-imds': 2.0.16 + '@smithy/node-config-provider': 2.1.1 + '@smithy/property-provider': 2.0.12 + '@smithy/smithy-client': 2.1.11 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-hex-encoding/2.0.0: + resolution: {integrity: sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-middleware/2.0.4: + resolution: {integrity: sha512-Pbu6P4MBwRcjrLgdTR1O4Y3c0sTZn2JdOiJNcgL7EcIStcQodj+6ZTXtbyU/WTEU3MV2NMA10LxFc3AWHZ3+4A==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-retry/2.0.4: + resolution: {integrity: sha512-b+n1jBBKc77C1E/zfBe1Zo7S9OXGBiGn55N0apfhZHxPUP/fMH5AhFUUcWaJh7NAnah284M5lGkBKuhnr3yK5w==} + engines: {node: '>= 14.0.0'} + dependencies: + '@smithy/service-error-classification': 2.0.4 + '@smithy/types': 2.3.5 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-stream/2.0.16: + resolution: {integrity: sha512-b5ZSRh1KzUzC7LoJcpfk7+iXGoRr3WylEfmPd4FnBLm90OwxSB9VgK1fDZwicfYxSEvWHdYXgvvjPtenEYBBhw==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/fetch-http-handler': 2.2.3 + '@smithy/node-http-handler': 2.1.7 + '@smithy/types': 2.3.5 + '@smithy/util-base64': 2.0.0 + '@smithy/util-buffer-from': 2.0.0 + '@smithy/util-hex-encoding': 2.0.0 + '@smithy/util-utf8': 2.0.0 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-uri-escape/2.0.0: + resolution: {integrity: sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==} + engines: {node: '>=14.0.0'} + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-utf8/2.0.0: + resolution: {integrity: sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==} + engines: {node: '>=14.0.0'} + dependencies: + '@smithy/util-buffer-from': 2.0.0 + tslib: 2.6.2 + dev: false + optional: true + + /@stdlib/array-float32/0.0.6: + resolution: {integrity: sha512-QgKT5UaE92Rv7cxfn7wBKZAlwFFHPla8eXsMFsTGt5BiL4yUy36lwinPUh4hzybZ11rw1vifS3VAPuk6JP413Q==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-has-float32array-support': 0.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/array-float64/0.0.6: + resolution: {integrity: sha512-oE8y4a84LyBF1goX5//sU1mOjet8gLI0/6wucZcjg+j/yMmNV1xFu84Az9GOGmFSE6Ze6lirGOhfBeEWNNNaJg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-has-float64array-support': 0.0.8 + dev: false + + /@stdlib/assert-has-float32array-support/0.0.8: + resolution: {integrity: sha512-Yrg7K6rBqwCzDWZ5bN0VWLS5dNUWcoSfUeU49vTERdUmZID06J069CDc07UUl8vfQWhFgBWGocH3rrpKm1hi9w==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/assert-is-float32array': 0.0.8 + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/constants-float64-pinf': 0.0.8 + '@stdlib/fs-read-file': 0.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/assert-has-float64array-support/0.0.8: + resolution: {integrity: sha512-UVQcoeWqgMw9b8PnAmm/sgzFnuWkZcNhJoi7xyMjbiDV/SP1qLCrvi06mq86cqS3QOCma1fEayJdwgteoXyyuw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/assert-is-float64array': 0.0.8 + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/fs-read-file': 0.0.8 + dev: false + + /@stdlib/assert-has-node-buffer-support/0.0.8: + resolution: {integrity: sha512-fgI+hW4Yg4ciiv4xVKH+1rzdV7e5+6UKgMnFbc1XDXHcxLub3vOr8+H6eDECdAIfgYNA7X0Dxa/DgvX9dwDTAQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/assert-is-buffer': 0.0.8 + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/fs-read-file': 0.0.8 + dev: false + + /@stdlib/assert-has-own-property/0.0.7: + resolution: {integrity: sha512-3YHwSWiUqGlTLSwxAWxrqaD1PkgcJniGyotJeIt5X0tSNmSW0/c9RWroCImTUUB3zBkyBJ79MyU9Nf4Qgm59fQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dev: false + + /@stdlib/assert-has-symbol-support/0.0.8: + resolution: {integrity: sha512-PoQ9rk8DgDCuBEkOIzGGQmSnjtcdagnUIviaP5YskB45/TJHXseh4NASWME8FV77WFW9v/Wt1MzKFKMzpDFu4Q==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/fs-read-file': 0.0.8 + dev: false + + /@stdlib/assert-has-tostringtag-support/0.0.9: + resolution: {integrity: sha512-UTsqdkrnQ7eufuH5BeyWOJL3ska3u5nvDWKqw3onNNZ2mvdgkfoFD7wHutVGzAA2rkTsSJAMBHVwWLsm5SbKgw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/assert-has-symbol-support': 0.0.8 + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/fs-read-file': 0.0.8 + dev: false + + /@stdlib/assert-is-arguments/0.0.14: + resolution: {integrity: sha512-jhMkdQsCHcAUQmk0t8Dof/I1sThotcJ3vcFigqwTEzVS7DQb2BVQ5egHtwdHFRyNf46u0Yfm8b2r6es+uYdWOQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-has-own-property': 0.0.7 + '@stdlib/assert-is-array': 0.0.7 + '@stdlib/assert-is-enumerable-property': 0.0.7 + '@stdlib/constants-uint32-max': 0.0.7 + '@stdlib/math-base-assert-is-integer': 0.0.7 + '@stdlib/utils-native-class': 0.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/assert-is-array/0.0.7: + resolution: {integrity: sha512-/o6KclsGkNcZ5hiROarsD9XUs6xQMb4lTwF6O71UHbKWTtomEF/jD0rxLvlvj0BiCxfKrReddEYd2CnhUyskMA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/utils-native-class': 0.0.8 + dev: false + + /@stdlib/assert-is-boolean/0.0.8: + resolution: {integrity: sha512-PRCpslMXSYqFMz1Yh4dG2K/WzqxTCtlKbgJQD2cIkAtXux4JbYiXCtepuoV7l4Wv1rm0a1eU8EqNPgnOmWajGw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-has-tostringtag-support': 0.0.9 + '@stdlib/utils-define-nonenumerable-read-only-property': 0.0.7 + '@stdlib/utils-native-class': 0.0.8 + dev: false + + /@stdlib/assert-is-buffer/0.0.8: + resolution: {integrity: sha512-SYmGwOXkzZVidqUyY1IIx6V6QnSL36v3Lcwj8Rvne/fuW0bU2OomsEBzYCFMvcNgtY71vOvgZ9VfH3OppvV6eA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-object-like': 0.0.8 + dev: false + + /@stdlib/assert-is-capitalized/0.0.8: + resolution: {integrity: sha512-t4xLXHJiicuQhmuv4sEidRwUnbBoqh5HUjU3RRxWsEiUE3NZEfkPwdMS+CV9g2w+1MJwIp6by71AqJPilrW52A==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/fs-read-file': 0.0.8 + '@stdlib/process-read-stdin': 0.0.7 + '@stdlib/regexp-eol': 0.0.7 + '@stdlib/streams-node-stdin': 0.0.7 + '@stdlib/string-lowercase': 0.0.9 + '@stdlib/string-uppercase': 0.0.9 + dev: false + + /@stdlib/assert-is-collection/0.0.8: + resolution: {integrity: sha512-OyKXC8OgvxqLUuJPzVX58j26puOVqnIG2OsxxwtZQ5rwFIcwirYy0LrBfSaF0JX+njau6zb5de+QEURA+mQIgA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/constants-array-max-typed-array-length': 0.0.7 + '@stdlib/math-base-assert-is-integer': 0.0.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/assert-is-enumerable-property/0.0.7: + resolution: {integrity: sha512-jkhuJgpaiJlTxxkAvacbFl23PI5oO41ecmz1UcngVYI6bMeWZLNdkvFQri0W3ZaDem4zyXi6Kw3G/ohkIHq92g==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-integer': 0.0.8 + '@stdlib/assert-is-nan': 0.0.8 + '@stdlib/assert-is-string': 0.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/assert-is-float32array/0.0.8: + resolution: {integrity: sha512-Phk0Ze7Vj2/WLv5Wy8Oo7poZIDMSTiTrEnc1t4lBn3Svz2vfBXlvCufi/i5d93vc4IgpkdrOEwfry6nldABjNQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/utils-native-class': 0.0.8 + dev: false + + /@stdlib/assert-is-float64array/0.0.8: + resolution: {integrity: sha512-UC0Av36EEYIgqBbCIz1lj9g7qXxL5MqU1UrWun+n91lmxgdJ+Z77fHy75efJbJlXBf6HXhcYXECIsc0u3SzyDQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/utils-native-class': 0.0.8 + dev: false + + /@stdlib/assert-is-function/0.0.8: + resolution: {integrity: sha512-M55Dt2njp5tnY8oePdbkKBRIypny+LpCMFZhEjJIxjLE4rA6zSlHs1yRMqD4PmW+Wl9WTeEM1GYO4AQHl1HAjA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/utils-type-of': 0.0.8 + dev: false + + /@stdlib/assert-is-integer/0.0.8: + resolution: {integrity: sha512-gCjuKGglSt0IftXJXIycLFNNRw0C+8235oN0Qnw3VAdMuEWauwkNhoiw0Zsu6Arzvud8MQJY0oBGZtvLUC6QzQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-number': 0.0.7 + '@stdlib/constants-float64-ninf': 0.0.8 + '@stdlib/constants-float64-pinf': 0.0.8 + '@stdlib/math-base-assert-is-integer': 0.0.7 + '@stdlib/utils-define-nonenumerable-read-only-property': 0.0.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/assert-is-nan/0.0.8: + resolution: {integrity: sha512-K57sjcRzBybdRpCoiuqyrn/d+R0X98OVlmXT4xEk3VPYqwux8e0NModVFHDehe+zuhmZLvYM50mNwp1TQC2AxA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-number': 0.0.7 + '@stdlib/math-base-assert-is-nan': 0.0.8 + '@stdlib/utils-define-nonenumerable-read-only-property': 0.0.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/assert-is-number/0.0.7: + resolution: {integrity: sha512-mNV4boY1cUOmoWWfA2CkdEJfXA6YvhcTvwKC0Fzq+HoFFOuTK/scpTd9HanUyN6AGBlWA8IW+cQ1ZwOT3XMqag==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-has-tostringtag-support': 0.0.9 + '@stdlib/number-ctor': 0.0.7 + '@stdlib/utils-define-nonenumerable-read-only-property': 0.0.7 + '@stdlib/utils-native-class': 0.0.8 + dev: false + + /@stdlib/assert-is-object-like/0.0.8: + resolution: {integrity: sha512-pe9selDPYAu/lYTFV5Rj4BStepgbzQCr36b/eC8EGSJh6gMgRXgHVv0R+EbdJ69KNkHvKKRjnWj0A/EmCwW+OA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-tools-array-function': 0.0.7 + '@stdlib/utils-define-nonenumerable-read-only-property': 0.0.7 + dev: false + + /@stdlib/assert-is-object/0.0.8: + resolution: {integrity: sha512-ooPfXDp9c7w+GSqD2NBaZ/Du1JRJlctv+Abj2vRJDcDPyrnRTb1jmw+AuPgcW7Ca7op39JTbArI+RVHm/FPK+Q==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-array': 0.0.7 + dev: false + + /@stdlib/assert-is-plain-object/0.0.7: + resolution: {integrity: sha512-t/CEq2a083ajAgXgSa5tsH8l3kSoEqKRu1qUwniVLFYL4RGv3615CrpJUDQKVtEX5S/OKww5q0Byu3JidJ4C5w==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-has-own-property': 0.0.7 + '@stdlib/assert-is-function': 0.0.8 + '@stdlib/assert-is-object': 0.0.8 + '@stdlib/utils-get-prototype-of': 0.0.7 + '@stdlib/utils-native-class': 0.0.8 + dev: false + + /@stdlib/assert-is-regexp-string/0.0.9: + resolution: {integrity: sha512-FYRJJtH7XwXEf//X6UByUC0Eqd0ZYK5AC8or5g5m5efQrgr2lOaONHyDQ3Scj1A2D6QLIJKZc9XBM4uq5nOPXA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/fs-read-file': 0.0.8 + '@stdlib/process-read-stdin': 0.0.7 + '@stdlib/regexp-eol': 0.0.7 + '@stdlib/regexp-regexp': 0.0.8 + '@stdlib/streams-node-stdin': 0.0.7 + dev: false + + /@stdlib/assert-is-regexp/0.0.7: + resolution: {integrity: sha512-ty5qvLiqkDq6AibHlNJe0ZxDJ9Mg896qolmcHb69mzp64vrsORnPPOTzVapAq0bEUZbXoypeijypLPs9sCGBSQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-has-tostringtag-support': 0.0.9 + '@stdlib/utils-native-class': 0.0.8 + dev: false + + /@stdlib/assert-is-string/0.0.8: + resolution: {integrity: sha512-Uk+bR4cglGBbY0q7O7HimEJiW/DWnO1tSzr4iAGMxYgf+VM2PMYgI5e0TLy9jOSOzWon3YS39lc63eR3a9KqeQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-has-tostringtag-support': 0.0.9 + '@stdlib/utils-define-nonenumerable-read-only-property': 0.0.7 + '@stdlib/utils-native-class': 0.0.8 + dev: false + + /@stdlib/assert-tools-array-function/0.0.7: + resolution: {integrity: sha512-3lqkaCIBMSJ/IBHHk4NcCnk2NYU52tmwTYbbqhAmv7vim8rZPNmGfj3oWkzrCsyCsyTF7ooD+In2x+qTmUbCtQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-array': 0.0.7 + dev: false + + /@stdlib/buffer-ctor/0.0.7: + resolution: {integrity: sha512-4IyTSGijKUQ8+DYRaKnepf9spvKLZ+nrmZ+JrRcB3FrdTX/l9JDpggcUcC/Fe+A4KIZOnClfxLn6zfIlkCZHNA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-has-node-buffer-support': 0.0.8 + dev: false + + /@stdlib/buffer-from-string/0.0.8: + resolution: {integrity: sha512-Dws5ZbK2M9l4Bkn/ODHFm3lNZ8tWko+NYXqGS/UH/RIQv3PGp+1tXFUSvjwjDneM6ppjQVExzVedUH1ftABs9A==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-function': 0.0.8 + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/buffer-ctor': 0.0.7 + '@stdlib/string-format': 0.0.3 + dev: false + + /@stdlib/cli-ctor/0.0.3: + resolution: {integrity: sha512-0zCuZnzFyxj66GoF8AyIOhTX5/mgGczFvr6T9h4mXwegMZp8jBC/ZkOGMwmp+ODLBTvlcnnDNpNFkDDyR6/c2g==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/utils-define-nonenumerable-read-only-property': 0.0.7 + '@stdlib/utils-noop': 0.0.14 + minimist: 1.2.8 + dev: false + + /@stdlib/complex-float32/0.0.7: + resolution: {integrity: sha512-POCtQcBZnPm4IrFmTujSaprR1fcOFr/MRw2Mt7INF4oed6b1nzeG647K+2tk1m4mMrMPiuXCdvwJod4kJ0SXxQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-number': 0.0.7 + '@stdlib/number-float64-base-to-float32': 0.0.7 + '@stdlib/utils-define-nonenumerable-read-only-property': 0.0.7 + '@stdlib/utils-define-property': 0.0.9 + '@stdlib/utils-library-manifest': 0.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/complex-float64/0.0.8: + resolution: {integrity: sha512-lUJwsXtGEziOWAqCcnKnZT4fcVoRsl6t6ECaCJX45Z7lAc70yJLiwUieLWS5UXmyoADHuZyUXkxtI4oClfpnaw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-number': 0.0.7 + '@stdlib/complex-float32': 0.0.7 + '@stdlib/utils-define-nonenumerable-read-only-property': 0.0.7 + '@stdlib/utils-define-property': 0.0.9 + '@stdlib/utils-library-manifest': 0.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/complex-reim/0.0.6: + resolution: {integrity: sha512-28WXfPSIFMtHb0YgdatkGS4yxX5sPYea5MiNgqPv3E78+tFcg8JJG52NQ/MviWP2wsN9aBQAoCPeu8kXxSPdzA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array-float64': 0.0.6 + '@stdlib/complex-float64': 0.0.8 + '@stdlib/types': 0.0.14 + '@stdlib/utils-library-manifest': 0.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/complex-reimf/0.0.1: + resolution: {integrity: sha512-P9zu05ZW2i68Oppp3oHelP7Tk0D7tGBL0hGl1skJppr2vY9LltuNbeYI3C96tQe/7Enw/5GyAWgxoQI4cWccQA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array-float32': 0.0.6 + '@stdlib/complex-float32': 0.0.7 + '@stdlib/types': 0.0.14 + '@stdlib/utils-library-manifest': 0.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/constants-array-max-typed-array-length/0.0.7: + resolution: {integrity: sha512-KoQtZUGxP+ljOjUfc/dpH9dEZmqxXaLs7HV1D0W+Gnwa8GnuPJijTwmYZwglmjtbeWIzlaLksqPAvlQE7rj2jg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dev: false + + /@stdlib/constants-float64-ninf/0.0.8: + resolution: {integrity: sha512-bn/uuzCne35OSLsQZJlNrkvU1/40spGTm22g1+ZI1LL19J8XJi/o4iupIHRXuLSTLFDBqMoJlUNphZlWQ4l8zw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/number-ctor': 0.0.7 + '@stdlib/utils-library-manifest': 0.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/constants-float64-pinf/0.0.8: + resolution: {integrity: sha512-I3R4rm2cemoMuiDph07eo5oWZ4ucUtpuK73qBJiJPDQKz8fSjSe4wJBAigq2AmWYdd7yJHsl5NJd8AgC6mP5Qw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/utils-library-manifest': 0.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/constants-uint32-max/0.0.7: + resolution: {integrity: sha512-8+NK0ewqc1vnEZNqzwFJgFSy3S543Eft7i8WyW/ygkofiqEiLAsujvYMHzPAB8/3D+PYvjTSe37StSwRwvQ6uw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dev: false + + /@stdlib/fs-exists/0.0.8: + resolution: {integrity: sha512-mZktcCxiLmycCJefm1+jbMTYkmhK6Jk1ShFmUVqJvs+Ps9/2EEQXfPbdEniLoVz4HeHLlcX90JWobUEghOOnAQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/fs-read-file': 0.0.8 + '@stdlib/process-cwd': 0.0.8 + '@stdlib/utils-define-nonenumerable-read-only-property': 0.0.7 + dev: false + + /@stdlib/fs-read-file/0.0.8: + resolution: {integrity: sha512-pIZID/G91+q7ep4x9ECNC45+JT2j0+jdz/ZQVjCHiEwXCwshZPEvxcPQWb9bXo6coOY+zJyX5TwBIpXBxomWFg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/utils-define-nonenumerable-read-only-property': 0.0.7 + dev: false + + /@stdlib/fs-resolve-parent-path/0.0.8: + resolution: {integrity: sha512-ok1bTWsAziChibQE3u7EoXwbCQUDkFjjRAHSxh7WWE5JEYVJQg1F0o3bbjRr4D/wfYYPWLAt8AFIKBUDmWghpg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/assert-has-own-property': 0.0.7 + '@stdlib/assert-is-function': 0.0.8 + '@stdlib/assert-is-plain-object': 0.0.7 + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/fs-exists': 0.0.8 + '@stdlib/fs-read-file': 0.0.8 + '@stdlib/process-cwd': 0.0.8 + '@stdlib/utils-define-nonenumerable-read-only-property': 0.0.7 + dev: false + + /@stdlib/math-base-assert-is-integer/0.0.7: + resolution: {integrity: sha512-swIEKQJZOwzacYDiX5SSt5/nHd6PYJkLlVKZiVx/GCpflstQnseWA0TmudG7XU5HJnxDGV/w6UL02dEyBH7VEw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/math-base-special-floor': 0.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/math-base-assert-is-nan/0.0.8: + resolution: {integrity: sha512-m+gCVBxLFW8ZdAfdkATetYMvM7sPFoMKboacHjb1pe21jHQqVb+/4bhRSDg6S7HGX7/8/bSzEUm9zuF7vqK5rQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/utils-library-manifest': 0.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/math-base-napi-unary/0.0.9: + resolution: {integrity: sha512-2WNKhjCygkGMp0RgjaD7wAHJTqPZmuVW7yPOc62Tnz2U+Ad8q/tcOcN+uvq2dtKsAGr1HDMIQxZ/XrrThMePyA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/complex-float32': 0.0.7 + '@stdlib/complex-float64': 0.0.8 + '@stdlib/complex-reim': 0.0.6 + '@stdlib/complex-reimf': 0.0.1 + '@stdlib/utils-library-manifest': 0.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/math-base-special-floor/0.0.8: + resolution: {integrity: sha512-VwpaiU0QhQKB8p+r9p9mNzhrjU5ZVBnUcLjKNCDADiGNvO5ACI/I+W++8kxBz5XSp5PAQhaFCH4MpRM1tSkd/w==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/math-base-napi-unary': 0.0.9 + '@stdlib/utils-library-manifest': 0.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/nlp-expand-contractions/0.0.8: + resolution: {integrity: sha512-9WbwZCFa2B5Mrx8NS5ttSB9VmKP2G9AdPiYAeE4Axu8actWdIv4nhjETccMZhhGikmTN+PYtO5KHZIvML4317Q==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-capitalized': 0.0.8 + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/nlp-tokenize': 0.0.11 + '@stdlib/string-capitalize': 0.0.9 + '@stdlib/string-uncapitalize': 0.0.9 + '@stdlib/utils-keys': 0.0.7 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/nlp-tokenize/0.0.11: + resolution: {integrity: sha512-iDo6XjStqjtzKt1kDBr6BsXuifdWza3RiYL4zjy310b3o2iPssmEec+Fd3eFVkoO7qWlWPBrE1+nu9koV0qucA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-has-own-property': 0.0.7 + '@stdlib/assert-is-boolean': 0.0.8 + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/string-format': 0.0.3 + dev: false + + /@stdlib/number-ctor/0.0.7: + resolution: {integrity: sha512-kXNwKIfnb10Ro3RTclhAYqbE3DtIXax+qpu0z1/tZpI2vkmTfYDQLno2QJrzJsZZgdeFtXIws+edONN9kM34ow==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dev: false + + /@stdlib/number-float64-base-to-float32/0.0.7: + resolution: {integrity: sha512-PNUSi6+cqfFiu4vgFljUKMFY2O9PxI6+T+vqtIoh8cflf+PjSGj3v4QIlstK9+6qU40eGR5SHZyLTWdzmNqLTQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array-float32': 0.0.6 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/process-cwd/0.0.8: + resolution: {integrity: sha512-GHINpJgSlKEo9ODDWTHp0/Zc/9C/qL92h5Mc0QlIFBXAoUjy6xT4FB2U16wCNZMG3eVOzt5+SjmCwvGH0Wbg3Q==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/fs-read-file': 0.0.8 + dev: false + + /@stdlib/process-read-stdin/0.0.7: + resolution: {integrity: sha512-nep9QZ5iDGrRtrZM2+pYAvyCiYG4HfO0/9+19BiLJepjgYq4GKeumPAQo22+1xawYDL7Zu62uWzYszaVZcXuyw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-function': 0.0.8 + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/buffer-ctor': 0.0.7 + '@stdlib/buffer-from-string': 0.0.8 + '@stdlib/streams-node-stdin': 0.0.7 + '@stdlib/utils-next-tick': 0.0.8 + dev: false + + /@stdlib/regexp-eol/0.0.7: + resolution: {integrity: sha512-BTMpRWrmlnf1XCdTxOrb8o6caO2lmu/c80XSyhYCi1DoizVIZnqxOaN5yUJNCr50g28vQ47PpsT3Yo7J3SdlRA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-has-own-property': 0.0.7 + '@stdlib/assert-is-boolean': 0.0.8 + '@stdlib/assert-is-plain-object': 0.0.7 + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/utils-define-nonenumerable-read-only-property': 0.0.7 + dev: false + + /@stdlib/regexp-extended-length-path/0.0.7: + resolution: {integrity: sha512-z6uqzMWq3WPDKbl4MIZJoNA5ZsYLQI9G3j2TIvhU8X2hnhlku8p4mvK9F+QmoVvgPxKliwNnx/DAl7ltutSDKw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/utils-define-nonenumerable-read-only-property': 0.0.7 + dev: false + + /@stdlib/regexp-function-name/0.0.7: + resolution: {integrity: sha512-MaiyFUUqkAUpUoz/9F6AMBuMQQfA9ssQfK16PugehLQh4ZtOXV1LhdY8e5Md7SuYl9IrvFVg1gSAVDysrv5ZMg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/utils-define-nonenumerable-read-only-property': 0.0.7 + dev: false + + /@stdlib/regexp-regexp/0.0.8: + resolution: {integrity: sha512-S5PZICPd/XRcn1dncVojxIDzJsHtEleuJHHD7ji3o981uPHR7zI2Iy9a1eV2u7+ABeUswbI1Yuix6fXJfcwV1w==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/utils-define-nonenumerable-read-only-property': 0.0.7 + dev: false + + /@stdlib/streams-node-stdin/0.0.7: + resolution: {integrity: sha512-gg4lgrjuoG3V/L29wNs32uADMCqepIcmoOFHJCTAhVe0GtHDLybUVnLljaPfdvmpPZmTvmusPQtIcscbyWvAyg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dev: false + + /@stdlib/string-base-format-interpolate/0.0.4: + resolution: {integrity: sha512-8FC8+/ey+P5hf1B50oXpXzRzoAgKI1rikpyKZ98Xmjd5rcbSq3NWYi8TqOF8mUHm9hVZ2CXWoNCtEe2wvMQPMg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dev: false + + /@stdlib/string-base-format-tokenize/0.0.4: + resolution: {integrity: sha512-+vMIkheqAhDeT/iF5hIQo95IMkt5IzC68eR3CxW1fhc48NMkKFE2UfN73ET8fmLuOanLo/5pO2E90c2G7PExow==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dev: false + + /@stdlib/string-capitalize/0.0.9: + resolution: {integrity: sha512-4SVaY+NoX4PTDiS7AvcGzfTxjB3wJVwr0AIcrre0DyLJcjm2Zo0QxNAyT4SJiiKF2/QMNaSd2pGV+gjBCQl1rQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/assert-is-regexp-string': 0.0.9 + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/fs-read-file': 0.0.8 + '@stdlib/process-read-stdin': 0.0.7 + '@stdlib/regexp-eol': 0.0.7 + '@stdlib/streams-node-stdin': 0.0.7 + '@stdlib/string-format': 0.0.3 + '@stdlib/utils-regexp-from-string': 0.0.9 + dev: false + + /@stdlib/string-format/0.0.3: + resolution: {integrity: sha512-1jiElUQXlI/tTkgRuzJi9jUz/EjrO9kzS8VWHD3g7gdc3ZpxlA5G9JrIiPXGw/qmZTi0H1pXl6KmX+xWQEQJAg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/string-base-format-interpolate': 0.0.4 + '@stdlib/string-base-format-tokenize': 0.0.4 + dev: false + + /@stdlib/string-lowercase/0.0.9: + resolution: {integrity: sha512-tXFFjbhIlDak4jbQyV1DhYiSTO8b1ozS2g/LELnsKUjIXECDKxGFyWYcz10KuyAWmFotHnCJdIm8/blm2CfDIA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/fs-read-file': 0.0.8 + '@stdlib/process-read-stdin': 0.0.7 + '@stdlib/streams-node-stdin': 0.0.7 + '@stdlib/string-format': 0.0.3 + dev: false + + /@stdlib/string-replace/0.0.11: + resolution: {integrity: sha512-F0MY4f9mRE5MSKpAUfL4HLbJMCbG6iUTtHAWnNeAXIvUX1XYIw/eItkA58R9kNvnr1l5B08bavnjrgTJGIKFFQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/assert-is-function': 0.0.8 + '@stdlib/assert-is-regexp': 0.0.7 + '@stdlib/assert-is-regexp-string': 0.0.9 + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/fs-read-file': 0.0.8 + '@stdlib/process-read-stdin': 0.0.7 + '@stdlib/regexp-eol': 0.0.7 + '@stdlib/streams-node-stdin': 0.0.7 + '@stdlib/string-format': 0.0.3 + '@stdlib/utils-escape-regexp-string': 0.0.9 + '@stdlib/utils-regexp-from-string': 0.0.9 + dev: false + + /@stdlib/string-uncapitalize/0.0.9: + resolution: {integrity: sha512-okDTFu09Hej0oxF5AeQt0NWpXT5LwXVxV7eUxh0J/xMzPeD/qHqaeLlZQljxMYOXhlujEnAFgVWyu2UIJ1E69A==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/assert-is-regexp-string': 0.0.9 + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/fs-read-file': 0.0.8 + '@stdlib/process-read-stdin': 0.0.7 + '@stdlib/regexp-eol': 0.0.7 + '@stdlib/streams-node-stdin': 0.0.7 + '@stdlib/string-format': 0.0.3 + '@stdlib/utils-regexp-from-string': 0.0.9 + dev: false + + /@stdlib/string-uppercase/0.0.9: + resolution: {integrity: sha512-hFsBpCsjuJZ848V1hQG53NHJwpGyPlXzSYZn/iCDm4HcRiG1DAdjqKCWktgyw3nzBKSukGuQv7s4KjQ10yrg4g==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/fs-read-file': 0.0.8 + '@stdlib/process-read-stdin': 0.0.7 + '@stdlib/streams-node-stdin': 0.0.7 + '@stdlib/string-format': 0.0.3 + dev: false + + /@stdlib/types/0.0.14: + resolution: {integrity: sha512-AP3EI9/il/xkwUazcoY+SbjtxHRrheXgSbWZdEGD+rWpEgj6n2i63hp6hTOpAB5NipE0tJwinQlDGOuQ1lCaCw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dev: false + + /@stdlib/utils-constructor-name/0.0.8: + resolution: {integrity: sha512-GXpyNZwjN8u3tyYjL2GgGfrsxwvfogUC3gg7L7NRZ1i86B6xmgfnJUYHYOUnSfB+R531ET7NUZlK52GxL7P82Q==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-buffer': 0.0.8 + '@stdlib/regexp-function-name': 0.0.7 + '@stdlib/utils-native-class': 0.0.8 + dev: false + + /@stdlib/utils-convert-path/0.0.8: + resolution: {integrity: sha512-GNd8uIswrcJCctljMbmjtE4P4oOjhoUIfMvdkqfSrRLRY+ZqPB2xM+yI0MQFfUq/0Rnk/xtESlGSVLz9ZDtXfA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/fs-read-file': 0.0.8 + '@stdlib/process-read-stdin': 0.0.7 + '@stdlib/regexp-eol': 0.0.7 + '@stdlib/regexp-extended-length-path': 0.0.7 + '@stdlib/streams-node-stdin': 0.0.7 + '@stdlib/string-lowercase': 0.0.9 + '@stdlib/string-replace': 0.0.11 + dev: false + + /@stdlib/utils-define-nonenumerable-read-only-property/0.0.7: + resolution: {integrity: sha512-c7dnHDYuS4Xn3XBRWIQBPcROTtP/4lkcFyq0FrQzjXUjimfMgHF7cuFIIob6qUTnU8SOzY9p0ydRR2QJreWE6g==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/types': 0.0.14 + '@stdlib/utils-define-property': 0.0.9 + dev: false + + /@stdlib/utils-define-property/0.0.9: + resolution: {integrity: sha512-pIzVvHJvVfU/Lt45WwUAcodlvSPDDSD4pIPc9WmIYi4vnEBA9U7yHtiNz2aTvfGmBMTaLYTVVFIXwkFp+QotMA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/types': 0.0.14 + dev: false + + /@stdlib/utils-escape-regexp-string/0.0.9: + resolution: {integrity: sha512-E+9+UDzf2mlMLgb+zYrrPy2FpzbXh189dzBJY6OG+XZqEJAXcjWs7DURO5oGffkG39EG5KXeaQwDXUavcMDCIw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/string-format': 0.0.3 + dev: false + + /@stdlib/utils-get-prototype-of/0.0.7: + resolution: {integrity: sha512-fCUk9lrBO2ELrq+/OPJws1/hquI4FtwG0SzVRH6UJmJfwb1zoEFnjcwyDAy+HWNVmo3xeRLsrz6XjHrJwer9pg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-function': 0.0.8 + '@stdlib/utils-native-class': 0.0.8 + dev: false + + /@stdlib/utils-global/0.0.7: + resolution: {integrity: sha512-BBNYBdDUz1X8Lhfw9nnnXczMv9GztzGpQ88J/6hnY7PHJ71av5d41YlijWeM9dhvWjnH9I7HNE3LL7R07yw0kA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-boolean': 0.0.8 + dev: false + + /@stdlib/utils-index-of/0.0.8: + resolution: {integrity: sha512-tz8pL9CgEYp73xWp0hQIR5vLjvM0jnoX5cCpRjn7SHzgDb4/fkpfJX4c0HznK+cCA35jvVVNhM2J0M4Y0IPg2A==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-collection': 0.0.8 + '@stdlib/assert-is-integer': 0.0.8 + '@stdlib/assert-is-nan': 0.0.8 + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/types': 0.0.14 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/utils-keys/0.0.7: + resolution: {integrity: sha512-9qzmetloJ0A6iO71n3f9F4cAs/Hq0E7bYHlYNnXwS03wmwI97x3QSzWVoL5o0qpluQVidSQIxeNXPHNEvEa04A==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-has-own-property': 0.0.7 + '@stdlib/assert-is-arguments': 0.0.14 + '@stdlib/assert-is-enumerable-property': 0.0.7 + '@stdlib/assert-is-object-like': 0.0.8 + '@stdlib/utils-index-of': 0.0.8 + '@stdlib/utils-noop': 0.0.14 + '@stdlib/utils-type-of': 0.0.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/utils-library-manifest/0.0.8: + resolution: {integrity: sha512-IOQSp8skSRQn9wOyMRUX9Hi0j/P5v5TvD8DJWTqtE8Lhr8kVVluMBjHfvheoeKHxfWAbNHSVpkpFY/Bdh/SHgQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + hasBin: true + dependencies: + '@stdlib/cli-ctor': 0.0.3 + '@stdlib/fs-resolve-parent-path': 0.0.8 + '@stdlib/utils-convert-path': 0.0.8 + debug: 2.6.9 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/utils-native-class/0.0.8: + resolution: {integrity: sha512-0Zl9me2V9rSrBw/N8o8/9XjmPUy8zEeoMM0sJmH3N6C9StDsYTjXIAMPGzYhMEWaWHvGeYyNteFK2yDOVGtC3w==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-has-own-property': 0.0.7 + '@stdlib/assert-has-tostringtag-support': 0.0.9 + dev: false + + /@stdlib/utils-next-tick/0.0.8: + resolution: {integrity: sha512-l+hPl7+CgLPxk/gcWOXRxX/lNyfqcFCqhzzV/ZMvFCYLY/wI9lcWO4xTQNMALY2rp+kiV+qiAiO9zcO+hewwUg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dev: false + + /@stdlib/utils-noop/0.0.14: + resolution: {integrity: sha512-A5faFEUfszMgd93RCyB+aWb62hQxgP+dZ/l9rIOwNWbIrCYNwSuL4z50lNJuatnwwU4BQ4EjQr+AmBsnvuLcyQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dev: false + + /@stdlib/utils-regexp-from-string/0.0.9: + resolution: {integrity: sha512-3rN0Mcyiarl7V6dXRjFAUMacRwe0/sYX7ThKYurf0mZkMW9tjTP+ygak9xmL9AL0QQZtbrFFwWBrDO+38Vnavw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert-is-string': 0.0.8 + '@stdlib/regexp-regexp': 0.0.8 + '@stdlib/string-format': 0.0.3 + dev: false + + /@stdlib/utils-type-of/0.0.8: + resolution: {integrity: sha512-b4xqdy3AnnB7NdmBBpoiI67X4vIRxvirjg3a8BfhM5jPr2k0njby1jAbG9dUxJvgAV6o32S4kjUgfIdjEYpTNQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/utils-constructor-name': 0.0.8 + '@stdlib/utils-global': 0.0.7 + dev: false + + /@strikeentco/get/1.0.1: + resolution: {integrity: sha512-qPnoWkt7xxcOaUJhMveDHmj6INVKHXUEsPTGz3g4HC5XNnqRd1dDEFxL1KpG+vZ2VxmRK42EjBt5vUDr4uLzQQ==} + engines: {node: '>=6.0.0'} + dev: false + + /@strikeentco/set/1.0.2: + resolution: {integrity: sha512-jP/wGhBi70RoD2Ww2bd3Ay4nzKfyWSPL/sDgFaq2e/FXNC9a04R0M7fuDVHG/dG+WWNVj2pmE9exXn20a0AjGg==} + engines: {node: '>=6.0.0'} + dev: false + + /@szmarczak/http-timer/1.1.2: + resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} + engines: {node: '>=6'} + dependencies: + defer-to-connect: 1.1.3 + dev: true + + /@szmarczak/http-timer/4.0.6: + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + dependencies: + defer-to-connect: 2.0.1 + dev: false + + /@szmarczak/http-timer/5.0.1: + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + dependencies: + defer-to-connect: 2.0.1 + dev: true + + /@tkrotoff/bootstrap-floating-label/0.8.0_bootstrap@4.6.2: + resolution: {integrity: sha512-1d09zeS4hLX7gUodGZ5NDhp2lq0jLqj4IKZvbKr/cS068jGzgPWqz6XaOQJrpmOK4+4oolGItCX6RynhLIjJKg==} + peerDependencies: + bootstrap: '>=4.3' + dependencies: + bootstrap: 4.6.2_a2quc6v7zrhtmn4zqsvmmrpbnq + dev: false + + /@tokenizer/token/0.3.0: + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + + /@tootallnate/once/1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + + /@tootallnate/once/2.0.0: + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + /@trysound/sax/0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + dev: true + + /@tsconfig/node10/1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + dev: true + + /@tsconfig/node12/1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14/1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16/1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + + /@types/babel-types/7.0.12: + resolution: {integrity: sha512-HKFKGgwbKpfvjPuEKveybTYHUTSsbBRS72aLI7Gp1X/egZlgtXzmvCqBrmoFdbsh7U7CsLYFmULNIt7nmS89xw==} + dev: true + + /@types/babylon/6.16.7: + resolution: {integrity: sha512-8wz9tFZVI35Bnyq5qFQ/+yAVLRuU5xglYKmWSKT2KC+QL3QtbTnBK4LbnATb2J762w/tA2A/3XSQ3WsPlu+3bA==} + dependencies: + '@types/babel-types': 7.0.12 + dev: true + + /@types/body-parser/1.19.3: + resolution: {integrity: sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==} + dependencies: + '@types/connect': 3.4.36 + '@types/node': 20.8.5 + dev: false + + /@types/cacheable-request/6.0.3: + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + dependencies: + '@types/http-cache-semantics': 4.0.2 + '@types/keyv': 3.1.4 + '@types/node': 20.8.5 + '@types/responselike': 1.0.1 + dev: false + + /@types/concat-stream/2.0.0: + resolution: {integrity: sha512-t3YCerNM7NTVjLuICZo5gYAXYoDvpuuTceCcFQWcDQz26kxUR5uIWolxbIR5jRNIXpMqhOpW/b8imCR1LEmuJw==} + dependencies: + '@types/node': 20.8.5 + dev: true + + /@types/connect/3.4.36: + resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} + dependencies: + '@types/node': 20.8.5 + dev: false + + /@types/debug/4.1.9: + resolution: {integrity: sha512-8Hz50m2eoS56ldRlepxSBa6PWEVCtzUo/92HgLc2qTMnotJNIm7xP+UZhyWoYsyOdd5dxZ+NZLb24rsKyFs2ow==} + dependencies: + '@types/ms': 0.7.32 + dev: true + + /@types/eslint-visitor-keys/1.0.0: + resolution: {integrity: sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==} + dev: true + + /@types/eslint/7.29.0: + resolution: {integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==} + dependencies: + '@types/estree': 1.0.2 + '@types/json-schema': 7.0.13 + dev: true + + /@types/eslint/8.44.4: + resolution: {integrity: sha512-lOzjyfY/D9QR4hY9oblZ76B90MYTB3RrQ4z2vBIJKj9ROCRqdkYl2gSUx1x1a4IWPjKJZLL4Aw1Zfay7eMnmnA==} + dependencies: + '@types/estree': 1.0.2 + '@types/json-schema': 7.0.13 + dev: true + + /@types/estree/1.0.2: + resolution: {integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==} + dev: true + + /@types/expect/1.20.4: + resolution: {integrity: sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==} + dev: false + + /@types/express-serve-static-core/4.17.37: + resolution: {integrity: sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==} + dependencies: + '@types/node': 20.8.5 + '@types/qs': 6.9.8 + '@types/range-parser': 1.2.5 + '@types/send': 0.17.2 + dev: false + + /@types/express/4.17.19: + resolution: {integrity: sha512-UtOfBtzN9OvpZPPbnnYunfjM7XCI4jyk1NvnFhTVz5krYAnW4o5DCoIekvms+8ApqhB4+9wSge1kBijdfTSmfg==} + dependencies: + '@types/body-parser': 1.19.3 + '@types/express-serve-static-core': 4.17.37 + '@types/qs': 6.9.8 + '@types/serve-static': 1.15.3 + dev: false + + /@types/glob/7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 20.8.5 + dev: true + + /@types/glob/8.1.0: + resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 20.8.5 + dev: false + + /@types/hast/2.3.6: + resolution: {integrity: sha512-47rJE80oqPmFdVDCD7IheXBrVdwuBgsYwoczFvKmwfo2Mzsnt+V9OONsYauFmICb6lQPpCuXYJWejBNs4pDJRg==} + dependencies: + '@types/unist': 2.0.8 + dev: false + + /@types/http-cache-semantics/4.0.2: + resolution: {integrity: sha512-FD+nQWA2zJjh4L9+pFXqWOi0Hs1ryBCfI+985NjluQ1p8EYtoLvjLOKidXBtZ4/IcxDX4o8/E8qDS3540tNliw==} + + /@types/http-errors/2.0.2: + resolution: {integrity: sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==} + dev: false + + /@types/is-empty/1.2.1: + resolution: {integrity: sha512-a3xgqnFTuNJDm1fjsTjHocYJ40Cz3t8utYpi5GNaxzrJC2HSD08ym+whIL7fNqiqBCdM9bcqD1H/tORWAFXoZw==} + dev: true + + /@types/json-schema/7.0.13: + resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} + dev: true + + /@types/json5/0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/jsonwebtoken/8.5.9: + resolution: {integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==} + dependencies: + '@types/node': 20.8.5 + dev: false + + /@types/keyv/3.1.4: + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + dependencies: + '@types/node': 20.8.5 + + /@types/linkify-it/3.0.3: + resolution: {integrity: sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==} + dev: false + + /@types/lodash/4.14.199: + resolution: {integrity: sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==} + dev: false + + /@types/long/4.0.2: + resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + dev: false + + /@types/markdown-it/12.2.3: + resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} + dependencies: + '@types/linkify-it': 3.0.3 + '@types/mdurl': 1.0.3 + dev: false + + /@types/mdast/3.0.13: + resolution: {integrity: sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==} + dependencies: + '@types/unist': 2.0.8 + + /@types/mdurl/1.0.3: + resolution: {integrity: sha512-T5k6kTXak79gwmIOaDF2UUQXFbnBE0zBUzF20pz7wDYu0RQMzWg+Ml/Pz50214NsFHBITkoi5VtdjFZnJ2ijjA==} + dev: false + + /@types/mime/1.3.3: + resolution: {integrity: sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==} + dev: false + + /@types/mime/3.0.2: + resolution: {integrity: sha512-Wj+fqpTLtTbG7c0tH47dkahefpLKEbB+xAZuLq7b4/IDHPl/n6VoXcyUQ2bypFlbSwvCr0y+bD4euTTqTJsPxQ==} + dev: false + + /@types/minimatch/3.0.5: + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + + /@types/minimatch/5.1.2: + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + + /@types/minimist/1.2.3: + resolution: {integrity: sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==} + dev: true + + /@types/ms/0.7.32: + resolution: {integrity: sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==} + dev: true + + /@types/node/17.0.45: + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + dev: false + + /@types/node/18.18.5: + resolution: {integrity: sha512-4slmbtwV59ZxitY4ixUZdy1uRLf9eSIvBWPQxNjhHYWEtn0FryfKpyS2cvADYXTayWdKEIsJengncrVvkI4I6A==} + dev: true + + /@types/node/20.5.1: + resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} + dev: true + + /@types/node/20.8.5: + resolution: {integrity: sha512-SPlobFgbidfIeOYlzXiEjSYeIJiOCthv+9tSQVpvk4PAdIIc+2SmjNVzWXk9t0Y7dl73Zdf+OgXKHX9XtkqUpw==} + dependencies: + undici-types: 5.25.3 + + /@types/normalize-package-data/2.4.2: + resolution: {integrity: sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==} + + /@types/parse-json/4.0.0: + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + dev: true + + /@types/parse5/5.0.3: + resolution: {integrity: sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==} + dev: false + + /@types/q/1.5.6: + resolution: {integrity: sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ==} + dev: true + optional: true + + /@types/qs/6.9.8: + resolution: {integrity: sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==} + dev: false + + /@types/range-parser/1.2.5: + resolution: {integrity: sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==} + dev: false + + /@types/responselike/1.0.1: + resolution: {integrity: sha512-TiGnitEDxj2X0j+98Eqk5lv/Cij8oHd32bU4D/Yw6AOq7vvTk0gSD2GPj0G/HkvhMoVsdlhYF4yqqlyPBTM6Sg==} + dependencies: + '@types/node': 20.8.5 + + /@types/retry/0.12.0: + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + dev: false + + /@types/rimraf/3.0.2: + resolution: {integrity: sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==} + dependencies: + '@types/glob': 8.1.0 + '@types/node': 20.8.5 + dev: false + + /@types/sax/1.2.5: + resolution: {integrity: sha512-9jWta97bBVC027/MShr3gLab8gPhKy4l6qpb+UJLF5pDm3501NvA7uvqVCW+REFtx00oTi6Cq9JzLwgq6evVgw==} + dependencies: + '@types/node': 17.0.45 + dev: false + + /@types/semver/7.5.3: + resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} + dev: true + + /@types/send/0.17.2: + resolution: {integrity: sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==} + dependencies: + '@types/mime': 1.3.3 + '@types/node': 20.8.5 + dev: false + + /@types/serve-static/1.15.3: + resolution: {integrity: sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==} + dependencies: + '@types/http-errors': 2.0.2 + '@types/mime': 3.0.2 + '@types/node': 20.8.5 + dev: false + + /@types/supports-color/8.1.1: + resolution: {integrity: sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==} + dev: true + + /@types/text-table/0.2.3: + resolution: {integrity: sha512-MUW7DN7e178wJ2dB9rHuhwUWRUJGrl8fCng37BEWV0r2r5VpzkRFRiMfnX6sjXlu4tMn41lrjzsVh/z1XrKc+A==} + dev: true + + /@types/unist/2.0.8: + resolution: {integrity: sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==} + + /@types/vinyl/2.0.8: + resolution: {integrity: sha512-bls3EAsYVnVoPKoqgFC4Rtq7Kzte4MCk8xMA9UEPPVncJFsov9FJWYj0uxqJRwNEi9b4i4zX13FydaDrhadmHg==} + dependencies: + '@types/expect': 1.20.4 + '@types/node': 20.8.5 + dev: false + + /@types/webidl-conversions/7.0.1: + resolution: {integrity: sha512-8hKOnOan+Uu+NgMaCouhg3cT9x5fFZ92Jwf+uDLXLu/MFRbXxlWwGeQY7KVHkeSft6RvY+tdxklUBuyY9eIEKg==} + dev: false + + /@types/whatwg-url/8.2.2: + resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==} + dependencies: + '@types/node': 20.8.5 + '@types/webidl-conversions': 7.0.1 + dev: false + + /@typescript-eslint/eslint-plugin/3.10.1_kxujzhw6vbtdri44htsqryf25e: + resolution: {integrity: sha512-PQg0emRtzZFWq6PxBcdxRH3QIQiyFO3WCVpRL3fgj5oQS3CDs3AeAKfv4DxNhzn8ITdNJGJ4D3Qw8eAJf3lXeQ==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + '@typescript-eslint/parser': ^3.0.0 + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/experimental-utils': 3.10.1_2de3j2mqba4wgeuiaqz2k7syrm + '@typescript-eslint/parser': 3.10.1_2de3j2mqba4wgeuiaqz2k7syrm + debug: 4.3.4 + eslint: 7.32.0 + functional-red-black-tree: 1.0.1 + regexpp: 3.2.0 + semver: 7.5.4 + tsutils: 3.21.0_typescript@3.9.10 + typescript: 3.9.10 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/eslint-plugin/5.62.0_tv6iquvmznxcojjmmfwa2noq2a: + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.9.1 + '@typescript-eslint/parser': 5.62.0_tbtvr3a5zwdiktqy4vlmx63mqq + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0_tbtvr3a5zwdiktqy4vlmx63mqq + '@typescript-eslint/utils': 5.62.0_tbtvr3a5zwdiktqy4vlmx63mqq + debug: 4.3.4 + eslint: 8.39.0 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 + semver: 7.5.4 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/experimental-utils/3.10.1_2de3j2mqba4wgeuiaqz2k7syrm: + resolution: {integrity: sha512-DewqIgscDzmAfd5nOGe4zm6Bl7PKtMG2Ad0KG8CUZAHlXfAKTF9Ol5PXhiMh39yRL2ChRH1cuuUGOcVyyrhQIw==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: '*' + dependencies: + '@types/json-schema': 7.0.13 + '@typescript-eslint/types': 3.10.1 + '@typescript-eslint/typescript-estree': 3.10.1_typescript@3.9.10 + eslint: 7.32.0 + eslint-scope: 5.1.1 + eslint-utils: 2.1.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/parser/3.10.1_2de3j2mqba4wgeuiaqz2k7syrm: + resolution: {integrity: sha512-Ug1RcWcrJP02hmtaXVS3axPPTTPnZjupqhgj+NnZ6BCkwSImWk/283347+x9wN+lqOdK9Eo3vsyiyDHgsmiEJw==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@types/eslint-visitor-keys': 1.0.0 + '@typescript-eslint/experimental-utils': 3.10.1_2de3j2mqba4wgeuiaqz2k7syrm + '@typescript-eslint/types': 3.10.1 + '@typescript-eslint/typescript-estree': 3.10.1_typescript@3.9.10 + eslint: 7.32.0 + eslint-visitor-keys: 1.3.0 + typescript: 3.9.10 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser/5.62.0_tbtvr3a5zwdiktqy4vlmx63mqq: + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0_typescript@4.9.5 + debug: 4.3.4 + eslint: 8.39.0 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager/5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true + + /@typescript-eslint/type-utils/5.62.0_tbtvr3a5zwdiktqy4vlmx63mqq: + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0_typescript@4.9.5 + '@typescript-eslint/utils': 5.62.0_tbtvr3a5zwdiktqy4vlmx63mqq + debug: 4.3.4 + eslint: 8.39.0 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types/3.10.1: + resolution: {integrity: sha512-+3+FCUJIahE9q0lDi1WleYzjCwJs5hIsbugIgnbB+dSCYUxl8L6PwmsyOPFZde2hc1DlTo/xnkOgiTLSyAbHiQ==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + dev: true + + /@typescript-eslint/types/5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree/3.10.1_typescript@3.9.10: + resolution: {integrity: sha512-QbcXOuq6WYvnB3XPsZpIwztBoquEYLXh2MtwVU+kO8jgYCiv4G5xrSP/1wg4tkvrEE+esZVquIPX/dxPlePk1w==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 3.10.1 + '@typescript-eslint/visitor-keys': 3.10.1 + debug: 4.3.4 + glob: 7.2.3 + is-glob: 4.0.3 + lodash: 4.17.21 + semver: 7.5.4 + tsutils: 3.21.0_typescript@3.9.10 + typescript: 3.9.10 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree/5.62.0_typescript@4.9.5: + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils/5.62.0_tbtvr3a5zwdiktqy4vlmx63mqq: + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0_eslint@8.39.0 + '@types/json-schema': 7.0.13 + '@types/semver': 7.5.3 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0_typescript@4.9.5 + eslint: 8.39.0 + eslint-scope: 5.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys/3.10.1: + resolution: {integrity: sha512-9JgC82AaQeglebjZMgYR5wgmfUdUc+EitGUUMW8u2nDckaeimzW+VsoLV6FoimPv2id3VQzfjwBxEMVz08ameQ==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + + /@typescript-eslint/visitor-keys/5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone/1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: false + + /@yr/monotone-cubic-spline/1.0.3: + resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} + dev: false + + /JSONStream/0.7.4: + resolution: {integrity: sha512-hVgF0Ox1AtvxJmpwzb2dOEUz2ms1J8DZVbqKUSIGSyPBPy0MuxCJsQxj8y5dadTzsjI+T4TpyyhXORPdz15m9w==} + dependencies: + jsonparse: 0.0.5 + through: 2.3.8 + dev: true + + /JSONStream/0.8.4: + resolution: {integrity: sha512-l0NN3IcqrZfZBJp7JWDJIHsnPV7yzJWqsYxQzL8Fwdx1BmEMjLuvtYkv+P9pbvpyfP75/f4MeDZhWNU4is32uA==} + hasBin: true + dependencies: + jsonparse: 0.0.5 + through: 2.3.8 + dev: true + + /JSONStream/1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + /abab/2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + dev: false + + /abbrev/1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + + /abbrev/2.0.0: + resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /abort-controller/3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: false + + /accepts/1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: false + + /accesscontrol/2.2.1: + resolution: {integrity: sha512-52EvFk/J9EF+w4mYQoKnOTkEMj01R1U5n2fc1dai6x1xkgOks3DGkx01qQL2cKFxGmE4Tn1krAU3jJA9L1NMkg==} + dependencies: + notation: 1.3.6 + dev: false + + /acorn-globals/6.0.0: + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + dev: false + + /acorn-jsx/5.3.2_acorn@7.4.1: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 7.4.1 + dev: true + + /acorn-jsx/5.3.2_acorn@8.10.0: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.10.0 + + /acorn-node/1.8.2: + resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + xtend: 4.0.2 + dev: true + + /acorn-walk/7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + + /acorn-walk/8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn/4.0.13: + resolution: {integrity: sha512-fu2ygVGuMmlzG8ZeRJ0bvR41nsAkxxhbyk8bZ1SS521Z7vmgJFTQQlfz/Mp/nJexGBz+v8sC9bM6+lNgskt4Ug==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /acorn/6.4.2: + resolution: {integrity: sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /acorn/7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + + /acorn/8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + + /adm-zip/0.5.10: + resolution: {integrity: sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==} + engines: {node: '>=6.0'} + dev: false + + /afinn-165/1.0.4: + resolution: {integrity: sha512-7+Wlx3BImrK0HiG6y3lU4xX7SpBPSSu8T9iguPMlaueRFxjbYwAQrp9lqZUuFikqKbd/en8lVREILvP2J80uJA==} + dev: false + + /agent-base/6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + /agentkeepalive/4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + dependencies: + humanize-ms: 1.2.1 + + /aggregate-error/3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + /aggregate-error/4.0.1: + resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} + engines: {node: '>=12'} + dependencies: + clean-stack: 4.2.0 + indent-string: 5.0.0 + dev: true + + /ajv/6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + /ajv/8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + + /alce/1.2.0: + resolution: {integrity: sha512-XppPf2S42nO2WhvKzlwzlfcApcXHzjlod30pKmcWjRgLOtqoe5DMuqdiYoM6AgyXksc6A6pV4v1L/WW217e57w==} + engines: {node: '>=0.8.0'} + dependencies: + esprima: 1.2.5 + estraverse: 1.9.3 + + /amdefine/1.0.1: + resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} + engines: {node: '>=0.4.2'} + dev: true + + /ansi-align/3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + dependencies: + string-width: 4.2.3 + dev: true + + /ansi-colors/1.1.0: + resolution: {integrity: sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-colors/4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + /ansi-escapes/4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + + /ansi-escapes/5.0.0: + resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} + engines: {node: '>=12'} + dependencies: + type-fest: 1.4.0 + dev: true + + /ansi-gray/0.1.1: + resolution: {integrity: sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-wrap: 0.1.0 + dev: true + + /ansi-html-community/0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + dev: false + + /ansi-regex/2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + + /ansi-regex/4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + dev: true + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-regex/6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + /ansi-styles/2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /ansi-styles/6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + /ansi-wrap/0.1.0: + resolution: {integrity: sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==} + engines: {node: '>=0.10.0'} + dev: true + + /any-promise/1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: false + + /any-shell-escape/0.1.1: + resolution: {integrity: sha512-36j4l5HVkboyRhIWgtMh1I9i8LTdFqVwDEHy1cp+QioJyKgAUG40X0W8s7jakWRta/Sjvm8mUG1fU6Tj8mWagQ==} + dev: true + + /anymatch/2.0.0: + resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} + dependencies: + micromatch: 3.1.10 + normalize-path: 2.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /anymatch/3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /apexcharts/3.43.0: + resolution: {integrity: sha512-YPw1aLatPQMUqVLMp5d+LDaXFi4QrRQND72/XO7/2NJdg+R5MjE9sifJ0GzOfgoZM7ltBUTjwfSxIvwR/9V8yw==} + dependencies: + '@yr/monotone-cubic-spline': 1.0.3 + svg.draggable.js: 2.2.2 + svg.easing.js: 2.0.0 + svg.filter.js: 2.0.2 + svg.pathmorphing.js: 0.1.3 + svg.resize.js: 1.4.3 + svg.select.js: 3.0.1 + dev: false + + /apparatus/0.0.10: + resolution: {integrity: sha512-KLy/ugo33KZA7nugtQ7O0E1c8kQ52N3IvD/XgIh4w/Nr28ypfkwDfA67F1ev4N1m5D+BOk1+b2dEJDfpj/VvZg==} + engines: {node: '>=0.2.6'} + dependencies: + sylvester: 0.0.12 + dev: false + + /append-buffer/1.0.2: + resolution: {integrity: sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==} + engines: {node: '>=0.10.0'} + dependencies: + buffer-equal: 1.0.1 + dev: true + + /append-transform/2.0.0: + resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} + engines: {node: '>=8'} + dependencies: + default-require-extensions: 3.0.1 + dev: true + + /aproba/2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + + /arch/2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + dev: true + + /archive-type/4.0.0: + resolution: {integrity: sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==} + engines: {node: '>=4'} + dependencies: + file-type: 4.4.0 + dev: true + + /archy/1.0.0: + resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} + dev: true + + /are-we-there-yet/3.0.1: + resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + + /are-we-there-yet/4.0.1: + resolution: {integrity: sha512-2zuA+jpOYBRgoBCfa+fB87Rk0oGJjDX6pxGzqH6f33NzUhG25Xur6R0u0Z9VVAq8Z5JvQpQI6j6rtonuivC8QA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + delegates: 1.0.0 + readable-stream: 4.4.2 + dev: false + + /arg/4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /arg/5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: false + + /argparse/1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + /arr-diff/4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-filter/1.1.2: + resolution: {integrity: sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==} + engines: {node: '>=0.10.0'} + dependencies: + make-iterator: 1.0.1 + dev: true + + /arr-flatten/1.1.0: + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-map/2.0.2: + resolution: {integrity: sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==} + engines: {node: '>=0.10.0'} + dependencies: + make-iterator: 1.0.1 + dev: true + + /arr-union/3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + dev: true + + /array-buffer-byte-length/1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.2 + is-array-buffer: 3.0.2 + dev: true + + /array-differ/3.0.0: + resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} + engines: {node: '>=8'} + + /array-each/1.0.1: + resolution: {integrity: sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==} + engines: {node: '>=0.10.0'} + dev: true + + /array-find-index/1.0.2: + resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==} + engines: {node: '>=0.10.0'} + dev: true + + /array-find/1.0.0: + resolution: {integrity: sha512-kO/vVCacW9mnpn3WPWbTVlEnOabK2L7LWi2HViURtCM46y1zb6I8UMjx4LgbiqadTgHnLInUronwn3ampNTJtQ==} + dev: true + + /array-flatten/3.0.0: + resolution: {integrity: sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==} + dev: false + + /array-ify/1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + dev: true + + /array-includes/3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + get-intrinsic: 1.2.1 + is-string: 1.0.7 + dev: true + + /array-initial/1.1.0: + resolution: {integrity: sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==} + engines: {node: '>=0.10.0'} + dependencies: + array-slice: 1.1.0 + is-number: 4.0.0 + dev: true + + /array-iterate/1.1.4: + resolution: {integrity: sha512-sNRaPGh9nnmdC8Zf+pT3UqP8rnWj5Hf9wiFGsX3wUQ2yVSIhO2ShFwCoceIPpB41QF6i2OEmrHmCo36xronCVA==} + + /array-join-conjunction/1.0.0: + resolution: {integrity: sha512-q7IKIBEmwQvfWz69w8l5evxfzb8oaoYxmWClaN9o9UOkrFGTy7U6IHGF7UGd3cAnXZwB6bc6dWhuGB+sqMd+zw==} + dev: false + + /array-last/1.3.0: + resolution: {integrity: sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 4.0.0 + dev: true + + /array-slice/1.1.0: + resolution: {integrity: sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==} + engines: {node: '>=0.10.0'} + dev: true + + /array-sort/1.0.0: + resolution: {integrity: sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==} + engines: {node: '>=0.10.0'} + dependencies: + default-compare: 1.0.0 + get-value: 2.0.6 + kind-of: 5.1.0 + dev: true + + /array-union/1.0.2: + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} + engines: {node: '>=0.10.0'} + dependencies: + array-uniq: 1.0.3 + dev: true + + /array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + /array-uniq/1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + dev: true + + /array-unique/0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + dev: true + + /array.prototype.find/2.2.2: + resolution: {integrity: sha512-DRumkfW97iZGOfn+lIXbkVrXL04sfYKX+EfOodo8XboR5sxPDVvOjZTF/rysusa9lmhmSOeD6Vp6RKQP+eP4Tg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.flat/1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.reduce/1.0.6: + resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + es-array-method-boxes-properly: 1.0.0 + is-string: 1.0.7 + dev: true + optional: true + + /arraybuffer.prototype.slice/1.0.2: + resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + get-intrinsic: 1.2.1 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true + + /arrgv/1.0.2: + resolution: {integrity: sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==} + engines: {node: '>=8.0.0'} + dev: true + + /arrify/1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + dev: true + + /arrify/2.0.1: + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} + + /arrify/3.0.0: + resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} + engines: {node: '>=12'} + dev: true + + /asap/2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + /asn1.js/5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + + /asn1/0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /asn1js/3.0.5: + resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} + engines: {node: '>=12.0.0'} + dependencies: + pvtsutils: 1.3.5 + pvutils: 1.1.3 + tslib: 2.6.2 + dev: false + + /assert-never/1.2.1: + resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==} + dev: false + + /assert-plus/1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + dev: false + + /assert/1.5.1: + resolution: {integrity: sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==} + dependencies: + object.assign: 4.1.4 + util: 0.10.4 + dev: true + + /assert/2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + dependencies: + call-bind: 1.0.2 + is-nan: 1.3.2 + object-is: 1.1.5 + object.assign: 4.1.4 + util: 0.12.5 + dev: true + + /assign-symbols/1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + dev: true + + /ast-metadata-inferer/0.8.0: + resolution: {integrity: sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==} + dependencies: + '@mdn/browser-compat-data': 5.3.22 + dev: true + + /astral-regex/1.0.0: + resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} + engines: {node: '>=4'} + dev: true + + /astral-regex/2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true + + /async-done/1.3.2: + resolution: {integrity: sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==} + engines: {node: '>= 0.10'} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + process-nextick-args: 2.0.1 + stream-exhaust: 1.0.2 + dev: true + + /async-each/1.0.6: + resolution: {integrity: sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==} + dev: true + + /async-foreach/0.1.3: + resolution: {integrity: sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==} + dev: true + + /async-mutex/0.3.2: + resolution: {integrity: sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==} + dependencies: + tslib: 2.6.2 + dev: false + + /async-ratelimiter/1.3.11: + resolution: {integrity: sha512-tPWPqfGlS5216Y2abq3eTAOugLMdgnfvuV/nH3NAv/Q8SQVLIv8zgz/Q9eYvLi/F1OBa+RBrWnzVH27sq+1iEA==} + engines: {node: '>= 8'} + dev: false + + /async-settle/1.0.0: + resolution: {integrity: sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==} + engines: {node: '>= 0.10'} + dependencies: + async-done: 1.3.2 + dev: true + + /async/0.9.2: + resolution: {integrity: sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==} + dev: false + + /async/2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + dependencies: + lodash: 4.17.21 + dev: false + + /async/3.2.3: + resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==} + dev: false + + /async/3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + dev: false + + /asynckit/0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + /at-least-node/1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: true + + /atob/2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + dev: true + + /atomic-sleep/1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + dev: false + + /author-regex/1.0.0: + resolution: {integrity: sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==} + engines: {node: '>=0.8'} + + /auto-bind/4.0.0: + resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} + engines: {node: '>=8'} + dev: false + + /auto-parse/1.8.0: + resolution: {integrity: sha512-Uri4uC+K5cSi5hjM4snFrqPrjqUpwxeSW5EMTPvN7Ju3PlDzmXXDr5tjdzxPvvwgT3J7bmMDJ3Rm625nbrc72A==} + dependencies: + typpy: 2.3.11 + dev: false + + /autoprefixer/10.4.16_postcss@8.4.31: + resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.22.1 + caniuse-lite: 1.0.30001547 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /ava/5.3.1: + resolution: {integrity: sha512-Scv9a4gMOXB6+ni4toLuhAm9KYWEjsgBglJl+kMGI5+IVDt120CCDZyB5HNU9DjmLI2t4I0GbnxGLmmRfGTJGg==} + engines: {node: '>=14.19 <15 || >=16.15 <17 || >=18'} + hasBin: true + peerDependencies: + '@ava/typescript': '*' + peerDependenciesMeta: + '@ava/typescript': + optional: true + dependencies: + acorn: 8.10.0 + acorn-walk: 8.2.0 + ansi-styles: 6.2.1 + arrgv: 1.0.2 + arrify: 3.0.0 + callsites: 4.1.0 + cbor: 8.1.0 + chalk: 5.3.0 + chokidar: 3.5.3 + chunkd: 2.0.1 + ci-info: 3.9.0 + ci-parallel-vars: 1.0.1 + clean-yaml-object: 0.1.0 + cli-truncate: 3.1.0 + code-excerpt: 4.0.0 + common-path-prefix: 3.0.0 + concordance: 5.0.4 + currently-unhandled: 0.4.1 + debug: 4.3.4 + emittery: 1.0.1 + figures: 5.0.0 + globby: 13.2.2 + ignore-by-default: 2.1.0 + indent-string: 5.0.0 + is-error: 2.2.2 + is-plain-object: 5.0.0 + is-promise: 4.0.0 + matcher: 5.0.0 + mem: 9.0.2 + ms: 2.1.3 + p-event: 5.0.1 + p-map: 5.5.0 + picomatch: 2.3.1 + pkg-conf: 4.0.0 + plur: 5.1.0 + pretty-ms: 8.0.0 + resolve-cwd: 3.0.0 + stack-utils: 2.0.6 + strip-ansi: 7.1.0 + supertap: 3.0.1 + temp-dir: 3.0.0 + write-file-atomic: 5.0.1 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + dev: true + + /available-typed-arrays/1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + + /aws-sign2/0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + dev: false + + /aws4/1.12.0: + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + dev: false + + /axe/12.2.3: + resolution: {integrity: sha512-ZZ1kJi7ygeMPoVUgIkFcFbN+Wr/gYusdDWkBZNxu6ZMxAaTE3vnfLHeDR+1TQSZBE0l3qpqKKHHef2FRz8N83g==} + engines: {node: '>=14'} + dependencies: + '@ladjs/format-util': 1.0.4 + '@strikeentco/get': 1.0.1 + '@strikeentco/set': 1.0.2 + boolean: 3.2.0 + console-polyfill: 0.3.0 + format-specifiers: 1.0.0 + is-symbol: 1.0.4 + iserror: 0.0.2 + merge-options: 3.0.4 + p-map-series: 2.1.0 + parse-app-info: 5.0.0 + parse-err: 1.0.0 + pick-deep: 1.0.0 + unset-value: 2.0.1 + dev: false + + /axios/0.26.1: + resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} + dependencies: + follow-redirects: 1.15.3 + transitivePeerDependencies: + - debug + dev: false + + /axios/1.5.1: + resolution: {integrity: sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==} + dependencies: + follow-redirects: 1.15.3 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + + /b4a/1.6.4: + resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} + dev: false + + /babel-eslint/10.1.0_eslint@8.39.0: + resolution: {integrity: sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==} + engines: {node: '>=6'} + deprecated: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates. + peerDependencies: + eslint: '>= 4.12.1' + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/parser': 7.23.0 + '@babel/traverse': 7.23.2 + '@babel/types': 7.23.0 + eslint: 8.39.0 + eslint-visitor-keys: 1.3.0 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs2/0.4.6_@babel+core@7.23.2: + resolution: {integrity: sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': 7.23.2 + '@babel/core': 7.23.2 + '@babel/helper-define-polyfill-provider': 0.4.3_@babel+core@7.23.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3/0.8.5_@babel+core@7.23.2: + resolution: {integrity: sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-define-polyfill-provider': 0.4.3_@babel+core@7.23.2 + core-js-compat: 3.33.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-regenerator/0.5.3_@babel+core@7.23.2: + resolution: {integrity: sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.2 + '@babel/helper-define-polyfill-provider': 0.4.3_@babel+core@7.23.2 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-runtime/6.26.0: + resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} + dependencies: + core-js: 2.6.12 + regenerator-runtime: 0.11.1 + dev: true + + /babel-types/6.26.0: + resolution: {integrity: sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==} + dependencies: + babel-runtime: 6.26.0 + esutils: 2.0.3 + lodash: 4.17.21 + to-fast-properties: 1.0.3 + dev: true + + /babel-walk/3.0.0-canary-5: + resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==} + engines: {node: '>= 10.0.0'} + dependencies: + '@babel/types': 7.23.0 + dev: false + + /babylon/6.18.0: + resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==} + hasBin: true + dev: true + + /bach/1.2.0: + resolution: {integrity: sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==} + engines: {node: '>= 0.10'} + dependencies: + arr-filter: 1.1.2 + arr-flatten: 1.1.0 + arr-map: 2.0.2 + array-each: 1.0.1 + array-initial: 1.1.0 + array-last: 1.3.0 + async-done: 1.3.2 + async-settle: 1.0.0 + now-and-later: 2.0.1 + dev: true + + /bail/1.0.5: + resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} + + /bail/2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + dev: true + + /balanced-match/0.4.2: + resolution: {integrity: sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==} + dev: false + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /balanced-match/2.0.0: + resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} + dev: true + + /base/0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.0 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 + dev: true + + /base32.js/0.0.1: + resolution: {integrity: sha512-EGHIRiegFa62/SsA1J+Xs2tIzludPdzM064N9wjbiEgHnGnJ1V0WEpA4pEwCYT5nDvZk3ubf0shqaCS7k6xeUQ==} + dev: false + + /base32.js/0.1.0: + resolution: {integrity: sha512-n3TkB02ixgBOhTvANakDb4xaMXnYUVkNoRFJjQflcqMQhyEKxEHdj3E6N8t8sUQ0mjH/3/JxzlXuz3ul/J90pQ==} + engines: {node: '>=0.12.0'} + dev: false + + /base64-js/0.0.2: + resolution: {integrity: sha512-Pj9L87dCdGcKlSqPVUjD+q96pbIx1zQQLb2CUiWURfjiBELv84YX+0nGnKmyT/9KkC7PQk7UN1w+Al8bBozaxQ==} + engines: {node: '>= 0.4'} + dev: false + + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + /base64-url/2.3.3: + resolution: {integrity: sha512-dLMhIsK7OplcDauDH/tZLvK7JmUZK3A7KiQpjNzsBrM6Etw7hzNI1tLEywqJk9NnwkgWuFKSlx/IUO7vF6Mo8Q==} + engines: {node: '>=6'} + dev: false + + /base64url/3.0.1: + resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} + engines: {node: '>=6.0.0'} + dev: false + + /basic-auth/2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + dependencies: + safe-buffer: 5.1.2 + dev: false + + /bcrypt-pbkdf/1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + dependencies: + tweetnacl: 0.14.5 + dev: false + + /bcryptjs/2.4.3: + resolution: {integrity: sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==} + dev: false + + /before-after-hook/2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + dev: false + + /bignumber.js/9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + dev: false + + /bin-build/3.0.0: + resolution: {integrity: sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==} + engines: {node: '>=4'} + dependencies: + decompress: 4.2.1 + download: 6.2.5 + execa: 0.7.0 + p-map-series: 1.0.0 + tempfile: 2.0.0 + dev: true + + /bin-check/4.1.0: + resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==} + engines: {node: '>=4'} + dependencies: + execa: 0.7.0 + executable: 4.1.1 + dev: true + + /bin-version-check/4.0.0: + resolution: {integrity: sha512-sR631OrhC+1f8Cvs8WyVWOA33Y8tgwjETNPyyD/myRBXLkfS/vl74FmH/lFcRl9KY3zwGh7jFhvyk9vV3/3ilQ==} + engines: {node: '>=6'} + dependencies: + bin-version: 3.1.0 + semver: 5.7.2 + semver-truncate: 1.1.2 + dev: true + + /bin-version/3.1.0: + resolution: {integrity: sha512-Mkfm4iE1VFt4xd4vH+gx+0/71esbfus2LsnCGe8Pi4mndSPyT+NGES/Eg99jx8/lUGWfu3z2yuB/bt5UB+iVbQ==} + engines: {node: '>=6'} + dependencies: + execa: 1.0.0 + find-versions: 3.2.0 + dev: true + + /bin-wrapper/4.1.0: + resolution: {integrity: sha512-hfRmo7hWIXPkbpi0ZltboCMVrU+0ClXR/JgbCKKjlDjQf6igXa7OwdqNcFWQZPZTgiY7ZpzE3+LjjkLiTN2T7Q==} + engines: {node: '>=6'} + dependencies: + bin-check: 4.1.0 + bin-version-check: 4.0.0 + download: 7.1.0 + import-lazy: 3.1.0 + os-filter-obj: 2.0.0 + pify: 4.0.1 + dev: true + + /binary-extensions/1.13.1: + resolution: {integrity: sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==} + engines: {node: '>=0.10.0'} + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /binaryextensions/2.3.0: + resolution: {integrity: sha512-nAihlQsYGyc5Bwq6+EsubvANYGExeJKHDO3RjnvwU042fawQTQfM3Kxn7IHUXQOz4bzfwsGYYHGSvXyW4zOGLg==} + engines: {node: '>=0.8'} + dev: false + + /bindings/1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + dependencies: + file-uri-to-path: 1.0.0 + dev: true + optional: true + + /bintrees/1.0.2: + resolution: {integrity: sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==} + dev: false + + /bitcoin-regex/2.0.0: + resolution: {integrity: sha512-WQXyzd6hpVsbJwuzQXdhkjp1dVznTanbuFE4WinmwyOi6osmr75OD8U05a4xvOP24vzD+9ugNT7JJtTMEQe4hA==} + engines: {node: '>=4'} + dev: false + + /bl/1.2.3: + resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} + dependencies: + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + dev: true + + /bl/4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + + /bl/5.1.0: + resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + dependencies: + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + + /bluebird/3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: false + + /blueimp-md5/2.19.0: + resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} + dev: true + + /bn.js/4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + + /bn.js/5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + dev: true + + /body/5.1.0: + resolution: {integrity: sha512-chUsBxGRtuElD6fmw1gHLpvnKdVLK302peeFa9ZqAEk8TyzZ3fygLyUEDDPTJvL9+Bor0dIwn6ePOsRM2y0zQQ==} + dependencies: + continuable-cache: 0.3.1 + error: 7.2.1 + raw-body: 1.1.7 + safe-json-parse: 1.0.1 + dev: true + + /boolbase/1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + /boolean/3.2.0: + resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} + dev: false + + /bootstrap/4.6.2_a2quc6v7zrhtmn4zqsvmmrpbnq: + resolution: {integrity: sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ==} + peerDependencies: + jquery: 1.9.1 - 3 + popper.js: ^1.16.1 + dependencies: + jquery: 3.5.1 + popper.js: 1.16.1 + dev: false + + /bops/0.0.7: + resolution: {integrity: sha512-oF8JFj2vZoTTzbS4haaB/37vqoJbZXxPBWmNdFONu3dUBW+zp7JcoIIYYd1r+4/YwFM8QUSR1u4rrPbtcdHsRg==} + dependencies: + base64-js: 0.0.2 + to-utf8: 0.0.1 + dev: false + + /bowser/2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + dev: false + optional: true + + /bowser/2.9.0: + resolution: {integrity: sha512-2ld76tuLBNFekRgmJfT2+3j5MIrP6bFict8WAIT3beq+srz1gcKNAdNKMqHqauQt63NmAa88HfP1/Ypa9Er3HA==} + dev: false + + /boxen/4.2.0: + resolution: {integrity: sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==} + engines: {node: '>=8'} + dependencies: + ansi-align: 3.0.1 + camelcase: 5.3.1 + chalk: 3.0.0 + cli-boxes: 2.2.1 + string-width: 4.2.3 + term-size: 2.2.1 + type-fest: 0.8.1 + widest-line: 3.1.0 + dev: true + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + /brace-expansion/2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + + /braces/2.3.2: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} + dependencies: + arr-flatten: 1.1.0 + array-unique: 0.3.2 + extend-shallow: 2.0.1 + fill-range: 4.0.0 + isobject: 3.0.1 + repeat-element: 1.1.4 + snapdragon: 0.8.2 + snapdragon-node: 2.1.1 + split-string: 3.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + + /bree/9.1.3: + resolution: {integrity: sha512-oqto4iG7MG2xdRKU0MhFNPTq7ZSztKvalohO3nyu4EIyy3SKpLDX92LkptcGTl6BE2RpQLrzgBP3HoPtWlWBaA==} + engines: {node: '>=12.17.0 <13.0.0-0||>=13.2.0'} + dependencies: + '@breejs/later': 4.1.0 + boolean: 3.2.0 + combine-errors: 3.0.3 + cron-validate: 1.4.5 + human-interval: 2.0.1 + is-string-and-not-blank: 0.0.2 + is-valid-path: 0.1.1 + ms: 2.1.3 + p-wait-for: 3.2.0 + safe-timers: 1.1.0 + dev: false + + /brorand/1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + dev: true + + /browser-hrtime/1.1.8: + resolution: {integrity: sha512-kzXheikaJsBtzUBlyVtPIY5r0soQePzjwVwT4IlDpU2RvfB5Py52gpU98M77rgqMCheoSSZvrcrdj3t6cZ3suA==} + dev: false + + /browser-pack/5.0.1: + resolution: {integrity: sha512-BFMQuYXCcwr3Uvna1y1hikqd3r2dQpWIQBIN3m5YwE3ClfnXDeF3tqP6Wqjhs1LRUeBJpgHn8yD+fPX/YSEgMQ==} + hasBin: true + dependencies: + JSONStream: 1.3.5 + combine-source-map: 0.6.1 + defined: 1.0.1 + through2: 1.1.1 + umd: 3.0.3 + dev: true + + /browser-pack/6.1.0: + resolution: {integrity: sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==} + hasBin: true + dependencies: + JSONStream: 1.3.5 + combine-source-map: 0.8.0 + defined: 1.0.1 + safe-buffer: 5.2.1 + through2: 2.0.5 + umd: 3.0.3 + dev: true + + /browser-process-hrtime/1.0.0: + resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} + dev: false + + /browser-resolve/2.0.0: + resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} + dependencies: + resolve: 1.22.8 + dev: true + + /browser-unpack/1.4.2: + resolution: {integrity: sha512-uHkiY4bmXjjBBWoKH1aRnEGTQxUUCCcVtoJfH9w1lmGGjETY4u93Zk+GRYkCE/SRMrdoMTINQ/1/manr/3aMVA==} + hasBin: true + dependencies: + acorn-node: 1.8.2 + concat-stream: 1.6.2 + minimist: 1.2.8 + dev: true + + /browserify-aes/1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /browserify-cipher/1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + dev: true + + /browserify-des/1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + dependencies: + cipher-base: 1.0.4 + des.js: 1.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /browserify-rsa/4.1.0: + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + dependencies: + bn.js: 5.2.1 + randombytes: 2.1.0 + dev: true + + /browserify-sign/4.2.1: + resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} + dependencies: + bn.js: 5.2.1 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.5.4 + inherits: 2.0.4 + parse-asn1: 5.1.6 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + dev: true + + /browserify-zlib/0.2.0: + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} + dependencies: + pako: 1.0.11 + dev: true + + /browserify/17.0.0: + resolution: {integrity: sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==} + engines: {node: '>= 0.8'} + hasBin: true + dependencies: + JSONStream: 1.3.5 + assert: 1.5.1 + browser-pack: 6.1.0 + browser-resolve: 2.0.0 + browserify-zlib: 0.2.0 + buffer: 5.2.1 + cached-path-relative: 1.1.0 + concat-stream: 1.6.2 + console-browserify: 1.2.0 + constants-browserify: 1.0.0 + crypto-browserify: 3.12.0 + defined: 1.0.1 + deps-sort: 2.0.1 + domain-browser: 1.2.0 + duplexer2: 0.1.4 + events: 3.3.0 + glob: 7.2.3 + has: 1.0.4 + htmlescape: 1.1.1 + https-browserify: 1.0.0 + inherits: 2.0.4 + insert-module-globals: 7.2.1 + labeled-stream-splicer: 2.0.2 + mkdirp-classic: 0.5.3 + module-deps: 6.2.3 + os-browserify: 0.3.0 + parents: 1.0.1 + path-browserify: 1.0.1 + process: 0.11.10 + punycode: 1.4.1 + querystring-es3: 0.2.1 + read-only-stream: 2.0.0 + readable-stream: 2.3.8 + resolve: 1.22.8 + shasum-object: 1.0.0 + shell-quote: 1.8.1 + stream-browserify: 3.0.0 + stream-http: 3.2.0 + string_decoder: 1.3.0 + subarg: 1.0.0 + syntax-error: 1.4.0 + through2: 2.0.5 + timers-browserify: 1.4.2 + tty-browserify: 0.0.1 + url: 0.11.3 + util: 0.12.5 + vm-browserify: 1.1.2 + xtend: 4.0.2 + dev: true + + /browserslist/4.22.1: + resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001547 + electron-to-chromium: 1.4.552 + node-releases: 2.0.13 + update-browserslist-db: 1.0.13_browserslist@4.22.1 + + /bson-objectid/1.3.1: + resolution: {integrity: sha512-eQBNQXsisEAXlwiSy8zRNZdW2xDBJaEVkTPbodYR9hGxxtE548Qq7ilYOd8WAQ86xF7NRUdiWSQ1pa/TkKiE2A==} + dev: false + + /bson-objectid/2.0.4: + resolution: {integrity: sha512-vgnKAUzcDoa+AeyYwXCoHyF2q6u/8H46dxu5JN+4/TZeq/Dlinn0K6GvxsCLb3LHUJl0m/TLiEK31kUwtgocMQ==} + dev: false + + /bson/1.1.6: + resolution: {integrity: sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==} + engines: {node: '>=0.6.19'} + dev: false + + /bson/4.7.2: + resolution: {integrity: sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==} + engines: {node: '>=6.9.0'} + dependencies: + buffer: 5.7.1 + dev: false + + /bson/6.1.0: + resolution: {integrity: sha512-yiQ3KxvpVoRpx1oD1uPz4Jit9tAVTJgjdmjDKtUErkOoL9VNoF8Dd58qtAOL5E40exx2jvAT9sqdRSK/r+SHlA==} + engines: {node: '>=16.20.1'} + dev: false + + /buf-compare/1.0.1: + resolution: {integrity: sha512-Bvx4xH00qweepGc43xFvMs5BKASXTbHaHm6+kDYIK9p/4iFwjATQkmPKHQSgJZzKbAymhztRbXUf1Nqhzl73/Q==} + engines: {node: '>=0.10.0'} + dev: true + + /buffer-alloc-unsafe/1.1.0: + resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} + dev: true + + /buffer-alloc/1.2.0: + resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} + dependencies: + buffer-alloc-unsafe: 1.1.0 + buffer-fill: 1.0.0 + dev: true + + /buffer-crc32/0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + /buffer-equal-constant-time/1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + dev: false + + /buffer-equal/1.0.1: + resolution: {integrity: sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==} + engines: {node: '>=0.4'} + dev: true + + /buffer-fill/1.0.0: + resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} + dev: true + + /buffer-from/1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /buffer-xor/1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + dev: true + + /buffer/4.9.2: + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + isarray: 1.0.0 + dev: true + + /buffer/5.2.1: + resolution: {integrity: sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /buffer/5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + /buffer/6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + + /bufferstreams/3.0.0: + resolution: {integrity: sha512-Qg0ggJUWJq90vtg4lDsGN9CDWvzBMQxhiEkSOD/sJfYt6BLect3eV1/S6K7SCSKJ34n60rf6U5eUPmQENVE4UA==} + engines: {node: '>=8.12.0'} + dependencies: + readable-stream: 3.6.2 + dev: true + + /builtin-modules/3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /builtin-status-codes/3.0.0: + resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} + dev: true + + /builtins/5.0.1: + resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} + dependencies: + semver: 7.5.4 + dev: true + + /bullmq/4.12.2: + resolution: {integrity: sha512-0YhOtg1lvdqBtYQgh7NNKisFckbxKaHSDqifXvx90OAa5qa6sqNoFbvOgaUitRsAiJgg2fDdT1DnMdQHsQiCeQ==} + dependencies: + cron-parser: 4.9.0 + glob: 8.1.0 + ioredis: 5.3.2 + lodash: 4.17.21 + msgpackr: 1.9.9 + node-abort-controller: 3.1.1 + semver: 7.5.4 + tslib: 2.6.2 + uuid: 9.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /bundle-collapser/1.4.0: + resolution: {integrity: sha512-Gd3K3+3KI1Utuk+gwAvuOVOjT/2XLGL8tU6FwDKk04LlOZkYfT0pwQllsG1Dv8RRhgcjNxZSDmmSXb0AOkwSwg==} + hasBin: true + dependencies: + browser-pack: 6.1.0 + browser-unpack: 1.4.2 + concat-stream: 1.6.2 + falafel: 2.2.5 + minimist: 1.2.8 + through2: 2.0.5 + dev: true + + /busboy/1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + dev: false + + /bytes/1.0.0: + resolution: {integrity: sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ==} + dev: true + + /bytes/3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: false + + /bytestreamjs/2.0.1: + resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} + engines: {node: '>=6.0.0'} + dev: false + + /cabin/13.2.5_axe@12.2.3: + resolution: {integrity: sha512-dIjg1Szoax9YxWm9DkJOGp+xLtDwsOQ4dIfX1qFg/gDfXzRnAqxEMOLM1qPArDSyK49F/OX//9vYPXDxdRieGA==} + engines: {node: '>=14'} + peerDependencies: + axe: '>= 10.0.0' + dependencies: + '@ladjs/format-util': 1.0.4 + ansi-colors: 4.1.3 + axe: 12.2.3 + clf-date: 0.2.1 + format-specifiers: 1.0.0 + iserror: 0.0.2 + merge-options: 3.0.4 + ms: 2.1.3 + on-finished: 2.4.1 + parse-err: 1.0.0 + parse-request: 6.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /cacache/15.3.0: + resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} + engines: {node: '>= 10'} + dependencies: + '@npmcli/fs': 1.1.1 + '@npmcli/move-file': 1.1.2 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 7.2.3 + infer-owner: 1.0.4 + lru-cache: 6.0.0 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 8.0.1 + tar: 6.2.0 + unique-filename: 1.1.1 + transitivePeerDependencies: + - bluebird + dev: true + + /cacache/16.1.3: + resolution: {integrity: sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + '@npmcli/fs': 2.1.2 + '@npmcli/move-file': 2.0.1 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 8.1.0 + infer-owner: 1.0.4 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 9.0.1 + tar: 6.2.0 + unique-filename: 2.0.1 + transitivePeerDependencies: + - bluebird + dev: true + + /cacache/17.1.4: + resolution: {integrity: sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@npmcli/fs': 3.1.0 + fs-minipass: 3.0.3 + glob: 10.3.10 + lru-cache: 7.18.3 + minipass: 7.0.4 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + p-map: 4.0.0 + ssri: 10.0.5 + tar: 6.2.0 + unique-filename: 3.0.0 + dev: false + + /cache-base/1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.0 + get-value: 2.0.6 + has-value: 1.0.0 + isobject: 3.0.1 + set-value: 2.0.1 + to-object-path: 0.3.0 + union-value: 1.0.1 + unset-value: 1.0.0 + dev: true + + /cache-content-type/1.0.1: + resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} + engines: {node: '>= 6.0.0'} + dependencies: + mime-types: 2.1.35 + ylru: 1.3.2 + dev: false + + /cacheable-lookup/5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + dev: false + + /cacheable-lookup/7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + dev: true + + /cacheable-request/10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + dependencies: + '@types/http-cache-semantics': 4.0.2 + get-stream: 6.0.1 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.0.0 + responselike: 3.0.0 + dev: true + + /cacheable-request/2.1.4: + resolution: {integrity: sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==} + dependencies: + clone-response: 1.0.2 + get-stream: 3.0.0 + http-cache-semantics: 3.8.1 + keyv: 3.0.0 + lowercase-keys: 1.0.0 + normalize-url: 2.0.1 + responselike: 1.0.2 + dev: true + + /cacheable-request/6.1.0: + resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} + engines: {node: '>=8'} + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 3.1.0 + lowercase-keys: 2.0.0 + normalize-url: 4.5.1 + responselike: 1.0.2 + dev: true + + /cacheable-request/7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + dev: false + + /cached-path-relative/1.1.0: + resolution: {integrity: sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==} + dev: true + + /caching-transform/4.0.0: + resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} + engines: {node: '>=8'} + dependencies: + hasha: 5.2.2 + make-dir: 3.1.0 + package-hash: 4.0.0 + write-file-atomic: 3.0.3 + dev: true + + /call-bind/1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.1 + + /call-me-maybe/1.0.2: + resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} + dev: true + + /callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /callsites/4.1.0: + resolution: {integrity: sha512-aBMbD1Xxay75ViYezwT40aQONfr+pSXTHwNKvIXhXD6+LY3F1dLIcceoC5OZKBVHbXcysz1hL9D2w0JJIMXpUw==} + engines: {node: '>=12.20'} + dev: true + + /camelcase-keys/2.1.0: + resolution: {integrity: sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==} + engines: {node: '>=0.10.0'} + dependencies: + camelcase: 2.1.1 + map-obj: 1.0.1 + dev: true + + /camelcase-keys/6.2.2: + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + engines: {node: '>=8'} + dependencies: + camelcase: 5.3.1 + map-obj: 4.3.0 + quick-lru: 4.0.1 + dev: true + + /camelcase-keys/7.0.2: + resolution: {integrity: sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==} + engines: {node: '>=12'} + dependencies: + camelcase: 6.3.0 + map-obj: 4.3.0 + quick-lru: 5.1.1 + type-fest: 1.4.0 + dev: true + + /camelcase-keys/8.0.2: + resolution: {integrity: sha512-qMKdlOfsjlezMqxkUGGMaWWs17i2HoL15tM+wtx8ld4nLrUwU58TFdvyGOz/piNP842KeO8yXvggVQSdQ828NA==} + engines: {node: '>=14.16'} + dependencies: + camelcase: 7.0.1 + map-obj: 4.3.0 + quick-lru: 6.1.2 + type-fest: 2.19.0 + dev: true + + /camelcase/2.1.1: + resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==} + engines: {node: '>=0.10.0'} + dev: true + + /camelcase/3.0.0: + resolution: {integrity: sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==} + engines: {node: '>=0.10.0'} + dev: true + + /camelcase/5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + /camelcase/6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + /camelcase/7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + dev: true + + /camelize/1.0.0: + resolution: {integrity: sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==} + dev: false + + /caniuse-api/3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + dependencies: + browserslist: 4.22.1 + caniuse-lite: 1.0.30001547 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + dev: true + + /caniuse-lite/1.0.30001547: + resolution: {integrity: sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==} + + /capitalize/2.0.4: + resolution: {integrity: sha512-wcSyiFqXRYyCoqu0o0ekXzJAKCLMkqWS5QWGlgTJFJKwRmI6pzcN2hBl5VPq9RzLW5Uf4FF/V/lcFfjCtVak2w==} + dev: false + + /captain-hook/0.0.3: + resolution: {integrity: sha512-PwvywjQ3tdKe5eLhqVMkVvgzzLf5Oa6NZLLja5Rv+I3XqHehY4EdLDvpDi/YUdjkgm0ewC66TEKiGR5iEZp1+A==} + dependencies: + async: 0.9.2 + dev: false + + /caseless/0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + dev: false + + /catharsis/0.9.0: + resolution: {integrity: sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==} + engines: {node: '>= 10'} + dependencies: + lodash: 4.17.21 + dev: false + + /caw/2.0.1: + resolution: {integrity: sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==} + engines: {node: '>=4'} + dependencies: + get-proxy: 2.1.0 + isurl: 1.0.0 + tunnel-agent: 0.6.0 + url-to-options: 1.0.1 + dev: true + + /cbor-extract/2.1.1: + resolution: {integrity: sha512-1UX977+L+zOJHsp0mWFG13GLwO6ucKgSmSW6JTl8B9GUvACvHeIVpFqhU92299Z6PfD09aTXDell5p+lp1rUFA==} + hasBin: true + requiresBuild: true + dependencies: + node-gyp-build-optional-packages: 5.0.3 + optionalDependencies: + '@cbor-extract/cbor-extract-darwin-arm64': 2.1.1 + '@cbor-extract/cbor-extract-darwin-x64': 2.1.1 + '@cbor-extract/cbor-extract-linux-arm': 2.1.1 + '@cbor-extract/cbor-extract-linux-arm64': 2.1.1 + '@cbor-extract/cbor-extract-linux-x64': 2.1.1 + '@cbor-extract/cbor-extract-win32-x64': 2.1.1 + dev: false + optional: true + + /cbor-x/1.5.4: + resolution: {integrity: sha512-PVKILDn+Rf6MRhhcyzGXi5eizn1i0i3F8Fe6UMMxXBnWkalq9+C5+VTmlIjAYM4iF2IYF2N+zToqAfYOp+3rfw==} + optionalDependencies: + cbor-extract: 2.1.1 + dev: false + + /cbor/8.1.0: + resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==} + engines: {node: '>=12.19'} + dependencies: + nofilter: 3.1.0 + dev: true + + /ccount/1.1.0: + resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} + + /chalk/1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + /chalk/3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + /chalk/5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + + /chance/1.1.11: + resolution: {integrity: sha512-kqTg3WWywappJPqtgrdvbA380VoXO2eu9VCV895JgbyHsaErXdyHK9LOZ911OvAk6L0obK7kDk9CGs8+oBawVA==} + dev: true + + /character-entities-html4/1.1.4: + resolution: {integrity: sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==} + dev: false + + /character-entities-legacy/1.1.4: + resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} + + /character-entities/1.2.4: + resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} + + /character-entities/2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + dev: true + + /character-parser/2.2.0: + resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==} + dependencies: + is-regex: 1.1.4 + + /character-reference-invalid/1.1.4: + resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} + + /chardet/0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true + + /cheerio-select/2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + dev: false + + /cheerio/1.0.0-rc.12: + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} + engines: {node: '>= 6'} + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.1.0 + htmlparser2: 8.0.2 + parse5: 7.1.2 + parse5-htmlparser2-tree-adapter: 7.0.0 + dev: false + + /chinese-tokenizer/2.4.0: + resolution: {integrity: sha512-Bgj+CJAdtk9uQRdJfDTg55cpKH+cAQG7YwClSgggiWAD620QP4bAH4ZD8EHlEkKYDO3QLP7C0eQ+uzx6QJe/aw==} + dependencies: + prettify-pinyin: 0.1.5 + dev: false + + /chokidar/2.1.8: + resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} + deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies + dependencies: + anymatch: 2.0.0 + async-each: 1.0.6 + braces: 2.3.2 + glob-parent: 3.1.0 + inherits: 2.0.4 + is-binary-path: 1.0.1 + is-glob: 4.0.3 + normalize-path: 3.0.0 + path-is-absolute: 1.0.1 + readdirp: 2.2.1 + upath: 1.2.0 + optionalDependencies: + fsevents: 1.2.13 + transitivePeerDependencies: + - supports-color + dev: true + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /chownr/1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: false + + /chownr/2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + /chunkd/2.0.1: + resolution: {integrity: sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==} + dev: true + + /ci-info/2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + dev: true + + /ci-info/3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + /ci-parallel-vars/1.0.1: + resolution: {integrity: sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==} + dev: true + + /cipher-base/1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /clamscan/2.1.2: + resolution: {integrity: sha512-pcovgLHcrg3l/mI51Kuk0kN++07pSZdBTskISw0UFvsm8UXda8oNCm0eLeODxFg85Mz+k+TtSS9+XPlriJ8/Fg==} + engines: {node: '>=12.0.0'} + dev: false + + /class-utils/0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + dev: true + + /clean-regexp/1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /clean-stack/2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + /clean-stack/4.2.0: + resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} + engines: {node: '>=12'} + dependencies: + escape-string-regexp: 5.0.0 + dev: true + + /clean-yaml-object/0.1.0: + resolution: {integrity: sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw==} + engines: {node: '>=0.10.0'} + dev: true + + /clf-date/0.2.1: + resolution: {integrity: sha512-U4FALii5pfAvg93GfFDj08gf9p9ldA6yxsIknnma+efLJQajT0EpTnn/iv2/+EL1WpQaPNi+fhn1W+om6lgWpg==} + hasBin: true + dev: false + + /cli-boxes/2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} + dev: true + + /cli-cursor/3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + + /cli-cursor/4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + restore-cursor: 4.0.0 + dev: true + + /cli-truncate/3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + slice-ansi: 5.0.0 + string-width: 5.1.2 + dev: true + + /cli-width/3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + dev: true + + /clipboard/2.0.11: + resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==} + dependencies: + good-listener: 1.2.2 + select: 1.1.2 + tiny-emitter: 2.1.0 + dev: false + + /cliui/3.2.0: + resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==} + dependencies: + string-width: 1.0.2 + strip-ansi: 3.0.1 + wrap-ansi: 2.1.0 + dev: true + + /cliui/5.0.0: + resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} + dependencies: + string-width: 3.1.0 + strip-ansi: 5.2.0 + wrap-ansi: 5.1.0 + dev: true + + /cliui/6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + /cliui/8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + /clone-buffer/1.0.0: + resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==} + engines: {node: '>= 0.10'} + dev: true + + /clone-response/1.0.2: + resolution: {integrity: sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==} + dependencies: + mimic-response: 1.0.1 + dev: true + + /clone-response/1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + dependencies: + mimic-response: 1.0.1 + + /clone-stats/1.0.0: + resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==} + dev: true + + /clone/2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + dev: true + + /cloneable-readable/1.1.3: + resolution: {integrity: sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==} + dependencies: + inherits: 2.0.4 + process-nextick-args: 2.0.1 + readable-stream: 2.3.8 + dev: true + + /cluster-key-slot/1.1.2: + resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} + engines: {node: '>=0.10.0'} + + /co-body/6.1.0: + resolution: {integrity: sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==} + dependencies: + inflation: 2.0.0 + qs: 6.11.2 + raw-body: 2.5.2 + type-is: 1.6.18 + dev: false + + /co-wrap-all/1.0.0: + resolution: {integrity: sha512-aru6gLi2vTUazr+MxVm3Rv6ST7/EKtFj9BrfkcOrbCO2Qv6LqJdE71m88HhHiBEviKw/ucVrwoGLrq2xHpOsJA==} + dependencies: + co: 4.6.0 + dev: false + + /co/3.1.0: + resolution: {integrity: sha512-CQsjCRiNObI8AtTsNIBDRMQ4oMR83CzEswHYahClvul7gKk+lDQiOKv+5qh7LQWf5sh6jkZNispz/QlsZxyNgA==} + + /co/4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: false + + /coa/2.0.2: + resolution: {integrity: sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==} + engines: {node: '>= 4.0'} + dependencies: + '@types/q': 1.5.6 + chalk: 2.4.2 + q: 1.5.1 + dev: true + optional: true + + /code-excerpt/4.0.0: + resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + convert-to-spaces: 2.0.1 + dev: true + + /code-point-at/1.1.0: + resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} + engines: {node: '>=0.10.0'} + dev: true + + /codemirror/5.65.15: + resolution: {integrity: sha512-YC4EHbbwQeubZzxLl5G4nlbLc1T21QTrKGaOal/Pkm9dVDMZXMH7+ieSPEOZCtO9I68i8/oteJKOxzHC2zR+0g==} + dev: false + + /collapse-white-space/1.0.6: + resolution: {integrity: sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==} + + /collection-map/1.0.0: + resolution: {integrity: sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==} + engines: {node: '>=0.10.0'} + dependencies: + arr-map: 2.0.2 + for-own: 1.0.0 + make-iterator: 1.0.1 + dev: true + + /collection-visit/1.0.0: + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} + engines: {node: '>=0.10.0'} + dependencies: + map-visit: 1.0.0 + object-visit: 1.0.1 + dev: true + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name/1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /color-string/1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: false + + /color-support/1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + + /color/4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + dev: false + + /colord/2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: true + + /colorette/2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: true + + /combine-errors/3.0.3: + resolution: {integrity: sha512-C8ikRNRMygCwaTx+Ek3Yr+OuZzgZjduCOfSQBjbM8V3MfgcjSTeto/GXP6PAwKvJz/v15b7GHZvx5rOlczFw/Q==} + dependencies: + custom-error-instance: 2.1.1 + lodash.uniqby: 4.5.0 + dev: false + + /combine-source-map/0.6.1: + resolution: {integrity: sha512-XKRNtuZRlVDTuSGKsfZpXYz80y0XDbYS4a+FzafTgmYHy/ckruFBx7Nd6WaQnFHVI3O6IseWVdXUvZutMpjSkQ==} + dependencies: + convert-source-map: 1.1.3 + inline-source-map: 0.5.0 + lodash.memoize: 3.0.4 + source-map: 0.4.4 + dev: true + + /combine-source-map/0.8.0: + resolution: {integrity: sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg==} + dependencies: + convert-source-map: 1.1.3 + inline-source-map: 0.6.2 + lodash.memoize: 3.0.4 + source-map: 0.5.7 + dev: true + + /combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + + /comma-separated-tokens/1.0.8: + resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} + dev: false + + /commander/10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + dev: false + + /commander/11.0.0: + resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} + engines: {node: '>=16'} + dev: true + + /commander/2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + /commander/2.6.0: + resolution: {integrity: sha512-PhbTMT+ilDXZKqH8xbvuUY2ZEQNef0Q7DKxgoEKb4ccytsdvVVJmYqR0sGbi96nxU6oGrwEIQnclpK2NBZuQlg==} + engines: {node: '>= 0.6.x'} + dev: true + + /commander/4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /commander/6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + dev: false + + /commander/7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: true + + /commander/9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + /common-path-prefix/3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + dev: true + + /common-tags/1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: true + + /commondir/1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + /compare-func/2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + dev: true + + /component-emitter/1.3.0: + resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} + + /compressible/2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: false + + /concat-map/0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + /concat-stream/1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + dev: true + + /concat-stream/2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + dev: true + + /concat-with-sourcemaps/1.1.0: + resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} + dependencies: + source-map: 0.6.1 + dev: true + + /concordance/5.0.4: + resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} + engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} + dependencies: + date-time: 3.1.0 + esutils: 2.0.3 + fast-diff: 1.3.0 + js-string-escape: 1.0.1 + lodash: 4.17.21 + md5-hex: 3.0.1 + semver: 7.5.4 + well-known-symbols: 2.0.0 + dev: true + + /concurrently/3.6.1: + resolution: {integrity: sha512-/+ugz+gwFSEfTGUxn0KHkY+19XPRTXR8+7oUK/HxgiN1n7FjeJmkrbSiXAJfyQ0zORgJYPaenmymwon51YXH9Q==} + engines: {node: '>=4.0.0'} + hasBin: true + dependencies: + chalk: 2.4.2 + commander: 2.6.0 + date-fns: 1.30.1 + lodash: 4.17.21 + read-pkg: 3.0.0 + rx: 2.3.24 + spawn-command: 0.0.2-1 + supports-color: 3.2.3 + tree-kill: 1.2.2 + dev: true + + /condense-newlines/0.2.1: + resolution: {integrity: sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-whitespace: 0.3.0 + kind-of: 3.2.2 + dev: false + + /config-chain/1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + + /configstore/5.0.1: + resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} + engines: {node: '>=8'} + dependencies: + dot-prop: 5.3.0 + graceful-fs: 4.2.11 + make-dir: 3.1.0 + unique-string: 2.0.0 + write-file-atomic: 3.0.3 + xdg-basedir: 4.0.0 + dev: true + + /confusing-browser-globals/1.0.11: + resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} + dev: true + + /confusing-browser-globals/1.0.9: + resolution: {integrity: sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==} + dev: true + + /console-browserify/1.2.0: + resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} + dev: true + + /console-control-strings/1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + + /console-polyfill/0.3.0: + resolution: {integrity: sha512-w+JSDZS7XML43Xnwo2x5O5vxB0ID7T5BdqDtyqT6uiCAX2kZAgcWxNaGqT97tZfSHzfOcvrfsDAodKcJ3UvnXQ==} + dev: false + + /console-stream/0.1.1: + resolution: {integrity: sha512-QC/8l9e6ofi6nqZ5PawlDgzmMw3OxIXtvolBzap/F4UDBJlDaZRSNbL/lb41C29FcbSJncBFlJFj2WJoNyZRfQ==} + dev: true + optional: true + + /constantinople/3.1.2: + resolution: {integrity: sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==} + dependencies: + '@types/babel-types': 7.0.12 + '@types/babylon': 6.16.7 + babel-types: 6.26.0 + babylon: 6.18.0 + dev: true + + /constantinople/4.0.1: + resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==} + dependencies: + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + dev: false + + /constants-browserify/1.0.0: + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + dev: true + + /content-disposition/0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + + /content-security-policy-builder/2.1.0: + resolution: {integrity: sha512-/MtLWhJVvJNkA9dVLAp6fg9LxD2gfI6R2Fi1hPmfjYXSahJJzcfvoeDOxSyp4NvxMuwWv3WMssE9o31DoULHrQ==} + engines: {node: '>=4.0.0'} + dev: false + + /content-type/1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + dev: false + + /continuable-cache/0.3.1: + resolution: {integrity: sha512-TF30kpKhTH8AGCG3dut0rdd/19B7Z+qCnrMoBLpyQu/2drZdNrrpcjPEoJeSVsQM+8KmWG5O56oPDjSSUsuTyA==} + dev: true + + /conventional-changelog-angular/6.0.0: + resolution: {integrity: sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==} + engines: {node: '>=14'} + dependencies: + compare-func: 2.0.0 + dev: true + + /conventional-changelog-conventionalcommits/6.1.0: + resolution: {integrity: sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==} + engines: {node: '>=14'} + dependencies: + compare-func: 2.0.0 + dev: true + + /conventional-commits-parser/4.0.0: + resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==} + engines: {node: '>=14'} + hasBin: true + dependencies: + JSONStream: 1.3.5 + is-text-path: 1.0.1 + meow: 8.1.2 + split2: 3.2.2 + dev: true + + /convert-hrtime/3.0.0: + resolution: {integrity: sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA==} + engines: {node: '>=8'} + dev: false + + /convert-source-map/1.1.3: + resolution: {integrity: sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==} + dev: true + + /convert-source-map/1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + + /convert-source-map/2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + /convert-to-spaces/2.0.1: + resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /convert-vinyl-to-vfile/3.0.0: + resolution: {integrity: sha512-3ABj7SyTaDTjRizx7EbFOQajiS9KhDheZ4BwfA5UOC6p6epkW/w1Wf2UTIroeDE4aIRYyJ/lpHSJvcGwbqRCdg==} + dependencies: + vfile: 4.2.1 + vinyl: 2.2.1 + dev: true + + /cookie/0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + dev: false + + /cookiejar/2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + + /cookies/0.8.0: + resolution: {integrity: sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + keygrip: 1.1.0 + dev: false + + /copy-descriptor/0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} + dev: true + + /copy-props/2.0.5: + resolution: {integrity: sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==} + dependencies: + each-props: 1.3.2 + is-plain-object: 5.0.0 + dev: true + + /copy-to/2.0.1: + resolution: {integrity: sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==} + dev: false + + /core-assert/0.2.1: + resolution: {integrity: sha512-IG97qShIP+nrJCXMCgkNZgH7jZQ4n8RpPyPeXX++T6avR/KhLhgLiHKoEn5Rc1KjfycSfA9DMa6m+4C4eguHhw==} + engines: {node: '>=0.10.0'} + dependencies: + buf-compare: 1.0.1 + is-error: 2.2.2 + dev: true + + /core-js-compat/3.33.0: + resolution: {integrity: sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==} + dependencies: + browserslist: 4.22.1 + dev: true + + /core-js/2.6.12: + resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} + deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. + requiresBuild: true + dev: true + + /core-util-is/1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + dev: false + + /core-util-is/1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + /cosmiconfig-typescript-loader/4.4.0_sq53fofhr2mc3sshhakmkmfwci: + resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} + engines: {node: '>=v14.21.3'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=7' + ts-node: '>=10' + typescript: '>=4' + dependencies: + '@types/node': 20.5.1 + cosmiconfig: 8.3.6_typescript@5.2.2 + ts-node: 10.9.1_v6somhgbdgtqfeo32plv4xl6zq + typescript: 5.2.2 + dev: true + + /cosmiconfig/6.0.0: + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /cosmiconfig/7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /cosmiconfig/8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + dev: true + + /cosmiconfig/8.3.6_typescript@5.2.2: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + typescript: 5.2.2 + dev: true + + /country-list/2.2.0: + resolution: {integrity: sha512-AS21pllCp72LmUztqXPVKXK3TRyap1XlohGLqN04cXH2rFB9vo7SnH5sMnqltZPnu9ie/x1se3UuCZJbGXErfw==} + dev: false + + /cp-file/3.2.0: + resolution: {integrity: sha512-nb86197RU0S83Lemld5iabS5jqe0m2pjkAohsWmbf3mk4cCMIWSIL50GJMV2jgVa4LBd5wPxVANnFeLHbuv8uw==} + engines: {node: '>=0.10.0'} + dependencies: + graceful-fs: 4.2.11 + mkdirp: 0.5.6 + nested-error-stacks: 1.0.2 + object-assign: 4.1.1 + pify: 2.3.0 + pinkie-promise: 2.0.1 + readable-stream: 2.3.8 + dev: true + + /cpy-cli/1.0.1: + resolution: {integrity: sha512-CpRAEMypHUl+2/8qxuvkwaZB3hIg8yZAcuu/4IWnCmg2GmVEsaTwldWcM7DhOiF7sA8tOTcFML5XY36OPUdZGQ==} + engines: {node: '>=4'} + hasBin: true + dependencies: + cpy: 4.0.1 + meow: 3.7.0 + dev: true + + /cpy/4.0.1: + resolution: {integrity: sha512-Lt5k8rObSQnmJa9bOAVflYaC8TpjQXkgcONlREuu55QZBPBJ+G261faRfcUnYKvxqGarsZC8O7IRo8swHzS6Kw==} + engines: {node: '>=0.10.0'} + dependencies: + cp-file: 3.2.0 + globby: 4.1.0 + meow: 3.7.0 + nested-error-stacks: 1.0.2 + object-assign: 4.1.1 + pinkie-promise: 2.0.1 + dev: true + + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: false + + /crc/3.5.0: + resolution: {integrity: sha512-3gEeEBQFvhKTyehoy0niaItHrfeB1uSuFgpYfdYfPp2fERRtPOynwycZ2+6IzR9Gl3dJ+B7pl0BY3Mex6ep78Q==} + dev: false + + /create-ecdh/4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + dev: true + + /create-hash/1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + dev: true + + /create-hmac/1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + + /create-require/1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /credit-card-regex/3.0.0: + resolution: {integrity: sha512-OVaLug6p8GESFuwzcp4Q8q27sqICm2uvT46wSR4mo4zOxUKd8OilkvaC8oy52xlrCS1lw2y0gOOc2/WzCOyMDA==} + engines: {node: '>=8'} + dev: false + + /credit-card-type/9.1.0: + resolution: {integrity: sha512-CpNFuLxiPFxuZqhSKml3M+t0K/484pMAnfYWH14JoD7OZMnmC0Lmo+P7JX9SobqFpRoo7ifA18kOHdxJywYPEA==} + dev: false + + /cron-parser/4.9.0: + resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} + engines: {node: '>=12.0.0'} + dependencies: + luxon: 3.4.3 + dev: false + + /cron-validate/1.4.5: + resolution: {integrity: sha512-nKlOJEnYKudMn/aNyNH8xxWczlfpaazfWV32Pcx/2St51r2bxWbGhZD7uwzMcRhunA/ZNL+Htm/i0792Z59UMQ==} + dependencies: + yup: 0.32.9 + dev: false + + /cross-env/3.2.4: + resolution: {integrity: sha512-T8AFEAiuJ0w53ou6rnu3Fipaiu1W6ZO9GYfd33uxe1kAIiXM0fD8QnIm7orcJBOt7WQC5Ply63E7WZW/jSM+FA==} + engines: {node: '>=4.0'} + hasBin: true + dependencies: + cross-spawn: 5.1.0 + is-windows: 1.0.2 + dev: true + + /cross-spawn/5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + dependencies: + lru-cache: 4.1.5 + shebang-command: 1.2.0 + which: 1.3.1 + dev: true + + /cross-spawn/6.0.5: + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + + /cross-spawn/7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + /crypto-browserify/3.12.0: + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.1 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + inherits: 2.0.4 + pbkdf2: 3.1.2 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + dev: true + + /crypto-random-string/2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + dev: true + + /crypto-random-string/3.3.1: + resolution: {integrity: sha512-5j88ECEn6h17UePrLi6pn1JcLtAiANa3KExyr9y9Z5vo2mv56Gh3I4Aja/B9P9uyMwyxNHAHWv+nE72f30T5Dg==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.8.1 + dev: false + + /crypto-random-string/4.0.0: + resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} + engines: {node: '>=12'} + dependencies: + type-fest: 1.4.0 + dev: false + + /css-blank-pseudo/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-VbfLlOWO7sBHBTn6pwDQzc07Z0SDydgDBfNfCE0nvrehdBNv9RKsuupIRa/qal0+fBZhAALyQDPMKz5lnvcchw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /css-declaration-sorter/6.4.1_postcss@8.4.31: + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: 8.4.31 + dev: true + + /css-functions-list/3.2.0: + resolution: {integrity: sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==} + engines: {node: '>=12.22'} + dev: true + + /css-has-pseudo/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-X+r+JBuoO37FBOWVNhVJhxtSBUFHgHbrcc0CjFT28JEdOw1qaDwABv/uunyodUuSy2hMPe9j/HjssxSlvUmKjg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/selector-specificity': 3.0.0_c3vcbepomgmxc74cgtawpgpkyi + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + dev: true + + /css-prefers-color-scheme/9.0.0_postcss@8.4.31: + resolution: {integrity: sha512-03QGAk/FXIRseDdLb7XAiu6gidQ0Nd8945xuM7VFVPpc6goJsG9uIO8xQjTxwbPdPIIV4o4AJoOJyt8gwDl67g==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + dev: true + + /css-select-base-adapter/0.1.1: + resolution: {integrity: sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==} + dev: true + optional: true + + /css-select/2.1.0: + resolution: {integrity: sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==} + dependencies: + boolbase: 1.0.0 + css-what: 3.4.2 + domutils: 1.7.0 + nth-check: 1.0.2 + dev: true + optional: true + + /css-select/4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + dev: false + + /css-select/5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + + /css-selector-parser/1.4.1: + resolution: {integrity: sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==} + dev: true + + /css-tree/1.0.0-alpha.37: + resolution: {integrity: sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.4 + source-map: 0.6.1 + dev: true + optional: true + + /css-tree/1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: true + optional: true + + /css-tree/2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.0.2 + dev: true + + /css-tree/2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.0.2 + dev: true + + /css-what/3.4.2: + resolution: {integrity: sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==} + engines: {node: '>= 6'} + dev: true + optional: true + + /css-what/6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + /css/3.0.0: + resolution: {integrity: sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==} + dependencies: + inherits: 2.0.4 + source-map: 0.6.1 + source-map-resolve: 0.6.0 + dev: true + + /cssdb/7.8.0: + resolution: {integrity: sha512-SkeezZOQr5AHt9MgJgSFNyiuJwg1p8AwoVln6JwaQJsyxduRW9QJ+HP/gAQzbsz8SIqINtYvpJKjxTRI67zxLg==} + dev: true + + /cssesc/3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /cssnano-preset-default/6.0.1_postcss@8.4.31: + resolution: {integrity: sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-declaration-sorter: 6.4.1_postcss@8.4.31 + cssnano-utils: 4.0.0_postcss@8.4.31 + postcss: 8.4.31 + postcss-calc: 9.0.1_postcss@8.4.31 + postcss-colormin: 6.0.0_postcss@8.4.31 + postcss-convert-values: 6.0.0_postcss@8.4.31 + postcss-discard-comments: 6.0.0_postcss@8.4.31 + postcss-discard-duplicates: 6.0.0_postcss@8.4.31 + postcss-discard-empty: 6.0.0_postcss@8.4.31 + postcss-discard-overridden: 6.0.0_postcss@8.4.31 + postcss-merge-longhand: 6.0.0_postcss@8.4.31 + postcss-merge-rules: 6.0.1_postcss@8.4.31 + postcss-minify-font-values: 6.0.0_postcss@8.4.31 + postcss-minify-gradients: 6.0.0_postcss@8.4.31 + postcss-minify-params: 6.0.0_postcss@8.4.31 + postcss-minify-selectors: 6.0.0_postcss@8.4.31 + postcss-normalize-charset: 6.0.0_postcss@8.4.31 + postcss-normalize-display-values: 6.0.0_postcss@8.4.31 + postcss-normalize-positions: 6.0.0_postcss@8.4.31 + postcss-normalize-repeat-style: 6.0.0_postcss@8.4.31 + postcss-normalize-string: 6.0.0_postcss@8.4.31 + postcss-normalize-timing-functions: 6.0.0_postcss@8.4.31 + postcss-normalize-unicode: 6.0.0_postcss@8.4.31 + postcss-normalize-url: 6.0.0_postcss@8.4.31 + postcss-normalize-whitespace: 6.0.0_postcss@8.4.31 + postcss-ordered-values: 6.0.0_postcss@8.4.31 + postcss-reduce-initial: 6.0.0_postcss@8.4.31 + postcss-reduce-transforms: 6.0.0_postcss@8.4.31 + postcss-svgo: 6.0.0_postcss@8.4.31 + postcss-unique-selectors: 6.0.0_postcss@8.4.31 + dev: true + + /cssnano-utils/4.0.0_postcss@8.4.31: + resolution: {integrity: sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + dev: true + + /cssnano/6.0.1_postcss@8.4.31: + resolution: {integrity: sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-preset-default: 6.0.1_postcss@8.4.31 + lilconfig: 2.1.0 + postcss: 8.4.31 + dev: true + + /csso/4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.3 + dev: true + optional: true + + /csso/5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + css-tree: 2.2.1 + dev: true + + /cssom/0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + dev: false + + /cssom/0.4.4: + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + dev: false + + /cssstyle/2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + dependencies: + cssom: 0.3.8 + dev: false + + /csv-generate/4.3.0: + resolution: {integrity: sha512-7KdVId/2RgwPIKfWHaHtjBq7I9mgdi8ICzsUyIhP8is6UwpwVGGSC/aPnrZ8/SkgBcCP20lXrdPuP64Irs1VBg==} + dev: false + + /csv-parse/5.5.2: + resolution: {integrity: sha512-YRVtvdtUNXZCMyK5zd5Wty1W6dNTpGKdqQd4EQ8tl/c6KW1aMBB1Kg1ppky5FONKmEqGJ/8WjLlTNLPne4ioVA==} + dev: false + + /csv-stringify/6.4.4: + resolution: {integrity: sha512-NDshLupGa7gp4UG4sSNIqwYJqgSwvds0SvENntxoVoVvTzXcrHvd5gG2MWpbRpSNvk59dlmIe1IwNvSxN4IVmg==} + dev: false + + /csv/6.3.5: + resolution: {integrity: sha512-Y+KTCAUljtq2JaGP42ZL1bymqlU5BkfnFpZhxRczGFDZox2VXhlRHnG5DRshyUrwQzmCdEiLjSqNldCfm1OVCA==} + engines: {node: '>= 0.1.90'} + dependencies: + csv-generate: 4.3.0 + csv-parse: 5.5.2 + csv-stringify: 6.4.4 + stream-transform: 3.2.10 + dev: false + + /cuid/2.1.8: + resolution: {integrity: sha512-xiEMER6E7TlTPnDxrM4eRiC6TRgjNX9xzEZ5U/Se2YJKr7Mq4pJn/2XEHjl3STcSh96GmkHPcBXLES8M29wyyg==} + deprecated: Cuid and other k-sortable and non-cryptographic ids (Ulid, ObjectId, KSUID, all UUIDs) are all insecure. Use @paralleldrive/cuid2 instead. + dev: false + + /currency-codes/2.1.0: + resolution: {integrity: sha512-aASwFNP8VjZ0y0PWlSW7c9N/isYTLxK6OCbm7aVuQMk7dWO2zgup9KGiFQgeL9OGL5P/ulvCHcjQizmuEeZXtw==} + dependencies: + first-match: 0.0.1 + nub: 0.0.0 + dev: false + + /currency-symbol-map/5.1.0: + resolution: {integrity: sha512-LO/lzYRw134LMDVnLyAf1dHE5tyO6axEFkR3TXjQIOmMkAM9YL6QsiUwuXzZAmFnuDJcs4hayOgyIYtViXFrLw==} + dev: false + + /currently-unhandled/0.4.1: + resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} + engines: {node: '>=0.10.0'} + dependencies: + array-find-index: 1.0.2 + dev: true + + /custom-error-instance/2.1.1: + resolution: {integrity: sha512-p6JFxJc3M4OTD2li2qaHkDCw9SfMw82Ldr6OC9Je1aXiGfhx2W8p3GaoeaGrPJTUN9NirTM/KTxHWMUdR1rsUg==} + dev: false + + /custom-fonts-in-emails/5.0.3: + resolution: {integrity: sha512-JfCGcl0RTlpn5PioBpw9AOia8nPO/2BPMmrcKi6meklgoRN3faEnijzHEtok/q8BwDYXRfILXCABVVAtrRNi6Q==} + engines: {node: '>= 14'} + dependencies: + cheerio: 1.0.0-rc.12 + debug: 4.3.4 + fast-levenshtein: 3.0.0 + fast-safe-stringify: 2.1.1 + is-string-and-not-blank: 0.0.2 + lodash: 4.17.21 + os-fonts: 0.5.0 + pkg-dir: 5.0.0 + rev-hash: 3.0.0 + sharp: 0.32.6 + text-to-svg: 3.1.5 + universalify: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /d/1.0.1: + resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} + dependencies: + es5-ext: 0.10.62 + type: 1.2.0 + + /dargs/7.0.0: + resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} + engines: {node: '>=8'} + dev: true + + /dash-ast/1.0.0: + resolution: {integrity: sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==} + dev: true + + /dashdash/1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + dependencies: + assert-plus: 1.0.0 + dev: false + + /dasherize/2.0.0: + resolution: {integrity: sha512-APql/TZ6FdLEpf2z7/X2a2zyqK8juYtqaSVqxw9mYoQ64CXkfU15AeLh8pUszT8+fnYjgm6t0aIYpWKJbnLkuA==} + dev: false + + /dashify/2.0.0: + resolution: {integrity: sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A==} + engines: {node: '>=4'} + dev: false + + /data-urls/2.0.0: + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + engines: {node: '>=10'} + dependencies: + abab: 2.0.6 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + dev: false + + /date-fns/1.30.1: + resolution: {integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==} + dev: true + + /date-time/3.1.0: + resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} + engines: {node: '>=6'} + dependencies: + time-zone: 1.0.0 + dev: true + + /dayjs-with-plugins/1.0.3_dayjs@1.11.10: + resolution: {integrity: sha512-l0LbJ/5f/pXzj0HQhAnz5pchkU3DC7YIw+oHYxzKmhVHynmDuSm7HHZbmPEyNs2X9a8IyH00cTMhfUdTXQL/uA==} + engines: {node: '>=14'} + peerDependencies: + dayjs: '*' + dependencies: + dayjs: 1.11.10 + dev: false + + /dayjs/1.11.10: + resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + dev: false + + /debug-fabulous/1.1.0: + resolution: {integrity: sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==} + dependencies: + debug: 3.2.7 + memoizee: 0.4.15 + object-assign: 4.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + + /debug/3.1.0: + resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + + /debug/3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug/3.2.7_supports-color@5.5.0: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + supports-color: 5.5.0 + dev: true + + /debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /decamelize-keys/1.1.1: + resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} + engines: {node: '>=0.10.0'} + dependencies: + decamelize: 1.2.0 + map-obj: 1.0.1 + dev: true + + /decamelize/1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + /decamelize/2.0.0: + resolution: {integrity: sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==} + engines: {node: '>=4'} + dependencies: + xregexp: 4.0.0 + dev: false + + /decamelize/5.0.1: + resolution: {integrity: sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==} + engines: {node: '>=10'} + dev: true + + /decamelize/6.0.0: + resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /decimal.js/10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + dev: false + + /decode-named-character-reference/1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dependencies: + character-entities: 2.0.2 + dev: true + + /decode-uri-component/0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: true + + /decompress-response/3.3.0: + resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} + engines: {node: '>=4'} + dependencies: + mimic-response: 1.0.1 + dev: true + + /decompress-response/6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dependencies: + mimic-response: 3.1.0 + + /decompress-tar/4.1.1: + resolution: {integrity: sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==} + engines: {node: '>=4'} + dependencies: + file-type: 5.2.0 + is-stream: 1.1.0 + tar-stream: 1.6.2 + dev: true + + /decompress-tarbz2/4.1.1: + resolution: {integrity: sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==} + engines: {node: '>=4'} + dependencies: + decompress-tar: 4.1.1 + file-type: 6.2.0 + is-stream: 1.1.0 + seek-bzip: 1.0.6 + unbzip2-stream: 1.4.3 + dev: true + + /decompress-targz/4.1.1: + resolution: {integrity: sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==} + engines: {node: '>=4'} + dependencies: + decompress-tar: 4.1.1 + file-type: 5.2.0 + is-stream: 1.1.0 + dev: true + + /decompress-unzip/4.0.1: + resolution: {integrity: sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==} + engines: {node: '>=4'} + dependencies: + file-type: 3.9.0 + get-stream: 2.3.1 + pify: 2.3.0 + yauzl: 2.10.0 + dev: true + + /decompress/4.2.1: + resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==} + engines: {node: '>=4'} + dependencies: + decompress-tar: 4.1.1 + decompress-tarbz2: 4.1.1 + decompress-targz: 4.1.1 + decompress-unzip: 4.0.1 + graceful-fs: 4.2.11 + make-dir: 1.3.0 + pify: 2.3.0 + strip-dirs: 2.1.0 + dev: true + + /dedent/0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + dev: false + + /deep-equal/1.0.1: + resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} + dev: false + + /deep-extend/0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + /deep-strict-equal/0.2.0: + resolution: {integrity: sha512-3daSWyvZ/zwJvuMGlzG1O+Ow0YSadGfb3jsh9xoCutv2tWyB9dA4YvR9L9/fSdDZa2dByYQe+TqapSGUrjnkoA==} + engines: {node: '>=0.10.0'} + dependencies: + core-assert: 0.2.1 + dev: true + + /deepmerge/4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: false + + /default-compare/1.0.0: + resolution: {integrity: sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 5.1.0 + dev: true + + /default-require-extensions/3.0.1: + resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==} + engines: {node: '>=8'} + dependencies: + strip-bom: 4.0.0 + dev: true + + /default-resolution/2.0.0: + resolution: {integrity: sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==} + engines: {node: '>= 0.10'} + dev: true + + /defer-to-connect/1.1.3: + resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} + dev: true + + /defer-to-connect/2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + /define-data-property/1.1.0: + resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + gopd: 1.0.1 + has-property-descriptors: 1.0.0 + dev: true + + /define-lazy-prop/2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: true + + /define-lazy-prop/3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + dev: true + + /define-properties/1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.0 + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: true + + /define-property/0.2.5: + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 0.1.6 + dev: true + + /define-property/1.0.0: + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.2 + dev: true + + /define-property/2.0.2: + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.2 + isobject: 3.0.1 + dev: true + + /defined/0.0.0: + resolution: {integrity: sha512-zpqiCT8bODLu3QSmLLic8xJnYWBFjOSu/fBCm189oAiTtPq/PSanNACKZDS7kgSyCJY7P+IcODzlIogBK/9RBg==} + dev: true + + /defined/1.0.1: + resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} + dev: true + + /del/6.1.1: + resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} + engines: {node: '>=10'} + dependencies: + globby: 11.1.0 + graceful-fs: 4.2.11 + is-glob: 4.0.3 + is-path-cwd: 2.2.0 + is-path-inside: 3.0.3 + p-map: 4.0.0 + rimraf: 3.0.2 + slash: 3.0.0 + dev: true + + /delay/5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + dev: false + + /delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + /delegate/3.2.0: + resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==} + dev: false + + /delegates/1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + /denque/1.5.1: + resolution: {integrity: sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==} + engines: {node: '>=0.10'} + dev: false + + /denque/2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} + + /depd/1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + dev: false + + /depd/2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false + + /deprecation/2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + dev: false + + /deps-sort/2.0.1: + resolution: {integrity: sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==} + hasBin: true + dependencies: + JSONStream: 1.3.5 + shasum-object: 1.0.0 + subarg: 1.0.0 + through2: 2.0.5 + dev: true + + /deps-topo-sort/0.2.1: + resolution: {integrity: sha512-I0M1G/coBKGpA6OlrZyHKyq6d2jOQtm7HmjkJwLhlmZBgw17dUA9zf0mb5IowrhaJAAkEs37v3YDb9JKC7OH9w==} + dependencies: + JSONStream: 0.7.4 + minimist: 0.0.5 + through: 2.3.8 + dev: true + + /dequal/2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: true + + /des.js/1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + + /destroy/1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false + + /detect-file/1.0.0: + resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} + engines: {node: '>=0.10.0'} + dev: true + + /detect-indent/6.1.0: + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + engines: {node: '>=8'} + + /detect-libc/2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + engines: {node: '>=8'} + dev: false + + /detect-newline/2.1.0: + resolution: {integrity: sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==} + engines: {node: '>=0.10.0'} + dev: true + + /detect-newline/3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + /detect-node/2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: false + + /detective/5.2.1: + resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} + engines: {node: '>=0.8.0'} + hasBin: true + dependencies: + acorn-node: 1.8.2 + defined: 1.0.1 + minimist: 1.2.8 + dev: true + + /dezalgo/1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + + /diff/4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /diff/5.1.0: + resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} + engines: {node: '>=0.3.1'} + dev: true + + /diffie-hellman/5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + dependencies: + bn.js: 4.12.0 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + dev: true + + /dijkstrajs/1.0.3: + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + dev: false + + /dir-glob/2.2.2: + resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==} + engines: {node: '>=4'} + dependencies: + path-type: 3.0.0 + dev: true + + /dir-glob/3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + + /discontinuous-range/1.0.0: + resolution: {integrity: sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==} + dev: false + + /display-notification/2.0.0: + resolution: {integrity: sha512-TdmtlAcdqy1NU+j7zlkDdMnCL878zriLaBmoD9quOoq1ySSSGv03l0hXK5CvIFZlIfFI/hizqdQuW+Num7xuhw==} + engines: {node: '>=4'} + dependencies: + escape-string-applescript: 1.0.0 + run-applescript: 3.2.0 + dev: false + + /dns-packet/5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} + dependencies: + '@leichtgewicht/ip-codec': 2.0.4 + dev: false + + /dnscache/1.0.2: + resolution: {integrity: sha512-2FFKzmLGOnD+Y378bRKH+gTjRMuSpH7OKgPy31KjjfCoKZx7tU8Dmqfd/3fhG2d/4bppuN8/KtWMUZBAcUCRnQ==} + dependencies: + asap: 2.0.6 + lodash.clone: 4.5.0 + dev: false + + /doctrine/2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine/3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctypes/1.1.0: + resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} + dev: false + + /dohdec/5.0.3: + resolution: {integrity: sha512-ElCHZkoCnX25jwwAoUGV+b88niuLamU6Mp1xAGZtU0T0NTlV5ghC7On8UnI+4R0v9x5XWasZnmQJhC/Bs1FEUw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + crypto-random-string: 4.0.0 + dns-packet: 5.6.1 + got: 11.8.6 + ip: 1.1.8 + nofilter: 3.1.0 + dev: false + + /dom-serializer/0.2.2: + resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==} + dependencies: + domelementtype: 2.3.0 + entities: 2.2.0 + dev: true + optional: true + + /dom-serializer/1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + dev: false + + /dom-serializer/2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + /domain-browser/1.2.0: + resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} + engines: {node: '>=0.4', npm: '>=1.2'} + dev: true + + /domelementtype/1.3.1: + resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==} + dev: true + optional: true + + /domelementtype/2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + /domexception/2.0.1: + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + engines: {node: '>=8'} + dependencies: + webidl-conversions: 5.0.0 + dev: false + + /domhandler/3.3.0: + resolution: {integrity: sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: false + + /domhandler/4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: false + + /domhandler/5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + + /domutils/1.7.0: + resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==} + dependencies: + dom-serializer: 0.2.2 + domelementtype: 1.3.1 + dev: true + optional: true + + /domutils/2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + dev: false + + /domutils/3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + /dont-sniff-mimetype/1.1.0: + resolution: {integrity: sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug==} + engines: {node: '>=4.0.0'} + dev: false + + /dot-prop/5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + dependencies: + is-obj: 2.0.0 + dev: true + + /dotenv-extended/2.9.0: + resolution: {integrity: sha512-MKc4WCqZj6Abx4rpDbQ9LsuBJldRLxLgFkY5qE+4JM7hXVYT/v8zyWGgnBeDjSOGzEecWOFPlosNpxfB9YnsCw==} + engines: {node: '>=6'} + hasBin: true + dependencies: + auto-parse: 1.8.0 + camelcase: 5.3.1 + cross-spawn: 7.0.3 + dotenv: 8.6.0 + dev: false + + /dotenv-parse-variables/2.0.0: + resolution: {integrity: sha512-/Tezlx6xpDqR6zKg1V4vLCeQtHWiELhWoBz5A/E0+A1lXN9iIkNbbfc4THSymS0LQUo8F1PMiIwVG8ai/HrnSA==} + engines: {node: '>= 8.3.0'} + dependencies: + debug: 4.3.4 + is-string-and-not-blank: 0.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /dotenv/8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + dev: false + + /dotgitconfig/1.1.2: + resolution: {integrity: sha512-M+nUsYHJT2qs6bnYqotmO+1IQ09w3ZwLcX4MmbblaWN9C7ydDWM2xQLv22xfl4bUxienESi1GsZnZJPb8jslqQ==} + dependencies: + ini: 1.3.8 + dev: false + + /download/6.2.5: + resolution: {integrity: sha512-DpO9K1sXAST8Cpzb7kmEhogJxymyVUd5qz/vCOSyvwtp2Klj2XcDt5YUuasgxka44SxF0q5RriKIwJmQHG2AuA==} + engines: {node: '>=4'} + dependencies: + caw: 2.0.1 + content-disposition: 0.5.4 + decompress: 4.2.1 + ext-name: 5.0.0 + file-type: 5.2.0 + filenamify: 2.1.0 + get-stream: 3.0.0 + got: 7.1.0 + make-dir: 1.3.0 + p-event: 1.3.0 + pify: 3.0.0 + dev: true + + /download/7.1.0: + resolution: {integrity: sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==} + engines: {node: '>=6'} + dependencies: + archive-type: 4.0.0 + caw: 2.0.1 + content-disposition: 0.5.4 + decompress: 4.2.1 + ext-name: 5.0.0 + file-type: 8.1.0 + filenamify: 2.1.0 + get-stream: 3.0.0 + got: 8.3.2 + make-dir: 1.3.0 + p-event: 2.3.1 + pify: 3.0.0 + dev: true + + /dtrace-provider/0.8.8: + resolution: {integrity: sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==} + engines: {node: '>=0.10'} + requiresBuild: true + dependencies: + nan: 2.18.0 + dev: false + optional: true + + /duplexer/0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + /duplexer2/0.1.4: + resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} + dependencies: + readable-stream: 2.3.8 + dev: true + + /duplexer3/0.1.5: + resolution: {integrity: sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==} + dev: true + + /duplexify/3.7.1: + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 2.3.8 + stream-shift: 1.0.1 + dev: true + + /duplexify/4.1.2: + resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.2 + stream-shift: 1.0.1 + dev: false + + /each-props/1.3.2: + resolution: {integrity: sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==} + dependencies: + is-plain-object: 2.0.4 + object.defaults: 1.1.0 + dev: true + + /eastasianwidth/0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + /ecc-jsbn/0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + dev: false + + /ecdsa-sig-formatter/1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /editorconfig/1.0.4: + resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==} + engines: {node: '>=14'} + hasBin: true + dependencies: + '@one-ini/wasm': 0.1.1 + commander: 10.0.1 + minimatch: 9.0.1 + semver: 7.5.4 + dev: false + + /ee-first/1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false + + /ejson-shell-parser/1.2.4: + resolution: {integrity: sha512-bweqlPb9ChFu25I4IOc4kevGfHhXS+r/PyFTqdLYNerB4J52UIxrvYX+4lyer0PQuWvn3WoFO/KLMbMiYo+8PA==} + peerDependencies: + bson: ^4.6.3 || ^5.0.0 + dependencies: + acorn: 8.10.0 + dev: false + + /electron-to-chromium/1.4.552: + resolution: {integrity: sha512-qMPzA5TEuOAbLFmbpNvO4qkBRe2B5dAxl6H4KxqRNy9cvBeHT2EyzecX0bumBfRhHN8cQJrx6NPd0AAoCCPKQw==} + + /elliptic/6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + + /email-addresses/5.0.0: + resolution: {integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==} + dev: false + + /email-regex-safe/1.0.2: + resolution: {integrity: sha512-bmei2fFsOAJltBkNkcfxGCswLEo38H9ie3owb3DOZS823G/cgRpihpTolWfOjq3RYHyRll+AcBwGtVyjGaRydA==} + engines: {node: '>= 10.12.0'} + dependencies: + ip-regex: 4.3.0 + re2: 1.20.3 + tlds: 1.242.0 + transitivePeerDependencies: + - supports-color + dev: false + + /email-regex-safe/4.0.0_re2@1.20.3: + resolution: {integrity: sha512-980dxwVA40RJNkM8vNdl1cTbc3Gnwbr817EBD9h5x0Z/jMbkHTho8ZFm3JdFZAyV3uUP7vSjcLpZUBFbmoHj9w==} + engines: {node: '>=14'} + peerDependencies: + re2: ^1.20.1 + peerDependenciesMeta: + re2: + optional: true + dependencies: + ip-regex: 4.3.0 + re2: 1.20.3 + tlds: 1.242.0 + dev: false + + /email-templates/11.1.1_h2kxvyt2qvpqxaqyxjl2vnrrki: + resolution: {integrity: sha512-MEf/KlM/FokY7Hy3MBLZI5S4lOna0a2SX0tVzKc+VWSIc5/dq19wDkRVl28RgWtKK0Dfb+Z0iqbuk2BnIRfyDg==} + engines: {node: '>=14'} + dependencies: + '@ladjs/consolidate': 1.0.3_qya2zus74w74bxmr63tupuspuq + '@ladjs/i18n': 8.0.3 + get-paths: 0.0.7 + html-to-text: 9.0.5 + juice: 9.1.0 + lodash: 4.17.21 + nodemailer: 6.9.6 + preview-email: 3.0.19 + transitivePeerDependencies: + - '@babel/core' + - arc-templates + - atpl + - bracket-template + - coffee-script + - dot + - dust + - dustjs-helpers + - dustjs-linkedin + - eco + - ect + - ejs + - encoding + - haml-coffee + - hamlet + - hamljs + - handlebars + - hogan.js + - htmling + - jazz + - jqtpl + - just + - liquid-node + - liquor + - mote + - mustache + - nunjucks + - plates + - pug + - qejs + - ractive + - react + - react-dom + - slm + - supports-color + - swig + - swig-templates + - teacup + - templayed + - then-pug + - tinyliquid + - toffee + - twig + - twing + - underscore + - vash + - velocityjs + - walrus + - whiskers + dev: false + + /emittery/1.0.1: + resolution: {integrity: sha512-2ID6FdrMD9KDLldGesP6317G78K7km/kMcwItRtVFva7I/cSEOIaLpewaUb+YLXVwdAp3Ctfxh/V5zIl1sj7dQ==} + engines: {node: '>=14.16'} + dev: true + + /emoji-patterns/14.0.1: + resolution: {integrity: sha512-Z1WWYpFs6A3Cu+sHFcFSxBfBM6slWzNL1XqdTs+bc20LwbT8pDRTXCFkMuTn57WObS8OCX3/ASlEjP8b3xyddA==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + dev: false + + /emoji-regex/7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + dev: true + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + /emoji-regex/9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + /emoticon/3.2.0: + resolution: {integrity: sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==} + dev: false + + /encode-utf8/1.0.3: + resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} + dev: false + + /encodeurl/1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: false + + /encoding-japanese/2.0.0: + resolution: {integrity: sha512-++P0RhebUC8MJAwJOsT93dT+5oc5oPImp1HubZpAuCZ5kTLnhuuBhKHj2jJeO/Gj93idPBWmIuQ9QWMe5rX3pQ==} + engines: {node: '>=8.10.0'} + dev: false + + /encoding/0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + requiresBuild: true + dependencies: + iconv-lite: 0.6.3 + optional: true + + /end-of-stream/1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + + /enhance-visitors/1.0.0: + resolution: {integrity: sha512-+29eJLiUixTEDRaZ35Vu8jP3gPLNcQQkQkOQjLp2X+6cZGGPDD/uasbFzvLsJKnGZnvmyZ0srxudwOtskHeIDA==} + engines: {node: '>=4.0.0'} + dependencies: + lodash: 4.17.21 + dev: true + + /enhanced-resolve/0.9.1: + resolution: {integrity: sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw==} + engines: {node: '>=0.6'} + dependencies: + graceful-fs: 4.2.11 + memory-fs: 0.2.0 + tapable: 0.1.10 + dev: true + + /enquirer/2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + dev: true + + /ent/2.2.0: + resolution: {integrity: sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==} + dev: false + + /entities/2.1.0: + resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==} + dev: false + + /entities/2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + /entities/3.0.1: + resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} + engines: {node: '>=0.12'} + dev: false + + /entities/4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + /env-editor/0.4.2: + resolution: {integrity: sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==} + engines: {node: '>=8'} + dev: true + + /env-editor/1.1.0: + resolution: {integrity: sha512-7AXskzN6T7Q9TFcKAGJprUbpQa4i1VsAetO9rdBqbGMGlragTziBgWt4pVYJMBWHQlLoX0buy6WFikzPH4Qjpw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /env-paths/2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + /err-code/2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + + /error-ex/1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + + /error-stack-parser/2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + dependencies: + stackframe: 1.3.4 + dev: false + + /error/7.2.1: + resolution: {integrity: sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==} + dependencies: + string-template: 0.2.1 + dev: true + + /es-abstract/1.22.2: + resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.2 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.1 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.4 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.12 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.0.1 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.11 + dev: true + + /es-array-method-boxes-properly/1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: true + optional: true + + /es-set-tostringtag/2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.4 + has-tostringtag: 1.0.0 + dev: true + + /es-shim-unscopables/1.0.0: + resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} + dependencies: + has: 1.0.4 + dev: true + + /es-to-primitive/1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /es5-ext/0.10.62: + resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} + engines: {node: '>=0.10'} + requiresBuild: true + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.3 + next-tick: 1.1.0 + + /es6-error/4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + dev: true + + /es6-iterator/2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-symbol: 3.1.3 + + /es6-symbol/3.1.3: + resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} + dependencies: + d: 1.0.1 + ext: 1.7.0 + + /es6-weak-map/2.0.3: + resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-iterator: 2.0.3 + es6-symbol: 3.1.3 + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + /escape-goat/2.1.1: + resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} + engines: {node: '>=8'} + dev: true + + /escape-goat/3.0.0: + resolution: {integrity: sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==} + engines: {node: '>=10'} + dev: false + + /escape-html/1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false + + /escape-regexp-component/1.0.2: + resolution: {integrity: sha512-B0yxafj1D1ZTNEHkFoQxz4iboZSfaZHhaNhIug7GcUCL4ZUrVSJZTmWUAkPOFaYDfi3RNT9XM082TuGE6jpmiQ==} + dev: false + + /escape-string-applescript/1.0.0: + resolution: {integrity: sha512-4/hFwoYaC6TkpDn9A3pTC52zQPArFeXuIfhUtCGYdauTzXVP9H3BDr3oO/QzQehMpLDC7srvYgfwvImPFGfvBA==} + engines: {node: '>=0.10.0'} + dev: false + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + /escape-string-regexp/2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + /escape-string-regexp/4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + /escape-string-regexp/5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: true + + /escodegen/1.14.3: + resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} + engines: {node: '>=4.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 4.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + dev: false + + /escodegen/2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + /eslint-ast-utils/1.1.0: + resolution: {integrity: sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA==} + engines: {node: '>=4'} + dependencies: + lodash.get: 4.4.2 + lodash.zip: 4.2.0 + dev: true + + /eslint-config-prettier/6.15.0_eslint@7.32.0: + resolution: {integrity: sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==} + hasBin: true + peerDependencies: + eslint: '>=3.14.1' + dependencies: + eslint: 7.32.0 + get-stdin: 6.0.0 + dev: true + + /eslint-config-prettier/8.10.0_eslint@8.39.0: + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.39.0 + dev: true + + /eslint-config-xo-lass/2.0.1: + resolution: {integrity: sha512-2/le9wuZS5aNtg2lBnp/PFdbhS9ZtZUkfz2/3vc37fEcOs4qepzs0BxAcryyDsRSpghLE7tuECI5yS6oSL6orA==} + engines: {node: '>=14'} + dev: true + + /eslint-config-xo-typescript/0.31.0_34xjnqsmiyuesb5kdsccjw74za: + resolution: {integrity: sha512-zxfUdKscsdrZTI5Uz9ZqAAR+W6fuH+DiQnTRRJAwLZaKJemT3hzH0DtIxNhB9t5fxKMwZYNYw2lvW4aWrSMbag==} + engines: {node: '>=10'} + peerDependencies: + '@typescript-eslint/eslint-plugin': '>=3.0.1' + eslint: '>=6.6.0' + typescript: '>=3.6.0' + dependencies: + '@typescript-eslint/eslint-plugin': 3.10.1_kxujzhw6vbtdri44htsqryf25e + eslint: 7.32.0 + typescript: 3.9.10 + dev: true + + /eslint-config-xo-typescript/0.55.1_j6kuwa4zcmwmqm3puagi6f2ey4: + resolution: {integrity: sha512-iXua+7n9fOp7LzGzvXlcZG0w6cdtscjASGTrAHMj0Rn9voayxF2oRoMIK1QS6ZJb4fMVEQZdU2D6gTKmWhcCQQ==} + engines: {node: '>=12'} + peerDependencies: + '@typescript-eslint/eslint-plugin': '>=5.43.0' + '@typescript-eslint/parser': '>=5.43.0' + eslint: '>=8.0.0' + typescript: '>=4.4' + dependencies: + '@typescript-eslint/eslint-plugin': 5.62.0_tv6iquvmznxcojjmmfwa2noq2a + '@typescript-eslint/parser': 5.62.0_tbtvr3a5zwdiktqy4vlmx63mqq + eslint: 8.39.0 + typescript: 4.9.5 + dev: true + + /eslint-config-xo/0.30.0_eslint@7.32.0: + resolution: {integrity: sha512-0C+Hl1Mfrbh+LMc2A2v2BabI+n0MoVHYyGJOJoWped/Tfh/OoyZ7gLyed5vLqVR4czjR8Zi7DGW2S1nTGKUY4w==} + engines: {node: '>=10'} + peerDependencies: + eslint: '>=7' + dependencies: + confusing-browser-globals: 1.0.9 + eslint: 7.32.0 + dev: true + + /eslint-config-xo/0.43.1_eslint@8.39.0: + resolution: {integrity: sha512-azv1L2PysRA0NkZOgbndUpN+581L7wPqkgJOgxxw3hxwXAbJgD6Hqb/SjHRiACifXt/AvxCzE/jIKFAlI7XjvQ==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=8.27.0' + dependencies: + confusing-browser-globals: 1.0.11 + eslint: 8.39.0 + dev: true + + /eslint-formatter-pretty/3.0.1: + resolution: {integrity: sha512-hhQ/ASD4i6BAEalcEfUxesFtJFftT8xFsimCzUpPbTzygJ4J17yCGcJ3XKCB2g7XTJTv0pi7rVTadfHVmtfSRA==} + engines: {node: '>=8'} + dependencies: + ansi-escapes: 4.3.2 + chalk: 3.0.0 + eslint-rule-docs: 1.1.235 + log-symbols: 3.0.0 + plur: 3.1.1 + string-width: 4.2.3 + supports-hyperlinks: 2.3.0 + dev: true + + /eslint-formatter-pretty/4.1.0: + resolution: {integrity: sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==} + engines: {node: '>=10'} + dependencies: + '@types/eslint': 7.29.0 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + eslint-rule-docs: 1.1.235 + log-symbols: 4.1.0 + plur: 4.0.0 + string-width: 4.2.3 + supports-hyperlinks: 2.3.0 + dev: true + + /eslint-formatter-pretty/5.0.0: + resolution: {integrity: sha512-Uick451FoL22/wXqyScX3inW8ZlD/GQO7eFXj3bqb6N/ZtuuF00/CwSNIKLbFCJPrX5V4EdQBSgJ/UVnmLRnug==} + engines: {node: '>=14.16'} + dependencies: + '@types/eslint': 8.44.4 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + eslint-rule-docs: 1.1.235 + log-symbols: 4.1.0 + plur: 4.0.0 + string-width: 4.2.3 + supports-hyperlinks: 2.3.0 + dev: true + + /eslint-import-resolver-node/0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.0 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-webpack/0.12.2_fkfqfehjtk7sk2efaqbgxsuasa: + resolution: {integrity: sha512-7Jnm4YAoNNkvqPaZkKdIHsKGmv8/uNnYC5QsXkiSodvX4XEEfH2AKOna98FK52fCDXm3q4HzuX+7pRMKkJ64EQ==} + peerDependencies: + eslint-plugin-import: '>=1.4.0' + webpack: '>=1.11.0' + dependencies: + array-find: 1.0.0 + debug: 2.6.9 + enhanced-resolve: 0.9.1 + eslint-plugin-import: 2.26.0_3drlt33blcu46hm625odp62gvi + find-root: 1.1.0 + has: 1.0.4 + interpret: 1.4.0 + lodash: 4.17.21 + node-libs-browser: 2.2.1 + resolve: 1.22.8 + semver: 5.7.2 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-import-resolver-webpack/0.13.7_fkfqfehjtk7sk2efaqbgxsuasa: + resolution: {integrity: sha512-2a+meyMeABBRO4K53Oj1ygkmt5lhQS79Lmx2f684Qnv6gjvD4RLOM5jfPGTXwQ0A2K03WSoKt3HRQu/uBgxF7w==} + engines: {node: '>= 6'} + peerDependencies: + eslint-plugin-import: '>=1.4.0' + webpack: '>=1.11.0' + dependencies: + array.prototype.find: 2.2.2 + debug: 3.2.7 + enhanced-resolve: 0.9.1 + eslint-plugin-import: 2.26.0_y5plzmilioovo3zlgjas7uzrue + find-root: 1.1.0 + has: 1.0.4 + interpret: 1.4.0 + is-core-module: 2.13.0 + is-regex: 1.1.4 + lodash: 4.17.21 + resolve: 2.0.0-next.5 + semver: 5.7.2 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils/2.8.0_7gxif5y36tqnooigbzfstig3lu: + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 3.10.1_2de3j2mqba4wgeuiaqz2k7syrm + debug: 3.2.7 + eslint: 7.32.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-webpack: 0.12.2_fkfqfehjtk7sk2efaqbgxsuasa + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils/2.8.0_il67kdjdgzodpuulcx6f7dgtgy: + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0_tbtvr3a5zwdiktqy4vlmx63mqq + debug: 3.2.7 + eslint: 8.39.0 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-webpack: 0.13.7_fkfqfehjtk7sk2efaqbgxsuasa + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-ava/10.5.0_eslint@7.32.0: + resolution: {integrity: sha512-2I0Ze8ZtwbSlLdnzms4bsa6PxxOxGMIJ9d4yy7aRy3yc5zEO2wHJLic8l3Lrct73hb5ML+PLt5VRqvdV87xWdQ==} + engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} + peerDependencies: + eslint: '>=6.2.0' + dependencies: + deep-strict-equal: 0.2.0 + enhance-visitors: 1.0.0 + eslint: 7.32.0 + espree: 7.3.1 + espurify: 2.1.1 + import-modules: 2.1.0 + micro-spelling-correcter: 1.1.1 + pkg-dir: 4.2.0 + resolve-from: 5.0.0 + dev: true + + /eslint-plugin-ava/13.2.0_eslint@8.39.0: + resolution: {integrity: sha512-i5B5izsEdERKQLruk1nIWzTTE7C26/ju8qQf7JeyRv32XT2lRMW0zMFZNhIrEf5/5VvpSz2rqrV7UcjClGbKsw==} + engines: {node: '>=12.22 <13 || >=14.17 <15 || >=16.4'} + peerDependencies: + eslint: '>=7.22.0' + dependencies: + enhance-visitors: 1.0.0 + eslint: 8.39.0 + eslint-utils: 3.0.0_eslint@8.39.0 + espree: 9.6.1 + espurify: 2.1.1 + import-modules: 2.1.0 + micro-spelling-correcter: 1.1.1 + pkg-dir: 5.0.0 + resolve-from: 5.0.0 + dev: true + + /eslint-plugin-compat/4.2.0_eslint@8.39.0: + resolution: {integrity: sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==} + engines: {node: '>=14.x'} + peerDependencies: + eslint: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@mdn/browser-compat-data': 5.3.22 + ast-metadata-inferer: 0.8.0 + browserslist: 4.22.1 + caniuse-lite: 1.0.30001547 + eslint: 8.39.0 + find-up: 5.0.0 + lodash.memoize: 4.1.2 + semver: 7.5.4 + dev: true + + /eslint-plugin-es/3.0.1_eslint@7.32.0: + resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + eslint: 7.32.0 + eslint-utils: 2.1.0 + regexpp: 3.2.0 + dev: true + + /eslint-plugin-es/4.1.0_eslint@8.39.0: + resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + eslint: 8.39.0 + eslint-utils: 2.1.0 + regexpp: 3.2.0 + dev: true + + /eslint-plugin-eslint-comments/3.2.0_eslint@7.32.0: + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + escape-string-regexp: 1.0.5 + eslint: 7.32.0 + ignore: 5.2.4 + dev: true + + /eslint-plugin-eslint-comments/3.2.0_eslint@8.39.0: + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' + dependencies: + escape-string-regexp: 1.0.5 + eslint: 8.39.0 + ignore: 5.2.4 + dev: true + + /eslint-plugin-import/2.26.0_3drlt33blcu46hm625odp62gvi: + resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 3.10.1_2de3j2mqba4wgeuiaqz2k7syrm + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 + debug: 2.6.9 + doctrine: 2.1.0 + eslint: 7.32.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0_7gxif5y36tqnooigbzfstig3lu + has: 1.0.4 + is-core-module: 2.13.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.7 + resolve: 1.22.8 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-import/2.26.0_y5plzmilioovo3zlgjas7uzrue: + resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 5.62.0_tbtvr3a5zwdiktqy4vlmx63mqq + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 + debug: 2.6.9 + doctrine: 2.1.0 + eslint: 8.39.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0_il67kdjdgzodpuulcx6f7dgtgy + has: 1.0.4 + is-core-module: 2.13.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.7 + resolve: 1.22.8 + tsconfig-paths: 3.14.2 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-n/15.7.0_eslint@8.39.0: + resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} + engines: {node: '>=12.22.0'} + peerDependencies: + eslint: '>=7.0.0' + dependencies: + builtins: 5.0.1 + eslint: 8.39.0 + eslint-plugin-es: 4.1.0_eslint@8.39.0 + eslint-utils: 3.0.0_eslint@8.39.0 + ignore: 5.2.4 + is-core-module: 2.13.0 + minimatch: 3.1.2 + resolve: 1.22.8 + semver: 7.5.4 + dev: true + + /eslint-plugin-no-smart-quotes/1.3.0: + resolution: {integrity: sha512-4MuoKLIC9OwNyDdqe5Vx2VAcavyWMnUBzHXV2twEamjVzcRluTNkEwJ0RapTPR84mqlGRjauGqdKatULHyN9Ww==} + engines: {node: '>=0.10.0'} + peerDependencies: + vue-eslint-parser: ^8.0.0 + peerDependenciesMeta: + vue-eslint-parser: + optional: true + dependencies: + requireindex: 1.2.0 + string.prototype.matchall: 4.0.10 + dev: true + + /eslint-plugin-no-use-extend-native/0.5.0: + resolution: {integrity: sha512-dBNjs8hor8rJgeXLH4HTut5eD3RGWf9JUsadIfuL7UosVQ/dnvOKwxEcRrXrFxrMZ8llUVWT+hOimxJABsAUzQ==} + engines: {node: '>=6.0.0'} + dependencies: + is-get-set-prop: 1.0.0 + is-js-type: 2.0.0 + is-obj-prop: 1.0.0 + is-proto-prop: 2.0.0 + dev: true + + /eslint-plugin-node/11.1.0_eslint@7.32.0: + resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=5.16.0' + dependencies: + eslint: 7.32.0 + eslint-plugin-es: 3.0.1_eslint@7.32.0 + eslint-utils: 2.1.0 + ignore: 5.2.4 + minimatch: 3.1.2 + resolve: 1.22.8 + semver: 6.3.1 + dev: true + + /eslint-plugin-prettier/3.4.1_tt5ulu3b2qnnqmfipa72rfkewa: + resolution: {integrity: sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==} + engines: {node: '>=6.0.0'} + peerDependencies: + eslint: '>=5.0.0' + eslint-config-prettier: '*' + prettier: '>=1.13.0' + peerDependenciesMeta: + eslint-config-prettier: + optional: true + dependencies: + eslint: 7.32.0 + eslint-config-prettier: 6.15.0_eslint@7.32.0 + prettier: 2.0.4 + prettier-linter-helpers: 1.0.0 + dev: true + + /eslint-plugin-prettier/4.2.1_hfsgfd6gjeak6ing3g5l6vc624: + resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + eslint: '>=7.28.0' + eslint-config-prettier: '*' + prettier: '>=2.0.0' + peerDependenciesMeta: + eslint-config-prettier: + optional: true + dependencies: + eslint: 8.39.0 + eslint-config-prettier: 8.10.0_eslint@8.39.0 + prettier: 2.8.8 + prettier-linter-helpers: 1.0.0 + dev: true + + /eslint-plugin-promise/4.3.1: + resolution: {integrity: sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==} + engines: {node: '>=6'} + dev: true + + /eslint-plugin-unicorn/20.1.0_eslint@7.32.0: + resolution: {integrity: sha512-XQxLBJT/gnwyRR6cfYsIK1AdekQchAt5tmcsnldevGjgR2xoZsRUa5/i6e0seNHy2RoT57CkTnbVHwHF8No8LA==} + engines: {node: '>=10'} + peerDependencies: + eslint: '>=7.0.0' + dependencies: + ci-info: 2.0.0 + clean-regexp: 1.0.0 + eslint: 7.32.0 + eslint-ast-utils: 1.1.0 + eslint-template-visitor: 2.3.2_eslint@7.32.0 + eslint-utils: 2.1.0 + import-modules: 2.1.0 + lodash: 4.17.21 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + reserved-words: 0.1.2 + safe-regex: 2.1.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-unicorn/44.0.2_eslint@8.39.0: + resolution: {integrity: sha512-GLIDX1wmeEqpGaKcnMcqRvMVsoabeF0Ton0EX4Th5u6Kmf7RM9WBl705AXFEsns56ESkEs0uyelLuUTvz9Tr0w==} + engines: {node: '>=14.18'} + peerDependencies: + eslint: '>=8.23.1' + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + ci-info: 3.9.0 + clean-regexp: 1.0.0 + eslint: 8.39.0 + eslint-utils: 3.0.0_eslint@8.39.0 + esquery: 1.5.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + lodash: 4.17.21 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + safe-regex: 2.1.1 + semver: 7.5.4 + strip-indent: 3.0.0 + dev: true + + /eslint-rule-docs/1.1.235: + resolution: {integrity: sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==} + dev: true + + /eslint-scope/5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope/7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-template-visitor/2.3.2_eslint@7.32.0: + resolution: {integrity: sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA==} + peerDependencies: + eslint: '>=7.0.0' + dependencies: + '@babel/core': 7.23.2 + '@babel/eslint-parser': 7.22.15_fnfqbunzrceougeoy4y7y2tjq4 + eslint: 7.32.0 + eslint-visitor-keys: 2.1.0 + esquery: 1.5.0 + multimap: 1.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-utils/1.4.3: + resolution: {integrity: sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==} + engines: {node: '>=6'} + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + + /eslint-utils/2.1.0: + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} + engines: {node: '>=6'} + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + + /eslint-utils/3.0.0_eslint@8.39.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 8.39.0 + eslint-visitor-keys: 2.1.0 + dev: true + + /eslint-visitor-keys/1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + dev: true + + /eslint-visitor-keys/2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint-visitor-keys/3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + /eslint/6.8.0: + resolution: {integrity: sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + hasBin: true + dependencies: + '@babel/code-frame': 7.22.13 + ajv: 6.12.6 + chalk: 2.4.2 + cross-spawn: 6.0.5 + debug: 4.3.4 + doctrine: 3.0.0 + eslint-scope: 5.1.1 + eslint-utils: 1.4.3 + eslint-visitor-keys: 1.3.0 + espree: 6.2.1 + esquery: 1.5.0 + esutils: 2.0.3 + file-entry-cache: 5.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 5.1.2 + globals: 12.4.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + inquirer: 7.3.3 + is-glob: 4.0.3 + js-yaml: 3.14.1 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.3.0 + lodash: 4.17.21 + minimatch: 3.1.2 + mkdirp: 0.5.6 + natural-compare: 1.4.0 + optionator: 0.8.3 + progress: 2.0.3 + regexpp: 2.0.1 + semver: 6.3.1 + strip-ansi: 5.2.0 + strip-json-comments: 3.1.1 + table: 5.4.6 + text-table: 0.2.0 + v8-compile-cache: 2.4.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint/7.32.0: + resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} + engines: {node: ^10.12.0 || >=12.0.0} + hasBin: true + dependencies: + '@babel/code-frame': 7.12.11 + '@eslint/eslintrc': 0.4.3 + '@humanwhocodes/config-array': 0.5.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + enquirer: 2.4.1 + escape-string-regexp: 4.0.0 + eslint-scope: 5.1.1 + eslint-utils: 2.1.0 + eslint-visitor-keys: 2.1.0 + espree: 7.3.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 5.1.2 + globals: 13.23.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + js-yaml: 3.14.1 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + progress: 2.0.3 + regexpp: 3.2.0 + semver: 7.5.4 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + table: 6.8.1 + text-table: 0.2.0 + v8-compile-cache: 2.4.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint/8.39.0: + resolution: {integrity: sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0_eslint@8.39.0 + '@eslint-community/regexpp': 4.9.1 + '@eslint/eslintrc': 2.1.2 + '@eslint/js': 8.39.0 + '@humanwhocodes/config-array': 0.11.11 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.23.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-sdsl: 4.4.2 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /esm-utils/4.1.2: + resolution: {integrity: sha512-hYKPzOCkAU11rMIiH6gvvReARaSLiRhJkGWPcwJB/S4zg7em//YKAcRxwZYw4sW5mRmI6lhV59wWWTdWKwOXvQ==} + dependencies: + import-meta-resolve: 2.2.2 + url-or-path: 2.1.0 + dev: true + + /espree/6.2.1: + resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==} + engines: {node: '>=6.0.0'} + dependencies: + acorn: 7.4.1 + acorn-jsx: 5.3.2_acorn@7.4.1 + eslint-visitor-keys: 1.3.0 + dev: true + + /espree/7.3.1: + resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + acorn: 7.4.1 + acorn-jsx: 5.3.2_acorn@7.4.1 + eslint-visitor-keys: 1.3.0 + dev: true + + /espree/9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2_acorn@8.10.0 + eslint-visitor-keys: 3.4.3 + + /esprima/1.2.5: + resolution: {integrity: sha512-S9VbPDU0adFErpDai3qDkjq8+G05ONtKzcyNrPKg/ZKa+tf879nX2KexNU95b31UoTJjRLInNBHHHjFPoCd7lQ==} + engines: {node: '>=0.4.0'} + hasBin: true + + /esprima/4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + /espurify/2.1.1: + resolution: {integrity: sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ==} + dev: true + + /esquery/1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse/4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse/1.9.3: + resolution: {integrity: sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==} + engines: {node: '>=0.10.0'} + + /estraverse/4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + /estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + /esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + /etag/1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: false + + /event-emitter/0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + + /event-stream/3.3.4: + resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} + dependencies: + duplexer: 0.1.2 + from: 0.1.7 + map-stream: 0.1.0 + pause-stream: 0.0.11 + split: 0.3.3 + stream-combiner: 0.0.4 + through: 2.3.8 + dev: true + + /event-stream/4.0.1: + resolution: {integrity: sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==} + dependencies: + duplexer: 0.1.2 + from: 0.1.7 + map-stream: 0.0.7 + pause-stream: 0.0.11 + split: 1.0.1 + stream-combiner: 0.2.2 + through: 2.3.8 + dev: false + + /event-target-shim/5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: false + + /eventemitter3/4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: false + + /eventemitter3/5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + dev: true + + /events/3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + /evp_bytestokey/1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + dev: true + + /ewma/2.0.1: + resolution: {integrity: sha512-MYYK17A76cuuyvkR7MnqLW4iFYPEi5Isl2qb8rXiWpLiwFS9dxW/rncuNnjjgSENuVqZQkIuR4+DChVL4g1lnw==} + dependencies: + assert-plus: 1.0.0 + dev: false + + /exec-buffer/3.2.0: + resolution: {integrity: sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==} + engines: {node: '>=4'} + dependencies: + execa: 0.7.0 + p-finally: 1.0.0 + pify: 3.0.0 + rimraf: 2.7.1 + tempfile: 2.0.0 + dev: true + optional: true + + /execa/0.10.0: + resolution: {integrity: sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==} + engines: {node: '>=4'} + dependencies: + cross-spawn: 6.0.5 + get-stream: 3.0.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 + dev: false + + /execa/0.7.0: + resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==} + engines: {node: '>=4'} + dependencies: + cross-spawn: 5.1.0 + get-stream: 3.0.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 + dev: true + + /execa/1.0.0: + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} + engines: {node: '>=6'} + dependencies: + cross-spawn: 6.0.5 + get-stream: 4.1.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 + dev: true + + /execa/4.1.0: + resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 5.2.0 + human-signals: 1.1.1 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /execa/5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + + /execa/7.2.0: + resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + + /executable/4.1.1: + resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} + engines: {node: '>=4'} + dependencies: + pify: 2.3.0 + dev: true + + /expand-brackets/2.1.4: + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} + engines: {node: '>=0.10.0'} + dependencies: + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + posix-character-classes: 0.1.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /expand-template/2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + dev: false + + /expand-tilde/2.0.2: + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} + dependencies: + homedir-polyfill: 1.0.3 + dev: true + + /exponential-backoff/3.1.1: + resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} + dev: false + + /express-request-id/1.4.1: + resolution: {integrity: sha512-qpxK6XhDYtdx9FvxwCHkUeZVWtkGbWR87hBAzGECfwYF/QQCPXEwwB2/9NGkOR1tT7/aLs9mma3CT0vjSzuZVw==} + dependencies: + uuid: 3.4.0 + dev: false + + /ext-list/2.2.2: + resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} + engines: {node: '>=0.10.0'} + dependencies: + mime-db: 1.52.0 + dev: true + + /ext-name/5.0.0: + resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} + engines: {node: '>=4'} + dependencies: + ext-list: 2.2.2 + sort-keys-length: 1.0.1 + dev: true + + /ext/1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + dependencies: + type: 2.7.2 + + /extend-object/1.0.0: + resolution: {integrity: sha512-0dHDIXC7y7LDmCh/lp1oYkmv73K25AMugQI07r8eFopkW6f7Ufn1q+ETMsJjnV9Am14SlElkqy3O92r6xEaxPw==} + + /extend-shallow/2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + + /extend-shallow/3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + dev: true + + /extend/3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + /external-editor/3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + dev: true + + /extglob/2.0.4: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} + dependencies: + array-unique: 0.3.2 + define-property: 1.0.0 + expand-brackets: 2.1.4 + extend-shallow: 2.0.1 + fragment-cache: 0.2.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /extsprintf/1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + dev: false + + /extsprintf/1.4.1: + resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} + engines: {'0': node >=0.6.0} + dev: false + + /factor-bundle/2.5.0: + resolution: {integrity: sha512-yliJvbnY+/CUpAkEvQa/33yfkGNseUXiKuiSPbA7n9r0IYlz/RVTdJRMHxvOUDV3gFbfiq/3Wlw1hmf6+UrULA==} + hasBin: true + dependencies: + JSONStream: 0.8.4 + browser-pack: 5.0.1 + defined: 0.0.0 + deps-topo-sort: 0.2.1 + inherits: 2.0.4 + isarray: 0.0.1 + labeled-stream-splicer: 1.0.2 + minimist: 0.2.4 + nub: 0.0.0 + outpipe: 1.1.1 + reversepoint: 0.2.1 + stream-combiner: 0.2.2 + through2: 0.5.1 + xtend: 4.0.2 + dev: true + + /factory-girl/5.0.4: + resolution: {integrity: sha512-ugGBetzpevbAlKEyMRasBlmCQ76EkvZFMLIsA6K17Pwp/8+7ffBmmxkkw1LoXrOyB6iIgEcmbVF4TcIAnKXyDA==} + dependencies: + babel-runtime: 6.26.0 + chance: 1.1.11 + dev: true + + /falafel/2.2.5: + resolution: {integrity: sha512-HuC1qF9iTnHDnML9YZAdCDQwT0yKl/U55K4XSUXqGAA2GLoafFgWRqdAbhWJxXaYD4pyoVxAJ8wH670jMpI9DQ==} + engines: {node: '>=0.4.0'} + dependencies: + acorn: 7.4.1 + isarray: 2.0.5 + dev: true + + /fancy-log/1.3.3: + resolution: {integrity: sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==} + engines: {node: '>= 0.10'} + dependencies: + ansi-gray: 0.1.1 + color-support: 1.1.3 + parse-node-version: 1.0.1 + time-stamp: 1.1.0 + dev: true + + /fancy-log/2.0.0: + resolution: {integrity: sha512-9CzxZbACXMUXW13tS0tI8XsGGmxWzO2DmYrGuBJOJ8k8q2K7hwfJA5qHjuPPe8wtsco33YR9wc+Rlr5wYFvhSA==} + engines: {node: '>=10.13.0'} + dependencies: + color-support: 1.1.3 + dev: true + + /fast-decode-uri-component/1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + dev: false + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + /fast-diff/1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + dev: true + + /fast-fifo/1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + dev: false + + /fast-glob/2.2.7: + resolution: {integrity: sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==} + engines: {node: '>=4.0.0'} + dependencies: + '@mrmlnc/readdir-enhanced': 2.2.1 + '@nodelib/fs.stat': 1.1.3 + glob-parent: 3.1.0 + is-glob: 4.0.3 + merge2: 1.4.1 + micromatch: 3.1.10 + transitivePeerDependencies: + - supports-color + dev: true + + /fast-glob/3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + + /fast-json-stable-stringify/2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + /fast-levenshtein/1.1.4: + resolution: {integrity: sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==} + dev: true + + /fast-levenshtein/2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + /fast-levenshtein/3.0.0: + resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} + dependencies: + fastest-levenshtein: 1.0.16 + dev: false + + /fast-printf/1.6.9: + resolution: {integrity: sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==} + engines: {node: '>=10.0'} + dependencies: + boolean: 3.2.0 + dev: false + + /fast-querystring/1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + dependencies: + fast-decode-uri-component: 1.0.1 + dev: false + + /fast-redact/3.3.0: + resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} + engines: {node: '>=6'} + dev: false + + /fast-safe-stringify/2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + /fast-text-encoding/1.0.6: + resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==} + dev: false + + /fast-xml-parser/4.2.0: + resolution: {integrity: sha512-+zVQv4aVTO+o8oRUyRL7PjgeVo1J6oP8Cw2+a8UTZQcj5V0yUK5T63gTN0ldgiHDPghUjKc4OpT6SwMTwnOQug==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: false + + /fast-xml-parser/4.2.5: + resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: false + optional: true + + /fast-xml-parser/4.2.7: + resolution: {integrity: sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: false + + /fast-xml-parser/4.3.2: + resolution: {integrity: sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==} + hasBin: true + dependencies: + strnum: 1.0.5 + + /fastest-levenshtein/1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + /fastq/1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + + /fault/1.0.4: + resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} + dependencies: + format: 0.2.2 + dev: true + + /fault/2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + dependencies: + format: 0.2.2 + dev: true + + /faye-websocket/0.10.0: + resolution: {integrity: sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==} + engines: {node: '>=0.4.0'} + dependencies: + websocket-driver: 0.7.4 + dev: true + + /fd-slicer/1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + dependencies: + pend: 1.2.0 + + /feature-policy/0.3.0: + resolution: {integrity: sha512-ZtijOTFN7TzCujt1fnNhfWPFPSHeZkesff9AXZj+UEjYBynWNUIYpC87Ve4wHzyexQsImicLu7WsC2LHq7/xrQ==} + engines: {node: '>=4.0.0'} + dev: false + + /fengari-interop/0.1.3_fengari@0.1.4: + resolution: {integrity: sha512-EtZ+oTu3kEwVJnoymFPBVLIbQcCoy9uWCVnMA6h3M/RqHkUBsLYp29+RRHf9rKr6GwjubWREU1O7RretFIXjHw==} + peerDependencies: + fengari: ^0.1.0 + dependencies: + fengari: 0.1.4 + dev: true + + /fengari/0.1.4: + resolution: {integrity: sha512-6ujqUuiIYmcgkGz8MGAdERU57EIluGGPSUgGPTsco657EHa+srq0S3/YUl/r9kx1+D+d4rGfYObd+m8K22gB1g==} + dependencies: + readline-sync: 1.4.10 + sprintf-js: 1.1.3 + tmp: 0.0.33 + dev: true + + /fido2-lib/3.4.1: + resolution: {integrity: sha512-efNrRbckp48AW7Q43o6gcp8/wnoBM7hwKikQntdiR2/NqVMPaCXFQs8kJ9wQqfv5V3PxZdg4kD9DpxdqYl6jxQ==} + engines: {node: '>=10'} + dependencies: + '@hexagon/base64': 1.1.28 + '@peculiar/webcrypto': 1.4.3 + asn1js: 3.0.5 + cbor-x: 1.5.4 + jose: 4.15.3 + pkijs: 3.0.15 + tldts: 6.0.16 + dev: false + + /figgy-pudding/3.5.2: + resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==} + dev: true + + /figures/1.7.0: + resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} + engines: {node: '>=0.10.0'} + dependencies: + escape-string-regexp: 1.0.5 + object-assign: 4.1.1 + dev: true + optional: true + + /figures/2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: false + + /figures/3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /figures/5.0.0: + resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} + engines: {node: '>=14'} + dependencies: + escape-string-regexp: 5.0.0 + is-unicode-supported: 1.3.0 + dev: true + + /file-entry-cache/5.0.1: + resolution: {integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==} + engines: {node: '>=4'} + dependencies: + flat-cache: 2.0.1 + dev: true + + /file-entry-cache/6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.1.1 + dev: true + + /file-extension/4.0.5: + resolution: {integrity: sha512-l0rOL3aKkoi6ea7MNZe6OHgqYYpn48Qfflr8Pe9G9JPPTx5A+sfboK91ZufzIs59/lPqh351l0eb6iKU9J5oGg==} + engines: {node: '>=4'} + dev: false + + /file-type/10.11.0: + resolution: {integrity: sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==} + engines: {node: '>=6'} + dev: true + optional: true + + /file-type/12.4.2: + resolution: {integrity: sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==} + engines: {node: '>=8'} + dev: true + + /file-type/16.5.4: + resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} + engines: {node: '>=10'} + dependencies: + readable-web-to-node-stream: 3.0.2 + strtok3: 6.3.0 + token-types: 4.2.1 + dev: false + + /file-type/18.2.1: + resolution: {integrity: sha512-Yw5MtnMv7vgD2/6Bjmmuegc8bQEVA9GmAyaR18bMYWKqsWDG9wgYZ1j4I6gNMF5Y5JBDcUcjRQqNQx7Y8uotcg==} + engines: {node: '>=14.16'} + dependencies: + readable-web-to-node-stream: 3.0.2 + strtok3: 7.0.0 + token-types: 5.0.1 + dev: true + + /file-type/3.9.0: + resolution: {integrity: sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==} + engines: {node: '>=0.10.0'} + dev: true + + /file-type/4.4.0: + resolution: {integrity: sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==} + engines: {node: '>=4'} + dev: true + + /file-type/5.2.0: + resolution: {integrity: sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==} + engines: {node: '>=4'} + dev: true + + /file-type/6.2.0: + resolution: {integrity: sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==} + engines: {node: '>=4'} + dev: true + + /file-type/8.1.0: + resolution: {integrity: sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==} + engines: {node: '>=6'} + dev: true + + /file-uri-to-path/1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + dev: true + optional: true + + /filename-reserved-regex/2.0.0: + resolution: {integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==} + engines: {node: '>=4'} + dev: true + + /filenamify/2.1.0: + resolution: {integrity: sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==} + engines: {node: '>=4'} + dependencies: + filename-reserved-regex: 2.0.0 + strip-outer: 1.0.1 + trim-repeated: 1.0.0 + dev: true + + /fill-range/4.0.0: + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-number: 3.0.0 + repeat-string: 1.6.1 + to-regex-range: 2.1.1 + dev: true + + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /finalhandler/1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /find-cache-dir/3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + + /find-cache-dir/4.0.0: + resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} + engines: {node: '>=14.16'} + dependencies: + common-path-prefix: 3.0.0 + pkg-dir: 7.0.0 + dev: true + + /find-line-column/0.5.2: + resolution: {integrity: sha512-eNhNkDt5RbxY4X++JwyDURP62FYhV1bh9LF4dfOiwpVCTk5vvfEANhnui5ypUEELGR02QZSrWFtaTgd4ulW5tw==} + dev: true + + /find-my-way/7.7.0: + resolution: {integrity: sha512-+SrHpvQ52Q6W9f3wJoJBbAQULJuNEEQwBvlvYwACDhBTLOTMiQ0HYWh4+vC3OivGP2ENcTI1oKlFA2OepJNjhQ==} + engines: {node: '>=14'} + dependencies: + fast-deep-equal: 3.1.3 + fast-querystring: 1.1.2 + safe-regex2: 2.0.0 + dev: false + + /find-root/1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: true + + /find-up/1.1.2: + resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==} + engines: {node: '>=0.10.0'} + dependencies: + path-exists: 2.1.0 + pinkie-promise: 2.0.1 + dev: true + + /find-up/2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + dependencies: + locate-path: 2.0.0 + + /find-up/3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + dev: true + + /find-up/4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + /find-up/5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + /find-up/6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + dev: true + + /find-versions/3.2.0: + resolution: {integrity: sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==} + engines: {node: '>=6'} + dependencies: + semver-regex: 2.0.0 + dev: true + + /findhit-proxywrap/0.3.13: + resolution: {integrity: sha512-gI1KV7yCuMHtveiWbQUJZheNOukScz+15MTtrH/MK5RJ77JjYeJ1DegUfkBnlPvDx5NhZESl48zE/MwpWZ1LXQ==} + engines: {node: '>= 0.8'} + dependencies: + lodash: 4.17.21 + dev: false + + /findup-sync/2.0.0: + resolution: {integrity: sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==} + engines: {node: '>= 0.10'} + dependencies: + detect-file: 1.0.0 + is-glob: 3.1.0 + micromatch: 3.1.10 + resolve-dir: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /findup-sync/3.0.0: + resolution: {integrity: sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==} + engines: {node: '>= 0.10'} + dependencies: + detect-file: 1.0.0 + is-glob: 4.0.3 + micromatch: 3.1.10 + resolve-dir: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /fined/1.2.0: + resolution: {integrity: sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==} + engines: {node: '>= 0.10'} + dependencies: + expand-tilde: 2.0.2 + is-plain-object: 2.0.4 + object.defaults: 1.1.0 + object.pick: 1.3.0 + parse-filepath: 1.0.2 + dev: true + + /first-chunk-stream/2.0.0: + resolution: {integrity: sha512-X8Z+b/0L4lToKYq+lwnKqi9X/Zek0NibLpsJgVsSxpoYq7JtiCtRb5HqKVEjEw/qAb/4AKKRLOwwKHlWNpm2Eg==} + engines: {node: '>=0.10.0'} + dependencies: + readable-stream: 2.3.8 + dev: true + + /first-match/0.0.1: + resolution: {integrity: sha512-VvKbnaxrC0polTFDC+teKPTdl2mn6B/KUW+WB3C9RzKDeNwbzfLdnUz3FxC+tnjvus6bI0jWrWicQyVIPdS37A==} + dev: false + + /fixpack/4.0.0: + resolution: {integrity: sha512-5SM1+H2CcuJ3gGEwTiVo/+nd/hYpNj9Ch3iMDOQ58ndY+VGQ2QdvaUTkd3otjZvYnd/8LF/HkJ5cx7PBq0orCQ==} + hasBin: true + dependencies: + alce: 1.2.0 + chalk: 3.0.0 + detect-indent: 6.1.0 + detect-newline: 3.1.0 + extend-object: 1.0.0 + rc: 1.2.8 + + /flagged-respawn/1.0.1: + resolution: {integrity: sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==} + engines: {node: '>= 0.10'} + dev: true + + /flat-cache/2.0.1: + resolution: {integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==} + engines: {node: '>=4'} + dependencies: + flatted: 2.0.2 + rimraf: 2.6.3 + write: 1.0.3 + dev: true + + /flat-cache/3.1.1: + resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} + engines: {node: '>=12.0.0'} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flatted/2.0.2: + resolution: {integrity: sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==} + dev: true + + /flatted/3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: true + + /floating-point-regex/0.1.0: + resolution: {integrity: sha512-4X7v7J8G3pw2iBJgAC+l3FaFVM0zLre9dk1PNnCM2/fDLVzuKP84b1YhtGw6BBCmlq60ABoK9Tg43UYpOHEqQw==} + engines: {node: '>=0.10.0'} + dev: false + + /flush-write-stream/1.1.1: + resolution: {integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + dev: true + + /follow-redirects/1.15.3: + resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /for-each/0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + + /for-in/1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + dev: true + + /for-own/1.0.0: + resolution: {integrity: sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==} + engines: {node: '>=0.10.0'} + dependencies: + for-in: 1.0.2 + dev: true + + /foreground-child/2.0.0: + resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} + engines: {node: '>=8.0.0'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 3.0.7 + dev: true + + /foreground-child/3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + /forever-agent/0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + dev: false + + /form-data-encoder/2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + dev: true + + /form-data/2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /form-data/3.0.1: + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + + /form-data/4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + /format-specifiers/1.0.0: + resolution: {integrity: sha512-/xcmy6xn/DsR+V6flFj3E47yCbrsk70r90moAMENVkKckUPUG9CRE79S/2xajLVx1iADIoWx+1R304uMXB/riQ==} + dev: false + + /format/0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + + /formidable/1.2.6: + resolution: {integrity: sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==} + deprecated: 'Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau' + dev: false + + /formidable/2.1.2: + resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} + dependencies: + dezalgo: 1.0.4 + hexoid: 1.0.0 + once: 1.4.0 + qs: 6.11.2 + + /fraction.js/4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true + + /fragment-cache/0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} + dependencies: + map-cache: 0.2.2 + dev: true + + /franc/5.0.0: + resolution: {integrity: sha512-ioKMLQlZv0T4qQ/AivMt8y8i4M3RWvVeOAm8y8SAjfcN+shtHVqR7NKAQAfQcrxWIbmfne4pRTcgNBcM0bj60A==} + dependencies: + trigram-utils: 1.0.3 + dev: false + + /fresh/0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: false + + /from/0.1.7: + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} + + /from2/2.3.0: + resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + + /fromentries/1.3.2: + resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} + dev: true + + /fs-constants/1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + /fs-extra/11.1.1: + resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + + /fs-extra/9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + + /fs-minipass/2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + + /fs-minipass/3.0.3: + resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + minipass: 7.0.4 + dev: false + + /fs-mkdirp-stream/1.0.0: + resolution: {integrity: sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==} + engines: {node: '>= 0.10'} + dependencies: + graceful-fs: 4.2.11 + through2: 2.0.5 + dev: true + + /fs-readdir-recursive/1.1.0: + resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} + dev: true + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /fsevents/1.2.13: + resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==} + engines: {node: '>= 4.0'} + os: [darwin] + deprecated: The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2 + requiresBuild: true + dependencies: + bindings: 1.5.0 + nan: 2.18.0 + dev: true + optional: true + + /fsevents/2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind/1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + /function.name/1.0.13: + resolution: {integrity: sha512-mVrqdoy5npWZyoXl4DxCeuVF6delDcQjVS9aPdvLYlBxtMTZDR2B5GVEQEoM1jJyspCqg3C0v4ABkLE7tp9xFA==} + dependencies: + noop6: 1.0.9 + dev: false + + /function.prototype.name/1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + functions-have-names: 1.2.3 + dev: true + + /functional-red-black-tree/1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + dev: true + + /functions-have-names/1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /gauge/4.0.4: + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + + /gauge/5.0.1: + resolution: {integrity: sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + signal-exit: 4.1.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + dev: false + + /gaxios/5.1.3: + resolution: {integrity: sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==} + engines: {node: '>=12'} + dependencies: + extend: 3.0.2 + https-proxy-agent: 5.0.1 + is-stream: 2.0.1 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /gaze/1.1.3: + resolution: {integrity: sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==} + engines: {node: '>= 4.0.0'} + dependencies: + globule: 1.3.4 + dev: true + + /gcp-metadata/5.3.0: + resolution: {integrity: sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==} + engines: {node: '>=12'} + dependencies: + gaxios: 5.1.3 + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /gelf/2.0.1: + resolution: {integrity: sha512-77duTNPkUgcwFRl+kbmPx2YGMF4e030xBVVsKix5mruTAjuROW36WxmpVSk8MkiZC1D68JYNNb+kfJeZG/D5VQ==} + engines: {node: '>=8.0'} + dependencies: + async: 2.6.4 + dev: false + + /gemoji/6.1.0: + resolution: {integrity: sha512-MOlX3doQ1fsfzxQX8Y+u6bC5Ssc1pBUBIPVyrS69EzKt+5LIZAOm0G5XGVNhwXFgkBF3r+Yk88ONyrFHo8iNFA==} + dev: false + + /generate-password/1.7.0: + resolution: {integrity: sha512-WPCtlfy0jexf7W5IbwxGUgpIDvsZIohbI2DAq2Q6TSlKKis+G4GT9sxvPxrZUGL8kP6WUXMWNqYnxY6DDKAdFA==} + dev: false + + /generaterr/1.5.0: + resolution: {integrity: sha512-JgcGRv2yUKeboLvvNrq9Bm90P4iJBu7/vd5wSLYqMG5GJ6SxZT46LAAkMfNhQ+EK3jzC+cRBm7P8aUWYyphgcQ==} + dev: false + + /gensync/1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + /get-assigned-identifiers/1.2.0: + resolution: {integrity: sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==} + dev: true + + /get-caller-file/1.0.3: + resolution: {integrity: sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==} + dev: true + + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + /get-intrinsic/1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + dependencies: + function-bind: 1.1.2 + has: 1.0.4 + has-proto: 1.0.1 + has-symbols: 1.0.3 + + /get-package-type/0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + dev: true + + /get-paths/0.0.7: + resolution: {integrity: sha512-0wdJt7C1XKQxuCgouqd+ZvLJ56FQixKoki9MrFaO4EriqzXOiH9gbukaDE1ou08S8Ns3/yDzoBAISNPqj6e6tA==} + engines: {node: '>=6.4'} + dependencies: + pify: 4.0.1 + dev: false + + /get-port/5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} + + /get-proxy/2.1.0: + resolution: {integrity: sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==} + engines: {node: '>=4'} + dependencies: + npm-conf: 1.1.3 + dev: true + + /get-set-props/0.1.0: + resolution: {integrity: sha512-7oKuKzAGKj0ag+eWZwcGw2fjiZ78tXnXQoBgY0aU7ZOxTu4bB7hSuQSDgtKy978EDH062P5FmD2EWiDpQS9K9Q==} + engines: {node: '>=0.10.0'} + dev: true + + /get-stdin/4.0.1: + resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==} + engines: {node: '>=0.10.0'} + dev: true + + /get-stdin/5.0.1: + resolution: {integrity: sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==} + engines: {node: '>=0.12.0'} + dev: true + + /get-stdin/6.0.0: + resolution: {integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==} + engines: {node: '>=4'} + dev: true + + /get-stdin/8.0.0: + resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==} + engines: {node: '>=10'} + dev: true + + /get-stdin/9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + dev: true + + /get-stream/2.3.1: + resolution: {integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==} + engines: {node: '>=0.10.0'} + dependencies: + object-assign: 4.1.1 + pinkie-promise: 2.0.1 + dev: true + + /get-stream/3.0.0: + resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} + engines: {node: '>=4'} + + /get-stream/4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + dependencies: + pump: 3.0.0 + dev: true + + /get-stream/5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + + /get-stream/6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + /get-symbol-description/1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + dev: true + + /get-value/2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + dev: true + + /get-value/3.0.1: + resolution: {integrity: sha512-mKZj9JLQrwMBtj5wxi6MH8Z5eSKaERpAwjg43dPtlGI1ZVEgH/qC7T8/6R2OBSUA+zzHBZgICsVJaEIV2tKTDA==} + engines: {node: '>=6.0'} + dependencies: + isobject: 3.0.1 + dev: false + + /getpass/0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + dependencies: + assert-plus: 1.0.0 + dev: false + + /gifsicle/5.3.0: + resolution: {integrity: sha512-FJTpgdj1Ow/FITB7SVza5HlzXa+/lqEY0tHQazAJbuAdvyJtkH4wIdsR2K414oaTwRXHFLLF+tYbipj+OpYg+Q==} + engines: {node: '>=10'} + hasBin: true + requiresBuild: true + dependencies: + bin-build: 3.0.0 + bin-wrapper: 4.1.0 + execa: 5.1.1 + dev: true + optional: true + + /git-config-path/2.0.0: + resolution: {integrity: sha512-qc8h1KIQbJpp+241id3GuAtkdyJ+IK+LIVtkiFTRKRrmddDzs3SI9CvP1QYmWBFvm1I/PWRwj//of8bgAc0ltA==} + engines: {node: '>=4'} + dev: true + + /git-raw-commits/2.0.11: + resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} + engines: {node: '>=10'} + hasBin: true + dependencies: + dargs: 7.0.0 + lodash: 4.17.21 + meow: 8.1.2 + split2: 3.2.2 + through2: 4.0.2 + dev: true + + /github-from-package/0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + dev: false + + /github-markdown-css/5.3.0: + resolution: {integrity: sha512-WI+6puEQJnC8JoIveA8R8PiwH/wJwlneE88j7Q+ojMfzWcqRJF01vrVvo8PoWc6Y4aDF+kG4WGZi3RHXymyzJg==} + engines: {node: '>=10'} + dev: false + + /github-slugger/1.5.0: + resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} + + /glob-parent/3.1.0: + resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==} + dependencies: + is-glob: 3.1.0 + path-dirname: 1.0.2 + dev: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + + /glob-parent/6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-stream/6.1.0: + resolution: {integrity: sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==} + engines: {node: '>= 0.10'} + dependencies: + extend: 3.0.2 + glob: 7.2.3 + glob-parent: 3.1.0 + is-negated-glob: 1.0.0 + ordered-read-streams: 1.0.1 + pumpify: 1.5.1 + readable-stream: 2.3.8 + remove-trailing-separator: 1.1.0 + to-absolute-glob: 2.0.2 + unique-stream: 2.3.1 + dev: true + + /glob-to-regexp/0.3.0: + resolution: {integrity: sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==} + dev: true + + /glob-watcher/5.0.5: + resolution: {integrity: sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==} + engines: {node: '>= 0.10'} + dependencies: + anymatch: 2.0.0 + async-done: 1.3.2 + chokidar: 2.1.8 + is-negated-glob: 1.0.0 + just-debounce: 1.1.0 + normalize-path: 3.0.0 + object.defaults: 1.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + /glob/10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 7.0.4 + path-scurry: 1.10.1 + + /glob/6.0.4: + resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==} + dependencies: + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob/7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.8 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + /glob/8.0.3: + resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: false + + /glob/8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + + /global-dirs/0.1.1: + resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} + engines: {node: '>=4'} + dependencies: + ini: 1.3.8 + dev: true + + /global-dirs/2.1.0: + resolution: {integrity: sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==} + engines: {node: '>=8'} + dependencies: + ini: 1.3.7 + dev: true + + /global-modules/1.0.0: + resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} + engines: {node: '>=0.10.0'} + dependencies: + global-prefix: 1.0.2 + is-windows: 1.0.2 + resolve-dir: 1.0.1 + dev: true + + /global-modules/2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + dependencies: + global-prefix: 3.0.0 + dev: true + + /global-prefix/1.0.2: + resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} + engines: {node: '>=0.10.0'} + dependencies: + expand-tilde: 2.0.2 + homedir-polyfill: 1.0.3 + ini: 1.3.8 + is-windows: 1.0.2 + which: 1.3.1 + dev: true + + /global-prefix/3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + dev: true + + /globals/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + /globals/12.4.0: + resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.8.1 + dev: true + + /globals/13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis/1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: true + + /globby/10.0.2: + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} + engines: {node: '>=8'} + dependencies: + '@types/glob': 7.2.0 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.1 + glob: 7.2.3 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globby/11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.1 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + + /globby/13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.1 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 4.0.0 + dev: true + + /globby/4.1.0: + resolution: {integrity: sha512-JPDtMSr0bt25W64q792rvlrSwIaZwqUAhqdYKSr57Wh/xBcQ5JDWLM85ndn+Q1WdBQXLb9YGCl0QN/T0HpqU0A==} + engines: {node: '>=0.10.0'} + dependencies: + array-union: 1.0.2 + arrify: 1.0.1 + glob: 6.0.4 + object-assign: 4.1.1 + pify: 2.3.0 + pinkie-promise: 2.0.1 + dev: true + + /globby/9.2.0: + resolution: {integrity: sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==} + engines: {node: '>=6'} + dependencies: + '@types/glob': 7.2.0 + array-union: 1.0.2 + dir-glob: 2.2.2 + fast-glob: 2.2.7 + glob: 7.2.3 + ignore: 4.0.6 + pify: 4.0.1 + slash: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /globjoin/0.1.4: + resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} + dev: true + + /globule/1.3.4: + resolution: {integrity: sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==} + engines: {node: '>= 0.10'} + dependencies: + glob: 7.1.7 + lodash: 4.17.21 + minimatch: 3.0.8 + dev: true + + /glogg/1.0.2: + resolution: {integrity: sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==} + engines: {node: '>= 0.10'} + dependencies: + sparkles: 1.0.1 + dev: true + + /good-listener/1.2.2: + resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==} + dependencies: + delegate: 3.2.0 + dev: false + + /google-auth-library/8.9.0: + resolution: {integrity: sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==} + engines: {node: '>=12'} + dependencies: + arrify: 2.0.1 + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + fast-text-encoding: 1.0.6 + gaxios: 5.1.3 + gcp-metadata: 5.3.0 + gtoken: 6.1.2 + jws: 4.0.0 + lru-cache: 6.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /google-gax/3.6.1: + resolution: {integrity: sha512-g/lcUjGcB6DSw2HxgEmCDOrI/CByOwqRvsuUvNalHUK2iPPPlmAIpbMbl62u0YufGMr8zgE3JL7th6dCb1Ry+w==} + engines: {node: '>=12'} + hasBin: true + dependencies: + '@grpc/grpc-js': 1.8.21 + '@grpc/proto-loader': 0.7.10 + '@types/long': 4.0.2 + '@types/rimraf': 3.0.2 + abort-controller: 3.0.0 + duplexify: 4.1.2 + fast-text-encoding: 1.0.6 + google-auth-library: 8.9.0 + is-stream-ended: 0.1.4 + node-fetch: 2.7.0 + object-hash: 3.0.0 + proto3-json-serializer: 1.1.1 + protobufjs: 7.2.4 + protobufjs-cli: 1.1.1_protobufjs@7.2.4 + retry-request: 5.0.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /google-p12-pem/4.0.1: + resolution: {integrity: sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + node-forge: 1.3.1 + dev: false + + /gopd/1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.1 + + /got/11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.1 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + dev: false + + /got/12.6.0: + resolution: {integrity: sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==} + engines: {node: '>=14.16'} + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.0 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + dev: true + + /got/7.1.0: + resolution: {integrity: sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==} + engines: {node: '>=4'} + dependencies: + '@types/keyv': 3.1.4 + '@types/responselike': 1.0.1 + decompress-response: 3.3.0 + duplexer3: 0.1.5 + get-stream: 3.0.0 + is-plain-obj: 1.1.0 + is-retry-allowed: 1.2.0 + is-stream: 1.1.0 + isurl: 1.0.0 + lowercase-keys: 1.0.1 + p-cancelable: 0.3.0 + p-timeout: 1.2.1 + safe-buffer: 5.2.1 + timed-out: 4.0.1 + url-parse-lax: 1.0.0 + url-to-options: 1.0.1 + dev: true + + /got/8.3.2: + resolution: {integrity: sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==} + engines: {node: '>=4'} + dependencies: + '@sindresorhus/is': 0.7.0 + '@types/keyv': 3.1.4 + '@types/responselike': 1.0.1 + cacheable-request: 2.1.4 + decompress-response: 3.3.0 + duplexer3: 0.1.5 + get-stream: 3.0.0 + into-stream: 3.1.0 + is-retry-allowed: 1.2.0 + isurl: 1.0.0 + lowercase-keys: 1.0.1 + mimic-response: 1.0.1 + p-cancelable: 0.4.1 + p-timeout: 2.0.1 + pify: 3.0.0 + safe-buffer: 5.2.1 + timed-out: 4.0.1 + url-parse-lax: 3.0.0 + url-to-options: 1.0.1 + dev: true + + /got/9.6.0: + resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} + engines: {node: '>=8.6'} + dependencies: + '@sindresorhus/is': 0.14.0 + '@szmarczak/http-timer': 1.1.2 + '@types/keyv': 3.1.4 + '@types/responselike': 1.0.1 + cacheable-request: 6.1.0 + decompress-response: 3.3.0 + duplexer3: 0.1.5 + get-stream: 4.1.0 + lowercase-keys: 1.0.1 + mimic-response: 1.0.1 + p-cancelable: 1.1.0 + to-readable-stream: 1.0.0 + url-parse-lax: 3.0.0 + dev: true + + /graceful-fs/4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /grapheme-splitter/1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: true + + /graphemer/1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /gtoken/6.1.2: + resolution: {integrity: sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==} + engines: {node: '>=12.0.0'} + dependencies: + gaxios: 5.1.3 + google-p12-pem: 4.0.1 + jws: 4.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /gulp-babel/8.0.0_@babel+core@7.23.2: + resolution: {integrity: sha512-oomaIqDXxFkg7lbpBou/gnUkX51/Y/M2ZfSjL2hdqXTAlSWZcgZtd2o0cOH0r/eE8LWD0+Q/PsLsr2DKOoqToQ==} + engines: {node: '>=6'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.2 + plugin-error: 1.0.1 + replace-ext: 1.0.1 + through2: 2.0.5 + vinyl-sourcemaps-apply: 0.2.1 + dev: true + + /gulp-cli/2.3.0: + resolution: {integrity: sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==} + engines: {node: '>= 0.10'} + hasBin: true + dependencies: + ansi-colors: 1.1.0 + archy: 1.0.0 + array-sort: 1.0.0 + color-support: 1.1.3 + concat-stream: 1.6.2 + copy-props: 2.0.5 + fancy-log: 1.3.3 + gulplog: 1.0.0 + interpret: 1.4.0 + isobject: 3.0.1 + liftoff: 3.1.0 + matchdep: 2.0.0 + mute-stdout: 1.0.1 + pretty-hrtime: 1.0.3 + replace-homedir: 1.0.0 + semver-greatest-satisfied-range: 1.1.0 + v8flags: 3.2.0 + yargs: 7.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /gulp-concat/2.6.1: + resolution: {integrity: sha512-a2scActrQrDBpBbR3WUZGyGS1JEPLg5PZJdIa7/Bi3GuKAmPYDK6SFhy/NZq5R8KsKKFvtfR0fakbUCcKGCCjg==} + engines: {node: '>= 0.10'} + dependencies: + concat-with-sourcemaps: 1.1.0 + through2: 2.0.5 + vinyl: 2.2.1 + dev: true + + /gulp-eslint/6.0.0: + resolution: {integrity: sha512-dCVPSh1sA+UVhn7JSQt7KEb4An2sQNbOdB3PA8UCfxsoPlAKjJHxYHGXdXC7eb+V1FAnilSFFqslPrq037l1ig==} + dependencies: + eslint: 6.8.0 + fancy-log: 1.3.3 + plugin-error: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /gulp-filter/7.0.0_gulp@4.0.2: + resolution: {integrity: sha512-ZGWtJo0j1mHfP77tVuhyqem4MRA5NfNRjoVe6VAkLGeQQ/QGo2VsFwp7zfPTGDsd1rwzBmoDHhxpE6f5B3Zuaw==} + engines: {node: '>=12'} + peerDependencies: + gulp: '>=4' + peerDependenciesMeta: + gulp: + optional: true + dependencies: + gulp: 4.0.2 + multimatch: 5.0.0 + plugin-error: 1.0.1 + streamfilter: 3.0.0 + to-absolute-glob: 2.0.2 + dev: true + + /gulp-imagemin/7.1.0_gulp@4.0.2: + resolution: {integrity: sha512-6xBTNybmPY2YrvrhhlS8Mxi0zn0ypusLon63p9XXxDtIf7U7c6KcViz94K7Skosucr3378A6IY2kJSjJyuwylQ==} + engines: {node: '>=10'} + peerDependencies: + gulp: '>=4' + peerDependenciesMeta: + gulp: + optional: true + dependencies: + chalk: 3.0.0 + fancy-log: 1.3.3 + gulp: 4.0.2 + imagemin: 7.0.1 + plugin-error: 1.0.1 + plur: 3.1.1 + pretty-bytes: 5.6.0 + through2-concurrent: 2.0.0 + optionalDependencies: + imagemin-gifsicle: 7.0.0 + imagemin-mozjpeg: 8.0.0 + imagemin-optipng: 7.1.0 + imagemin-svgo: 7.1.0 + dev: true + + /gulp-livereload/4.0.2: + resolution: {integrity: sha512-InmaR50Xl1xB1WdEk4mrUgGHv3VhhlRLrx7u60iY5AAer90FlK95KXitPcGGQoi28zrUJM189d/h6+V470Ncgg==} + engines: {node: '>=6'} + dependencies: + chalk: 2.4.2 + debug: 3.2.7 + fancy-log: 1.3.3 + lodash.assign: 4.2.0 + readable-stream: 3.6.2 + tiny-lr: 1.1.1 + vinyl: 2.2.1 + transitivePeerDependencies: + - supports-color + dev: true + + /gulp-order/1.2.0: + resolution: {integrity: sha512-RduLhxbEye1NT6fnvev3792VUsZA8F+5zRFczAgpOSELz587Fv1Nn7l4ZiaiQzFPV7aECh1WRc2dPWjjcxCa0g==} + engines: {node: '>=6.0.0'} + dependencies: + minimatch: 3.0.8 + stable: 0.1.8 + through: 2.3.8 + dev: true + + /gulp-postcss/9.0.1_postcss@8.4.31: + resolution: {integrity: sha512-9QUHam5JyXwGUxaaMvoFQVT44tohpEFpM8xBdPfdwTYGM0AItS1iTQz0MpsF8Jroh7GF5Jt2GVPaYgvy8qD2Fw==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.0 + dependencies: + fancy-log: 1.3.3 + plugin-error: 1.0.1 + postcss: 8.4.31 + postcss-load-config: 3.1.4_postcss@8.4.31 + vinyl-sourcemaps-apply: 0.2.1 + transitivePeerDependencies: + - ts-node + dev: true + + /gulp-prettier/4.0.0: + resolution: {integrity: sha512-REx99tBRRKJD7qLPaKpplReM9cq2vFvqhMbcUZtJEVjxGjb5Ji+gN9vi8bsM8UhnDV+l0Zrf5x6L4uZiDmvGFQ==} + engines: {node: '>=12'} + dependencies: + plugin-error: 1.0.1 + prettier: 2.8.8 + through2: 4.0.2 + dev: true + + /gulp-pug-linter/1.5.0: + resolution: {integrity: sha512-DjjRMui89T4lb1b6UUQdZvjF6XNDrbLbBbvg9fSpYgeaYgFE6pEixDQtvn7FuJjjRzv1Eiy3D8IzUWDhSleKAw==} + engines: {node: '>=10.x'} + dependencies: + fancy-log: 1.3.3 + plugin-error: 1.0.1 + pug-lint: 2.7.0 + through2: 4.0.2 + dev: true + + /gulp-purgecss/5.0.0: + resolution: {integrity: sha512-/s4bEI1JhwhCDrYu665rfJ/O9uMfAked3k6pQJlDC86JwJAUMXiMxfex6fV0WP36kRb+9ZTLVb6RC/DgfbS4/g==} + dependencies: + glob: 8.1.0 + plugin-error: 2.0.1 + purgecss: 5.0.0 + through2: 4.0.2 + dev: true + + /gulp-remark/9.0.0: + resolution: {integrity: sha512-YV4i5UvTnq2z9iZBQ2BhFvbNkdba2EGoHGwYXnE0rGg6+j+nWw2FwqC/Vtl8y+5t8n0a/YUebMMVXU1xy8ocAg==} + dependencies: + remark: 13.0.0 + unified-engine-gulp: 8.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /gulp-rename/2.0.0: + resolution: {integrity: sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==} + engines: {node: '>=4'} + dev: false + + /gulp-replace/1.1.4: + resolution: {integrity: sha512-SVSF7ikuWKhpAW4l4wapAqPPSToJoiNKsbDoUnRrSgwZHH7lH8pbPeQj1aOVYQrbZKhfSVBxVW+Py7vtulRktw==} + engines: {node: '>=10'} + dependencies: + '@types/node': 20.8.5 + '@types/vinyl': 2.0.8 + istextorbinary: 3.3.0 + replacestream: 4.0.3 + yargs-parser: 21.1.1 + dev: false + + /gulp-rev-all/3.0.0: + resolution: {integrity: sha512-NJaiLopZA1f+OuUXcsmtwtB1aXZl/PaO0JRm/P8qwwGTJ6BR1OLASrKkehFNMxoylBbPGPfTxFR7BQ+EoaJIvQ==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + fancy-log: 1.3.3 + isbinaryfile: 4.0.10 + merge: 2.1.1 + plugin-error: 1.0.1 + through2: 4.0.2 + vinyl: 2.2.1 + dev: true + + /gulp-rev-sri/0.0.4: + resolution: {integrity: sha512-96aLNlEVXthNOjGFfxa51Uw/D208orMFggyf6xw/crOPDgSNkfLKcCsxRcmnKLC8Y3T/7YL8SNJBjadif3wylg==} + engines: {node: '>=8.3'} + dependencies: + hasha: 5.2.2 + vinyl: 2.2.1 + dev: true + + /gulp-rev/9.0.0: + resolution: {integrity: sha512-Ytx/uzDA2xNxHlPG8GReS1ut00msd0HlKDk9Ai/0xF2yvg+DAeGRAviCFlQzQmdZtqAoXznYspwWoGEoxDvhyA==} + engines: {node: '>=6'} + dependencies: + modify-filename: 1.1.0 + plugin-error: 1.0.1 + rev-hash: 2.0.0 + rev-path: 2.0.0 + sort-keys: 2.0.0 + through2: 2.0.5 + vinyl: 2.2.1 + vinyl-file: 3.0.0 + dev: true + + /gulp-sass/5.1.0: + resolution: {integrity: sha512-7VT0uaF+VZCmkNBglfe1b34bxn/AfcssquLKVDYnCDJ3xNBaW7cUuI3p3BQmoKcoKFrs9jdzUxyb+u+NGfL4OQ==} + engines: {node: '>=12'} + dependencies: + lodash.clonedeep: 4.5.0 + picocolors: 1.0.0 + plugin-error: 1.0.1 + replace-ext: 2.0.0 + strip-ansi: 6.0.1 + vinyl-sourcemaps-apply: 0.2.1 + dev: true + + /gulp-sourcemaps/3.0.0: + resolution: {integrity: sha512-RqvUckJkuYqy4VaIH60RMal4ZtG0IbQ6PXMNkNsshEGJ9cldUPRb/YCgboYae+CLAs1HQNb4ADTKCx65HInquQ==} + engines: {node: '>= 6'} + dependencies: + '@gulp-sourcemaps/identity-map': 2.0.1 + '@gulp-sourcemaps/map-sources': 1.0.0 + acorn: 6.4.2 + convert-source-map: 1.9.0 + css: 3.0.0 + debug-fabulous: 1.1.0 + detect-newline: 2.1.0 + graceful-fs: 4.2.11 + source-map: 0.6.1 + strip-bom-string: 1.0.0 + through2: 2.0.5 + transitivePeerDependencies: + - supports-color + dev: true + + /gulp-terser/2.1.0: + resolution: {integrity: sha512-lQ3+JUdHDVISAlUIUSZ/G9Dz/rBQHxOiYDQ70IVWFQeh4b33TC1MCIU+K18w07PS3rq/CVc34aQO4SUbdaNMPQ==} + engines: {node: '>=10'} + dependencies: + plugin-error: 1.0.1 + terser: 5.21.0 + through2: 4.0.2 + vinyl-sourcemaps-apply: 0.2.1 + dev: true + + /gulp-unassert/3.0.0: + resolution: {integrity: sha512-KmkzdxKLGd8SxH45KN/0ilw9MPSrWMWHNd5Xg5dZAKtjj10VYJp7qbKeW7d39r3EG9AZQhcdvwx+YuGq6Xve6A==} + dependencies: + acorn: 8.10.0 + bufferstreams: 3.0.0 + convert-source-map: 1.9.0 + escodegen: 2.1.0 + multi-stage-sourcemap: 0.3.1 + plugin-error: 2.0.1 + through2: 4.0.2 + unassert: 2.0.2 + vinyl-sourcemaps-apply: 0.2.1 + dev: true + + /gulp-xo/0.25.0_gulp@4.0.2: + resolution: {integrity: sha512-oCsUw7TrO8BLsSBPPCKhzfsLnb5qKiY/U1d7tCsvAQ5JN3I6swLoOxZEk6Sr381LG5pJlZF+i6AjsA1mfZzbjw==} + engines: {node: '>=10'} + peerDependencies: + gulp: '>=4' + peerDependenciesMeta: + gulp: + optional: true + dependencies: + eslint-formatter-pretty: 3.0.1 + gulp: 4.0.2 + gulp-eslint: 6.0.0 + plugin-error: 1.0.1 + through2: 3.0.2 + xo: 0.32.1 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - supports-color + - webpack + dev: true + + /gulp/4.0.2: + resolution: {integrity: sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==} + engines: {node: '>= 0.10'} + hasBin: true + dependencies: + glob-watcher: 5.0.5 + gulp-cli: 2.3.0 + undertaker: 1.3.0 + vinyl-fs: 3.0.3 + transitivePeerDependencies: + - supports-color + dev: true + + /gulplog/1.0.0: + resolution: {integrity: sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==} + engines: {node: '>= 0.10'} + dependencies: + glogg: 1.0.2 + dev: true + + /handle-thing/2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + dev: false + + /handlebars/4.7.7: + resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} + engines: {node: '>=0.4.7'} + hasBin: true + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.17.4 + dev: false + + /har-schema/2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} + dev: false + + /har-validator/5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} + deprecated: this library is no longer supported + dependencies: + ajv: 6.12.6 + har-schema: 2.0.0 + dev: false + + /hard-rejection/2.1.0: + resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} + engines: {node: '>=6'} + dev: true + + /has-ansi/2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + + /has-bigints/1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag/1.0.0: + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} + engines: {node: '>=0.10.0'} + + /has-flag/3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + /has-property-descriptors/1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.2.1 + dev: true + + /has-proto/1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + + /has-symbol-support-x/1.4.2: + resolution: {integrity: sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==} + dev: true + + /has-symbols/1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + /has-to-string-tag-x/1.4.1: + resolution: {integrity: sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==} + dependencies: + has-symbol-support-x: 1.4.2 + dev: true + + /has-tostringtag/1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + + /has-unicode/2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + + /has-value/0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 + dev: true + + /has-value/1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + dev: true + + /has-value/2.0.2: + resolution: {integrity: sha512-ybKOlcRsK2MqrM3Hmz/lQxXHZ6ejzSPzpNabKB45jb5qDgJvKPa3SdapTsTLwEb9WltgWpOmNax7i+DzNOk4TA==} + engines: {node: '>=6'} + dependencies: + get-value: 3.0.1 + has-values: 2.0.1 + dev: false + + /has-values/0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} + dev: true + + /has-values/1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + dev: true + + /has-values/2.0.1: + resolution: {integrity: sha512-+QdH3jOmq9P8GfdjFg0eJudqx1FqU62NQJ4P16rOEHeRdl7ckgwn6uqQjzYE0ZoHVV/e5E2esuJ5Gl5+HUW19w==} + engines: {node: '>=6'} + dependencies: + kind-of: 6.0.3 + dev: false + + /has-yarn/2.1.0: + resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} + engines: {node: '>=8'} + dev: true + + /has/1.0.4: + resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} + engines: {node: '>= 0.4.0'} + + /hash-base/3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + dev: true + + /hash-wasm/4.9.0: + resolution: {integrity: sha512-7SW7ejyfnRxuOc7ptQHSf4LDoZaWOivfzqw+5rpcQku0nHfmicPKE51ra9BiRLAmT8+gGLestr1XroUkqdjL6w==} + dev: false + + /hash.js/1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + + /hasha/5.2.2: + resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} + engines: {node: '>=8'} + dependencies: + is-stream: 2.0.1 + type-fest: 0.8.1 + + /hast-to-hyperscript/9.0.1: + resolution: {integrity: sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==} + dependencies: + '@types/unist': 2.0.8 + comma-separated-tokens: 1.0.8 + property-information: 5.6.0 + space-separated-tokens: 1.1.5 + style-to-object: 0.3.0 + unist-util-is: 4.1.0 + web-namespaces: 1.1.4 + dev: false + + /hast-util-from-parse5/6.0.1: + resolution: {integrity: sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==} + dependencies: + '@types/parse5': 5.0.3 + hastscript: 6.0.0 + property-information: 5.6.0 + vfile: 4.2.1 + vfile-location: 3.2.0 + web-namespaces: 1.1.4 + dev: false + + /hast-util-is-element/1.1.0: + resolution: {integrity: sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==} + dev: false + + /hast-util-parse-selector/2.2.5: + resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} + dev: false + + /hast-util-raw/6.1.0: + resolution: {integrity: sha512-5FoZLDHBpka20OlZZ4I/+RBw5piVQ8iI1doEvffQhx5CbCyTtP8UCq8Tw6NmTAMtXgsQxmhW7Ly8OdFre5/YMQ==} + dependencies: + '@types/hast': 2.3.6 + hast-util-from-parse5: 6.0.1 + hast-util-to-parse5: 6.0.0 + html-void-elements: 1.0.5 + parse5: 6.0.1 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + vfile: 4.2.1 + web-namespaces: 1.1.4 + xtend: 4.0.2 + zwitch: 1.0.5 + dev: false + + /hast-util-to-html/7.1.3: + resolution: {integrity: sha512-yk2+1p3EJTEE9ZEUkgHsUSVhIpCsL/bvT8E5GzmWc+N1Po5gBw+0F8bo7dpxXR0nu0bQVxVZGX2lBGF21CmeDw==} + dependencies: + ccount: 1.1.0 + comma-separated-tokens: 1.0.8 + hast-util-is-element: 1.1.0 + hast-util-whitespace: 1.0.4 + html-void-elements: 1.0.5 + property-information: 5.6.0 + space-separated-tokens: 1.1.5 + stringify-entities: 3.1.0 + unist-util-is: 4.1.0 + xtend: 4.0.2 + dev: false + + /hast-util-to-parse5/6.0.0: + resolution: {integrity: sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==} + dependencies: + hast-to-hyperscript: 9.0.1 + property-information: 5.6.0 + web-namespaces: 1.1.4 + xtend: 4.0.2 + zwitch: 1.0.5 + dev: false + + /hast-util-whitespace/1.0.4: + resolution: {integrity: sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==} + dev: false + + /hastscript/6.0.0: + resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} + dependencies: + '@types/hast': 2.3.6 + comma-separated-tokens: 1.0.8 + hast-util-parse-selector: 2.2.5 + property-information: 5.6.0 + space-separated-tokens: 1.1.5 + dev: false + + /he/1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: false + + /helmet-crossdomain/0.4.0: + resolution: {integrity: sha512-AB4DTykRw3HCOxovD1nPR16hllrVImeFp5VBV9/twj66lJ2nU75DP8FPL0/Jp4jj79JhTfG+pFI2MD02kWJ+fA==} + engines: {node: '>=4.0.0'} + dev: false + + /helmet-csp/2.10.0: + resolution: {integrity: sha512-Rz953ZNEFk8sT2XvewXkYN0Ho4GEZdjAZy4stjiEQV3eN7GDxg1QKmYggH7otDyIA7uGA6XnUMVSgeJwbR5X+w==} + engines: {node: '>=4.0.0'} + dependencies: + bowser: 2.9.0 + camelize: 1.0.0 + content-security-policy-builder: 2.1.0 + dasherize: 2.0.0 + dev: false + + /helmet/3.23.3: + resolution: {integrity: sha512-U3MeYdzPJQhtvqAVBPntVgAvNSOJyagwZwyKsFdyRa8TV3pOKVFljalPOCxbw5Wwf2kncGhmP0qHjyazIdNdSA==} + engines: {node: '>=4.0.0'} + dependencies: + depd: 2.0.0 + dont-sniff-mimetype: 1.1.0 + feature-policy: 0.3.0 + helmet-crossdomain: 0.4.0 + helmet-csp: 2.10.0 + hide-powered-by: 1.1.0 + hpkp: 2.0.0 + hsts: 2.2.0 + nocache: 2.1.0 + referrer-policy: 1.2.0 + x-xss-protection: 1.3.0 + dev: false + + /hexa-color-regex/1.0.0: + resolution: {integrity: sha512-ACDFPM+uYRYhFdnrWNZ+63RVEET9y4l0JiGEW53erfErw7J6okqMJ++4qT7P7xEkBZOSMeiMHQ4Z4H9ByaBgQQ==} + dev: false + + /hexoid/1.0.0: + resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} + engines: {node: '>=8'} + + /hide-powered-by/1.1.0: + resolution: {integrity: sha512-Io1zA2yOA1YJslkr+AJlWSf2yWFkKjvkcL9Ni1XSUqnGLr/qRQe2UI3Cn/J9MsJht7yEVCe0SscY1HgVMujbgg==} + engines: {node: '>=4.0.0'} + dev: false + + /highlight.js/11.9.0: + resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==} + engines: {node: '>=12.0.0'} + dev: false + + /hmac-drbg/1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + + /homedir-polyfill/1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + dependencies: + parse-passwd: 1.0.0 + dev: true + + /hosted-git-info/2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + /hosted-git-info/4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + dependencies: + lru-cache: 6.0.0 + dev: true + + /hosted-git-info/5.2.1: + resolution: {integrity: sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + lru-cache: 7.18.3 + dev: true + + /hostile/1.3.3: + resolution: {integrity: sha512-y1CHgVaaWfC5xWUXRx4PCzZzHy4sGb/XGze8y583hKx7yLkDTsIt47QVGiCcnBxUyV8A8s0e+DMjBNye3W3ONg==} + hasBin: true + dependencies: + chalk: 4.1.2 + minimist: 1.2.8 + once: 1.4.0 + split: 1.0.1 + through: 2.3.8 + dev: false + + /hpack.js/2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + dependencies: + inherits: 2.0.4 + obuf: 1.1.2 + readable-stream: 2.3.8 + wbuf: 1.7.3 + dev: false + + /hpagent/1.2.0: + resolution: {integrity: sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==} + engines: {node: '>=14'} + dev: false + + /hpkp/2.0.0: + resolution: {integrity: sha512-TaZpC6cO/k3DFsjfzz1LnOobbVSq+J+7WpJxrVtN4L+8+BPQj8iBDRB2Dx49613N+e7/+ZSQ9ra+xZm7Blf4wg==} + dev: false + + /hsts/2.2.0: + resolution: {integrity: sha512-ToaTnQ2TbJkochoVcdXYm4HOCliNozlviNsg+X2XQLQvZNI/kCHR9rZxVYpJB3UPcHz80PgxRyWQ7PdU1r+VBQ==} + engines: {node: '>=4.0.0'} + dependencies: + depd: 2.0.0 + dev: false + + /html-encoding-sniffer/2.0.1: + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + engines: {node: '>=10'} + dependencies: + whatwg-encoding: 1.0.5 + dev: false + + /html-entities/1.4.0: + resolution: {integrity: sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==} + dev: false + + /html-escaper/2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + + /html-tags/3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + + /html-to-text/8.2.1: + resolution: {integrity: sha512-aN/3JvAk8qFsWVeE9InWAWueLXrbkoVZy0TkzaGhoRBC2gCFEeRLDDJN3/ijIGHohy6H+SZzUQWN/hcYtaPK8w==} + engines: {node: '>=10.23.2'} + hasBin: true + dependencies: + '@selderee/plugin-htmlparser2': 0.6.0 + deepmerge: 4.3.1 + he: 1.2.0 + htmlparser2: 6.1.0 + minimist: 1.2.8 + selderee: 0.6.0 + dev: false + + /html-to-text/9.0.5: + resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} + engines: {node: '>=14'} + dependencies: + '@selderee/plugin-htmlparser2': 0.11.0 + deepmerge: 4.3.1 + dom-serializer: 2.0.0 + htmlparser2: 8.0.2 + selderee: 0.11.0 + dev: false + + /html-void-elements/1.0.5: + resolution: {integrity: sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==} + dev: false + + /htmlescape/1.1.1: + resolution: {integrity: sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg==} + engines: {node: '>=0.10'} + dev: true + + /htmlhint/1.1.4: + resolution: {integrity: sha512-tSKPefhIaaWDk/vKxAOQbN+QwZmDeJCq3bZZGbJMoMQAfTjepudC+MkuT9MOBbuQI3dLLzDWbmU7fLV3JASC7Q==} + hasBin: true + dependencies: + async: 3.2.3 + chalk: 4.1.2 + commander: 9.5.0 + glob: 7.2.3 + is-glob: 4.0.3 + node-fetch: 2.7.0 + strip-json-comments: 3.1.0 + xml: 1.0.1 + transitivePeerDependencies: + - encoding + dev: false + + /htmlparser2/5.0.1: + resolution: {integrity: sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==} + dependencies: + domelementtype: 2.3.0 + domhandler: 3.3.0 + domutils: 2.8.0 + entities: 2.2.0 + dev: false + + /htmlparser2/6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 2.2.0 + dev: false + + /htmlparser2/8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + dev: false + + /http-assert/1.5.0: + resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} + engines: {node: '>= 0.8'} + dependencies: + deep-equal: 1.0.1 + http-errors: 1.8.1 + dev: false + + /http-cache-semantics/3.8.1: + resolution: {integrity: sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==} + dev: true + + /http-cache-semantics/4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + /http-deceiver/1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + dev: false + + /http-errors/1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + dev: false + + /http-errors/1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + dev: false + + /http-errors/2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + + /http-headers/3.0.2: + resolution: {integrity: sha512-87E1I+2Wg4dxxz4rcxElo3dxO/w1ZtgL1yA0Sb6vH3qU16vRKq1NjWQv9SCY3ly2OQROcoxHZOUpmelS+k6wOw==} + dependencies: + next-line: 1.1.0 + dev: false + + /http-parser-js/0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + dev: true + + /http-proxy-agent/4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + /http-proxy-agent/5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + /http-signature/1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} + dependencies: + assert-plus: 1.0.0 + jsprim: 1.4.2 + sshpk: 1.17.0 + dev: false + + /http-signature/1.3.6: + resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==} + engines: {node: '>=0.10'} + dependencies: + assert-plus: 1.0.0 + jsprim: 2.0.2 + sshpk: 1.17.0 + dev: false + + /http2-wrapper/1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + dev: false + + /http2-wrapper/2.2.0: + resolution: {integrity: sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==} + engines: {node: '>=10.19.0'} + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + dev: true + + /https-browserify/1.0.0: + resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} + dev: true + + /https-proxy-agent/5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + /human-interval/2.0.1: + resolution: {integrity: sha512-r4Aotzf+OtKIGQCB3odUowy4GfUDTy3aTWTfLd7ZF2gBCy3XW3v/dJLRefZnOFFnjqs5B1TypvS8WarpBkYUNQ==} + dependencies: + numbered: 1.1.0 + dev: false + + /human-signals/1.1.1: + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} + engines: {node: '>=8.12.0'} + dev: true + + /human-signals/2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /human-signals/4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + + /humanize-ms/1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + dependencies: + ms: 2.1.3 + + /humanize-string/2.1.0: + resolution: {integrity: sha512-sQ+hqmxyXW8Cj7iqxcQxD7oSy3+AXnIZXdUF9lQMkzaG8dtbKAB8U7lCtViMnwQ+MpdCKsO2Kiij3G6UUXq/Xg==} + engines: {node: '>=6'} + dependencies: + decamelize: 2.0.0 + dev: false + + /humanname/0.2.2: + resolution: {integrity: sha512-RwPydlXSu2UvIAtZNGfze+SDiqJZKbkZjq8pUhw+F3vGUbj2aqFkEdvrQ5JyELbWcLh9T/vzx7Hm1I43ME90fg==} + engines: {node: '>= 0.8.0'} + dev: false + + /husky/8.0.3: + resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /i18n-locales/0.0.5: + resolution: {integrity: sha512-Kve1AHy6rqyfJHPy8MIvaKBKhHhHPXV+a/TgMkjp3UBhO3gfWR40ZQn8Xy7LI6g3FhmbvkFtv+GCZy6yvuyeHQ==} + dependencies: + '@ladjs/country-language': 0.2.1 + dev: false + + /i18n/0.15.1: + resolution: {integrity: sha512-yue187t8MqUPMHdKjiZGrX+L+xcUsDClGO0Cz4loaKUOK9WrGw5pgan4bv130utOwX7fHE9w2iUeHFalVQWkXA==} + engines: {node: '>=10'} + dependencies: + '@messageformat/core': 3.2.0 + debug: 4.3.4 + fast-printf: 1.6.9 + make-plural: 7.3.0 + math-interval-parser: 2.0.1 + mustache: 4.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /iconv-lite/0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + + /iconv-lite/0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + + /iconv/3.0.1: + resolution: {integrity: sha512-lJnFLxVc0d82R7GfU7a9RujKVUQ3Eee19tPKWZWBJtAEGRHVEyFzCtbNl3GPKuDnHBBRT4/nDS4Ru9AIDT72qA==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dev: false + + /ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + /ignore-by-default/1.0.1: + resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} + dev: true + + /ignore-by-default/2.1.0: + resolution: {integrity: sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==} + engines: {node: '>=10 <11 || >=12 <13 || >=14'} + dev: true + + /ignore/4.0.6: + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} + engines: {node: '>= 4'} + dev: true + + /ignore/5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + + /imagemin-gifsicle/7.0.0: + resolution: {integrity: sha512-LaP38xhxAwS3W8PFh4y5iQ6feoTSF+dTAXFRUEYQWYst6Xd+9L/iPk34QGgK/VO/objmIlmq9TStGfVY2IcHIA==} + engines: {node: '>=10'} + requiresBuild: true + dependencies: + execa: 1.0.0 + gifsicle: 5.3.0 + is-gif: 3.0.0 + dev: true + optional: true + + /imagemin-mozjpeg/8.0.0: + resolution: {integrity: sha512-+EciPiIjCb8JWjQNr1q8sYWYf7GDCNDxPYnkD11TNIjjWNzaV+oTg4DpOPQjl5ZX/KRCPMEgS79zLYAQzLitIA==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + execa: 1.0.0 + is-jpg: 2.0.0 + mozjpeg: 6.0.1 + dev: true + optional: true + + /imagemin-optipng/7.1.0: + resolution: {integrity: sha512-JNORTZ6j6untH7e5gF4aWdhDCxe3ODsSLKs/f7Grewy3ebZpl1ZsU+VUTPY4rzeHgaFA8GSWOoA8V2M3OixWZQ==} + engines: {node: '>=8'} + requiresBuild: true + dependencies: + exec-buffer: 3.2.0 + is-png: 2.0.0 + optipng-bin: 6.0.0 + dev: true + optional: true + + /imagemin-pngquant/9.0.2: + resolution: {integrity: sha512-cj//bKo8+Frd/DM8l6Pg9pws1pnDUjgb7ae++sUX1kUVdv2nrngPykhiUOgFeE0LGY/LmUbCf4egCHC4YUcZSg==} + engines: {node: '>=10'} + dependencies: + execa: 4.1.0 + is-png: 2.0.0 + is-stream: 2.0.1 + ow: 0.17.0 + pngquant-bin: 6.0.1 + dev: true + + /imagemin-svgo/7.1.0: + resolution: {integrity: sha512-0JlIZNWP0Luasn1HT82uB9nU9aa+vUj6kpT+MjPW11LbprXC+iC4HDwn1r4Q2/91qj4iy9tRZNsFySMlEpLdpg==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + is-svg: 4.4.0 + svgo: 1.3.2 + dev: true + optional: true + + /imagemin/7.0.1: + resolution: {integrity: sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==} + engines: {node: '>=8'} + dependencies: + file-type: 12.4.2 + globby: 10.0.2 + graceful-fs: 4.2.11 + junk: 3.1.0 + make-dir: 3.1.0 + p-pipe: 3.1.0 + replace-ext: 1.0.1 + dev: true + + /imapflow/1.0.144: + resolution: {integrity: sha512-pJENOyIn3oaJwtMbIty4cYcxguNR4oWz+izTo267jcLOpBXrjwnQG2jU7+yEDESxaPazVXlcbr/5ZzBRglT51Q==} + dependencies: + encoding-japanese: 2.0.0 + iconv-lite: 0.6.3 + libbase64: 1.2.1 + libmime: 5.2.1 + libqp: 2.0.1 + mailsplit: 5.4.0 + nodemailer: 6.9.5 + pino: 8.15.1 + socks: 2.7.1 + dev: false + + /immutable/4.3.4: + resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} + dev: true + + /import-fresh/3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /import-lazy/2.1.0: + resolution: {integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==} + engines: {node: '>=4'} + dev: true + + /import-lazy/3.1.0: + resolution: {integrity: sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==} + engines: {node: '>=6'} + dev: true + + /import-lazy/4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + dev: true + + /import-meta-resolve/2.2.2: + resolution: {integrity: sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==} + dev: true + + /import-modules/2.1.0: + resolution: {integrity: sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==} + engines: {node: '>=8'} + dev: true + + /imurmurhash/0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + /indent-string/2.1.0: + resolution: {integrity: sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==} + engines: {node: '>=0.10.0'} + dependencies: + repeating: 2.0.1 + dev: true + + /indent-string/4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + /indent-string/5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + dev: true + + /indexof/0.0.1: + resolution: {integrity: sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==} + dev: true + + /infer-owner/1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + dev: true + + /inflation/2.0.0: + resolution: {integrity: sha512-m3xv4hJYR2oXw4o4Y5l6P5P16WYmazYof+el6Al3f+YlggGj6qT9kImBAnzDelRALnP5d3h4jGBPKzYCizjZZw==} + engines: {node: '>= 0.8.0'} + dev: false + + /inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits/2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /ini/1.3.7: + resolution: {integrity: sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==} + dev: true + + /ini/1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + /ini/4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /inline-source-map/0.5.0: + resolution: {integrity: sha512-2WtHG0qX9OH9TVcxsLVfq3Tzr+qtL6PtWgoh0XAAKe4KkdA/57Q+OGJuRJHA4mZ2OZnkJ/ZAaXf9krLB12/nIg==} + dependencies: + source-map: 0.4.4 + dev: true + + /inline-source-map/0.6.2: + resolution: {integrity: sha512-0mVWSSbNDvedDWIN4wxLsdPM4a7cIPcpyMxj3QZ406QRwQ6ePGB1YIHxVPjqpcUGbWQ5C+nHTwGNWAGvt7ggVA==} + dependencies: + source-map: 0.5.7 + dev: true + + /inline-style-parser/0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} + dev: false + + /innertext/1.0.3: + resolution: {integrity: sha512-ZC410b7IbrTrmt8bQb27xUOJgXkJu+XL6MVncb9FGyxjRIHyQqNjpSDY20zvSUttkAiYj0dait/67/sXyWvwYg==} + dependencies: + html-entities: 1.4.0 + dev: false + + /inquirer/7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + dev: true + + /insert-module-globals/7.2.1: + resolution: {integrity: sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==} + hasBin: true + dependencies: + JSONStream: 1.3.5 + acorn-node: 1.8.2 + combine-source-map: 0.8.0 + concat-stream: 1.6.2 + is-buffer: 1.1.6 + path-is-absolute: 1.0.1 + process: 0.11.10 + through2: 2.0.5 + undeclared-identifiers: 1.1.3 + xtend: 4.0.2 + dev: true + + /install-artifact-from-github/1.3.3: + resolution: {integrity: sha512-x79SL0d8WOi1ZjXSTUqqs0GPQZ92YArJAN9O46wgU9wdH2U9ecyyhB9YGDbPe2OLV4ptmt6AZYRQZ2GydQZosQ==} + hasBin: true + dev: false + + /internal-slot/1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.4 + side-channel: 1.0.4 + dev: true + + /interpret/1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + dev: true + + /into-stream/3.1.0: + resolution: {integrity: sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==} + engines: {node: '>=4'} + dependencies: + from2: 2.3.0 + p-is-promise: 1.1.0 + dev: true + + /into-stream/6.0.0: + resolution: {integrity: sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==} + engines: {node: '>=10'} + dependencies: + from2: 2.3.0 + p-is-promise: 3.0.0 + dev: false + + /invert-kv/1.0.0: + resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==} + engines: {node: '>=0.10.0'} + dev: true + + /ioredfour/1.2.0-ioredis-07: + resolution: {integrity: sha512-RQ28c1V32DBsOFnizKJRJIzfzJLaX/DkivDeP6xWJWL1DcEVYnPLpUw5DQZEQIqKPX0/TgpHLZMhL0lBquLQyw==} + dependencies: + ioredis: 5.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /ioredis-mock/8.9.0_ioredis@5.3.2: + resolution: {integrity: sha512-yIglcCkI1lvhwJVoMsR51fotZVsPsSk07ecTCgRTRlicG0Vq3lke6aAaHklyjmRNRsdYAgswqC2A0bPtQK4LSw==} + engines: {node: '>=12.22'} + peerDependencies: + '@types/ioredis-mock': ^8 + ioredis: ^5 + dependencies: + '@ioredis/as-callback': 3.0.0 + '@ioredis/commands': 1.2.0 + fengari: 0.1.4 + fengari-interop: 0.1.3_fengari@0.1.4 + ioredis: 5.3.2 + semver: 7.5.4 + dev: true + + /ioredis/4.28.5: + resolution: {integrity: sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==} + engines: {node: '>=6'} + dependencies: + cluster-key-slot: 1.1.2 + debug: 4.3.4 + denque: 1.5.1 + lodash.defaults: 4.2.0 + lodash.flatten: 4.4.0 + lodash.isarguments: 3.1.0 + p-map: 2.1.0 + redis-commands: 1.7.0 + redis-errors: 1.2.0 + redis-parser: 3.0.0 + standard-as-callback: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /ioredis/5.3.1: + resolution: {integrity: sha512-C+IBcMysM6v52pTLItYMeV4Hz7uriGtoJdz7SSBDX6u+zwSYGirLdQh3L7t/OItWITcw3gTFMjJReYUwS4zihg==} + engines: {node: '>=12.22.0'} + dependencies: + '@ioredis/commands': 1.2.0 + cluster-key-slot: 1.1.2 + debug: 4.3.4 + denque: 2.1.0 + lodash.defaults: 4.2.0 + lodash.isarguments: 3.1.0 + redis-errors: 1.2.0 + redis-parser: 3.0.0 + standard-as-callback: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /ioredis/5.3.2: + resolution: {integrity: sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==} + engines: {node: '>=12.22.0'} + dependencies: + '@ioredis/commands': 1.2.0 + cluster-key-slot: 1.1.2 + debug: 4.3.4 + denque: 2.1.0 + lodash.defaults: 4.2.0 + lodash.isarguments: 3.1.0 + redis-errors: 1.2.0 + redis-parser: 3.0.0 + standard-as-callback: 2.1.0 + transitivePeerDependencies: + - supports-color + + /ip-regex/4.3.0: + resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} + engines: {node: '>=8'} + dev: false + + /ip-regex/5.0.0: + resolution: {integrity: sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + + /ip/1.1.8: + resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} + dev: false + + /ip/2.0.0: + resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} + + /ipaddr.js/2.0.1: + resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==} + engines: {node: '>= 10'} + dev: false + + /ipaddr.js/2.1.0: + resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} + engines: {node: '>= 10'} + dev: false + + /ipv6-normalize/1.0.1: + resolution: {integrity: sha512-Bm6H79i01DjgGTCWjUuCjJ6QDo1HB96PT/xCYuyJUP9WFbVDrLSbG4EZCvOCun2rNswZb0c3e4Jt/ws795esHA==} + dev: false + + /irregular-plurals/2.0.0: + resolution: {integrity: sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==} + engines: {node: '>=6'} + dev: true + + /irregular-plurals/3.5.0: + resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==} + engines: {node: '>=8'} + dev: true + + /is-absolute/1.0.0: + resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} + engines: {node: '>=0.10.0'} + dependencies: + is-relative: 1.0.0 + is-windows: 1.0.2 + dev: true + + /is-accessor-descriptor/0.1.6: + resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-accessor-descriptor/1.0.0: + resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 6.0.3 + dev: true + + /is-alphabetical/1.0.4: + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} + + /is-alphanumerical/1.0.4: + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} + dependencies: + is-alphabetical: 1.0.4 + is-decimal: 1.0.4 + + /is-arguments/1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-array-buffer/3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + + /is-arrayish/0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + /is-arrayish/0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: false + + /is-bigint/1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-binary-path/1.0.1: + resolution: {integrity: sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==} + engines: {node: '>=0.10.0'} + dependencies: + binary-extensions: 1.13.1 + dev: true + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-boolean-object/1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-buffer/1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + + /is-buffer/2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + + /is-builtin-module/3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + dependencies: + builtin-modules: 3.3.0 + dev: true + + /is-callable/1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + /is-ci/2.0.0: + resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} + hasBin: true + dependencies: + ci-info: 2.0.0 + dev: true + + /is-ci/3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true + dependencies: + ci-info: 3.9.0 + dev: false + + /is-core-module/2.13.0: + resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + dependencies: + has: 1.0.4 + + /is-data-descriptor/0.1.4: + resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-data-descriptor/1.0.0: + resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 6.0.3 + dev: true + + /is-date-object/1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-decimal/1.0.4: + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} + + /is-descriptor/0.1.6: + resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: 0.1.6 + is-data-descriptor: 0.1.4 + kind-of: 5.1.0 + dev: true + + /is-descriptor/1.0.2: + resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: 1.0.0 + is-data-descriptor: 1.0.0 + kind-of: 6.0.3 + dev: true + + /is-docker/2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + /is-empty/1.2.0: + resolution: {integrity: sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==} + dev: true + + /is-error/2.2.2: + resolution: {integrity: sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==} + dev: true + + /is-expression/3.0.0: + resolution: {integrity: sha512-vyMeQMq+AiH5uUnoBfMTwf18tO3bM6k1QXBE9D6ueAAquEfCZe3AJPtud9g6qS0+4X8xA7ndpZiDyeb2l2qOBw==} + dependencies: + acorn: 4.0.13 + object-assign: 4.1.1 + dev: true + + /is-expression/4.0.0: + resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==} + dependencies: + acorn: 7.4.1 + object-assign: 4.1.1 + + /is-extendable/0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + + /is-extendable/1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + dependencies: + is-plain-object: 2.0.4 + dev: true + + /is-extglob/1.0.0: + resolution: {integrity: sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==} + engines: {node: '>=0.10.0'} + dev: false + + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-finite/1.1.0: + resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==} + engines: {node: '>=0.10.0'} + dev: true + + /is-fqdn/2.0.1: + resolution: {integrity: sha512-oQgLvyS2gWO5ZT3EbgdpkIN5fORg5Sadn0SQ4seTwt/fuKxQHrg8k/BaI02dGgcek+Gc2zxrd1tBo7h5HyBdNA==} + engines: {node: '>=6'} + dev: false + + /is-fullwidth-code-point/1.0.0: + resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} + engines: {node: '>=0.10.0'} + dependencies: + number-is-nan: 1.0.1 + dev: true + + /is-fullwidth-code-point/2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + dev: true + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + /is-fullwidth-code-point/4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + dev: true + + /is-generator-function/1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + + /is-get-set-prop/1.0.0: + resolution: {integrity: sha512-DvAYZ1ZgGUz4lzxKMPYlt08qAUqyG9ckSg2pIjfvcQ7+pkVNUHk8yVLXOnCLe5WKXhLop8oorWFBJHpwWQpszQ==} + dependencies: + get-set-props: 0.1.0 + lowercase-keys: 1.0.1 + dev: true + + /is-gif/3.0.0: + resolution: {integrity: sha512-IqJ/jlbw5WJSNfwQ/lHEDXF8rxhRgF6ythk2oiEvhpG29F704eX9NO6TvPfMiq9DrbwgcEDnETYNcZDPewQoVw==} + engines: {node: '>=6'} + dependencies: + file-type: 10.11.0 + dev: true + optional: true + + /is-glob/2.0.1: + resolution: {integrity: sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 1.0.0 + dev: false + + /is-glob/3.1.0: + resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-hexadecimal/1.0.4: + resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} + + /is-html/2.0.0: + resolution: {integrity: sha512-S+OpgB5i7wzIue/YSE5hg0e5ZYfG3hhpNh9KGl6ayJ38p7ED6wxQLd1TV91xHpcTvw90KMJ9EwN3F/iNflHBVg==} + engines: {node: '>=8'} + dependencies: + html-tags: 3.3.1 + dev: false + + /is-installed-globally/0.3.2: + resolution: {integrity: sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==} + engines: {node: '>=8'} + dependencies: + global-dirs: 2.1.0 + is-path-inside: 3.0.3 + dev: true + + /is-invalid-path/0.1.0: + resolution: {integrity: sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-glob: 2.0.1 + dev: false + + /is-ip/3.1.0: + resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} + engines: {node: '>=8'} + dependencies: + ip-regex: 4.3.0 + dev: false + + /is-jpg/2.0.0: + resolution: {integrity: sha512-ODlO0ruzhkzD3sdynIainVP5eoOFNN85rxA1+cwwnPe4dKyX0r5+hxNO5XpCrxlHcmb9vkOit9mhRD2JVuimHg==} + engines: {node: '>=6'} + dev: true + optional: true + + /is-js-type/2.0.0: + resolution: {integrity: sha512-Aj13l47+uyTjlQNHtXBV8Cji3jb037vxwMWCgopRR8h6xocgBGW3qG8qGlIOEmbXQtkKShKuBM9e8AA1OeQ+xw==} + dependencies: + js-types: 1.0.0 + dev: true + + /is-json/2.0.1: + resolution: {integrity: sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==} + dev: false + + /is-lambda/1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + + /is-nan/1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + dev: true + + /is-natural-number/4.0.1: + resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==} + dev: true + + /is-negated-glob/1.0.0: + resolution: {integrity: sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==} + engines: {node: '>=0.10.0'} + dev: true + + /is-negative-zero/2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-npm/4.0.0: + resolution: {integrity: sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==} + engines: {node: '>=8'} + dev: true + + /is-number-object/1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-number/3.0.0: + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-number/4.0.0: + resolution: {integrity: sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /is-obj-prop/1.0.0: + resolution: {integrity: sha512-5Idb61slRlJlsAzi0Wsfwbp+zZY+9LXKUAZpvT/1ySw+NxKLRWfa0Bzj+wXI3fX5O9hiddm5c3DAaRSNP/yl2w==} + dependencies: + lowercase-keys: 1.0.1 + obj-props: 1.4.0 + dev: true + + /is-obj/2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + dev: true + + /is-object/1.0.2: + resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==} + dev: true + + /is-path-cwd/2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + dev: true + + /is-path-inside/3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-obj/1.1.0: + resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} + engines: {node: '>=0.10.0'} + dev: true + + /is-plain-obj/2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + /is-plain-obj/4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: true + + /is-plain-object/2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /is-plain-object/5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + /is-png/2.0.0: + resolution: {integrity: sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==} + engines: {node: '>=8'} + dev: true + + /is-potential-custom-element-name/1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: false + + /is-promise/2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + + /is-promise/4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + dev: true + + /is-proto-prop/2.0.0: + resolution: {integrity: sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==} + dependencies: + lowercase-keys: 1.0.1 + proto-props: 2.0.0 + dev: true + + /is-regex/1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + + /is-relative/1.0.0: + resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} + engines: {node: '>=0.10.0'} + dependencies: + is-unc-path: 1.0.0 + dev: true + + /is-retry-allowed/1.2.0: + resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==} + engines: {node: '>=0.10.0'} + dev: true + + /is-shared-array-buffer/1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-stream-ended/0.1.4: + resolution: {integrity: sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==} + dev: false + + /is-stream/1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + + /is-stream/2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + /is-stream/3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-string-and-not-blank/0.0.2: + resolution: {integrity: sha512-FyPGAbNVyZpTeDCTXnzuwbu9/WpNXbCfbHXLpCRpN4GANhS00eEIP5Ef+k5HYSNIzIhdN9zRDoBj6unscECvtQ==} + engines: {node: '>=6.4.0'} + dependencies: + is-string-blank: 1.0.1 + dev: false + + /is-string-blank/1.0.1: + resolution: {integrity: sha512-9H+ZBCVs3L9OYqv8nuUAzpcT9OTgMD1yAWrG7ihlnibdkbtB850heAmYWxHuXc4CHy4lKeK69tN+ny1K7gBIrw==} + dev: false + + /is-string/1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-svg/4.4.0: + resolution: {integrity: sha512-v+AgVwiK5DsGtT9ng+m4mClp6zDAmwrW8nZi6Gg15qzvBnRWWdfWA1TGaXyCDnWq5g5asofIgMVl3PjKxvk1ug==} + engines: {node: '>=6'} + dependencies: + fast-xml-parser: 4.3.2 + dev: true + optional: true + + /is-svg/5.0.0: + resolution: {integrity: sha512-sRl7J0oX9yUNamSdc8cwgzh9KBLnQXNzGmW0RVHwg/jEYjGNYHC6UvnYD8+hAeut9WwxRvhG9biK7g/wDGxcMw==} + engines: {node: '>=14.16'} + dependencies: + fast-xml-parser: 4.3.2 + dev: true + + /is-symbol/1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + + /is-text-path/1.0.1: + resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} + engines: {node: '>=0.10.0'} + dependencies: + text-extensions: 1.9.0 + dev: true + + /is-typed-array/1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.11 + + /is-typedarray/1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + /is-unc-path/1.0.0: + resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} + engines: {node: '>=0.10.0'} + dependencies: + unc-path-regex: 0.1.2 + dev: true + + /is-unicode-supported/0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + + /is-unicode-supported/1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + dev: true + + /is-url/1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + + /is-utf8/0.2.1: + resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} + dev: true + + /is-uuid/1.0.2: + resolution: {integrity: sha512-tCByphFcJgf2qmiMo5hMCgNAquNSagOetVetDvBXswGkNfoyEMvGH1yDlF8cbZbKnbVBr4Y5/rlpMz9umxyBkQ==} + dev: false + + /is-valid-glob/1.0.0: + resolution: {integrity: sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-valid-path/0.1.1: + resolution: {integrity: sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==} + engines: {node: '>=0.10.0'} + dependencies: + is-invalid-path: 0.1.0 + dev: false + + /is-weakref/1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-whitespace/0.3.0: + resolution: {integrity: sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg==} + engines: {node: '>=0.10.0'} + dev: false + + /is-windows/1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-wsl/1.1.0: + resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} + engines: {node: '>=4'} + dev: true + + /is-wsl/2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + + /is-yarn-global/0.3.0: + resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} + dev: true + + /isarray/0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + + /isarray/1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + /isarray/2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isbinaryfile/4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + dev: true + + /isbot/3.7.0: + resolution: {integrity: sha512-9BcjlI89966BqWJmYdTnRub85sit931MyCthSIPtgoOsTjoW7A2MVa09HzPpYE2+G4vyAxfDvR0AbUGV0FInQg==} + engines: {node: '>=12'} + dev: false + + /isemail/3.2.0: + resolution: {integrity: sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==} + engines: {node: '>=4.0.0'} + dependencies: + punycode: 2.3.0 + dev: false + + /iserror/0.0.2: + resolution: {integrity: sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==} + dev: false + + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + /isobject/2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} + dependencies: + isarray: 1.0.0 + dev: true + + /isobject/3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + /isobject/4.0.0: + resolution: {integrity: sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==} + engines: {node: '>=0.10.0'} + dev: false + + /isstream/0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + dev: false + + /istanbul-lib-coverage/3.2.0: + resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-hook/3.0.0: + resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} + engines: {node: '>=8'} + dependencies: + append-transform: 2.0.0 + dev: true + + /istanbul-lib-instrument/4.0.3: + resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} + engines: {node: '>=8'} + dependencies: + '@babel/core': 7.23.2 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-lib-processinfo/2.0.3: + resolution: {integrity: sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==} + engines: {node: '>=8'} + dependencies: + archy: 1.0.0 + cross-spawn: 7.0.3 + istanbul-lib-coverage: 3.2.0 + p-map: 3.0.0 + rimraf: 3.0.2 + uuid: 8.3.2 + dev: true + + /istanbul-lib-report/3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.0 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: true + + /istanbul-lib-source-maps/4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + dependencies: + debug: 4.3.4 + istanbul-lib-coverage: 3.2.0 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-reports/3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: true + + /istextorbinary/3.3.0: + resolution: {integrity: sha512-Tvq1W6NAcZeJ8op+Hq7tdZ434rqnMx4CCZ7H0ff83uEloDvVbqAwaMTZcafKGJT0VHkYzuXUiCY4hlXQg6WfoQ==} + engines: {node: '>=8'} + dependencies: + binaryextensions: 2.3.0 + textextensions: 3.3.0 + dev: false + + /isurl/1.0.0: + resolution: {integrity: sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==} + engines: {node: '>= 4'} + dependencies: + has-to-string-tag-x: 1.4.1 + is-object: 1.0.2 + dev: true + + /jackspeak/2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + /javascript-stringify/2.1.0: + resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} + dev: false + + /joi/17.11.0: + resolution: {integrity: sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==} + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.4 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + dev: false + + /joi/17.9.1: + resolution: {integrity: sha512-FariIi9j6QODKATGBrEX7HZcja8Bsh3rfdGYy/Sb65sGlZWK/QWesU1ghk7aJWDj95knjXlQfSmzFSPPkLVsfw==} + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.4 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + dev: false + + /joi/17.9.2: + resolution: {integrity: sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==} + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.4 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + dev: false + + /jose/2.0.6: + resolution: {integrity: sha512-FVoPY7SflDodE4lknJmbAHSUjLCzE2H1F6MS0RYKMQ8SR+lNccpMf8R4eqkNYyyUjR5qZReOzZo5C5YiHOCjjg==} + engines: {node: '>=10.13.0 < 13 || >=13.7.0'} + dependencies: + '@panva/asn1.js': 1.0.0 + dev: false + + /jose/4.15.3: + resolution: {integrity: sha512-RZJdL9Qjd1sqNdyiVteRGV/bnWtik/+PJh1JP4kT6+x1QQMn+7ryueRys5BEueuayvSVY8CWGCisCDazeRLTuw==} + dev: false + + /jquery/3.5.1: + resolution: {integrity: sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==} + dev: false + + /js-base64/2.6.4: + resolution: {integrity: sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==} + + /js-beautify/1.14.9: + resolution: {integrity: sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg==} + engines: {node: '>=12'} + hasBin: true + dependencies: + config-chain: 1.1.13 + editorconfig: 1.0.4 + glob: 8.1.0 + nopt: 6.0.0 + dev: false + + /js-confetti/0.11.0: + resolution: {integrity: sha512-Hc7I3VI4r4H0nq5q/oQK+JJwGoYRYVHK72fGk8E9Ay1dbh+aiZ9yl0yFp1K4oYeq7YFDQAndYChwqLPA3QWQuA==} + dev: false + + /js-sdsl/4.4.2: + resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==} + dev: true + + /js-string-escape/1.0.1: + resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} + engines: {node: '>= 0.8'} + dev: true + + /js-stringify/1.0.2: + resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==} + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + /js-types/1.0.0: + resolution: {integrity: sha512-bfwqBW9cC/Lp7xcRpug7YrXm0IVw+T9e3g4mCYnv0Pjr3zIzU9PCQElYU9oSGAWzXlbdl9X5SAMPejO9sxkeUw==} + engines: {node: '>=0.10.0'} + dev: true + + /js-yaml/3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /js-yaml/4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + + /js2xmlparser/4.0.2: + resolution: {integrity: sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==} + dependencies: + xmlcreate: 2.0.4 + dev: false + + /jsbn/0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + dev: false + + /jsdoc/4.0.2: + resolution: {integrity: sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + '@babel/parser': 7.23.0 + '@jsdoc/salty': 0.2.5 + '@types/markdown-it': 12.2.3 + bluebird: 3.7.2 + catharsis: 0.9.0 + escape-string-regexp: 2.0.0 + js2xmlparser: 4.0.2 + klaw: 3.0.0 + markdown-it: 12.3.2 + markdown-it-anchor: 8.6.7_2zb4u3vubltivolgu556vv4aom + marked: 4.3.0 + mkdirp: 1.0.4 + requizzle: 0.2.4 + strip-json-comments: 3.1.1 + underscore: 1.13.6 + dev: false + + /jsdom/16.7.0: + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + engines: {node: '>=10'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + abab: 2.0.6 + acorn: 8.10.0 + acorn-globals: 6.0.0 + cssom: 0.4.4 + cssstyle: 2.3.0 + data-urls: 2.0.0 + decimal.js: 10.4.3 + domexception: 2.0.1 + escodegen: 2.1.0 + form-data: 3.0.1 + html-encoding-sniffer: 2.0.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.7 + parse5: 6.0.1 + saxes: 5.0.1 + symbol-tree: 3.2.4 + tough-cookie: 4.1.3 + w3c-hr-time: 1.0.2 + w3c-xmlserializer: 2.0.0 + webidl-conversions: 6.1.0 + whatwg-encoding: 1.0.5 + whatwg-mimetype: 2.3.0 + whatwg-url: 8.7.0 + ws: 7.5.9 + xml-name-validator: 3.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /jsesc/0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true + + /jsesc/2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + /json-bigint/1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + dependencies: + bignumber.js: 9.1.2 + dev: false + + /json-buffer/3.0.0: + resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} + dev: true + + /json-buffer/3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + /json-parse-better-errors/1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + + /json-parse-even-better-errors/2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + /json-parse-even-better-errors/3.0.0: + resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /json-schema-traverse/0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + /json-schema-traverse/1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /json-schema/0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + dev: false + + /json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json-stringify-safe/5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: false + + /json5/1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /json5/2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + /jsonfile/6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /jsonparse/0.0.5: + resolution: {integrity: sha512-fw7Q/8gFR8iSekUi9I+HqWIap6mywuoe7hQIg3buTVjuZgALKj4HAmm0X6f+TaL4c9NJbvyFQdaI2ppr5p6dnQ==} + engines: {'0': node >= 0.2.0} + dev: true + + /jsonparse/1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + /jsonwebtoken/8.5.1: + resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} + engines: {node: '>=4', npm: '>=1.4.28'} + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 5.7.2 + dev: false + + /jsonwebtoken/9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.5.4 + dev: false + + /jsprim/1.4.2: + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + dev: false + + /jsprim/2.0.2: + resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} + engines: {'0': node >=0.6.0} + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + dev: false + + /jsrsasign/9.1.9: + resolution: {integrity: sha512-BMajAcUANeo07/MnscMAsHJtddYtqN/ix4twr+dOheHc5KH/Ad06bI6YfUB2M7ZQhqxvt9pbVWFXYQXe6G+yXw==} + dev: false + + /jstransformer/1.0.0: + resolution: {integrity: sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==} + dependencies: + is-promise: 2.2.2 + promise: 7.3.1 + dev: false + + /juice/9.1.0: + resolution: {integrity: sha512-odblShmPrUoHUwRuC8EmLji5bPP2MLO1GL+gt4XU3tT2ECmbSrrMjtMQaqg3wgMFP2zvUzdPZGfxc5Trk3Z+fQ==} + engines: {node: '>=10.0.0'} + hasBin: true + dependencies: + cheerio: 1.0.0-rc.12 + commander: 6.2.1 + mensch: 0.3.4 + slick: 1.12.2 + web-resource-inliner: 6.0.1 + transitivePeerDependencies: + - encoding + dev: false + + /junk/3.1.0: + resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} + engines: {node: '>=8'} + dev: true + + /just-debounce/1.1.0: + resolution: {integrity: sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==} + dev: true + + /just-extend/4.2.1: + resolution: {integrity: sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==} + dev: true + + /jwa/1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + dev: false + + /jwa/2.0.0: + resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + dev: false + + /jwks-rsa/2.1.5: + resolution: {integrity: sha512-IODtn1SwEm7n6GQZnQLY0oxKDrMh7n/jRH1MzE8mlxWMrh2NnMyOsXTebu8vJ1qCpmuTJcL4DdiE0E4h8jnwsA==} + engines: {node: '>=10 < 13 || >=14'} + dependencies: + '@types/express': 4.17.19 + '@types/jsonwebtoken': 8.5.9 + debug: 4.3.4 + jose: 2.0.6 + limiter: 1.1.5 + lru-memoizer: 2.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /jws/3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + dev: false + + /jws/4.0.0: + resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + dependencies: + jwa: 2.0.0 + safe-buffer: 5.2.1 + dev: false + + /kareem/2.5.1: + resolution: {integrity: sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==} + engines: {node: '>=12.0.0'} + dev: false + + /kcors/2.2.2: + resolution: {integrity: sha512-rIqbKa2S0gT0wC/790jsQM6hNpABHBNWQ7+XYS1xJV6zOGxlanW+RtCmlDn6wPZsGpRk371yy8abfBgl2OTavg==} + engines: {node: '>= 6.0.0'} + dev: false + + /key-fingerprint/1.1.0: + resolution: {integrity: sha512-rEwnJrXtCGQ/05pd06SpMtTgicl4/G9PNwlaLfSk/wc6ocYqc9gk9wh4i0GhlK/paNif8sh0qIbR77zXEVAS8A==} + dev: false + + /keygrip/1.1.0: + resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} + engines: {node: '>= 0.6'} + dependencies: + tsscmp: 1.0.6 + dev: false + + /keyv/3.0.0: + resolution: {integrity: sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==} + dependencies: + json-buffer: 3.0.0 + dev: true + + /keyv/3.1.0: + resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} + dependencies: + json-buffer: 3.0.0 + dev: true + + /keyv/4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + + /kind-of/3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + + /kind-of/4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of/5.1.0: + resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} + engines: {node: '>=0.10.0'} + dev: true + + /kind-of/6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + /klaw/3.0.0: + resolution: {integrity: sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==} + dependencies: + graceful-fs: 4.2.11 + dev: false + + /kleur/4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: true + + /known-css-properties/0.28.0: + resolution: {integrity: sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==} + dev: true + + /koa-404-handler/0.1.0: + resolution: {integrity: sha512-3AuIGL1vlIXCJaNDSLhPmMuDFoiYSzkemyq9NwU0NdHG/j9yh3TM4+8IB6kgAWHDuz0hYargPZrpfcb3THFfuQ==} + engines: {node: '>=6.4'} + dev: false + + /koa-basic-auth/4.0.0: + resolution: {integrity: sha512-eV1sGVAizDuFWNpY43VF3Z1ND4PotQZB/igxHNrcJXzXw+Flmj8Uv+4hP9LyNXyvqLJz/X5bmXeMu84AAGD9Jw==} + dependencies: + basic-auth: 2.0.1 + tsscmp: 1.0.6 + dev: false + + /koa-better-error-handler/11.0.4: + resolution: {integrity: sha512-gFWet3Tpb8LylIGtnMpJY52JP2gxBbtyx32/eMAy4XqlV/HjVHPrDumVWNcinf9VGfhHJKD1G9xlinPSsGhrkw==} + engines: {node: '>= 14'} + dependencies: + '@hapi/boom': 10.0.1 + camelcase: 6.3.0 + capitalize: 2.0.4 + co: 4.6.0 + fast-safe-stringify: 2.1.1 + html-to-text: 9.0.5 + humanize-string: 2.1.0 + lodash.iserror: 3.1.1 + lodash.isfunction: 3.0.9 + lodash.isnumber: 3.0.3 + lodash.isobject: 3.0.2 + lodash.isstring: 4.0.1 + lodash.map: 4.6.0 + lodash.values: 4.3.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: false + + /koa-better-flash/0.0.4: + resolution: {integrity: sha512-EhsyNsPG2xSk/NUgHzq2ypsewdaRvQLtrzTxY0rXi9XeV3TPHkN2HR5eWotF42/Mg6aOTJ73WzfWyMFnbRLkRw==} + engines: {node: '>=8.x'} + dev: false + + /koa-better-timeout/0.0.6: + resolution: {integrity: sha512-FBTKcbDmCILBTFU5RfLCBbFBQCvItfgP5XJX/LbH4NqgFqTrnaGLi49NKV/Gx2+nmni2VT1X+K69Mjkj1IMQzg==} + engines: {node: '>=8.3'} + dependencies: + '@hapi/boom': 9.1.4 + dev: false + + /koa-bodyparser/4.4.1: + resolution: {integrity: sha512-kBH3IYPMb+iAXnrxIhXnW+gXV8OTzCu8VPDqvcDHW9SQrbkHmqPQtiZwrltNmSq6/lpipHnT7k7PsjlVD7kK0w==} + engines: {node: '>=8.0.0'} + dependencies: + co-body: 6.1.0 + copy-to: 2.0.1 + type-is: 1.6.18 + dev: false + + /koa-cash/4.1.1: + resolution: {integrity: sha512-tGvQQDkfy6HIERe2PkqLtHvTnpYzFlZy0rKihum18wVP17w9lcxqvYihuRn117ugwHDmOg16T6obtwcq7iiVLg==} + engines: {node: '>=8.3'} + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + fast-safe-stringify: 2.1.1 + get-stream: 5.2.0 + is-stream: 2.0.1 + koa-is-json: 1.0.0 + dev: false + + /koa-compose/4.1.0: + resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} + dev: false + + /koa-compress/5.1.1: + resolution: {integrity: sha512-UgMIN7ZoEP2DuoSQmD6CYvFSLt0NReGlc2qSY4bO4Oq0L56OiD9pDG41Kj/zFmVY/A3Wvmn4BqKcfq5H30LGIg==} + engines: {node: '>= 12'} + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + http-errors: 1.8.1 + koa-is-json: 1.0.0 + dev: false + + /koa-conditional-get/3.0.0: + resolution: {integrity: sha512-VKyPS7SuNH26TjTV2IRz+oh0HV/jc2lYAo51PTQTkj0XFn8ebNZW9riczmrW7ZVBFSnls1Z88DPUYKnvVymruA==} + dev: false + + /koa-connect/2.1.0: + resolution: {integrity: sha512-O9pcFafHk0oQsBevlbTBlB9co+2RUQJ4zCzu3qJPmGlGoeEZkne+7gWDkecqDPSbCtED6LmhlQladxs6NjOnMQ==} + dev: false + + /koa-convert/2.0.0: + resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} + engines: {node: '>= 10'} + dependencies: + co: 4.6.0 + koa-compose: 4.1.0 + dev: false + + /koa-ctx-paginate/0.0.6: + resolution: {integrity: sha512-ER/Szma00Os9wFcgeFwpQjqnIpfkoLQqSwGnfSznUloj7capNP/k7qx0O1APOAwWyMiGLyExR0s98rbKuwg33Q==} + engines: {node: '>= 6.x'} + dependencies: + lodash.assign: 4.2.0 + lodash.clone: 4.5.0 + lodash.isobject: 3.0.2 + querystring: 0.2.1 + dev: false + + /koa-etag/4.0.0: + resolution: {integrity: sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==} + dependencies: + etag: 1.8.1 + dev: false + + /koa-favicon/2.1.0: + resolution: {integrity: sha512-LvukcooYjxKtnZq0RXdBup+JDhaHwLgnLlDHB/xvjwQEjbc4rbp/0WkmOzpOvaHujc+fIwPear0dpKX1V+dHVg==} + dependencies: + mz: 2.7.0 + dev: false + + /koa-generic-session/2.3.1: + resolution: {integrity: sha512-oxt1XIgcFIZNark+biTk6NHjNgF5bM2JeETrOYIhl0RznR7EO7zWR+9pgf+FrJAx2KF8/Es+uUhxJdJXlvHGpA==} + engines: {node: '>= 6.0.0'} + dependencies: + copy-to: 2.0.1 + crc: 3.5.0 + debug: 3.1.0 + parseurl: 1.3.3 + uid-safe: 2.1.5 + transitivePeerDependencies: + - supports-color + dev: false + + /koa-helmet/5.2.0: + resolution: {integrity: sha512-Q4h4CnpcEo3NuIvD1bBOakkfusPiOvJc/NlOI9M+pG3zeNm2OqFLMbIzCPsvGBz++37KMregUBXZvQiNPDD37w==} + engines: {node: '>= 8.0.0'} + dependencies: + helmet: 3.23.3 + dev: false + + /koa-is-json/1.0.0: + resolution: {integrity: sha512-+97CtHAlWDx0ndt0J8y3P12EWLwTLMXIfMnYDev3wOTwH/RpBGMlfn4bDXlMEg1u73K6XRE9BbUp+5ZAYoRYWw==} + dev: false + + /koa-json/2.0.2: + resolution: {integrity: sha512-8+dz0T2ekDuNN1svYoKPCV2txotQ3Ufg8Fn5bft1T48MPJWiC/HKmkk+3xj9EC/iNZuFYeLRazN2h2o3RSUXuQ==} + dependencies: + koa-is-json: 1.0.0 + streaming-json-stringify: 3.1.0 + dev: false + + /koa-meta/4.0.2: + resolution: {integrity: sha512-YMt/KWF1kf8YUrcbhLaV1vJVqNIQlwu0/Sr6BvRfSzh9FD0FTgacGzAU9KpJvtQ0e+SBQCrtx9/MnQ6ASsYrDg==} + engines: {node: '>=14'} + dependencies: + is-string-and-not-blank: 0.0.2 + sanitize-html: 2.11.0 + dev: false + + /koa-methodoverride/2.0.0: + resolution: {integrity: sha512-pRtCegazR+0kcPMY9+QqGpeWiGuDZRiEoHznbMeVhFVsJmMduDXixoraYR0NmRcz4+FTiHnWdzU48eQYjKxNew==} + engines: {node: '>= 4'} + dependencies: + debug: 4.3.4 + methods: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /koa-passport/4.1.4: + resolution: {integrity: sha512-dJBCkl4X+zdYxbI2V2OtoGy0PUenpvp2ZLLWObc8UJhsId0iQpTFT8RVcuA0709AL2txGwRHnSPoT1bYNGa6Kg==} + engines: {node: '>= 4'} + dependencies: + passport: 0.4.1 + dev: false + + /koa-passport/5.0.0: + resolution: {integrity: sha512-eNGg3TGgZ4ydm9DYCOqaa0ySSA/44BS6X+v4CKjP/nHOoXlADRonHsZvS3QWok6EV0ZL0V7FhfWxRYfD2B5kTQ==} + engines: {node: '>= 4'} + dependencies: + passport: 0.6.0 + dev: false + + /koa-redirect-loop/3.0.2: + resolution: {integrity: sha512-RAEFdBAC2dTqMeH8yojS7mJ+H8ozUYle8OwMgpKWZRPLMM/D5/Y9u/DgZQ6kjqbXXvSeJDP5Z9DrZq6NSB/JHw==} + engines: {node: '>=14'} + dependencies: + is-string-and-not-blank: 0.0.2 + url-parse: 1.5.10 + dev: false + + /koa-redis/4.0.1: + resolution: {integrity: sha512-o2eTVNo1NBnloeUGhHed5Q2ZvJSLpUEj/+E1/7oH5EmH8WuQ+QLdl/VawkshxdFQ47W1p6V09lM3hCTu7D0YnQ==} + engines: {node: '>= 4'} + dependencies: + '@babel/runtime': 7.23.2 + co-wrap-all: 1.0.0 + debug: 4.3.4 + ioredis: 4.28.5 + transitivePeerDependencies: + - supports-color + dev: false + + /koa-send/5.0.1: + resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} + engines: {node: '>= 8'} + dependencies: + debug: 4.3.4 + http-errors: 1.8.1 + resolve-path: 1.4.0 + transitivePeerDependencies: + - supports-color + dev: false + + /koa-views-render/0.0.1: + resolution: {integrity: sha512-vryfNancX55BsfC0A4scAOXrLJxbalx7TeVaPcIF6/OSN6EDOTS55uvriIDGLT8A1bbDhmy1G6M+9SvKA39pdA==} + engines: {node: '>=8.3'} + dev: false + + /koa/2.14.2: + resolution: {integrity: sha512-VFI2bpJaodz6P7x2uyLiX6RLYpZmOJqNmoCst/Yyd7hQlszyPwG/I9CQJ63nOtKSxpt5M7NH67V6nJL2BwCl7g==} + engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} + dependencies: + accepts: 1.3.8 + cache-content-type: 1.0.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookies: 0.8.0 + debug: 4.3.4 + delegates: 1.0.0 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + fresh: 0.5.2 + http-assert: 1.5.0 + http-errors: 1.8.1 + is-generator-function: 1.0.10 + koa-compose: 4.1.0 + koa-convert: 2.0.0 + on-finished: 2.4.1 + only: 0.0.2 + parseurl: 1.3.3 + statuses: 1.5.0 + type-is: 1.6.18 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /labeled-stream-splicer/1.0.2: + resolution: {integrity: sha512-3KBjPRnXrYC5h2jEf/d6hO7Lcl+38QzRVTOyHA2sFzZVMYwsUFuejlrOMwAjmz13hVBr9ruDS1RwE4YEz8P58w==} + dependencies: + inherits: 2.0.4 + isarray: 0.0.1 + stream-splicer: 1.3.2 + dev: true + + /labeled-stream-splicer/2.0.2: + resolution: {integrity: sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==} + dependencies: + inherits: 2.0.4 + stream-splicer: 2.0.1 + dev: true + + /last-commit-log/3.3.0: + resolution: {integrity: sha512-qYzhTltQvQ/mMIDWnG16KyUi79y4F5uEqHDDbAJm2HLuWgDuBhZ8g5PyWomYV0wsDQDuYcPWMQdJ91wsZOZ5NQ==} + dependencies: + dotgitconfig: 1.1.2 + dev: false + + /last-run/1.1.1: + resolution: {integrity: sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==} + engines: {node: '>= 0.10'} + dependencies: + default-resolution: 2.0.0 + es6-weak-map: 2.0.3 + dev: true + + /latest-version/5.1.0: + resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} + engines: {node: '>=8'} + dependencies: + package-json: 6.5.0 + dev: true + + /lazyframe/2.2.7: + resolution: {integrity: sha512-S4Cj6r+8ePZnH0Izn8Y9+Ht0/xylcKwhXljOwllPI8u6zB9gq9j+9BlxeKx7TNP8W/lovek8s6xQD1sSq5dLDw==} + dev: false + + /lazyload/2.0.0-rc.2: + resolution: {integrity: sha512-v3OKwYrKHX09eAyeAmkpvVCF5qWZo8rxERT9AVOUFaRwlTIuCyMYVBfHYSra1uyBdKDEHnUkvpZTLgNWI9Y7lA==} + dev: false + + /lazystream/1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + dependencies: + readable-stream: 2.3.8 + dev: true + + /lcid/1.0.0: + resolution: {integrity: sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==} + engines: {node: '>=0.10.0'} + dependencies: + invert-kv: 1.0.0 + dev: true + + /leac/0.6.0: + resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} + dev: false + + /lead/1.0.0: + resolution: {integrity: sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==} + engines: {node: '>= 0.10'} + dependencies: + flush-write-stream: 1.1.1 + dev: true + + /levn/0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + + /levn/0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /libbase64/1.2.1: + resolution: {integrity: sha512-l+nePcPbIG1fNlqMzrh68MLkX/gTxk/+vdvAb388Ssi7UuUN31MI44w4Yf33mM3Cm4xDfw48mdf3rkdHszLNew==} + dev: false + + /libmime/5.2.0: + resolution: {integrity: sha512-X2U5Wx0YmK0rXFbk67ASMeqYIkZ6E5vY7pNWRKtnNzqjvdYYG8xtPDpCnuUEnPU9vlgNev+JoSrcaKSUaNvfsw==} + dependencies: + encoding-japanese: 2.0.0 + iconv-lite: 0.6.3 + libbase64: 1.2.1 + libqp: 2.0.1 + dev: false + + /libmime/5.2.1: + resolution: {integrity: sha512-A0z9O4+5q+ZTj7QwNe/Juy1KARNb4WaviO4mYeFC4b8dBT2EEqK2pkM+GC8MVnkOjqhl5nYQxRgnPYRRTNmuSQ==} + dependencies: + encoding-japanese: 2.0.0 + iconv-lite: 0.6.3 + libbase64: 1.2.1 + libqp: 2.0.1 + dev: false + + /libnpmconfig/1.2.1: + resolution: {integrity: sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==} + deprecated: This module is not used anymore. npm config is parsed by npm itself and by @npmcli/config + dependencies: + figgy-pudding: 3.5.2 + find-up: 3.0.0 + ini: 1.3.8 + dev: true + + /libqp/2.0.1: + resolution: {integrity: sha512-Ka0eC5LkF3IPNQHJmYBWljJsw0UvM6j+QdKRbWyCdTmYwvIDE6a7bCm0UkTAL/K+3KXK5qXT/ClcInU01OpdLg==} + dev: false + + /liftoff/3.1.0: + resolution: {integrity: sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==} + engines: {node: '>= 0.8'} + dependencies: + extend: 3.0.2 + findup-sync: 3.0.0 + fined: 1.2.0 + flagged-respawn: 1.0.1 + is-plain-object: 2.0.4 + object.map: 1.0.1 + rechoir: 0.6.2 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /lil-http-terminator/1.2.3: + resolution: {integrity: sha512-vQcHSwAFq/kTR2cG6peOVS7SjgksGgSPeH0G2lkw+buue33thE/FCHdn10wJXXshc5RswFy0Iaz48qA2Busw5Q==} + engines: {node: '>=12'} + dev: false + + /lilconfig/2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /limiter/1.1.5: + resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} + dev: false + + /line-column-path/2.0.0: + resolution: {integrity: sha512-nz3A+vi4bElhwd62E9+Qk/f9BDYLSzD/4Hy1rir0I4GnMxSTezSymzANyph5N1PgRZ3sSbA+yR5hOuXxc71a0Q==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.4.1 + dev: true + + /line-column-path/3.0.0: + resolution: {integrity: sha512-Atocnm7Wr9nuvAn97yEPQa3pcQI5eLQGBz+m6iTb+CVw+IOzYB9MrYK7jI7BfC9ISnT4Fu0eiwhAScV//rp4Hw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + type-fest: 2.19.0 + dev: true + + /lines-and-columns/1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + /lines-and-columns/2.0.3: + resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /linkify-it/3.0.3: + resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==} + dependencies: + uc.micro: 1.0.6 + dev: false + + /linkify-it/4.0.1: + resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} + dependencies: + uc.micro: 1.0.6 + dev: false + + /lint-staged/14.0.1: + resolution: {integrity: sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==} + engines: {node: ^16.14.0 || >=18.0.0} + hasBin: true + dependencies: + chalk: 5.3.0 + commander: 11.0.0 + debug: 4.3.4 + execa: 7.2.0 + lilconfig: 2.1.0 + listr2: 6.6.1 + micromatch: 4.0.5 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.3.1 + transitivePeerDependencies: + - enquirer + - supports-color + dev: true + + /listr2/6.6.1: + resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==} + engines: {node: '>=16.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + dependencies: + cli-truncate: 3.1.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 5.0.1 + rfdc: 1.3.0 + wrap-ansi: 8.1.0 + dev: true + + /livereload-js/2.4.0: + resolution: {integrity: sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==} + dev: true + + /load-json-file/1.1.0: + resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==} + engines: {node: '>=0.10.0'} + dependencies: + graceful-fs: 4.2.11 + parse-json: 2.2.0 + pify: 2.3.0 + pinkie-promise: 2.0.1 + strip-bom: 2.0.0 + dev: true + + /load-json-file/4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + dependencies: + graceful-fs: 4.2.11 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + + /load-json-file/7.0.1: + resolution: {integrity: sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /load-plugin/3.0.0: + resolution: {integrity: sha512-od7eKCCZ62ITvFf8nHHrIiYmgOHb4xVNDRDqxBWSaao5FZyyZVX8OmRCbwjDGPrSrgIulwPNyBsWCGnhiDC0oQ==} + dependencies: + libnpmconfig: 1.2.1 + resolve-from: 5.0.0 + dev: true + + /load-plugin/5.1.0: + resolution: {integrity: sha512-Lg1CZa1CFj2CbNaxijTL6PCbzd4qGTlZov+iH2p5Xwy/ApcZJh+i6jMN2cYePouTfjJfrNu3nXFdEw8LvbjPFQ==} + dependencies: + '@npmcli/config': 6.4.0 + import-meta-resolve: 2.2.2 + dev: true + + /locate-path/2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + + /locate-path/3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: true + + /locate-path/5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + + /locate-path/6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + + /locate-path/7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-locate: 6.0.0 + dev: true + + /lodash-es/4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + /lodash._baseiteratee/4.7.0: + resolution: {integrity: sha512-nqB9M+wITz0BX/Q2xg6fQ8mLkyfF7MU7eE+MNBNjTHFKeKaZAPEzEg+E8LWxKWf1DQVflNEn9N49yAuqKh2mWQ==} + dependencies: + lodash._stringtopath: 4.8.0 + dev: false + + /lodash._basetostring/4.12.0: + resolution: {integrity: sha512-SwcRIbyxnN6CFEEK4K1y+zuApvWdpQdBHM/swxP962s8HIxPO3alBH5t3m/dl+f4CMUug6sJb7Pww8d13/9WSw==} + dev: false + + /lodash._baseuniq/4.6.0: + resolution: {integrity: sha512-Ja1YevpHZctlI5beLA7oc5KNDhGcPixFhcqSiORHNsp/1QTv7amAXzw+gu4YOvErqVlMVyIJGgtzeepCnnur0A==} + dependencies: + lodash._createset: 4.0.3 + lodash._root: 3.0.1 + dev: false + + /lodash._createset/4.0.3: + resolution: {integrity: sha512-GTkC6YMprrJZCYU3zcqZj+jkXkrXzq3IPBcF/fIPpNEAB4hZEtXU8zp/RwKOvZl43NUmwDbyRk3+ZTbeRdEBXA==} + dev: false + + /lodash._root/3.0.1: + resolution: {integrity: sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==} + dev: false + + /lodash._stringtopath/4.8.0: + resolution: {integrity: sha512-SXL66C731p0xPDC5LZg4wI5H+dJo/EO4KTqOMwLYCH3+FmmfAKJEZCm6ohGpI+T1xwsDsJCfL4OnhorllvlTPQ==} + dependencies: + lodash._basetostring: 4.12.0 + dev: false + + /lodash.assign/4.2.0: + resolution: {integrity: sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==} + + /lodash.camelcase/4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + /lodash.clone/4.5.0: + resolution: {integrity: sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==} + dev: false + + /lodash.clonedeep/4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + + /lodash.debounce/4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: true + + /lodash.defaults/4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + + /lodash.flatten/4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + dev: false + + /lodash.flattendeep/4.4.0: + resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} + dev: true + + /lodash.foreach/4.5.0: + resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==} + dev: false + + /lodash.get/4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + + /lodash.includes/4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + dev: false + + /lodash.isarguments/3.1.0: + resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} + + /lodash.isboolean/3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + dev: false + + /lodash.iserror/3.1.1: + resolution: {integrity: sha512-eT/VeNns9hS7vAj1NKW/rRX6b+C3UX3/IAAqEE7aC4Oo2C0iD82NaP5IS4bSlQsammTii4qBJ8G1zd1LTL8hCw==} + dev: false + + /lodash.isfunction/3.0.9: + resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} + + /lodash.isinteger/4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + dev: false + + /lodash.isnumber/3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + dev: false + + /lodash.isobject/3.0.2: + resolution: {integrity: sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==} + dev: false + + /lodash.isplainobject/4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + /lodash.isstring/4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + dev: false + + /lodash.kebabcase/4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + dev: true + + /lodash.map/4.6.0: + resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} + dev: false + + /lodash.memoize/3.0.4: + resolution: {integrity: sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A==} + dev: true + + /lodash.memoize/4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true + + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + /lodash.mergewith/4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + dev: true + + /lodash.once/4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + dev: false + + /lodash.snakecase/4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + dev: true + + /lodash.startcase/4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + dev: true + + /lodash.transform/4.6.0: + resolution: {integrity: sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==} + dev: false + + /lodash.truncate/4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + dev: true + + /lodash.uniq/4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: true + + /lodash.uniqby/4.5.0: + resolution: {integrity: sha512-IRt7cfTtHy6f1aRVA5n7kT8rgN3N1nH6MOWLcHfpWG2SH19E3JksLK38MktLxZDhlAjCP9jpIXkOnRXlu6oByQ==} + dependencies: + lodash._baseiteratee: 4.7.0 + lodash._baseuniq: 4.6.0 + dev: false + + /lodash.upperfirst/4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + dev: true + + /lodash.values/4.3.0: + resolution: {integrity: sha512-r0RwvdCv8id9TUblb/O7rYPwVy6lerCbcawrfdo9iC/1t1wsNMJknO79WNBgwkH0hIeJ08jmvvESbFpNb4jH0Q==} + dev: false + + /lodash.zip/4.2.0: + resolution: {integrity: sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==} + dev: true + + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + /log-symbols/3.0.0: + resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} + engines: {node: '>=8'} + dependencies: + chalk: 2.4.2 + dev: true + + /log-symbols/4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: true + + /log-update/5.0.1: + resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + ansi-escapes: 5.0.0 + cli-cursor: 4.0.0 + slice-ansi: 5.0.0 + strip-ansi: 7.1.0 + wrap-ansi: 8.1.0 + dev: true + + /logalot/2.1.0: + resolution: {integrity: sha512-Ah4CgdSRfeCJagxQhcVNMi9BfGYyEKLa6d7OA6xSbld/Hg3Cf2QiOa1mDpmG7Ve8LOH6DN3mdttzjQAvWTyVkw==} + engines: {node: '>=0.10.0'} + dependencies: + figures: 1.7.0 + squeak: 1.3.0 + dev: true + optional: true + + /logic-query-parser/0.0.5: + resolution: {integrity: sha512-I4CZwF+dtnBYd1pKUCTgeyvDZC0ymElwmZAs77l1ebZsFZzmUkUQtdctZtMDB84diaRlaKjEpB+g26og//+fug==} + dev: false + + /long/5.2.3: + resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + dev: false + + /longest-streak/2.0.4: + resolution: {integrity: sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==} + + /longest-streak/3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + dev: true + + /longest/1.0.1: + resolution: {integrity: sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==} + engines: {node: '>=0.10.0'} + dev: true + optional: true + + /loose-envify/1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: true + + /loud-rejection/1.6.0: + resolution: {integrity: sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==} + engines: {node: '>=0.10.0'} + dependencies: + currently-unhandled: 0.4.1 + signal-exit: 3.0.7 + dev: true + + /lower-case/1.1.4: + resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} + dev: false + + /lowercase-keys/1.0.0: + resolution: {integrity: sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==} + engines: {node: '>=0.10.0'} + dev: true + + /lowercase-keys/1.0.1: + resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} + engines: {node: '>=0.10.0'} + dev: true + + /lowercase-keys/2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + + /lowercase-keys/3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /lpad-align/1.1.2: + resolution: {integrity: sha512-MMIcFmmR9zlGZtBcFOows6c2COMekHCIFJz3ew/rRpKZ1wR4mXDPzvcVqLarux8M33X4TPSq2Jdw8WJj0q0KbQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + get-stdin: 4.0.1 + indent-string: 2.1.0 + longest: 1.0.1 + meow: 3.7.0 + dev: true + optional: true + + /lru-cache/10.0.1: + resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} + engines: {node: 14 || >=16.14} + + /lru-cache/4.0.2: + resolution: {integrity: sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==} + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + dev: false + + /lru-cache/4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + dev: true + + /lru-cache/5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + + /lru-cache/6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + + /lru-cache/7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + /lru-memoizer/2.2.0: + resolution: {integrity: sha512-QfOZ6jNkxCcM/BkIPnFsqDhtrazLRsghi9mBwFAzol5GCvj4EkFT899Za3+QwikCg5sRX8JstioBDwOxEyzaNw==} + dependencies: + lodash.clonedeep: 4.5.0 + lru-cache: 4.0.2 + dev: false + + /lru-queue/0.1.0: + resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} + dependencies: + es5-ext: 0.10.62 + + /luxon/3.4.3: + resolution: {integrity: sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==} + engines: {node: '>=12'} + dev: false + + /mac-regex/1.0.0: + resolution: {integrity: sha512-ZhMU1HwNeS5eugwsn4wNJmmj/PM4S/XsWKLLA+yLdO0amBsou7zaYff8YBaCNzlkVP+y63vuotEd6xxVxEUkqw==} + dev: false + + /macos-version/5.2.1: + resolution: {integrity: sha512-OHJU8nTNxHYL1FQhD+nZawWgXKXAqDGr4kluLtaqKO4au3cR41y1mKuVShOU5U4rOYiuPanljq6oFGmV2B9DFA==} + engines: {node: '>=6'} + dependencies: + semver: 5.7.2 + dev: false + + /mailauth/4.3.4: + resolution: {integrity: sha512-rakRT0omLArcgKGOlDFKQJQj4Xoiwsto0wIQUFBxLTLiII8iMCaU22tKZJYxgT+8gPLz/NxNCxk/OzDg6izK0Q==} + engines: {node: '>=16.0.0'} + hasBin: true + dependencies: + '@postalsys/vmc': 1.0.6 + fast-xml-parser: 4.2.0 + ipaddr.js: 2.0.1 + joi: 17.9.1 + libmime: 5.2.1 + nodemailer: 6.9.1 + psl: 1.9.0 + punycode: 2.3.0 + yargs: 17.7.1 + dev: false + + /mailauth/4.5.2: + resolution: {integrity: sha512-6gBaJpYZZviI4OM51pZPLDZ3Tc9U0ENIbhNtR4ZkKCKHi11oiVKJLZek0R5m7Z2TieF+xkOpy3uz56vuxsXqdQ==} + engines: {node: '>=16.0.0'} + hasBin: true + dependencies: + '@postalsys/vmc': 1.0.6 + fast-xml-parser: 4.2.7 + ipaddr.js: 2.1.0 + joi: 17.9.2 + libmime: 5.2.1 + nodemailer: 6.9.4 + psl: 1.9.0 + punycode: 2.3.0 + undici: 5.23.0 + yargs: 17.7.2 + dev: false + + /mailparser/3.6.5: + resolution: {integrity: sha512-nteTpF0Khm5JLOnt4sigmzNdUH/6mO7PZ4KEnvxf4mckyXYFFhrtAWZzbq/V5aQMH+049gA7ZjfLdh+QiX2Uqg==} + dependencies: + encoding-japanese: 2.0.0 + he: 1.2.0 + html-to-text: 9.0.5 + iconv-lite: 0.6.3 + libmime: 5.2.1 + linkify-it: 4.0.1 + mailsplit: 5.4.0 + nodemailer: 6.9.3 + tlds: 1.240.0 + dev: false + + /mailsplit/5.4.0: + resolution: {integrity: sha512-wnYxX5D5qymGIPYLwnp6h8n1+6P6vz/MJn5AzGjZ8pwICWssL+CCQjWBIToOVHASmATot4ktvlLo6CyLfOXWYA==} + dependencies: + libbase64: 1.2.1 + libmime: 5.2.0 + libqp: 2.0.1 + dev: false + + /make-dir/1.3.0: + resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} + engines: {node: '>=4'} + dependencies: + pify: 3.0.0 + dev: true + + /make-dir/2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + dependencies: + pify: 4.0.1 + semver: 5.7.2 + dev: true + + /make-dir/3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + + /make-dir/4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: true + + /make-error/1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /make-fetch-happen/10.2.1: + resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + agentkeepalive: 4.5.0 + cacache: 16.1.3 + http-cache-semantics: 4.1.1 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 7.18.3 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 2.1.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.3 + promise-retry: 2.0.1 + socks-proxy-agent: 7.0.0 + ssri: 9.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + + /make-fetch-happen/11.1.1: + resolution: {integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + agentkeepalive: 4.5.0 + cacache: 17.1.4 + http-cache-semantics: 4.1.1 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 7.18.3 + minipass: 5.0.0 + minipass-fetch: 3.0.4 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.3 + promise-retry: 2.0.1 + socks-proxy-agent: 7.0.0 + ssri: 10.0.5 + transitivePeerDependencies: + - supports-color + dev: false + + /make-fetch-happen/9.1.0: + resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} + engines: {node: '>= 10'} + dependencies: + agentkeepalive: 4.5.0 + cacache: 15.3.0 + http-cache-semantics: 4.1.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 6.0.0 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 1.4.1 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.3 + promise-retry: 2.0.1 + socks-proxy-agent: 6.2.1 + ssri: 8.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + + /make-iterator/1.0.1: + resolution: {integrity: sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 6.0.3 + dev: true + + /make-plural/7.3.0: + resolution: {integrity: sha512-/K3BC0KIsO+WK2i94LkMPv3wslMrazrQhfi5We9fMbLlLjzoOSJWr7TAdupLlDWaJcWxwoNosBkhFDejiu5VDw==} + dev: false + + /manage-path/2.0.0: + resolution: {integrity: sha512-NJhyB+PJYTpxhxZJ3lecIGgh4kwIY2RAh44XvAz9UlqthlQwtPBf62uBVR8XaD8CRuSjQ6TnZH2lNJkbLPZM2A==} + dev: true + + /mandarin/5.0.6: + resolution: {integrity: sha512-VmPKM6ADe+tk0suaHfm1lHFuuh2z8gW+VX3xr7M/KcHraGgyWY0nm/1xSIABiRMw9zGF1vqsEjYaFmv5Byke4g==} + engines: {node: '>=14'} + dependencies: + '@cospired/i18n-iso-languages': 4.1.0 + '@google-cloud/translate': 7.2.2 + '@ladjs/redis': 1.1.1 + '@ladjs/shared-config': 8.0.0 + debug: 4.3.4 + globby: 11.1.0 + is-fqdn: 2.0.1 + is-string-and-not-blank: 0.0.2 + lodash: 4.17.21 + modify-filename: 1.1.0 + p-map-series: 2.1.0 + pify: 5.0.0 + rehype-raw: 5.1.0 + rehype-rewrite: 1.0.2 + rehype-stringify: 8.0.0 + remark-autolink-headings: 6.1.0 + remark-emoji: 2.2.0 + remark-parse: 9.0.0 + remark-preset-github: 4.0.4 + remark-rehype: 8.1.0 + remark-slug: 6.1.0 + rev-hash: 3.0.0 + to-vfile: 6.1.0 + unified: 9.2.2 + universalify: 2.0.0 + validator: 13.11.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /manifest-rev/1.0.3: + resolution: {integrity: sha512-MAVxsTSydoYjoZg1rdHg6teGUNVZ3DwkHxcO6WjL7+GpoSuVQO+hhL4UrC+6Kf91gaM49/riqG1M4OggS9eLsg==} + engines: {node: '>=8.x'} + dev: false + + /map-age-cleaner/0.1.3: + resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} + engines: {node: '>=6'} + dependencies: + p-defer: 1.0.0 + dev: true + + /map-cache/0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-obj/1.0.1: + resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-obj/4.3.0: + resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} + engines: {node: '>=8'} + dev: true + + /map-stream/0.0.7: + resolution: {integrity: sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==} + dev: false + + /map-stream/0.1.0: + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + dev: true + + /map-visit/1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} + dependencies: + object-visit: 1.0.1 + dev: true + + /markdown-it-anchor/8.6.7_2zb4u3vubltivolgu556vv4aom: + resolution: {integrity: sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==} + peerDependencies: + '@types/markdown-it': '*' + markdown-it: '*' + dependencies: + '@types/markdown-it': 12.2.3 + markdown-it: 12.3.2 + dev: false + + /markdown-it-emoji/2.0.2: + resolution: {integrity: sha512-zLftSaNrKuYl0kR5zm4gxXjHaOI3FAOEaloKmRA5hijmJZvSjmxcokOLlzycb/HXlUFWzXqpIEoyEMCE4i9MvQ==} + dev: false + + /markdown-it-github-headings/2.0.1: + resolution: {integrity: sha512-5CeRu1ANVJcEqCWxhYoECzb/7Wx//mW1eu3AoU3AgJe+wbSf4+ct83jRTQO0jQr5BPEMxaGVL6lPNS9Vf9nlHg==} + dependencies: + github-slugger: 1.5.0 + innertext: 1.0.3 + dev: false + + /markdown-it-highlightjs/4.0.1: + resolution: {integrity: sha512-EPXwFEN6P5nqR3G4KjT20r20xbGYKMMA/360hhSYFmeoGXTE6hsLtJAiB/8ID8slVH4CWHHEL7GX0YenyIstVQ==} + dependencies: + highlight.js: 11.9.0 + dev: false + + /markdown-it-task-checkbox/1.0.6: + resolution: {integrity: sha512-7pxkHuvqTOu3iwVGmDPeYjQg+AIS9VQxzyLP9JCg9lBjgPAJXGEkChK6A2iFuj3tS0GV3HG2u5AMNhcQqwxpJw==} + dev: false + + /markdown-it/12.3.2: + resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==} + hasBin: true + dependencies: + argparse: 2.0.1 + entities: 2.1.0 + linkify-it: 3.0.3 + mdurl: 1.0.1 + uc.micro: 1.0.6 + dev: false + + /markdown-it/13.0.2: + resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==} + hasBin: true + dependencies: + argparse: 2.0.1 + entities: 3.0.1 + linkify-it: 4.0.1 + mdurl: 1.0.1 + uc.micro: 1.0.6 + dev: false + + /markdown-table/2.0.0: + resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==} + dependencies: + repeat-string: 1.6.1 + + /marked/4.3.0: + resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} + engines: {node: '>= 12'} + hasBin: true + dev: false + + /match-casing/1.0.3: + resolution: {integrity: sha512-oMyC3vUVCFbGu+M2Zxl212LPJThcaw7QxB5lFuJPQCgV/dsGBP0yZeCoLmX6CiBkoBcVbAKDJZrBpJVu0XcLMw==} + + /matchdep/2.0.0: + resolution: {integrity: sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==} + engines: {node: '>= 0.10.0'} + dependencies: + findup-sync: 2.0.0 + micromatch: 3.1.10 + resolve: 1.22.8 + stack-trace: 0.0.10 + transitivePeerDependencies: + - supports-color + dev: true + + /matcher/5.0.0: + resolution: {integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + escape-string-regexp: 5.0.0 + dev: true + + /math-interval-parser/2.0.1: + resolution: {integrity: sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==} + engines: {node: '>=0.10.0'} + dev: false + + /mathml-tag-names/2.1.3: + resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} + dev: true + + /md5-file/5.0.0: + resolution: {integrity: sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: false + + /md5-hex/3.0.1: + resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} + engines: {node: '>=8'} + dependencies: + blueimp-md5: 2.19.0 + dev: true + + /md5.js/1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /mdast-comment-marker/1.1.2: + resolution: {integrity: sha512-vTFXtmbbF3rgnTh3Zl3irso4LtvwUq/jaDvT2D1JqTGAwaipcS7RpTxzi6KjoRqI9n2yuAhzLDAC8xVTF3XYVQ==} + + /mdast-util-definitions/4.0.0: + resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} + dependencies: + unist-util-visit: 2.0.3 + dev: false + + /mdast-util-find-and-replace/1.1.1: + resolution: {integrity: sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==} + dependencies: + escape-string-regexp: 4.0.0 + unist-util-is: 4.1.0 + unist-util-visit-parents: 3.1.1 + + /mdast-util-from-markdown/0.8.5: + resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} + dependencies: + '@types/mdast': 3.0.13 + mdast-util-to-string: 2.0.0 + micromark: 2.11.4 + parse-entities: 2.0.0 + unist-util-stringify-position: 2.0.3 + transitivePeerDependencies: + - supports-color + + /mdast-util-from-markdown/1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + dependencies: + '@types/mdast': 3.0.13 + '@types/unist': 2.0.8 + decode-named-character-reference: 1.0.2 + mdast-util-to-string: 3.2.0 + micromark: 3.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-decode-string: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-stringify-position: 3.0.3 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-gfm-autolink-literal/0.1.3: + resolution: {integrity: sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==} + dependencies: + ccount: 1.1.0 + mdast-util-find-and-replace: 1.1.1 + micromark: 2.11.4 + transitivePeerDependencies: + - supports-color + + /mdast-util-gfm-strikethrough/0.2.3: + resolution: {integrity: sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==} + dependencies: + mdast-util-to-markdown: 0.6.5 + + /mdast-util-gfm-table/0.1.6: + resolution: {integrity: sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==} + dependencies: + markdown-table: 2.0.0 + mdast-util-to-markdown: 0.6.5 + + /mdast-util-gfm-task-list-item/0.1.6: + resolution: {integrity: sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==} + dependencies: + mdast-util-to-markdown: 0.6.5 + + /mdast-util-gfm/0.1.2: + resolution: {integrity: sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==} + dependencies: + mdast-util-gfm-autolink-literal: 0.1.3 + mdast-util-gfm-strikethrough: 0.2.3 + mdast-util-gfm-table: 0.1.6 + mdast-util-gfm-task-list-item: 0.1.6 + mdast-util-to-markdown: 0.6.5 + transitivePeerDependencies: + - supports-color + + /mdast-util-heading-range/2.1.5: + resolution: {integrity: sha512-jXbFD0C+MfRkwsaze+btzG9CmVrxnc5kpcJLtx3SvSlPWnNdGMlDRHKDB9/TIPEq9nRHnkixppT8yvaUJ5agJg==} + dependencies: + mdast-util-to-string: 1.1.0 + + /mdast-util-heading-range/3.1.1: + resolution: {integrity: sha512-Dxyx/mzVcmzFgW8TtorRTisWaTS9WgooSiVdCYnp48iSjzsAQD0uwtLYxcgxoPCSINuKxWLZGz+OOZcsqhqNTg==} + dependencies: + '@types/mdast': 3.0.13 + '@types/unist': 2.0.8 + mdast-util-to-string: 3.2.0 + dev: true + + /mdast-util-heading-style/1.0.6: + resolution: {integrity: sha512-8ZuuegRqS0KESgjAGW8zTx4tJ3VNIiIaGFNEzFpRSAQBavVc7AvOo9I4g3crcZBfYisHs4seYh0rAVimO6HyOw==} + + /mdast-util-phrasing/3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + dependencies: + '@types/mdast': 3.0.13 + unist-util-is: 5.2.1 + dev: true + + /mdast-util-to-hast/10.2.0: + resolution: {integrity: sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==} + dependencies: + '@types/mdast': 3.0.13 + '@types/unist': 2.0.8 + mdast-util-definitions: 4.0.0 + mdurl: 1.0.1 + unist-builder: 2.0.3 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + dev: false + + /mdast-util-to-markdown/0.6.5: + resolution: {integrity: sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==} + dependencies: + '@types/unist': 2.0.8 + longest-streak: 2.0.4 + mdast-util-to-string: 2.0.0 + parse-entities: 2.0.0 + repeat-string: 1.6.1 + zwitch: 1.0.5 + + /mdast-util-to-markdown/1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + dependencies: + '@types/mdast': 3.0.13 + '@types/unist': 2.0.8 + longest-streak: 3.1.0 + mdast-util-phrasing: 3.0.1 + mdast-util-to-string: 3.2.0 + micromark-util-decode-string: 1.1.0 + unist-util-visit: 4.1.2 + zwitch: 2.0.4 + dev: true + + /mdast-util-to-nlcst/4.0.1: + resolution: {integrity: sha512-Y4ffygj85MTt70STKnEquw6k73jYWJBaYcb4ITAKgSNokZF7fH8rEHZ1GsRY/JaxqUevMaEnsDmkVv5Z9uVRdg==} + dependencies: + nlcst-to-string: 2.0.4 + repeat-string: 1.6.1 + unist-util-position: 3.1.0 + vfile-location: 3.2.0 + + /mdast-util-to-string/1.1.0: + resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==} + + /mdast-util-to-string/2.0.0: + resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} + + /mdast-util-to-string/3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + dependencies: + '@types/mdast': 3.0.13 + dev: true + + /mdast-util-toc/5.1.0: + resolution: {integrity: sha512-csimbRIVkiqc+PpFeKDGQ/Ck2N4f9FYH3zzBMMJzcxoKL8m+cM0n94xXm0I9eaxHnKdY9n145SGTdyJC7i273g==} + dependencies: + '@types/mdast': 3.0.13 + '@types/unist': 2.0.8 + extend: 3.0.2 + github-slugger: 1.5.0 + mdast-util-to-string: 2.0.0 + unist-util-is: 4.1.0 + unist-util-visit: 2.0.3 + + /mdn-data/2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: true + optional: true + + /mdn-data/2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + dev: true + + /mdn-data/2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + dev: true + + /mdn-data/2.0.4: + resolution: {integrity: sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==} + dev: true + optional: true + + /mdurl/1.0.1: + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + dev: false + + /media-typer/0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: false + + /mem/9.0.2: + resolution: {integrity: sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==} + engines: {node: '>=12.20'} + dependencies: + map-age-cleaner: 0.1.3 + mimic-fn: 4.0.0 + dev: true + + /memoizee/0.4.15: + resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-weak-map: 2.0.3 + event-emitter: 0.3.5 + is-promise: 2.2.2 + lru-queue: 0.1.0 + next-tick: 1.1.0 + timers-ext: 0.1.7 + + /memory-fs/0.2.0: + resolution: {integrity: sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng==} + dev: true + + /memory-pager/1.5.0: + resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} + dev: false + + /memorystream/0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + dev: true + + /mensch/0.3.4: + resolution: {integrity: sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==} + dev: false + + /meow/10.1.5: + resolution: {integrity: sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + '@types/minimist': 1.2.3 + camelcase-keys: 7.0.2 + decamelize: 5.0.1 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 8.0.0 + redent: 4.0.0 + trim-newlines: 4.1.1 + type-fest: 1.4.0 + yargs-parser: 20.2.9 + dev: true + + /meow/11.0.0: + resolution: {integrity: sha512-Cl0yeeIrko6d94KpUo1M+0X1sB14ikoaqlIGuTH1fW4I+E3+YljL54/hb/BWmVfrV9tTV9zU04+xjw08Fh2WkA==} + engines: {node: '>=14.16'} + dependencies: + '@types/minimist': 1.2.3 + camelcase-keys: 8.0.2 + decamelize: 6.0.0 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 4.0.1 + read-pkg-up: 9.1.0 + redent: 4.0.0 + trim-newlines: 4.1.1 + type-fest: 3.13.1 + yargs-parser: 21.1.1 + dev: true + + /meow/3.7.0: + resolution: {integrity: sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==} + engines: {node: '>=0.10.0'} + dependencies: + camelcase-keys: 2.1.0 + decamelize: 1.2.0 + loud-rejection: 1.6.0 + map-obj: 1.0.1 + minimist: 1.2.8 + normalize-package-data: 2.5.0 + object-assign: 4.1.1 + read-pkg-up: 1.0.1 + redent: 1.0.0 + trim-newlines: 1.0.0 + dev: true + + /meow/7.1.1: + resolution: {integrity: sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==} + engines: {node: '>=10'} + dependencies: + '@types/minimist': 1.2.3 + camelcase-keys: 6.2.2 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 2.5.0 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.13.1 + yargs-parser: 18.1.3 + dev: true + + /meow/8.1.2: + resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} + engines: {node: '>=10'} + dependencies: + '@types/minimist': 1.2.3 + camelcase-keys: 6.2.2 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.18.1 + yargs-parser: 20.2.9 + dev: true + + /meow/9.0.0: + resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==} + engines: {node: '>=10'} + dependencies: + '@types/minimist': 1.2.3 + camelcase-keys: 6.2.2 + decamelize: 1.2.0 + decamelize-keys: 1.1.1 + hard-rejection: 2.1.0 + minimist-options: 4.1.0 + normalize-package-data: 3.0.3 + read-pkg-up: 7.0.1 + redent: 3.0.0 + trim-newlines: 3.0.1 + type-fest: 0.18.1 + yargs-parser: 20.2.9 + dev: true + + /merge-options/3.0.4: + resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} + engines: {node: '>=10'} + dependencies: + is-plain-obj: 2.1.0 + dev: false + + /merge-stream/2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge/2.1.1: + resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} + dev: true + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + /methods/1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + /micro-spelling-correcter/1.1.1: + resolution: {integrity: sha512-lkJ3Rj/mtjlRcHk6YyCbvZhyWTOzdBvTHsxMmZSk5jxN1YyVSQ+JETAom55mdzfcyDrY/49Z7UCW760BK30crg==} + dev: true + + /micromark-core-commonmark/1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-factory-destination: 1.1.0 + micromark-factory-label: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-factory-title: 1.1.0 + micromark-factory-whitespace: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-html-tag-name: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: true + + /micromark-extension-gfm-autolink-literal/0.5.7: + resolution: {integrity: sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==} + dependencies: + micromark: 2.11.4 + transitivePeerDependencies: + - supports-color + + /micromark-extension-gfm-strikethrough/0.6.5: + resolution: {integrity: sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==} + dependencies: + micromark: 2.11.4 + transitivePeerDependencies: + - supports-color + + /micromark-extension-gfm-table/0.4.3: + resolution: {integrity: sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==} + dependencies: + micromark: 2.11.4 + transitivePeerDependencies: + - supports-color + + /micromark-extension-gfm-tagfilter/0.3.0: + resolution: {integrity: sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==} + + /micromark-extension-gfm-task-list-item/0.3.3: + resolution: {integrity: sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==} + dependencies: + micromark: 2.11.4 + transitivePeerDependencies: + - supports-color + + /micromark-extension-gfm/0.3.3: + resolution: {integrity: sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==} + dependencies: + micromark: 2.11.4 + micromark-extension-gfm-autolink-literal: 0.5.7 + micromark-extension-gfm-strikethrough: 0.6.5 + micromark-extension-gfm-table: 0.4.3 + micromark-extension-gfm-tagfilter: 0.3.0 + micromark-extension-gfm-task-list-item: 0.3.3 + transitivePeerDependencies: + - supports-color + + /micromark-factory-destination/1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-factory-label/1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: true + + /micromark-factory-space/1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-factory-title/1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-factory-whitespace/1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + dependencies: + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-util-character/1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-util-chunked/1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-classify-character/1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-util-combine-extensions/1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-types: 1.1.0 + dev: true + + /micromark-util-decode-numeric-character-reference/1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-decode-string/1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-encode/1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + dev: true + + /micromark-util-html-tag-name/1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + dev: true + + /micromark-util-normalize-identifier/1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-resolve-all/1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + dependencies: + micromark-util-types: 1.1.0 + dev: true + + /micromark-util-sanitize-uri/1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 + dev: true + + /micromark-util-subtokenize/1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: true + + /micromark-util-symbol/1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + dev: true + + /micromark-util-types/1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + dev: true + + /micromark/2.11.4: + resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} + dependencies: + debug: 4.3.4 + parse-entities: 2.0.0 + transitivePeerDependencies: + - supports-color + + /micromark/3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + dependencies: + '@types/debug': 4.1.9 + debug: 4.3.4 + decode-named-character-reference: 1.0.2 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-combine-extensions: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-encode: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: true + + /micromatch/3.1.10: + resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + extglob: 2.0.4 + fragment-cache: 0.2.1 + kind-of: 6.0.3 + nanomatch: 1.2.13 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /micromatch/4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + /miller-rabin/4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + dev: true + + /mime-db/1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + /mime-types/2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + + /mime/1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /mime/2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + /mime/3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + dev: false + + /mimic-fn/2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-fn/4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /mimic-response/1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + /mimic-response/3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + /mimic-response/4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /min-indent/1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true + + /minimalistic-assert/1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + /minimalistic-crypto-utils/1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + dev: true + + /minimatch/3.0.8: + resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + + /minimatch/5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + + /minimatch/9.0.1: + resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: false + + /minimatch/9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + + /minimist-options/4.1.0: + resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} + engines: {node: '>= 6'} + dependencies: + arrify: 1.0.1 + is-plain-obj: 1.1.0 + kind-of: 6.0.3 + dev: true + + /minimist/0.0.5: + resolution: {integrity: sha512-rSJ0cdmCj3qmKdObcnMcWgPVOyaOWlazLhZAJW0s6G6lx1ZEuFkraWmEH5LTvX90btkfHPclQBjvjU7A/kYRFg==} + dev: true + + /minimist/0.2.4: + resolution: {integrity: sha512-Pkrrm8NjyQ8yVt8Am9M+yUt74zE3iokhzbG1bFVNjLB92vwM71hf40RkEsryg98BujhVOncKm/C1xROxZ030LQ==} + dev: true + + /minimist/1.2.6: + resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + dev: false + + /minimist/1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + /minipass-collect/1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + + /minipass-fetch/1.4.1: + resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} + engines: {node: '>=8'} + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + dev: true + + /minipass-fetch/2.1.2: + resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + dev: true + + /minipass-fetch/3.0.4: + resolution: {integrity: sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + minipass: 7.0.4 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + dev: false + + /minipass-flush/1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + + /minipass-pipeline/1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + dependencies: + minipass: 3.3.6 + + /minipass-sized/1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + dependencies: + minipass: 3.3.6 + + /minipass/3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + dependencies: + yallist: 4.0.0 + + /minipass/5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + /minipass/7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + + /minizlib/2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + /mixin-deep/1.3.2: + resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} + engines: {node: '>=0.10.0'} + dependencies: + for-in: 1.0.2 + is-extendable: 1.0.1 + dev: true + + /mkdirp-classic/0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + + /mkdirp/0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /mkdirp/1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + /mobileconfig/2.4.0: + resolution: {integrity: sha512-jJh0vTFFGSszxZraSwSO0dDEZNOwFA5ixJ2afhlzKe4R0bbOnpDVvGzLom5bmW8W1UglrAIIEm6ZNNp+S//ORw==} + dependencies: + handlebars: 4.7.7 + jsrsasign: 9.1.9 + plist: 3.0.2 + uuid: 8.3.2 + dev: false + + /modify-filename/1.1.0: + resolution: {integrity: sha512-EickqnKq3kVVaZisYuCxhtKbZjInCuwgwZWyAmRIp1NTMhri7r3380/uqwrUHfaDiPzLVTuoNy4whX66bxPVog==} + engines: {node: '>=0.10.0'} + + /module-deps/6.2.3: + resolution: {integrity: sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==} + engines: {node: '>= 0.8.0'} + hasBin: true + dependencies: + JSONStream: 1.3.5 + browser-resolve: 2.0.0 + cached-path-relative: 1.1.0 + concat-stream: 1.6.2 + defined: 1.0.1 + detective: 5.2.1 + duplexer2: 0.1.4 + inherits: 2.0.4 + parents: 1.0.1 + readable-stream: 2.3.8 + resolve: 1.22.8 + stream-combiner2: 1.1.1 + subarg: 1.0.0 + through2: 2.0.5 + xtend: 4.0.2 + dev: true + + /moment/2.29.4: + resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} + dev: false + + /mongo-cursor-pagination/8.1.3: + resolution: {integrity: sha512-fJ2InDztQ+BL3r9/j107bYpnTdJ5xyC4PkiFhoiVo+Y2ZLsEAgwPHzzwzp3phHMaBtiMCeabMxJRJXCqai+KIg==} + engines: {node: '>= 6.9.1'} + dependencies: + base64-url: 2.3.3 + bson: 4.7.2 + object-path: 0.11.8 + projection-utils: 1.1.0 + semver: 5.7.2 + underscore: 1.13.6 + dev: false + + /mongodb-connection-string-url/2.6.0: + resolution: {integrity: sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==} + dependencies: + '@types/whatwg-url': 8.2.2 + whatwg-url: 11.0.0 + dev: false + + /mongodb-extended-json/1.11.1: + resolution: {integrity: sha512-thPOw/IJk3OEteloi/FZqCwrPpTLYg22ab6XpDrL20IfA7+9XRbiDDYWjnMp4gCQRA/JhA5D9xabiqRflX3aiw==} + deprecated: Use EJSON from the `bson` package instead + dependencies: + JSONStream: 1.3.5 + async: 3.2.4 + bson: 1.1.6 + event-stream: 4.0.1 + lodash.isfunction: 3.0.9 + lodash.transform: 4.6.0 + moment: 2.29.4 + raf: 3.4.1 + dev: false + + /mongodb-language-model/1.7.1: + resolution: {integrity: sha512-qkYggIFWxpC2PiG+lKRjdZ069Q+g0YQ8wYFJRnEesudFA1+0TNFqtrBpshBsvmaT41fwdhS4/1/4ey8Bj4qf7g==} + dev: false + + /mongodb-memory-server-core/8.15.1: + resolution: {integrity: sha512-U6ntro5DvUD71C2juKCzzc2Hul0qLYUpQLiXcXDcvtNDbGMoJgwKScdvptQkzQwUdICeZUfvZo8By7Mc09Umog==} + engines: {node: '>=12.22.0'} + dependencies: + async-mutex: 0.3.2 + camelcase: 6.3.0 + debug: 4.3.4 + find-cache-dir: 3.3.2 + follow-redirects: 1.15.3 + get-port: 5.1.1 + https-proxy-agent: 5.0.1 + md5-file: 5.0.0 + mongodb: 4.17.1 + new-find-package-json: 2.0.0 + semver: 7.5.4 + tar-stream: 2.2.0 + tslib: 2.6.2 + uuid: 9.0.1 + yauzl: 2.10.0 + transitivePeerDependencies: + - aws-crt + - supports-color + dev: false + + /mongodb-memory-server/8.15.1: + resolution: {integrity: sha512-nqIbM5oh1s46VV4InhqQdNFu5szx+xi6qT//87beQ10JCZHLG1nZ/SUMsXkKLNn9wvs19OAf5HwI60enK9ZOuA==} + engines: {node: '>=12.22.0'} + requiresBuild: true + dependencies: + mongodb-memory-server-core: 8.15.1 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + - supports-color + dev: false + + /mongodb-query-parser/2.5.0: + resolution: {integrity: sha512-RsviXsRkHp/MJVg5oPVJ77QFqPyQ3bO9K5mmE+ChgWbSKlnMeG7MWl1Rshwkq9kQF0PIBnxgNAaeGeHe8AQiBg==} + peerDependencies: + bson: ^4.6.1 || ^5 + dependencies: + debug: 4.3.4 + ejson-shell-parser: 1.2.4 + is-json: 2.0.1 + javascript-stringify: 2.1.0 + lodash: 4.17.21 + lru-cache: 5.1.1 + mongodb-language-model: 1.7.1 + transitivePeerDependencies: + - supports-color + dev: false + + /mongodb-short-id/0.3.3_snappy@7.2.2: + resolution: {integrity: sha512-158pm5UD7rHcaAl+EWJF3EBMAcoJq6FxF9VEg9UdNertn7fQw08iXjsf2LDHTHFO/or5dBLC+Wiit9qX+AAuXw==} + dependencies: + mongodb: 6.1.0_snappy@7.2.2 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - gcp-metadata + - kerberos + - mongodb-client-encryption + - snappy + - socks + dev: false + + /mongodb/4.16.0: + resolution: {integrity: sha512-0EB113Fsucaq1wsY0dOhi1fmZOwFtLOtteQkiqOXGklvWMnSH3g2QS53f0KTP+/6qOkuoXE2JksubSZNmxeI+g==} + engines: {node: '>=12.9.0'} + dependencies: + bson: 4.7.2 + mongodb-connection-string-url: 2.6.0 + socks: 2.7.1 + optionalDependencies: + '@aws-sdk/credential-providers': 3.428.0 + saslprep: 1.0.3 + transitivePeerDependencies: + - aws-crt + dev: false + + /mongodb/4.17.0: + resolution: {integrity: sha512-LZGMIPjPfWEfhPJATk1s9IvVTD18tyfKdT/0blCMih5vGagk2SwA9wFAUPMdtJpTrhXmyfGgwAaMkvneX2bn2A==} + engines: {node: '>=12.9.0'} + dependencies: + bson: 4.7.2 + mongodb-connection-string-url: 2.6.0 + socks: 2.7.1 + optionalDependencies: + '@aws-sdk/credential-providers': 3.428.0 + '@mongodb-js/saslprep': 1.1.0 + transitivePeerDependencies: + - aws-crt + dev: false + + /mongodb/4.17.1: + resolution: {integrity: sha512-MBuyYiPUPRTqfH2dV0ya4dcr2E5N52ocBuZ8Sgg/M030nGF78v855B3Z27mZJnp8PxjnUquEnAtjOsphgMZOlQ==} + engines: {node: '>=12.9.0'} + dependencies: + bson: 4.7.2 + mongodb-connection-string-url: 2.6.0 + socks: 2.7.1 + optionalDependencies: + '@aws-sdk/credential-providers': 3.428.0 + '@mongodb-js/saslprep': 1.1.0 + transitivePeerDependencies: + - aws-crt + dev: false + + /mongodb/6.1.0_snappy@7.2.2: + resolution: {integrity: sha512-AvzNY0zMkpothZ5mJAaIo2bGDjlJQqqAbn9fvtVgwIIUPEfdrqGxqNjjbuKyrgQxg2EvCmfWdjq+4uj96c0YPw==} + engines: {node: '>=16.20.1'} + peerDependencies: + '@aws-sdk/credential-providers': ^3.188.0 + '@mongodb-js/zstd': ^1.1.0 + gcp-metadata: ^5.2.0 + kerberos: ^2.0.1 + mongodb-client-encryption: '>=6.0.0 <7' + snappy: ^7.2.2 + socks: ^2.7.1 + peerDependenciesMeta: + '@aws-sdk/credential-providers': + optional: true + '@mongodb-js/zstd': + optional: true + gcp-metadata: + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + socks: + optional: true + dependencies: + '@mongodb-js/saslprep': 1.1.0 + bson: 6.1.0 + mongodb-connection-string-url: 2.6.0 + snappy: 7.2.2 + dev: false + + /mongoose-common-plugin/4.0.0_mongoose@6.11.1: + resolution: {integrity: sha512-UPnECmvUkGzY1F9zSl/IDDpavSVEqBGGOpALVvF3owF0UdWXUEXRKee1NeL66uaRhFqhdCdmTr+kIpLv+iB2/g==} + engines: {node: '>=14'} + dependencies: + '@ladjs/mongoose-error-messages': 1.0.0_mongoose@6.11.1 + '@ladjs/mongoose-unique-validator': 5.0.0_mongoose@6.11.1 + boolean: 3.2.0 + mongoose-hidden: 1.9.1 + mongoose-omit-common-fields: 0.0.6 + mongoose-validation-error-transform: 0.0.6 + speakingurl: 14.0.1 + transitivePeerDependencies: + - mongoose + dev: false + + /mongoose-hidden/1.9.1: + resolution: {integrity: sha512-wi9oKsNl8jOE+J+J6ZCx6LSakplCy/FzEUyAagllpFex9ya5DuY9og7u2cIVl2dk6h6DvKKHMgh30GDt2PzjMA==} + dependencies: + mpath: 0.8.4 + dev: false + + /mongoose-omit-common-fields/0.0.6: + resolution: {integrity: sha512-1KZtgcy1sdYntPV+/LrDksPUdrs+Oket1mgQiVy+rqv9jH7UowP8AlJT2+hecnG6WXF+bTGgU2qhRFmL1YCu8A==} + engines: {node: '>=8.3'} + dependencies: + camelcase: 6.3.0 + dev: false + + /mongoose-unique-validator/3.1.0_mongoose@6.11.1: + resolution: {integrity: sha512-UsBBlFapip8gc8x1h+nLWnkOy+GTy9Z+zmTyZ35icLV3EoLIVz180vJzepfMM9yBy2AJh+maeuoM8CWtqejGUg==} + peerDependencies: + mongoose: ^6.0.0 + dependencies: + lodash.foreach: 4.5.0 + lodash.get: 4.4.2 + lodash.merge: 4.6.2 + mongoose: 6.11.1 + dev: false + + /mongoose-validation-error-transform/0.0.6: + resolution: {integrity: sha512-qhfezZmS0AIM9K3mGJXpcLtUjYDnCV0zuBc4Sr6CfMqUzddtJzDaooNONLrGShNNQ6oVfyZ8ZqWUR1P5z/gyGQ==} + engines: {node: '>= 6.x'} + dependencies: + capitalize: 2.0.4 + humanize-string: 2.1.0 + lodash: 4.17.21 + dev: false + + /mongoose/6.11.1: + resolution: {integrity: sha512-AvQ8C5ZGF6GcsQhoRg/i7pbNZpb96qLGU5ICBllckp7qMOxcfUF1nA6JstZw841BqRcE6myZ/mx9CluEESaw5Q==} + engines: {node: '>=12.0.0'} + dependencies: + bson: 4.7.2 + kareem: 2.5.1 + mongodb: 4.16.0 + mpath: 0.9.0 + mquery: 4.0.3 + ms: 2.1.3 + sift: 16.0.1 + transitivePeerDependencies: + - aws-crt + - supports-color + dev: false + + /moo/0.5.2: + resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} + dev: false + + /morgan/1.10.0: + resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==} + engines: {node: '>= 0.8.0'} + dependencies: + basic-auth: 2.0.1 + debug: 2.6.9 + depd: 2.0.0 + on-finished: 2.3.0 + on-headers: 1.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /mozjpeg/6.0.1: + resolution: {integrity: sha512-9Z59pJMi8ni+IUvSH5xQwK5tNLw7p3dwDNCZ3o1xE+of3G5Hc/yOz6Ue/YuLiBXU3ZB5oaHPURyPdqfBX/QYJA==} + engines: {node: '>=6'} + hasBin: true + requiresBuild: true + dependencies: + bin-build: 3.0.0 + bin-wrapper: 4.1.0 + logalot: 2.1.0 + dev: true + optional: true + + /mpath/0.8.4: + resolution: {integrity: sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==} + engines: {node: '>=4.0.0'} + dev: false + + /mpath/0.9.0: + resolution: {integrity: sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==} + engines: {node: '>=4.0.0'} + dev: false + + /mquery/4.0.3: + resolution: {integrity: sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==} + engines: {node: '>=12.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /mri/1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: true + + /ms/2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + /msgpack-js/0.3.0: + resolution: {integrity: sha512-dBIO+q0IAtZMeTn8K1gr0NuM0OvXEV97NwFsJQKzJ/qkQI9d5MN7Vc++TAUkIxaoIMJyIgMByOAwoJO2wdYDrA==} + dependencies: + bops: 0.0.7 + dev: false + + /msgpack5/6.0.2: + resolution: {integrity: sha512-kBSpECAWslrciRF3jy6HkMckNa14j3VZwNUUe1ONO/yihs19MskiFnsWXm0Q0aPkDYDBRFvTKkEuEDY+HVxBvQ==} + dependencies: + bl: 5.1.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + dev: false + + /msgpackr-extract/3.0.2: + resolution: {integrity: sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==} + hasBin: true + requiresBuild: true + dependencies: + node-gyp-build-optional-packages: 5.0.7 + optionalDependencies: + '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.2 + '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.2 + '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.2 + '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.2 + '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.2 + '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.2 + dev: false + optional: true + + /msgpackr/1.9.9: + resolution: {integrity: sha512-sbn6mioS2w0lq1O6PpGtsv6Gy8roWM+o3o4Sqjd6DudrL/nOugY+KyJUimoWzHnf9OkO0T6broHFnYE/R05t9A==} + optionalDependencies: + msgpackr-extract: 3.0.2 + dev: false + + /multi-stage-sourcemap/0.3.1: + resolution: {integrity: sha512-UiTLYjqeIoVnJHyWGskwMKIhtZKK9uXUjSTWuwatarrc0d2H/6MAVFdwvEA/aKOHamIn7z4tfvxjz+FYucFpNQ==} + dependencies: + source-map: 0.1.43 + dev: true + + /multimap/1.1.0: + resolution: {integrity: sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==} + dev: true + + /multimatch/5.0.0: + resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} + engines: {node: '>=10'} + dependencies: + '@types/minimatch': 3.0.5 + array-differ: 3.0.0 + array-union: 2.1.0 + arrify: 2.0.1 + minimatch: 3.1.2 + + /mustache/4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + dev: false + + /mute-stdout/1.0.1: + resolution: {integrity: sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==} + engines: {node: '>= 0.10'} + dev: true + + /mute-stream/0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: true + + /mx-connect/1.4.4: + resolution: {integrity: sha512-QNelcQnUON/qk1KxErqCHsgSy7adIZVRW2zvW7YW+1a6Flu+oTLpRf5N8xBXy0bRF6BOmHIUTW3sG0npRDbDMw==} + dependencies: + ipaddr.js: 2.0.1 + mailauth: 4.3.4 + dev: false + + /mz/2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + dev: false + + /n-gram/1.1.2: + resolution: {integrity: sha512-mBTpWKp0NHdujHmxrskPg2jc108mjyMmVxHN1rZGK/ogTLi9O0debDIXlQPqotNELdNmVGtL4jr7SCig+4OWvQ==} + dev: false + + /nan/2.18.0: + resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} + + /nanoclone/0.2.1: + resolution: {integrity: sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==} + dev: false + + /nanoid/3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /nanomatch/1.2.13: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + fragment-cache: 0.2.1 + is-windows: 1.0.2 + kind-of: 6.0.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /napi-build-utils/1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + dev: false + + /natural-compare-lite/1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare/1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /natural/5.2.4: + resolution: {integrity: sha512-hstvCeNO63go8GMwZIO/wrmcj2oh0Wom2aN7QFF+1I7EJX/NoyM3jWKDbEoCkkQ7CCqqCn0+QdP9Bj2jkD731A==} + engines: {node: '>=0.4.10'} + dependencies: + afinn-165: 1.0.4 + apparatus: 0.0.10 + safe-stable-stringify: 2.4.3 + sylvester: 0.0.12 + underscore: 1.13.6 + wordnet-db: 3.1.14 + dev: false + + /ncp/2.0.0: + resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==} + hasBin: true + dev: true + + /nearley/2.20.1: + resolution: {integrity: sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==} + hasBin: true + dependencies: + commander: 2.20.3 + moo: 0.5.2 + railroad-diagrams: 1.0.0 + randexp: 0.4.6 + dev: false + + /negotiator/0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + /neo-async/2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: false + + /nested-error-stacks/1.0.2: + resolution: {integrity: sha512-o32anp9JA7oezPOFSfG2BBXSdHepOm5FpJvwxHWDtfJ3Bg3xdi68S6ijPlEOfUg6quxZWyvJM+8fHk1yMDKspA==} + dependencies: + inherits: 2.0.4 + dev: true + + /netmask/2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + dev: false + + /new-find-package-json/2.0.0: + resolution: {integrity: sha512-lDcBsjBSMlj3LXH2v/FW3txlh2pYTjmbOXPYJD93HI5EwuLzI11tdHSIpUMmfq/IOsldj4Ps8M8flhm+pCK4Ew==} + engines: {node: '>=12.22.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /newline-remove/1.0.2: + resolution: {integrity: sha512-YT01s6NMQTolGGRluPdCv7UJ7GOh3HnBBRFllksOu1gqrZ0NvWcJS3E6F5QdVGLhzsylyHfcfIx1rpN9ECtWCw==} + dev: false + + /next-line/1.1.0: + resolution: {integrity: sha512-+I10J3wKNoKddNxn0CNpoZ3eTZuqxjNM3b1GImVx22+ePI+Y15P8g/j3WsbP0fhzzrFzrtjOAoq5NCCucswXOQ==} + dev: false + + /next-tick/1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + + /nice-try/1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + /nise/5.1.4: + resolution: {integrity: sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==} + dependencies: + '@sinonjs/commons': 2.0.0 + '@sinonjs/fake-timers': 10.3.0 + '@sinonjs/text-encoding': 0.7.2 + just-extend: 4.2.1 + path-to-regexp: 1.8.0 + dev: true + + /nlcst-is-literal/1.2.2: + resolution: {integrity: sha512-R+1OJEmRl3ZOp9d8PbiRxGpnvmpi3jU+lzSqCJoLeogdEh0FYDRH1aC223qUbaKffxNTJkEfeDOeQfziw749yA==} + dependencies: + nlcst-to-string: 2.0.4 + + /nlcst-normalize/2.1.5: + resolution: {integrity: sha512-xSqTKv8IHIy3n/orD7wj81BZljLfbrTot0Pv64MYUnQUXfDbi1xDSpJR4qEmbFWyFoHsmivcOdgrK+o7ky3mcw==} + dependencies: + nlcst-to-string: 2.0.4 + + /nlcst-search/1.5.1: + resolution: {integrity: sha512-G3ws0fgNlVsUvHvA2G1PTjyxzGOJ0caI0+WOvlZzev5iSUTX+R1q4lnlL4Y7E+he4ZMUW/0FMn9rYwdYon/13g==} + dependencies: + nlcst-is-literal: 1.2.2 + nlcst-normalize: 2.1.5 + unist-util-visit: 1.4.1 + + /nlcst-to-string/2.0.4: + resolution: {integrity: sha512-3x3jwTd6UPG7vi5k4GEzvxJ5rDA7hVUIRNHPblKuMVP9Z3xmlsd9cgLcpAMkc5uPOBna82EeshROFhsPkbnTZg==} + + /no-case/2.3.2: + resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} + dependencies: + lower-case: 1.1.4 + dev: false + + /nocache/2.1.0: + resolution: {integrity: sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==} + engines: {node: '>=4.0.0'} + dev: false + + /node-abi/3.50.0: + resolution: {integrity: sha512-2Gxu7Eq7vnBIRfYSmqPruEllMM14FjOQFJSoqdGWthVn+tmwEXzmdPpya6cvvwf0uZA3F5N1fMFr9mijZBplFA==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: false + + /node-abort-controller/3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + dev: false + + /node-addon-api/6.1.0: + resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + dev: false + + /node-emoji/1.11.0: + resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} + dependencies: + lodash: 4.17.21 + dev: false + + /node-fetch/2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + + /node-forge/1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + dev: false + + /node-gyp-build-optional-packages/5.0.3: + resolution: {integrity: sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==} + hasBin: true + dev: false + optional: true + + /node-gyp-build-optional-packages/5.0.7: + resolution: {integrity: sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==} + hasBin: true + dev: false + optional: true + + /node-gyp/8.4.1: + resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} + engines: {node: '>= 10.12.0'} + hasBin: true + dependencies: + env-paths: 2.2.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + make-fetch-happen: 9.1.0 + nopt: 5.0.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.5.4 + tar: 6.2.0 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + + /node-gyp/9.4.0: + resolution: {integrity: sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==} + engines: {node: ^12.13 || ^14.13 || >=16} + hasBin: true + dependencies: + env-paths: 2.2.1 + exponential-backoff: 3.1.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + make-fetch-happen: 11.1.1 + nopt: 6.0.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.5.4 + tar: 6.2.0 + which: 2.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /node-gzip/1.1.2: + resolution: {integrity: sha512-ZB6zWpfZHGtxZnPMrJSKHVPrRjURoUzaDbLFj3VO70mpLTW5np96vXyHwft4Id0o+PYIzgDkBUjIzaNHhQ8srw==} + dev: false + + /node-html-parser/4.1.5: + resolution: {integrity: sha512-NLgqUXtftqnBqIjlRjYSaApaqE7TTxfTiH4VqKCjdUJKFOtUzRwney83EHz2qYc0XoxXAkYdmLjENCuZHvsIFg==} + dependencies: + css-select: 4.3.0 + he: 1.2.0 + dev: false + + /node-html-parser/6.1.10: + resolution: {integrity: sha512-6/uWdWxjQWQ7tMcFK2wWlrflsQUzh1HsEzlIf2j5+TtzfhT2yUvg3DwZYAmjEHeR3uX74ko7exjHW69J0tOzIg==} + dependencies: + css-select: 5.1.0 + he: 1.2.0 + dev: false + + /node-libs-browser/2.2.1: + resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==} + dependencies: + assert: 1.5.1 + browserify-zlib: 0.2.0 + buffer: 4.9.2 + console-browserify: 1.2.0 + constants-browserify: 1.0.0 + crypto-browserify: 3.12.0 + domain-browser: 1.2.0 + events: 3.3.0 + https-browserify: 1.0.0 + os-browserify: 0.3.0 + path-browserify: 0.0.1 + process: 0.11.10 + punycode: 1.4.1 + querystring-es3: 0.2.1 + readable-stream: 2.3.8 + stream-browserify: 2.0.2 + stream-http: 2.8.3 + string_decoder: 1.3.0 + timers-browserify: 2.0.12 + tty-browserify: 0.0.0 + url: 0.11.3 + util: 0.11.1 + vm-browserify: 1.1.2 + dev: true + + /node-preload/0.2.1: + resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} + engines: {node: '>=8'} + dependencies: + process-on-spawn: 1.0.0 + dev: true + + /node-releases/2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + + /node-sass/8.0.0: + resolution: {integrity: sha512-jPzqCF2/e6JXw6r3VxfIqYc8tKQdkj5Z/BDATYyG6FL6b/LuYBNFGFVhus0mthcWifHm/JzBpKAd+3eXsWeK/A==} + engines: {node: '>=14'} + hasBin: true + requiresBuild: true + dependencies: + async-foreach: 0.1.3 + chalk: 4.1.2 + cross-spawn: 7.0.3 + gaze: 1.1.3 + get-stdin: 4.0.1 + glob: 7.2.3 + lodash: 4.17.21 + make-fetch-happen: 10.2.1 + meow: 9.0.0 + nan: 2.18.0 + node-gyp: 8.4.1 + sass-graph: 4.0.1 + stdout-stream: 1.4.1 + true-case-path: 2.2.1 + transitivePeerDependencies: + - bluebird + - supports-color + dev: true + + /node-snowball/0.6.0: + resolution: {integrity: sha512-wZ7xQ2t7r83yJ9DToJAcs/IK23NZnS2txfRoLkKSe0ZlS4vbHnx0War2q9EMQt3hA2ahgqZk8ygN07qUdr7nuA==} + requiresBuild: true + dependencies: + nan: 2.18.0 + dev: false + + /nodemailer/6.9.1: + resolution: {integrity: sha512-qHw7dOiU5UKNnQpXktdgQ1d3OFgRAekuvbJLcdG5dnEo/GtcTHRYM7+UfJARdOFU9WUQO8OiIamgWPmiSFHYAA==} + engines: {node: '>=6.0.0'} + dev: false + + /nodemailer/6.9.3: + resolution: {integrity: sha512-fy9v3NgTzBngrMFkDsKEj0r02U7jm6XfC3b52eoNV+GCrGj+s8pt5OqhiJdWKuw51zCTdiNR/IUD1z33LIIGpg==} + engines: {node: '>=6.0.0'} + dev: false + + /nodemailer/6.9.4: + resolution: {integrity: sha512-CXjQvrQZV4+6X5wP6ZIgdehJamI63MFoYFGGPtHudWym9qaEHDNdPzaj5bfMCvxG1vhAileSWW90q7nL0N36mA==} + engines: {node: '>=6.0.0'} + dev: false + + /nodemailer/6.9.5: + resolution: {integrity: sha512-/dmdWo62XjumuLc5+AYQZeiRj+PRR8y8qKtFCOyuOl1k/hckZd8durUUHs/ucKx6/8kN+wFxqKJlQ/LK/qR5FA==} + engines: {node: '>=6.0.0'} + dev: false + + /nodemailer/6.9.6: + resolution: {integrity: sha512-s7pDtWwe5fLMkQUhw8TkWB/wnZ7SRdd9HRZslq/s24hlZvBP3j32N/ETLmnqTpmj4xoBZL9fOWyCIZ7r2HORHg==} + engines: {node: '>=6.0.0'} + dev: false + + /nodemon/2.0.22: + resolution: {integrity: sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==} + engines: {node: '>=8.10.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + debug: 3.2.7_supports-color@5.5.0 + ignore-by-default: 1.0.1 + minimatch: 3.1.2 + pstree.remy: 1.1.8 + semver: 5.7.2 + simple-update-notifier: 1.1.0 + supports-color: 5.5.0 + touch: 3.1.0 + undefsafe: 2.0.5 + dev: true + + /nofilter/3.1.0: + resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} + engines: {node: '>=12.19'} + + /noop6/1.0.9: + resolution: {integrity: sha512-DB3Hwyd89dPr5HqEPg3YHjzvwh/mCqizC1zZ8vyofqc+TQRyPDnT4wgXXbLGF4z9YAzwwTLi8pNLhGqcbSjgkA==} + dev: false + + /nopt/1.0.10: + resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: true + + /nopt/5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: true + + /nopt/6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: false + + /nopt/7.2.0: + resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + dependencies: + abbrev: 2.0.0 + dev: true + + /normalize-package-data/2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + + /normalize-package-data/3.0.3: + resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} + engines: {node: '>=10'} + dependencies: + hosted-git-info: 4.1.0 + is-core-module: 2.13.0 + semver: 7.5.4 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-package-data/4.0.1: + resolution: {integrity: sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + hosted-git-info: 5.2.1 + is-core-module: 2.13.0 + semver: 7.5.4 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path/2.1.1: + resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} + engines: {node: '>=0.10.0'} + dependencies: + remove-trailing-separator: 1.1.0 + dev: true + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range/0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-url/2.0.1: + resolution: {integrity: sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==} + engines: {node: '>=4'} + dependencies: + prepend-http: 2.0.0 + query-string: 5.1.1 + sort-keys: 2.0.0 + dev: true + + /normalize-url/4.5.1: + resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} + engines: {node: '>=8'} + dev: true + + /normalize-url/5.3.1: + resolution: {integrity: sha512-K1c7+vaAP+Yh5bOGmA10PGPpp+6h7WZrl7GwqKhUflBc9flU9pzG27DDeB9+iuhZkE3BJZOcgN1P/2sS5pqrWw==} + engines: {node: '>=10'} + dev: false + + /normalize-url/6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + dev: false + + /normalize-url/8.0.0: + resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} + engines: {node: '>=14.16'} + dev: true + + /notation/1.3.6: + resolution: {integrity: sha512-DIuJmrP/Gg1DcXKaApsqcjsJD6jEccqKSfmU3BUx/f1GHsMiTJh70cERwYc64tOmTRTARCeMwkqNNzjh3AHhiw==} + dev: false + + /now-and-later/2.0.1: + resolution: {integrity: sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==} + engines: {node: '>= 0.10'} + dependencies: + once: 1.4.0 + dev: true + + /npm-conf/1.1.3: + resolution: {integrity: sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==} + engines: {node: '>=4'} + dependencies: + config-chain: 1.1.13 + pify: 3.0.0 + dev: true + + /npm-normalize-package-bin/3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /npm-run-all/4.1.5: + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} + engines: {node: '>= 4'} + hasBin: true + dependencies: + ansi-styles: 3.2.1 + chalk: 2.4.2 + cross-spawn: 6.0.5 + memorystream: 0.3.1 + minimatch: 3.1.2 + pidtree: 0.3.1 + read-pkg: 3.0.0 + shell-quote: 1.8.1 + string.prototype.padend: 3.1.5 + dev: true + + /npm-run-path/2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} + dependencies: + path-key: 2.0.1 + + /npm-run-path/4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npm-run-path/5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /npmlog/6.0.2: + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + are-we-there-yet: 3.0.1 + console-control-strings: 1.1.0 + gauge: 4.0.4 + set-blocking: 2.0.0 + + /npmlog/7.0.1: + resolution: {integrity: sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + are-we-there-yet: 4.0.1 + console-control-strings: 1.1.0 + gauge: 5.0.1 + set-blocking: 2.0.0 + dev: false + + /nps-utils/1.7.0: + resolution: {integrity: sha512-wq/gUxTR3sgLYTLHlUKwMG2paUV3QdfwMj5aifWpQ60Vv9RQzA6pXDkwrAlMA8SNqoz8FwaGPc1X/7I+qjuYwg==} + dependencies: + any-shell-escape: 0.1.1 + common-tags: 1.8.2 + concurrently: 3.6.1 + cpy-cli: 1.0.1 + cross-env: 3.2.4 + is-windows: 1.0.2 + mkdirp: 0.5.6 + ncp: 2.0.0 + opn-cli: 3.1.0 + rimraf: 2.7.1 + dev: true + + /nps/5.10.0: + resolution: {integrity: sha512-tye+0hoKq3pB6NhykoPcOzwn4nEvwVvh1kJEDc+21gYordNdaBlkPv8ZlrZkuEWLUeujvS8VQ56KO9QGoPKkEA==} + hasBin: true + dependencies: + arrify: 1.0.1 + chalk: 2.4.2 + common-tags: 1.8.2 + find-up: 2.1.0 + js-yaml: 3.14.1 + lodash: 4.17.21 + manage-path: 2.0.0 + prefix-matches: 1.0.1 + readline-sync: 1.4.10 + spawn-command-with-kill: 1.0.2 + type-detect: 4.0.8 + yargs: 14.2.0 + dev: true + + /nth-check/1.0.2: + resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==} + dependencies: + boolbase: 1.0.0 + dev: true + optional: true + + /nth-check/2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + + /nub/0.0.0: + resolution: {integrity: sha512-dK0Ss9C34R/vV0FfYJXuqDAqHlaW9fvWVufq9MmGF2umCuDbd5GRfRD9fpi/LiM0l4ZXf8IBB+RYmZExqCrf0w==} + + /number-is-nan/1.0.1: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + dev: true + + /number-to-words/1.2.4: + resolution: {integrity: sha512-/fYevVkXRcyBiZDg6yzZbm0RuaD6i0qRfn8yr+6D0KgBMOndFPxuW10qCHpzs50nN8qKuv78k8MuotZhcVX6Pw==} + + /numbered/1.1.0: + resolution: {integrity: sha512-pv/ue2Odr7IfYOO0byC1KgBI10wo5YDauLhxY6/saNzAdAs0r1SotGCPzzCLNPL0xtrAwWRialLu23AAu9xO1g==} + dev: false + + /numeral/2.0.6: + resolution: {integrity: sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==} + dev: false + + /nwsapi/2.2.7: + resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + dev: false + + /nyc/15.1.0: + resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} + engines: {node: '>=8.9'} + hasBin: true + dependencies: + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + caching-transform: 4.0.0 + convert-source-map: 1.9.0 + decamelize: 1.2.0 + find-cache-dir: 3.3.2 + find-up: 4.1.0 + foreground-child: 2.0.0 + get-package-type: 0.1.0 + glob: 7.2.3 + istanbul-lib-coverage: 3.2.0 + istanbul-lib-hook: 3.0.0 + istanbul-lib-instrument: 4.0.3 + istanbul-lib-processinfo: 2.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + make-dir: 3.1.0 + node-preload: 0.2.1 + p-map: 3.0.0 + process-on-spawn: 1.0.0 + resolve-from: 5.0.0 + rimraf: 3.0.2 + signal-exit: 3.0.7 + spawn-wrap: 2.0.0 + test-exclude: 6.0.0 + yargs: 15.4.1 + transitivePeerDependencies: + - supports-color + dev: true + + /oauth-sign/0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + dev: false + + /oauth/0.9.15: + resolution: {integrity: sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==} + dev: false + + /obj-props/1.4.0: + resolution: {integrity: sha512-p7p/7ltzPDiBs6DqxOrIbtRdwxxVRBj5ROukeNb9RgA+fawhrz5n2hpNz8DDmYR//tviJSj7nUnlppGmONkjiQ==} + engines: {node: '>=0.10.0'} + dev: true + + /object-assign/4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + /object-copy/0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + dev: true + + /object-hash/3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: false + + /object-inspect/1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + + /object-is/1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + dev: true + + /object-keys/0.4.0: + resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==} + dev: false + + /object-keys/1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object-path/0.11.8: + resolution: {integrity: sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==} + engines: {node: '>= 10.12.0'} + dev: false + + /object-visit/1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /object.assign/4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.defaults/1.1.0: + resolution: {integrity: sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==} + engines: {node: '>=0.10.0'} + dependencies: + array-each: 1.0.1 + array-slice: 1.1.0 + for-own: 1.0.0 + isobject: 3.0.1 + dev: true + + /object.getownpropertydescriptors/2.1.7: + resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} + engines: {node: '>= 0.8'} + dependencies: + array.prototype.reduce: 1.0.6 + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + safe-array-concat: 1.0.1 + dev: true + optional: true + + /object.map/1.0.1: + resolution: {integrity: sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==} + engines: {node: '>=0.10.0'} + dependencies: + for-own: 1.0.0 + make-iterator: 1.0.1 + dev: true + + /object.pick/1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /object.reduce/1.0.1: + resolution: {integrity: sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==} + engines: {node: '>=0.10.0'} + dependencies: + for-own: 1.0.0 + make-iterator: 1.0.1 + dev: true + + /object.values/1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + dev: true + + /obuf/1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + dev: false + + /on-exit-leak-free/2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + dev: false + + /on-finished/2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /on-finished/2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: false + + /on-headers/1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + dev: false + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + + /onetime/5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime/6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /only/0.0.2: + resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} + dev: false + + /open-editor/2.0.1: + resolution: {integrity: sha512-B3KdD7Pl8jYdpBSBBbdYaqVUI3whQjLl1G1+CvhNc8+d7GzKRUq+VuCIx1thxGiqD2oBGRvsZz7QWrBsFP2yVA==} + engines: {node: '>=8'} + dependencies: + env-editor: 0.4.2 + line-column-path: 2.0.0 + open: 6.4.0 + dev: true + + /open-editor/4.1.1: + resolution: {integrity: sha512-SYtGeZ9Zkzj/naoZaEF9LzwDYEGwuqQ4Fx5E3xdVRN98LFJjvMhG/ElByFEOVOiXepGra/Wi1fA4i/E1fXSBsw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + env-editor: 1.1.0 + execa: 5.1.1 + line-column-path: 3.0.0 + open: 8.4.2 + dev: true + + /open/6.4.0: + resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} + engines: {node: '>=8'} + dependencies: + is-wsl: 1.1.0 + dev: true + + /open/7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: false + + /open/8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: true + + /openpgp/5.10.2: + resolution: {integrity: sha512-nRqMp4o31rBagWB02tgfKCsocXWq4uYobZf9GDVlD5rQXBq/wRIZHiDhGX1dlDAI2inkZcPd2dSZOqmtGnsK1A==} + engines: {node: '>= 8.0.0'} + dependencies: + asn1.js: 5.4.1 + dev: false + + /opentype.js/0.11.0: + resolution: {integrity: sha512-Z9NkAyQi/iEKQYzCSa7/VJSqVIs33wknw8Z8po+DzuRUAqivJ+hJZ94mveg3xIeKwLreJdWTMyEO7x1K13l41Q==} + hasBin: true + dependencies: + string.prototype.codepointat: 0.2.1 + tiny-inflate: 1.0.3 + dev: false + + /opn-cli/3.1.0: + resolution: {integrity: sha512-K756G8FyaHXG4KSllh7vsR0fNQ6XNs5sXBv6t6RkmAgBGCEoRZIk1AaSI+6xmFLZ5pSlBdeqcigeckGFIvfHzA==} + engines: {node: '>=4'} + hasBin: true + dependencies: + file-type: 3.9.0 + get-stdin: 5.0.1 + meow: 3.7.0 + opn: 4.0.2 + temp-write: 2.1.0 + dev: true + + /opn/4.0.2: + resolution: {integrity: sha512-iPBWbPP4OEOzR1xfhpGLDh+ypKBOygunZhM9jBtA7FS5sKjEiMZw0EFb82hnDOmTZX90ZWLoZKUza4cVt8MexA==} + engines: {node: '>=0.10.0'} + dependencies: + object-assign: 4.1.1 + pinkie-promise: 2.0.1 + dev: true + + /optionator/0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.5 + + /optionator/0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /optipng-bin/6.0.0: + resolution: {integrity: sha512-95bB4y8IaTsa/8x6QH4bLUuyvyOoGBCLDA7wOgDL8UFqJpSUh1Hob8JRJhit+wC1ZLN3tQ7mFt7KuBj0x8F2Wg==} + engines: {node: '>=8'} + hasBin: true + requiresBuild: true + dependencies: + bin-build: 3.0.0 + bin-wrapper: 4.1.0 + logalot: 2.1.0 + dev: true + optional: true + + /ordered-read-streams/1.0.1: + resolution: {integrity: sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==} + dependencies: + readable-stream: 2.3.8 + dev: true + + /os-browserify/0.3.0: + resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} + dev: true + + /os-filter-obj/2.0.0: + resolution: {integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==} + engines: {node: '>=4'} + dependencies: + arch: 2.2.0 + dev: true + + /os-fonts/0.5.0: + resolution: {integrity: sha512-z5/WfHiY1KP7I6AndN3N6+PENrs0eLX20VZp/S/uk4Aoxod2jb9/5K8WOyxpwAGq0VpP71i0vbofY+yZNiPoWw==} + dependencies: + recursive-readdir: 2.2.3 + recursive-readdir-sync: 1.0.6 + dev: false + + /os-locale/1.4.0: + resolution: {integrity: sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==} + engines: {node: '>=0.10.0'} + dependencies: + lcid: 1.0.0 + dev: true + + /os-tmpdir/1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true + + /otplib/12.0.1: + resolution: {integrity: sha512-xDGvUOQjop7RDgxTQ+o4pOol0/3xSZzawTiPKRrHnQWAy0WjhNs/5HdIDJCrqC4MBynmjXgULc6YfioaxZeFgg==} + dependencies: + '@otplib/core': 12.0.1 + '@otplib/preset-default': 12.0.1 + '@otplib/preset-v11': 12.0.1 + dev: false + + /outpipe/1.1.1: + resolution: {integrity: sha512-BnNY/RwnDrkmQdUa9U+OfN/Y7AWmKuUPCCd+hbRclZnnANvYpO72zp/a6Q4n829hPbdqEac31XCcsvlEvb+rtA==} + dependencies: + shell-quote: 1.8.1 + dev: true + + /ow/0.17.0: + resolution: {integrity: sha512-i3keDzDQP5lWIe4oODyDFey1qVrq2hXKTuTH2VpqwpYtzPiKZt2ziRI4NBQmgW40AnV5Euz17OyWweCb+bNEQA==} + engines: {node: '>=10'} + dependencies: + type-fest: 0.11.0 + dev: true + + /p-cancelable/0.3.0: + resolution: {integrity: sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==} + engines: {node: '>=4'} + dev: true + + /p-cancelable/0.4.1: + resolution: {integrity: sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==} + engines: {node: '>=4'} + dev: true + + /p-cancelable/1.1.0: + resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} + engines: {node: '>=6'} + dev: true + + /p-cancelable/2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + dev: false + + /p-cancelable/3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + dev: true + + /p-defer/1.0.0: + resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} + engines: {node: '>=4'} + dev: true + + /p-event/1.3.0: + resolution: {integrity: sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==} + engines: {node: '>=4'} + dependencies: + p-timeout: 1.2.1 + dev: true + + /p-event/2.3.1: + resolution: {integrity: sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==} + engines: {node: '>=6'} + dependencies: + p-timeout: 2.0.1 + dev: true + + /p-event/4.2.0: + resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} + engines: {node: '>=8'} + dependencies: + p-timeout: 3.2.0 + dev: false + + /p-event/5.0.1: + resolution: {integrity: sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-timeout: 5.1.0 + dev: true + + /p-filter/2.1.0: + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + engines: {node: '>=8'} + dependencies: + p-map: 2.1.0 + dev: false + + /p-finally/1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + /p-is-promise/1.1.0: + resolution: {integrity: sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==} + engines: {node: '>=4'} + dev: true + + /p-is-promise/3.0.0: + resolution: {integrity: sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==} + engines: {node: '>=8'} + dev: false + + /p-limit/1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + dependencies: + p-try: 1.0.0 + + /p-limit/2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + + /p-limit/4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + yocto-queue: 1.0.0 + dev: true + + /p-locate/2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + dependencies: + p-limit: 1.3.0 + + /p-locate/3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate/4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + + /p-locate/5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + + /p-locate/6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + p-limit: 4.0.0 + dev: true + + /p-map-series/1.0.0: + resolution: {integrity: sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==} + engines: {node: '>=4'} + dependencies: + p-reduce: 1.0.0 + dev: true + + /p-map-series/2.1.0: + resolution: {integrity: sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==} + engines: {node: '>=8'} + dev: false + + /p-map/2.1.0: + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + engines: {node: '>=6'} + dev: false + + /p-map/3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} + dependencies: + aggregate-error: 3.1.0 + dev: true + + /p-map/4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + dependencies: + aggregate-error: 3.1.0 + + /p-map/5.5.0: + resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} + engines: {node: '>=12'} + dependencies: + aggregate-error: 4.0.1 + dev: true + + /p-pipe/3.1.0: + resolution: {integrity: sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==} + engines: {node: '>=8'} + dev: true + + /p-queue/6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + dev: false + + /p-reduce/1.0.0: + resolution: {integrity: sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==} + engines: {node: '>=4'} + dev: true + + /p-reduce/2.1.0: + resolution: {integrity: sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==} + engines: {node: '>=8'} + + /p-retry/4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + dev: false + + /p-series/2.1.0: + resolution: {integrity: sha512-vEAnkG1ikRT1kPBrKwpj7AFYQkd1hjt/oHeppxtpoPxy5gEt+OWiHZJN3tMqvFa+UJfVwO3lwHoMUpMYBLKnaQ==} + engines: {node: '>=8'} + dependencies: + '@sindresorhus/is': 0.15.0 + p-reduce: 2.1.0 + dev: false + + /p-timeout/1.2.1: + resolution: {integrity: sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==} + engines: {node: '>=4'} + dependencies: + p-finally: 1.0.0 + dev: true + + /p-timeout/2.0.1: + resolution: {integrity: sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==} + engines: {node: '>=4'} + dependencies: + p-finally: 1.0.0 + dev: true + + /p-timeout/3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + dependencies: + p-finally: 1.0.0 + dev: false + + /p-timeout/4.1.0: + resolution: {integrity: sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw==} + engines: {node: '>=10'} + dev: false + + /p-timeout/5.1.0: + resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} + engines: {node: '>=12'} + dev: true + + /p-try/1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + + /p-try/2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + /p-wait-for/3.2.0: + resolution: {integrity: sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==} + engines: {node: '>=8'} + dependencies: + p-timeout: 3.2.0 + dev: false + + /p-whilst/2.1.0: + resolution: {integrity: sha512-uzp1HPgqzokEmZN+VpfQ9PO4YY5xm+jpLJeL9FN1NPU4d4IZh8eEV+mtQXd+/22R1P7C5j19b7Y//oUc7k0+RQ==} + engines: {node: '>=8'} + dev: false + + /package-hash/4.0.0: + resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} + engines: {node: '>=8'} + dependencies: + graceful-fs: 4.2.11 + hasha: 5.2.2 + lodash.flattendeep: 4.4.0 + release-zalgo: 1.0.0 + dev: true + + /package-json/6.5.0: + resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} + engines: {node: '>=8'} + dependencies: + got: 9.6.0 + registry-auth-token: 4.2.2 + registry-url: 5.1.0 + semver: 6.3.1 + dev: true + + /pako/1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + dev: true + + /parent-module/1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parents/1.0.1: + resolution: {integrity: sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==} + dependencies: + path-platform: 0.11.15 + dev: true + + /parse-app-info/5.0.0: + resolution: {integrity: sha512-uP4Bcso/FvnPpPmO5iPszdf0HoqugxoYjXxnosL6XBxR8gRl78NJdKoRxrsTESeYQv4qN4jThPsCxdmEzpIZ5g==} + engines: {node: '>=14'} + dependencies: + ip: 1.1.8 + last-commit-log: 3.3.0 + lodash: 4.17.21 + read-pkg-up: 7.0.1 + semver: 7.5.4 + dev: false + + /parse-asn1/5.1.6: + resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} + dependencies: + asn1.js: 5.4.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + pbkdf2: 3.1.2 + safe-buffer: 5.2.1 + dev: true + + /parse-author/2.0.0: + resolution: {integrity: sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==} + engines: {node: '>=0.10.0'} + dependencies: + author-regex: 1.0.0 + + /parse-domain/5.0.0: + resolution: {integrity: sha512-sjvhVD0seIF3IquDLsbOE+6nekYyPzj4mGOMv4r9HIXalOjtTXb1uTZwtpQyp0myIoi9++w2eDqYOlCT5ic3+Q==} + hasBin: true + dependencies: + is-ip: 3.1.0 + node-fetch: 2.7.0 + punycode: 2.3.0 + transitivePeerDependencies: + - encoding + dev: false + + /parse-english/4.2.0: + resolution: {integrity: sha512-jw5N6wZUZViIw3VLG/FUSeL3vDhfw5Q2g4E3nYC69Mm5ANbh9ZWd+eligQbeUoyObZM8neynTn3l14e09pjEWg==} + dependencies: + nlcst-to-string: 2.0.4 + parse-latin: 4.3.0 + unist-util-modify-children: 2.0.0 + unist-util-visit-children: 1.1.4 + + /parse-entities/2.0.0: + resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} + dependencies: + character-entities: 1.2.4 + character-entities-legacy: 1.1.4 + character-reference-invalid: 1.1.4 + is-alphanumerical: 1.0.4 + is-decimal: 1.0.4 + is-hexadecimal: 1.0.4 + + /parse-err/1.0.0: + resolution: {integrity: sha512-K2RCrbPe7CXezMfRQTZJgCOQB6kyUofAkEriwGfaP4oiwbRm3YDTG6F8qEBSFVA7QiLzph/rMqokPcOz26UxSw==} + engines: {node: '>=6.4.0'} + dependencies: + iserror: 0.0.2 + dev: false + + /parse-filepath/1.0.2: + resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} + engines: {node: '>=0.8'} + dependencies: + is-absolute: 1.0.0 + map-cache: 0.2.2 + path-root: 0.1.1 + dev: true + + /parse-git-config/3.0.0: + resolution: {integrity: sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA==} + engines: {node: '>=8'} + dependencies: + git-config-path: 2.0.0 + ini: 1.3.8 + dev: true + + /parse-json/2.2.0: + resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==} + engines: {node: '>=0.10.0'} + dependencies: + error-ex: 1.3.2 + dev: true + + /parse-json/4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + + /parse-json/5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.22.13 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + /parse-json/6.0.2: + resolution: {integrity: sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + '@babel/code-frame': 7.22.13 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 2.0.3 + dev: true + + /parse-latin/4.3.0: + resolution: {integrity: sha512-TYKL+K98dcAWoCw/Ac1yrPviU8Trk+/gmjQVaoWEFDZmVD4KRg6c/80xKqNNFQObo2mTONgF8trzAf2UTwKafw==} + dependencies: + nlcst-to-string: 2.0.4 + unist-util-modify-children: 2.0.0 + unist-util-visit-children: 1.1.4 + + /parse-logs/3.0.2: + resolution: {integrity: sha512-4NehozEH1EAhSCNe+eiNh78CrtcmNRA+hslckQPDBHgxEl3Qi8x87n58rNb1+Iv4pyU4cwIj0bx4V2nxmQo3IQ==} + engines: {node: '>=14'} + dependencies: + error-stack-parser: 2.1.4 + is-whitespace: 0.3.0 + iserror: 0.0.2 + lodash: 4.17.21 + parse-request: 6.0.2 + prepare-stack-trace: 0.0.4 + rfdc: 1.3.0 + transitivePeerDependencies: + - supports-color + dev: false + + /parse-ms/2.1.0: + resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} + engines: {node: '>=6'} + dev: false + + /parse-ms/3.0.0: + resolution: {integrity: sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==} + engines: {node: '>=12'} + dev: true + + /parse-node-version/1.0.1: + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} + engines: {node: '>= 0.10'} + dev: true + + /parse-passwd/1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + dev: true + + /parse-request/6.0.2: + resolution: {integrity: sha512-wmCf8NpelQKw0NdBqWAlC+jQ+p4SNrwsD2T/4d4a1VQzVAeC1ZisoAVAGrUTPEfx0ZaLY+F+PTAalk9xM1UsPg==} + engines: {node: '>=14'} + dependencies: + browser-hrtime: 1.1.8 + bson-objectid: 2.0.4 + convert-hrtime: 3.0.0 + cookie: 0.5.0 + credit-card-type: 9.1.0 + debug: 4.3.4 + fast-safe-stringify: 2.1.1 + http-headers: 3.0.2 + is-array-buffer: 3.0.2 + is-buffer: 2.0.5 + is-stream: 2.0.1 + is-uuid: 1.0.2 + ms: 2.1.3 + no-case: 2.3.2 + qs: 6.11.2 + rfdc: 1.3.0 + sensitive-fields: 1.0.1 + url-parse: 1.5.10 + transitivePeerDependencies: + - supports-color + dev: false + + /parse-srcset/1.0.2: + resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==} + dev: false + + /parse5-htmlparser2-tree-adapter/7.0.0: + resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} + dependencies: + domhandler: 5.0.3 + parse5: 7.1.2 + dev: false + + /parse5/6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: false + + /parse5/7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + dependencies: + entities: 4.5.0 + dev: false + + /parseley/0.12.1: + resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} + dependencies: + leac: 0.6.0 + peberminta: 0.9.0 + dev: false + + /parseley/0.7.0: + resolution: {integrity: sha512-xyOytsdDu077M3/46Am+2cGXEKM9U9QclBDv7fimY7e+BBlxh2JcBp2mgNsmkyA9uvgyTjVzDi7cP1v4hcFxbw==} + dependencies: + moo: 0.5.2 + nearley: 2.20.1 + dev: false + + /parseurl/1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false + + /pascalcase/0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + dev: true + + /passport-github2/0.1.12: + resolution: {integrity: sha512-3nPUCc7ttF/3HSP/k9sAXjz3SkGv5Nki84I05kSQPo01Jqq1NzJACgMblCK0fGcv9pKCG/KXU3AJRDGLqHLoIw==} + engines: {node: '>= 0.8.0'} + dependencies: + passport-oauth2: 1.7.0 + dev: false + + /passport-google-oauth20/2.0.0: + resolution: {integrity: sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==} + engines: {node: '>= 0.4.0'} + dependencies: + passport-oauth2: 1.7.0 + dev: false + + /passport-local-mongoose/7.1.2: + resolution: {integrity: sha512-hNLIKi/6IhElr/PhOze8wLDh7T4+ZYhc8GFWYApLgG7FrjI55tuGZELPtsUBqODz77OwlUUf+ngPgHN09zxGLg==} + engines: {node: '>= 8.0.0'} + dependencies: + generaterr: 1.5.0 + passport-local: 1.0.0 + scmp: 2.1.0 + dev: false + + /passport-local/1.0.0: + resolution: {integrity: sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==} + engines: {node: '>= 0.4.0'} + dependencies: + passport-strategy: 1.0.0 + dev: false + + /passport-oauth2/1.7.0: + resolution: {integrity: sha512-j2gf34szdTF2Onw3+76alNnaAExlUmHvkc7cL+cmaS5NzHzDP/BvFHJruueQ9XAeNOdpI+CH+PWid8RA7KCwAQ==} + engines: {node: '>= 0.4.0'} + dependencies: + base64url: 3.0.1 + oauth: 0.9.15 + passport-strategy: 1.0.0 + uid2: 0.0.4 + utils-merge: 1.0.1 + dev: false + + /passport-strategy/1.0.0: + resolution: {integrity: sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==} + engines: {node: '>= 0.4.0'} + dev: false + + /passport/0.4.1: + resolution: {integrity: sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==} + engines: {node: '>= 0.4.0'} + dependencies: + passport-strategy: 1.0.0 + pause: 0.0.1 + dev: false + + /passport/0.6.0: + resolution: {integrity: sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==} + engines: {node: '>= 0.4.0'} + dependencies: + passport-strategy: 1.0.0 + pause: 0.0.1 + utils-merge: 1.0.1 + dev: false + + /path-browserify/0.0.1: + resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==} + dev: true + + /path-browserify/1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + dev: true + + /path-dirname/1.0.2: + resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==} + dev: true + + /path-exists/2.1.0: + resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==} + engines: {node: '>=0.10.0'} + dependencies: + pinkie-promise: 2.0.1 + dev: true + + /path-exists/3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + /path-exists/5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + /path-key/2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + /path-key/4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + /path-platform/0.11.15: + resolution: {integrity: sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==} + engines: {node: '>= 0.8.0'} + dev: true + + /path-root-regex/0.1.2: + resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} + engines: {node: '>=0.10.0'} + dev: true + + /path-root/0.1.1: + resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} + engines: {node: '>=0.10.0'} + dependencies: + path-root-regex: 0.1.2 + dev: true + + /path-scurry/1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.0.1 + minipass: 7.0.4 + + /path-to-regexp/0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + dev: false + + /path-to-regexp/1.8.0: + resolution: {integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==} + dependencies: + isarray: 0.0.1 + dev: true + + /path-to-regexp/6.2.1: + resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} + dev: false + + /path-type/1.1.0: + resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==} + engines: {node: '>=0.10.0'} + dependencies: + graceful-fs: 4.2.11 + pify: 2.3.0 + pinkie-promise: 2.0.1 + dev: true + + /path-type/3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + dependencies: + pify: 3.0.0 + dev: true + + /path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + /pause-stream/0.0.11: + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + dependencies: + through: 2.3.8 + + /pause/0.0.1: + resolution: {integrity: sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==} + dev: false + + /paypal-rest-sdk/1.8.1: + resolution: {integrity: sha512-Trj2GuPn10GqpICAxQh5wjxuDT7rq7DMOkvyatz05wI5xPGmqXN7UC0WfDSF9WSBs4YdcWZP0g+nY+sOdaFggw==} + engines: {node: '>= v0.6.0'} + dependencies: + buffer-crc32: 0.2.13 + semver: 5.7.2 + dev: false + + /pbkdf2/3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + + /peberminta/0.9.0: + resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} + dev: false + + /peek-readable/4.1.0: + resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} + engines: {node: '>=8'} + dev: false + + /peek-readable/5.0.0: + resolution: {integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==} + engines: {node: '>=14.16'} + dev: true + + /pem-jwk/2.0.0: + resolution: {integrity: sha512-rFxu7rVoHgQ5H9YsP50dDWf0rHjreVA2z0yPiWr5WdH/UHb29hKtF7h6l8vNd1cbYR1t0QL+JKhW55a2ZV4KtA==} + engines: {node: '>=5.10.0'} + hasBin: true + dependencies: + asn1.js: 5.4.1 + dev: false + + /pend/1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + /performance-now/2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + dev: false + + /phone-regex/2.1.0: + resolution: {integrity: sha512-9lXTghLpr/jU6Dx9JIacAUt3Hl7qVucW8+Iqwx99dvFSO9imlB2xvY6IyT6Sw554QTtHMnhvPUygGaN5k0pv9Q==} + dev: false + + /pick-deep/1.0.0: + resolution: {integrity: sha512-Uy0VUtabou1sPl/vVClBFrWi4Ae/D3Vqu44FJawmm4lnduu5E16ykw8kh15fiUeLQ6lbmXQ0EMr3YIsqpLZl+A==} + engines: {node: '>=6.0.0'} + dependencies: + '@strikeentco/get': 1.0.1 + '@strikeentco/set': 1.0.2 + dev: false + + /picocolors/0.2.1: + resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==} + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /pidtree/0.3.1: + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + engines: {node: '>=0.10'} + hasBin: true + dev: true + + /pidtree/0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + dev: true + + /pidusage/3.0.2: + resolution: {integrity: sha512-g0VU+y08pKw5M8EZ2rIGiEBaB8wrQMjYGFfW2QVIfyT8V+fq8YFLkvlz4bz5ljvFDJYNFCWT3PWqcRr2FKO81w==} + engines: {node: '>=10'} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /pify/2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + + /pify/3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + + /pify/4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + /pify/5.0.0: + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} + dev: false + + /pinkie-promise/2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} + dependencies: + pinkie: 2.0.4 + dev: true + + /pinkie/2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + dev: true + + /pino-abstract-transport/1.1.0: + resolution: {integrity: sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==} + dependencies: + readable-stream: 4.4.2 + split2: 4.2.0 + dev: false + + /pino-std-serializers/6.2.2: + resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} + dev: false + + /pino/8.15.1: + resolution: {integrity: sha512-Cp4QzUQrvWCRJaQ8Lzv0mJzXVk4z2jlq8JNKMGaixC2Pz5L4l2p95TkuRvYbrEbe85NQsDKrAd4zalf7Ml6WiA==} + hasBin: true + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.3.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.1.0 + pino-std-serializers: 6.2.2 + process-warning: 2.2.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.4.3 + sonic-boom: 3.7.0 + thread-stream: 2.4.1 + dev: false + + /pino/8.16.0: + resolution: {integrity: sha512-UUmvQ/7KTZt/vHjhRrnyS7h+J7qPBQnpG80V56xmIC+o9IqYmQOw/UIny9S9zYDfRBR0ClouCr464EkBMIT7Fw==} + hasBin: true + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.3.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.1.0 + pino-std-serializers: 6.2.2 + process-warning: 2.2.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.4.3 + sonic-boom: 3.7.0 + thread-stream: 2.4.1 + dev: false + + /pkg-conf/2.1.0: + resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} + engines: {node: '>=4'} + dependencies: + find-up: 2.1.0 + load-json-file: 4.0.0 + dev: false + + /pkg-conf/4.0.0: + resolution: {integrity: sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + find-up: 6.3.0 + load-json-file: 7.0.1 + dev: true + + /pkg-dir/4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + + /pkg-dir/5.0.0: + resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} + engines: {node: '>=10'} + dependencies: + find-up: 5.0.0 + + /pkg-dir/7.0.0: + resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} + engines: {node: '>=14.16'} + dependencies: + find-up: 6.3.0 + dev: true + + /pkginfo/0.4.1: + resolution: {integrity: sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ==} + engines: {node: '>= 0.4.0'} + dev: false + + /pkijs/3.0.15: + resolution: {integrity: sha512-n7nAl9JpqdeQsjy+rPmswkmZ3oO/Fu5uN9me45PPQVdWjd0X7HKfL8+HYwfxihqoDSSPUIajkOcqFxEUxMqhwQ==} + engines: {node: '>=12.0.0'} + dependencies: + asn1js: 3.0.5 + bytestreamjs: 2.0.1 + pvtsutils: 1.3.5 + pvutils: 1.1.3 + tslib: 2.6.2 + dev: false + + /plist/3.0.2: + resolution: {integrity: sha512-MSrkwZBdQ6YapHy87/8hDU8MnIcyxBKjeF+McXnr5A9MtffPewTs7G3hlpodT5TacyfIyFTaJEhh3GGcmasTgQ==} + engines: {node: '>=6'} + dependencies: + base64-js: 1.5.1 + xmlbuilder: 9.0.7 + xmldom: 0.5.0 + dev: false + + /plugin-error/1.0.1: + resolution: {integrity: sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==} + engines: {node: '>= 0.10'} + dependencies: + ansi-colors: 1.1.0 + arr-diff: 4.0.0 + arr-union: 3.1.0 + extend-shallow: 3.0.2 + dev: true + + /plugin-error/2.0.1: + resolution: {integrity: sha512-zMakqvIDyY40xHOvzXka0kUvf40nYIuwRE8dWhti2WtjQZ31xAgBZBhxsK7vK3QbRXS1Xms/LO7B5cuAsfB2Gg==} + engines: {node: '>=10.13.0'} + dependencies: + ansi-colors: 1.1.0 + dev: true + + /plur/3.1.1: + resolution: {integrity: sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==} + engines: {node: '>=6'} + dependencies: + irregular-plurals: 2.0.0 + dev: true + + /plur/4.0.0: + resolution: {integrity: sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==} + engines: {node: '>=10'} + dependencies: + irregular-plurals: 3.5.0 + dev: true + + /plur/5.1.0: + resolution: {integrity: sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + irregular-plurals: 3.5.0 + dev: true + + /pluralize/8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + /pngjs/5.0.0: + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} + dev: false + + /pngquant-bin/6.0.1: + resolution: {integrity: sha512-Q3PUyolfktf+hYio6wsg3SanQzEU/v8aICg/WpzxXcuCMRb7H2Q81okfpcEztbMvw25ILjd3a87doj2N9kvbpQ==} + engines: {node: '>=10'} + hasBin: true + requiresBuild: true + dependencies: + bin-build: 3.0.0 + bin-wrapper: 4.1.0 + execa: 4.1.0 + dev: true + + /popper.js/1.16.1: + resolution: {integrity: sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==} + deprecated: You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1 + dev: false + + /port-numbers/6.0.1: + resolution: {integrity: sha512-NPlVMRf0c/3TaeVM5TnX9J0Cyha+BalBVe9x+S7i7/hDC7bAXlQOItey4jTYi3h3P1VTIULWRuyIxd0kPjZYoA==} + engines: {node: '>=10'} + dev: false + + /posix-character-classes/0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + dev: true + + /postcss-attribute-case-insensitive/6.0.2_postcss@8.4.31: + resolution: {integrity: sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-calc/9.0.1_postcss@8.4.31: + resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.2 + dependencies: + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-clamp/4.1.0_postcss@8.4.31: + resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==} + engines: {node: '>=7.6.0'} + peerDependencies: + postcss: ^8.4.6 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-color-functional-notation/6.0.2_postcss@8.4.31: + resolution: {integrity: sha512-FsjSmlSufuiFBsIqQ++VxFmvX7zKndZpBkHmfXr4wqhvzM92FTEkAh703iqWTl1U3faTgqioIqCbfqdWiFVwtw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/postcss-progressive-custom-properties': 3.0.2_postcss@8.4.31 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-color-hex-alpha/9.0.2_postcss@8.4.31: + resolution: {integrity: sha512-SfPjgr//VQ/DOCf80STIAsdAs7sbIbxATvVmd+Ec7JvR8onz9pjawhq3BJM3Pie40EE3TyB0P6hft16D33Nlyg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-color-rebeccapurple/9.0.1_postcss@8.4.31: + resolution: {integrity: sha512-ds4cq5BjRieizVb2PnvbJ0omg9VCo2/KzluvoFZbxuGpsGJ5BQSD93CHBooinEtangCM5YqUOerGDl4xGmOb6Q==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-colormin/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.1 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-convert-values/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.1 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-custom-media/10.0.2_postcss@8.4.31: + resolution: {integrity: sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/cascade-layer-name-parser': 1.0.5_vhcwb4dquzanhfkhxuqink5gke + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + '@csstools/media-query-list-parser': 2.1.5_vhcwb4dquzanhfkhxuqink5gke + postcss: 8.4.31 + dev: true + + /postcss-custom-properties/13.3.2_postcss@8.4.31: + resolution: {integrity: sha512-2Coszybpo8lpLY24vy2CYv9AasiZ39/bs8Imv0pWMq55Gl8NWzfc24OAo3zIX7rc6uUJAqESnVOMZ6V6lpMjJA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/cascade-layer-name-parser': 1.0.5_vhcwb4dquzanhfkhxuqink5gke + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-custom-selectors/7.1.6_postcss@8.4.31: + resolution: {integrity: sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/cascade-layer-name-parser': 1.0.5_vhcwb4dquzanhfkhxuqink5gke + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-dir-pseudo-class/8.0.0_postcss@8.4.31: + resolution: {integrity: sha512-Oy5BBi0dWPwij/IA+yDYj+/OBMQ9EPqAzTHeSNUYrUWdll/PRJmcbiUj0MNcsBi681I1gcSTLvMERPaXzdbvJg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-discard-comments/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + dev: true + + /postcss-discard-duplicates/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + dev: true + + /postcss-discard-empty/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + dev: true + + /postcss-discard-font-face/3.0.0: + resolution: {integrity: sha512-Qvy4n64Mo3MA1brso5D2feHV2Yp3rL0VtXBVCst+w2xjSP7GCosodp258kLZHRMdIeYOwZj2oCkFhBn9Il8RXQ==} + dependencies: + balanced-match: 0.4.2 + postcss: 5.2.18 + dev: false + + /postcss-discard-overridden/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + dev: true + + /postcss-double-position-gradients/5.0.2_postcss@8.4.31: + resolution: {integrity: sha512-KTbvdOOy8z8zb0BTkEg4/1vqlRlApdvjw8/pFoehgQl0WVO+fezDGlvo0B8xRA+XccA7ohkQCULKNsiNOx70Cw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/postcss-progressive-custom-properties': 3.0.2_postcss@8.4.31 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-focus-visible/9.0.0_postcss@8.4.31: + resolution: {integrity: sha512-zA4TbVaIaT8npZBEROhZmlc+GBKE8AELPHXE7i4TmIUEQhw/P/mSJfY9t6tBzpQ1rABeGtEOHYrW4SboQeONMQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-focus-within/8.0.0_postcss@8.4.31: + resolution: {integrity: sha512-E7+J9nuQzZaA37D/MUZMX1K817RZGDab8qw6pFwzAkDd/QtlWJ9/WTKmzewNiuxzeq6WWY7ATiRePVoDKp+DnA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-font-variant/5.0.0_postcss@8.4.31: + resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.31 + dev: true + + /postcss-gap-properties/5.0.0_postcss@8.4.31: + resolution: {integrity: sha512-YjsEEL6890P7MCv6fch6Am1yq0EhQCJMXyT4LBohiu87+4/WqR7y5W3RIv53WdA901hhytgRvjlrAhibhW4qsA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + dev: true + + /postcss-image-set-function/6.0.1_postcss@8.4.31: + resolution: {integrity: sha512-VlZncC9hhZ5tg0JllY4g6Z28BeoPO8DIkelioEEkXL0AA0IORlqYpTi2L8TUnl4YQrlwvBgxVy+mdZJw5R/cIQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-inline-base64/7.3.1_postcss@8.4.31: + resolution: {integrity: sha512-S/e7EUzhYH75cn+buz7JCFGCkvAsb71WKya/mPcKQ+473AwPsU/S1mR4koqO2BKMld6nsA0y7WQTqcIf49fSDg==} + engines: {node: '>=14.17'} + peerDependencies: + postcss: '>=8.0.0' + dependencies: + debug: 4.3.4 + file-type: 18.2.1 + got: 12.6.0 + is-svg: 5.0.0 + postcss: 8.4.31 + transitivePeerDependencies: + - supports-color + dev: true + + /postcss-lab-function/6.0.7_postcss@8.4.31: + resolution: {integrity: sha512-4d1lhDVPukHFqkMv4G5vVcK+tgY52vwb5uR1SWKOaO5389r2q8fMxBWuXSW+YtbCOEGP0/X9KERi9E9le2pJuw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/css-color-parser': 1.4.0_vhcwb4dquzanhfkhxuqink5gke + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + '@csstools/postcss-progressive-custom-properties': 3.0.2_postcss@8.4.31 + postcss: 8.4.31 + dev: true + + /postcss-load-config/3.1.4_postcss@8.4.31: + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.31 + yaml: 1.10.2 + dev: true + + /postcss-logical/7.0.0_postcss@8.4.31: + resolution: {integrity: sha512-zYf3vHkoW82f5UZTEXChTJvH49Yl9X37axTZsJGxrCG2kOUwtaAoz9E7tqYg0lsIoJLybaL8fk/2mOi81zVIUw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-media-query-parser/0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + dev: true + + /postcss-merge-longhand/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + stylehacks: 6.0.0_postcss@8.4.31 + dev: true + + /postcss-merge-rules/6.0.1_postcss@8.4.31: + resolution: {integrity: sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.1 + caniuse-api: 3.0.0 + cssnano-utils: 4.0.0_postcss@8.4.31 + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-minify-font-values/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-gradients/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + colord: 2.9.3 + cssnano-utils: 4.0.0_postcss@8.4.31 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-params/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.1 + cssnano-utils: 4.0.0_postcss@8.4.31 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-selectors/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-nesting/12.0.1_postcss@8.4.31: + resolution: {integrity: sha512-6LCqCWP9pqwXw/njMvNK0hGY44Fxc4B2EsGbn6xDcxbNRzP8GYoxT7yabVVMLrX3quqOJ9hg2jYMsnkedOf8pA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/selector-specificity': 3.0.0_c3vcbepomgmxc74cgtawpgpkyi + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-normalize-charset/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + dev: true + + /postcss-normalize-display-values/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-positions/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-repeat-style/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-string/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-timing-functions/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-unicode/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.1 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-url/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-whitespace/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-opacity-percentage/2.0.0_postcss@8.4.31: + resolution: {integrity: sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.2 + dependencies: + postcss: 8.4.31 + dev: true + + /postcss-ordered-values/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 4.0.0_postcss@8.4.31 + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-overflow-shorthand/5.0.0_postcss@8.4.31: + resolution: {integrity: sha512-2rlxDyeSics/hC2FuMdPnWiP9WUPZ5x7FTuArXLFVpaSQ2woPSfZS4RD59HuEokbZhs/wPUQJ1E3MT6zVv94MQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-page-break/3.0.4_postcss@8.4.31: + resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==} + peerDependencies: + postcss: ^8 + dependencies: + postcss: 8.4.31 + dev: true + + /postcss-place/9.0.0_postcss@8.4.31: + resolution: {integrity: sha512-qLEPD9VPH5opDVemwmRaujODF9nExn24VOC3ghgVLEvfYN7VZLwJHes0q/C9YR5hI2UC3VgBE8Wkdp1TxCXhtg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-preset-env/9.2.0_postcss@8.4.31: + resolution: {integrity: sha512-Lnr4C5gb7t5Cc8akQMJzNdJkqw7s7s7BHUaQSgsuf+CTY9Lsz5lqQTft5yNZr59JyCLz0aFNSAqSLm/xRtcTpg==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + '@csstools/postcss-cascade-layers': 4.0.0_postcss@8.4.31 + '@csstools/postcss-color-function': 3.0.7_postcss@8.4.31 + '@csstools/postcss-color-mix-function': 2.0.7_postcss@8.4.31 + '@csstools/postcss-exponential-functions': 1.0.1_postcss@8.4.31 + '@csstools/postcss-font-format-keywords': 3.0.0_postcss@8.4.31 + '@csstools/postcss-gamut-mapping': 1.0.0_postcss@8.4.31 + '@csstools/postcss-gradients-interpolation-method': 4.0.7_postcss@8.4.31 + '@csstools/postcss-hwb-function': 3.0.6_postcss@8.4.31 + '@csstools/postcss-ic-unit': 3.0.2_postcss@8.4.31 + '@csstools/postcss-initial': 1.0.0_postcss@8.4.31 + '@csstools/postcss-is-pseudo-class': 4.0.3_postcss@8.4.31 + '@csstools/postcss-logical-float-and-clear': 2.0.0_postcss@8.4.31 + '@csstools/postcss-logical-resize': 2.0.0_postcss@8.4.31 + '@csstools/postcss-logical-viewport-units': 2.0.3_postcss@8.4.31 + '@csstools/postcss-media-minmax': 1.1.0_postcss@8.4.31 + '@csstools/postcss-media-queries-aspect-ratio-number-values': 2.0.3_postcss@8.4.31 + '@csstools/postcss-nested-calc': 3.0.0_postcss@8.4.31 + '@csstools/postcss-normalize-display-values': 3.0.1_postcss@8.4.31 + '@csstools/postcss-oklab-function': 3.0.7_postcss@8.4.31 + '@csstools/postcss-progressive-custom-properties': 3.0.2_postcss@8.4.31 + '@csstools/postcss-relative-color-syntax': 2.0.7_postcss@8.4.31 + '@csstools/postcss-scope-pseudo-class': 3.0.0_postcss@8.4.31 + '@csstools/postcss-stepped-value-functions': 3.0.2_postcss@8.4.31 + '@csstools/postcss-text-decoration-shorthand': 3.0.3_postcss@8.4.31 + '@csstools/postcss-trigonometric-functions': 3.0.2_postcss@8.4.31 + '@csstools/postcss-unset-value': 3.0.0_postcss@8.4.31 + autoprefixer: 10.4.16_postcss@8.4.31 + browserslist: 4.22.1 + css-blank-pseudo: 6.0.0_postcss@8.4.31 + css-has-pseudo: 6.0.0_postcss@8.4.31 + css-prefers-color-scheme: 9.0.0_postcss@8.4.31 + cssdb: 7.8.0 + postcss: 8.4.31 + postcss-attribute-case-insensitive: 6.0.2_postcss@8.4.31 + postcss-clamp: 4.1.0_postcss@8.4.31 + postcss-color-functional-notation: 6.0.2_postcss@8.4.31 + postcss-color-hex-alpha: 9.0.2_postcss@8.4.31 + postcss-color-rebeccapurple: 9.0.1_postcss@8.4.31 + postcss-custom-media: 10.0.2_postcss@8.4.31 + postcss-custom-properties: 13.3.2_postcss@8.4.31 + postcss-custom-selectors: 7.1.6_postcss@8.4.31 + postcss-dir-pseudo-class: 8.0.0_postcss@8.4.31 + postcss-double-position-gradients: 5.0.2_postcss@8.4.31 + postcss-focus-visible: 9.0.0_postcss@8.4.31 + postcss-focus-within: 8.0.0_postcss@8.4.31 + postcss-font-variant: 5.0.0_postcss@8.4.31 + postcss-gap-properties: 5.0.0_postcss@8.4.31 + postcss-image-set-function: 6.0.1_postcss@8.4.31 + postcss-lab-function: 6.0.7_postcss@8.4.31 + postcss-logical: 7.0.0_postcss@8.4.31 + postcss-nesting: 12.0.1_postcss@8.4.31 + postcss-opacity-percentage: 2.0.0_postcss@8.4.31 + postcss-overflow-shorthand: 5.0.0_postcss@8.4.31 + postcss-page-break: 3.0.4_postcss@8.4.31 + postcss-place: 9.0.0_postcss@8.4.31 + postcss-pseudo-class-any-link: 9.0.0_postcss@8.4.31 + postcss-replace-overflow-wrap: 4.0.0_postcss@8.4.31 + postcss-selector-not: 7.0.1_postcss@8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-pseudo-class-any-link/9.0.0_postcss@8.4.31: + resolution: {integrity: sha512-QNCYIL98VKFKY6HGDEJpF6+K/sg9bxcUYnOmNHJxZS5wsFDFaVoPeG68WAuhsqwbIBSo/b9fjEnTwY2mTSD+uA==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-reduce-initial/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.1 + caniuse-api: 3.0.0 + postcss: 8.4.31 + dev: true + + /postcss-reduce-transforms/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-replace-overflow-wrap/4.0.0_postcss@8.4.31: + resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==} + peerDependencies: + postcss: ^8.0.3 + dependencies: + postcss: 8.4.31 + dev: true + + /postcss-reporter/7.0.5_postcss@8.4.31: + resolution: {integrity: sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==} + engines: {node: '>=10'} + peerDependencies: + postcss: ^8.1.0 + dependencies: + picocolors: 1.0.0 + postcss: 8.4.31 + thenby: 1.3.4 + dev: true + + /postcss-resolve-nested-selector/0.1.1: + resolution: {integrity: sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==} + dev: true + + /postcss-safe-parser/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.3.3 + dependencies: + postcss: 8.4.31 + dev: true + + /postcss-scss/4.0.9_postcss@8.4.31: + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + dependencies: + postcss: 8.4.31 + dev: true + + /postcss-selector-not/7.0.1_postcss@8.4.31: + resolution: {integrity: sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.4 + dependencies: + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-selector-parser/6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-svgo/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==} + engines: {node: ^14 || ^16 || >= 18} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + postcss-value-parser: 4.2.0 + svgo: 3.0.2 + dev: true + + /postcss-unique-selectors/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-value-parser/4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + + /postcss/5.2.18: + resolution: {integrity: sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==} + engines: {node: '>=0.12'} + dependencies: + chalk: 1.1.3 + js-base64: 2.6.4 + source-map: 0.5.7 + supports-color: 3.2.3 + dev: false + + /postcss/7.0.39: + resolution: {integrity: sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==} + engines: {node: '>=6.0.0'} + dependencies: + picocolors: 0.2.1 + source-map: 0.6.1 + dev: true + + /postcss/8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + /prebuild-install/7.1.1: + resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + detect-libc: 2.0.2 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 3.50.0 + pump: 3.0.0 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + dev: false + + /prefix-matches/1.0.1: + resolution: {integrity: sha512-VXwWx7Ws2VSKIYXBPDGjhh1fTgNkeVwWGV+Ysi9mEnduw763FuDQBSUSRKtZ7ZUUEUFAvkbUpUEwgw4g1r1m+A==} + dependencies: + is-object: 1.0.2 + starts-with: 1.0.2 + dev: true + + /prelude-ls/1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + + /prelude-ls/1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prepare-stack-trace/0.0.4: + resolution: {integrity: sha512-2JWEgniafYjqIIssn/1bI0Cuhu18oxk9bcWVkcyq19oXareYqdUZgMi9hfa03VcjCj/G4W/heupia8GHA0Pd8w==} + engines: {node: '>=6.4.0'} + dev: false + + /prepend-http/1.0.4: + resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==} + engines: {node: '>=0.10.0'} + dev: true + + /prepend-http/2.0.0: + resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} + engines: {node: '>=4'} + dev: true + + /prettier-linter-helpers/1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + dependencies: + fast-diff: 1.3.0 + dev: true + + /prettier/2.0.4: + resolution: {integrity: sha512-SVJIQ51spzFDvh4fIbCLvciiDMCrRhlN3mbZvv/+ycjvmF5E73bKdGfU8QDLNmjYJf+lsGnDBC4UUnvTe5OO0w==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /prettier/2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /prettify-pinyin/0.1.5: + resolution: {integrity: sha512-5lIGzjPd+Oq6Yl5SYOj59pJkmlxl92kUhQcucWSMLtuoJEhQ/aVAAGpNWksGfbuhuuB3ccmM5IugC6U+Q2kDWQ==} + dev: false + + /pretty-bytes/5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + dev: true + + /pretty-hrtime/1.0.3: + resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} + engines: {node: '>= 0.8'} + dev: true + + /pretty-ms/7.0.1: + resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} + engines: {node: '>=10'} + dependencies: + parse-ms: 2.1.0 + dev: false + + /pretty-ms/8.0.0: + resolution: {integrity: sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==} + engines: {node: '>=14.16'} + dependencies: + parse-ms: 3.0.0 + dev: true + + /pretty/2.0.0: + resolution: {integrity: sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w==} + engines: {node: '>=0.10.0'} + dependencies: + condense-newlines: 0.2.1 + extend-shallow: 2.0.1 + js-beautify: 1.14.9 + dev: false + + /preview-email/3.0.19: + resolution: {integrity: sha512-DBS3Nir18YtKc8loYCCOGitmiaQ0vTdahPoiXxwNweJDpmVZo+w3tppufOhoK0m8skpRxT56llYLs3VrORnmNQ==} + engines: {node: '>=14'} + dependencies: + ci-info: 3.9.0 + display-notification: 2.0.0 + fixpack: 4.0.0 + get-port: 5.1.1 + mailparser: 3.6.5 + nodemailer: 6.9.6 + open: 7.4.2 + p-event: 4.2.0 + p-wait-for: 3.2.0 + pug: 3.0.2 + uuid: 9.0.1 + dev: false + + /private-ip/3.0.1: + resolution: {integrity: sha512-Ezc16ANuhSHmWAE6lbXUKburNzGpR0J5X0Zh5Um/PZ/s57Fp+HYqYe6BYPH2QbqKr/5WebfzJQ1jq6Kj5dbRmA==} + engines: {node: '>=14.16'} + dependencies: + '@chainsafe/is-ip': 2.0.2 + ip-regex: 5.0.0 + ipaddr.js: 2.1.0 + netmask: 2.0.2 + dev: false + + /proc-log/3.0.0: + resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /process-nextick-args/2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + /process-on-spawn/1.0.0: + resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==} + engines: {node: '>=8'} + dependencies: + fromentries: 1.3.2 + dev: true + + /process-warning/2.2.0: + resolution: {integrity: sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg==} + dev: false + + /process/0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + /progress/2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: true + + /projection-utils/1.1.0: + resolution: {integrity: sha512-SyAjKYd83c9rcBfb4Xpawq0dnPbgOzva2vEaKvdd5rC+6a1MzLyNieqRfT0pas7FBJRyI4JLeuCENpz/Va8mMw==} + dev: false + + /prom-client/14.2.0: + resolution: {integrity: sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA==} + engines: {node: '>=10'} + dependencies: + tdigest: 0.1.2 + dev: false + + /prom-client/15.0.0: + resolution: {integrity: sha512-UocpgIrKyA2TKLVZDSfm8rGkL13C19YrQBAiG3xo3aDFWcHedxRxI3z+cIcucoxpSO0h5lff5iv/SXoxyeopeA==} + engines: {node: ^16 || ^18 || >=20} + dependencies: + '@opentelemetry/api': 1.6.0 + tdigest: 0.1.2 + dev: false + + /promise-inflight/1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + dev: true + + /promise-retry/2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + + /promise/7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + dependencies: + asap: 2.0.6 + dev: false + + /property-expr/2.0.5: + resolution: {integrity: sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==} + dev: false + + /property-information/5.6.0: + resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} + dependencies: + xtend: 4.0.2 + dev: false + + /proto-list/1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + /proto-props/2.0.0: + resolution: {integrity: sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ==} + engines: {node: '>=4'} + dev: true + + /proto3-json-serializer/1.1.1: + resolution: {integrity: sha512-AwAuY4g9nxx0u52DnSMkqqgyLHaW/XaPLtaAo3y/ZCfeaQB/g4YDH4kb8Wc/mWzWvu0YjOznVnfn373MVZZrgw==} + engines: {node: '>=12.0.0'} + dependencies: + protobufjs: 7.2.4 + dev: false + + /protobufjs-cli/1.1.1_protobufjs@7.2.4: + resolution: {integrity: sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==} + engines: {node: '>=12.0.0'} + hasBin: true + peerDependencies: + protobufjs: ^7.0.0 + dependencies: + chalk: 4.1.2 + escodegen: 1.14.3 + espree: 9.6.1 + estraverse: 5.3.0 + glob: 8.1.0 + jsdoc: 4.0.2 + minimist: 1.2.8 + protobufjs: 7.2.4 + semver: 7.5.4 + tmp: 0.2.1 + uglify-js: 3.17.4 + dev: false + + /protobufjs/7.2.4: + resolution: {integrity: sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==} + engines: {node: '>=12.0.0'} + requiresBuild: true + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 20.8.5 + long: 5.2.3 + dev: false + + /proxy-from-env/1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + + /ps-tree/1.2.0: + resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} + engines: {node: '>= 0.10'} + hasBin: true + dependencies: + event-stream: 3.3.4 + dev: true + + /pseudomap/1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + + /psl/1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: false + + /pstree.remy/1.1.8: + resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} + dev: true + + /public-encrypt/4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + dependencies: + bn.js: 4.12.0 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + parse-asn1: 5.1.6 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: true + + /pug-attrs/2.0.4: + resolution: {integrity: sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==} + dependencies: + constantinople: 3.1.2 + js-stringify: 1.0.2 + pug-runtime: 2.0.5 + dev: true + + /pug-attrs/3.0.0: + resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==} + dependencies: + constantinople: 4.0.1 + js-stringify: 1.0.2 + pug-runtime: 3.0.1 + dev: false + + /pug-code-gen/3.0.2: + resolution: {integrity: sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==} + dependencies: + constantinople: 4.0.1 + doctypes: 1.1.0 + js-stringify: 1.0.2 + pug-attrs: 3.0.0 + pug-error: 2.0.0 + pug-runtime: 3.0.1 + void-elements: 3.1.0 + with: 7.0.2 + dev: false + + /pug-error/1.3.3: + resolution: {integrity: sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ==} + dev: true + + /pug-error/2.0.0: + resolution: {integrity: sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==} + + /pug-filters/4.0.0: + resolution: {integrity: sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==} + dependencies: + constantinople: 4.0.1 + jstransformer: 1.0.0 + pug-error: 2.0.0 + pug-walk: 2.0.0 + resolve: 1.22.8 + dev: false + + /pug-lexer/4.1.0: + resolution: {integrity: sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==} + dependencies: + character-parser: 2.2.0 + is-expression: 3.0.0 + pug-error: 1.3.3 + dev: true + + /pug-lexer/5.0.1: + resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==} + dependencies: + character-parser: 2.2.0 + is-expression: 4.0.0 + pug-error: 2.0.0 + + /pug-linker/4.0.0: + resolution: {integrity: sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==} + dependencies: + pug-error: 2.0.0 + pug-walk: 2.0.0 + dev: false + + /pug-lint/2.7.0: + resolution: {integrity: sha512-CcFFU9+cXu/0xXXQbE1Zus0u9l3OCXqU+2sw4NcnFGEml8RoCUqrSdVNoVkg2SYcNvcfcnV6h+ctmE5+Ptgj1w==} + hasBin: true + dependencies: + acorn: 4.0.13 + commander: 2.20.3 + css-selector-parser: 1.4.1 + find-line-column: 0.5.2 + glob: 7.2.3 + minimatch: 3.1.2 + path-is-absolute: 1.0.1 + pug-attrs: 2.0.4 + pug-error: 1.3.3 + pug-lexer: 4.1.0 + resolve: 1.22.8 + strip-json-comments: 2.0.1 + void-elements: 2.0.1 + dev: true + + /pug-load/3.0.0: + resolution: {integrity: sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==} + dependencies: + object-assign: 4.1.1 + pug-walk: 2.0.0 + dev: false + + /pug-parser/6.0.0: + resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==} + dependencies: + pug-error: 2.0.0 + token-stream: 1.0.0 + dev: false + + /pug-runtime/2.0.5: + resolution: {integrity: sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw==} + dev: true + + /pug-runtime/3.0.1: + resolution: {integrity: sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==} + dev: false + + /pug-strip-comments/2.0.0: + resolution: {integrity: sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==} + dependencies: + pug-error: 2.0.0 + dev: false + + /pug-walk/2.0.0: + resolution: {integrity: sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==} + dev: false + + /pug/3.0.2: + resolution: {integrity: sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==} + dependencies: + pug-code-gen: 3.0.2 + pug-filters: 4.0.0 + pug-lexer: 5.0.1 + pug-linker: 4.0.0 + pug-load: 3.0.0 + pug-parser: 6.0.0 + pug-runtime: 3.0.1 + pug-strip-comments: 2.0.0 + dev: false + + /pump/2.0.1: + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /pump/3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + /pumpify/1.5.1: + resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + dependencies: + duplexify: 3.7.1 + inherits: 2.0.4 + pump: 2.0.1 + dev: true + + /punycode/1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + dev: true + + /punycode/2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + + /pupa/2.1.1: + resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} + engines: {node: '>=8'} + dependencies: + escape-goat: 2.1.1 + dev: true + + /purgecss-from-pug/5.0.0: + resolution: {integrity: sha512-mc0YpGc9zKZ0Wzq+kxCCtYEFj+Hz+a+lu1brVprAFLSdUgiF1b0CL2ijLzUrh8Tu2mBv6hKwfaJ5KNwOFK0tYg==} + dev: true + + /purgecss/5.0.0: + resolution: {integrity: sha512-RAnuxrGuVyLLTr8uMbKaxDRGWMgK5CCYDfRyUNNcaz5P3kGgD2b7ymQGYEyo2ST7Tl/ScwFgf5l3slKMxHSbrw==} + hasBin: true + dependencies: + commander: 9.5.0 + glob: 8.1.0 + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /pvtsutils/1.3.5: + resolution: {integrity: sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==} + dependencies: + tslib: 2.6.2 + dev: false + + /pvutils/1.1.3: + resolution: {integrity: sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==} + engines: {node: '>=6.0.0'} + dev: false + + /pwnedpasswords/1.0.6: + resolution: {integrity: sha512-HjY4iY0029bsGlPMxUU5we7nbv7+o0CgDeLfY6vMvmQMqDqL7UcRZ8pIfc5VpSRw4T/TO/UmwHhca6xge4QIDA==} + hasBin: true + dev: false + + /q/1.5.1: + resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + dev: true + optional: true + + /qrcode/1.5.3: + resolution: {integrity: sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + dijkstrajs: 1.0.3 + encode-utf8: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 + dev: false + + /qs/6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + + /qs/6.5.3: + resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} + engines: {node: '>=0.6'} + dev: false + + /query-string/5.1.1: + resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==} + engines: {node: '>=0.10.0'} + dependencies: + decode-uri-component: 0.2.2 + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + dev: true + + /querystring-es3/0.2.1: + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} + engines: {node: '>=0.4.x'} + dev: true + + /querystring/0.2.1: + resolution: {integrity: sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==} + engines: {node: '>=0.4.x'} + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + dev: false + + /querystringify/2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: false + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + /queue-tick/1.0.1: + resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + dev: false + + /quick-format-unescaped/4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + dev: false + + /quick-lru/4.0.1: + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + engines: {node: '>=8'} + dev: true + + /quick-lru/5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + /quick-lru/6.1.2: + resolution: {integrity: sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==} + engines: {node: '>=12'} + dev: true + + /quotation/1.1.3: + resolution: {integrity: sha512-45gUgmX/RtQOQV1kwM06boP49OYXcKCPrYwdmAvs5YqkpiobhNKKwo524JM6Ma0ko3oN9tXNcWs9+ABq3Ry7YA==} + + /raf/3.4.1: + resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + dependencies: + performance-now: 2.1.0 + dev: false + + /railroad-diagrams/1.0.0: + resolution: {integrity: sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==} + dev: false + + /randexp/0.4.6: + resolution: {integrity: sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==} + engines: {node: '>=0.12'} + dependencies: + discontinuous-range: 1.0.0 + ret: 0.1.15 + dev: false + + /random-bytes/1.0.0: + resolution: {integrity: sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==} + engines: {node: '>= 0.8'} + dev: false + + /randombytes/2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + + /randomfill/1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: true + + /range-parser/1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false + + /raw-body/1.1.7: + resolution: {integrity: sha512-WmJJU2e9Y6M5UzTOkHaM7xJGAPQD8PNzx3bAd2+uhZAim6wDk6dAZxPVYLF67XhbR4hmKGh33Lpmh4XWrCH5Mg==} + engines: {node: '>= 0.8.0'} + dependencies: + bytes: 1.0.0 + string_decoder: 0.10.31 + dev: true + + /raw-body/2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: false + + /rc/1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + /re2/1.20.3: + resolution: {integrity: sha512-g5j4YjygwGEccP9SCuDI90uPlgALLEYLotfL0K+kqL3XKB4ht7Nm1JuXfOTG96c7JozpvCUxTz1T7oTNwwMI6w==} + requiresBuild: true + dependencies: + install-artifact-from-github: 1.3.3 + nan: 2.18.0 + node-gyp: 9.4.0 + transitivePeerDependencies: + - supports-color + dev: false + + /read-only-stream/2.0.0: + resolution: {integrity: sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w==} + dependencies: + readable-stream: 2.3.8 + dev: true + + /read-package-json-fast/3.0.2: + resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + json-parse-even-better-errors: 3.0.0 + npm-normalize-package-bin: 3.0.1 + dev: true + + /read-pkg-up/1.0.1: + resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==} + engines: {node: '>=0.10.0'} + dependencies: + find-up: 1.1.2 + read-pkg: 1.1.0 + dev: true + + /read-pkg-up/7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + read-pkg: 5.2.0 + type-fest: 0.8.1 + + /read-pkg-up/8.0.0: + resolution: {integrity: sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==} + engines: {node: '>=12'} + dependencies: + find-up: 5.0.0 + read-pkg: 6.0.0 + type-fest: 1.4.0 + dev: true + + /read-pkg-up/9.1.0: + resolution: {integrity: sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + find-up: 6.3.0 + read-pkg: 7.1.0 + type-fest: 2.19.0 + dev: true + + /read-pkg/1.1.0: + resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==} + engines: {node: '>=0.10.0'} + dependencies: + load-json-file: 1.1.0 + normalize-package-data: 2.5.0 + path-type: 1.1.0 + dev: true + + /read-pkg/3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} + dependencies: + load-json-file: 4.0.0 + normalize-package-data: 2.5.0 + path-type: 3.0.0 + dev: true + + /read-pkg/5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + dependencies: + '@types/normalize-package-data': 2.4.2 + normalize-package-data: 2.5.0 + parse-json: 5.2.0 + type-fest: 0.6.0 + + /read-pkg/6.0.0: + resolution: {integrity: sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==} + engines: {node: '>=12'} + dependencies: + '@types/normalize-package-data': 2.4.2 + normalize-package-data: 3.0.3 + parse-json: 5.2.0 + type-fest: 1.4.0 + dev: true + + /read-pkg/7.1.0: + resolution: {integrity: sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==} + engines: {node: '>=12.20'} + dependencies: + '@types/normalize-package-data': 2.4.2 + normalize-package-data: 3.0.3 + parse-json: 5.2.0 + type-fest: 2.19.0 + dev: true + + /readable-stream/1.0.34: + resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + + /readable-stream/1.1.14: + resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: true + + /readable-stream/2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + /readable-stream/3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + /readable-stream/4.4.2: + resolution: {integrity: sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + dev: false + + /readable-web-to-node-stream/3.0.2: + resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} + engines: {node: '>=8'} + dependencies: + readable-stream: 3.6.2 + + /readable-wrap/1.0.0: + resolution: {integrity: sha512-/8n0Mr10S+HGKFygQ42Z40JIXwafPH3A72pwmlNClThgsImV5LJJiCue5Je1asxwY082sYxq/+kTxH6nTn0w3g==} + dependencies: + readable-stream: 1.1.14 + dev: true + + /readdirp/2.2.1: + resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==} + engines: {node: '>=0.10'} + dependencies: + graceful-fs: 4.2.11 + micromatch: 3.1.10 + readable-stream: 2.3.8 + transitivePeerDependencies: + - supports-color + dev: true + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /readline-sync/1.4.10: + resolution: {integrity: sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==} + engines: {node: '>= 0.8.0'} + dev: true + + /real-require/0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + dev: false + + /rechoir/0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.22.8 + dev: true + + /recursive-readdir-sync/1.0.6: + resolution: {integrity: sha512-QhkBh/V7T3L2m8FrwZEZ/VnSZU35bv7DSy/VlKVfcq10zvwwuxeuDLH7DZYFGHFyXefHchZmsHFLELR7poGjog==} + dev: false + + /recursive-readdir/2.2.3: + resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} + engines: {node: '>=6.0.0'} + dependencies: + minimatch: 3.1.2 + dev: false + + /redent/1.0.0: + resolution: {integrity: sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==} + engines: {node: '>=0.10.0'} + dependencies: + indent-string: 2.1.0 + strip-indent: 1.0.1 + dev: true + + /redent/3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + dev: true + + /redent/4.0.0: + resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} + engines: {node: '>=12'} + dependencies: + indent-string: 5.0.0 + strip-indent: 4.0.0 + dev: true + + /redis-commands/1.7.0: + resolution: {integrity: sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==} + dev: false + + /redis-errors/1.2.0: + resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} + engines: {node: '>=4'} + + /redis-parser/3.0.0: + resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} + engines: {node: '>=4'} + dependencies: + redis-errors: 1.2.0 + + /referrer-policy/1.2.0: + resolution: {integrity: sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA==} + engines: {node: '>=4.0.0'} + dev: false + + /regenerate-unicode-properties/10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: true + + /regenerate/1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: true + + /regenerator-runtime/0.11.1: + resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==} + dev: true + + /regenerator-runtime/0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: true + + /regenerator-runtime/0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + + /regenerator-transform/0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + dependencies: + '@babel/runtime': 7.23.2 + dev: true + + /regex-not/1.0.2: + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + safe-regex: 1.1.0 + dev: true + + /regex-parser/2.2.11: + resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} + dev: false + + /regexp-tree/0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + dev: true + + /regexp.prototype.flags/1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + set-function-name: 2.0.1 + dev: true + + /regexpp/2.0.1: + resolution: {integrity: sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==} + engines: {node: '>=6.5.0'} + dev: true + + /regexpp/3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: true + + /regexpu-core/5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.1 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + dev: true + + /registry-auth-token/4.2.2: + resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} + engines: {node: '>=6.0.0'} + dependencies: + rc: 1.2.8 + dev: true + + /registry-url/5.1.0: + resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} + engines: {node: '>=8'} + dependencies: + rc: 1.2.8 + dev: true + + /regjsparser/0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + + /rehype-raw/5.1.0: + resolution: {integrity: sha512-MDvHAb/5mUnif2R+0IPCYJU8WjHa9UzGtM/F4AVy5GixPlDZ1z3HacYy4xojDU+uBa+0X/3PIfyQI26/2ljJNA==} + dependencies: + hast-util-raw: 6.1.0 + dev: false + + /rehype-rewrite/1.0.2: + resolution: {integrity: sha512-B0cf4ziX1jJ0T2Dn6h8yA+CsUepFPrXlaNaFKTXJVRdKhpJWerMryzR5NlTjUEDPkTQb5euo3HNuJ8RFTH7qnQ==} + dependencies: + ts-mdast: 1.0.0 + unified: 9.2.1 + dev: false + + /rehype-stringify/8.0.0: + resolution: {integrity: sha512-VkIs18G0pj2xklyllrPSvdShAV36Ff3yE5PUO9u36f6+2qJFnn22Z5gKwBOwgXviux4UC7K+/j13AnZfPICi/g==} + dependencies: + hast-util-to-html: 7.1.3 + dev: false + + /release-zalgo/1.0.0: + resolution: {integrity: sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==} + engines: {node: '>=4'} + dependencies: + es6-error: 4.1.1 + dev: true + + /remark-autolink-headings/6.1.0: + resolution: {integrity: sha512-oeMSIfjaNboWPDVKahQAjF8iJ8hsz5aI8KFzAmmBdznir7zBvkgUjYE/BrpWvd02DCf/mSQ1IklznLkl3dVvZQ==} + dependencies: + '@types/hast': 2.3.6 + extend: 3.0.2 + unified: 9.2.2 + unist-util-visit: 2.0.3 + dev: false + + /remark-cli/11.0.0: + resolution: {integrity: sha512-8JEWwArXquRq1/In4Ftz7gSG9Scwb1ijT2/dEuBETW9omqhmMRxcfjZ3iKqrak3BnCJeZSXCdWEmPhFKC8+RUQ==} + hasBin: true + dependencies: + remark: 14.0.3 + unified-args: 10.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /remark-comment-config/6.0.0: + resolution: {integrity: sha512-hpv4RS6AASn+ah+j9k+3+RsQmtAfRbt2evXCEoW/9W93CJ7PLkxCgeoNnkssGjQ6mLNV6vS5vNflSVIJALn29Q==} + dependencies: + mdast-comment-marker: 1.1.2 + + /remark-contributors/4.0.1: + resolution: {integrity: sha512-5G76tKfpRl/TrOljvD1KZvA53S+jm0DeL2HDwFgdkxTexUdv8A0EG2JQNxGWXEVmOhch3yJ4tF2QlsiRf8SXWg==} + dependencies: + is-url: 1.2.4 + mdast-util-heading-range: 2.1.5 + parse-author: 2.0.0 + unist-builder: 1.0.4 + + /remark-emoji/2.2.0: + resolution: {integrity: sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==} + dependencies: + emoticon: 3.2.0 + node-emoji: 1.11.0 + unist-util-visit: 2.0.3 + dev: false + + /remark-gfm/1.0.0: + resolution: {integrity: sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==} + dependencies: + mdast-util-gfm: 0.1.2 + micromark-extension-gfm: 0.3.3 + transitivePeerDependencies: + - supports-color + + /remark-heading-gap/4.0.0: + resolution: {integrity: sha512-7kHv4qauAo/bJa73D/S9pU6sdJpLZS/6M75bJ5HYRLs6VRwpFz7XEReBP7tlPQ2CapD//qLd9LVRJ4ShieDbIg==} + + /remark-license/5.2.0: + resolution: {integrity: sha512-1jrQYFS/xVN4M6LO4WJuWPdUCU/g6PnwCDKlI2RDfQP2EKy+8eEORU8XZ13rAws3q0McFKzYm20QNCdkH9Rbnw==} + dependencies: + mdast-util-heading-range: 2.1.5 + parse-author: 2.0.0 + spdx-license-list: 6.7.0 + + /remark-license/6.1.0: + resolution: {integrity: sha512-BeAV94QicmKfSmIG6nE4+BFmpQ3lotLAYy5tttdIgtL/dCyYy1dIpejOfs2zX4SVzMxAY4NJJC30tZ4lkSZG8Q==} + dependencies: + '@types/mdast': 3.0.13 + mdast-util-heading-range: 3.1.1 + parse-author: 2.0.0 + spdx-license-list: 6.7.0 + to-vfile: 7.2.4 + unified: 10.1.2 + vfile-find-up: 6.1.0 + dev: true + + /remark-lint-blockquote-indentation/2.0.1: + resolution: {integrity: sha512-uJ9az/Ms9AapnkWpLSCJfawBfnBI2Tn1yUsPNqIFv6YM98ymetItUMyP6ng9NFPqDvTQBbiarulkgoEo0wcafQ==} + dependencies: + mdast-util-to-string: 1.1.0 + pluralize: 8.0.0 + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-checkbox-character-style/3.0.0: + resolution: {integrity: sha512-691OJ5RdBRXVpvnOEiBhMB4uhHJSHVttw83O4qyAkNBiqxa1Axqhsz8FgmzYgRLQbOGd2ncVUcXG1LOJt6C0DQ==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-checkbox-content-indent/3.0.0: + resolution: {integrity: sha512-+T4+hoY85qZE2drD2rCe14vF7fAgD3Kv2fkFd1HRvv3M5Riy148w/4YeoBI5U5BpybGTVUeEUYLCeJ8zbJLjkw==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + vfile-location: 3.2.0 + + /remark-lint-code-block-style/2.0.1: + resolution: {integrity: sha512-eRhmnColmSxJhO61GHZkvO67SpHDshVxs2j3+Zoc5Y1a4zQT2133ZAij04XKaBFfsVLjhbY/+YOWxgvtjx2nmA==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-definition-case/2.0.1: + resolution: {integrity: sha512-M+XlThtQwEJLQnQb5Gi6xZdkw92rGp7m2ux58WMw/Qlcg02WgHR/O0OcHPe5VO5hMJrtI+cGG5T0svsCgRZd3w==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-definition-spacing/2.0.1: + resolution: {integrity: sha512-xK9DOQO5MudITD189VyUiMHBIKltW1oc55L7Fti3i9DedXoBG7Phm+V9Mm7IdWzCVkquZVgVk63xQdqzSQRrSQ==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-emphasis-marker/2.0.1: + resolution: {integrity: sha512-7mpbAUrSnHiWRyGkbXRL5kfSKY9Cs8cdob7Fw+Z02/pufXMF4yRWaegJ5NTUu1RE+SKlF44wtWWjvcIoyY6/aw==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-fenced-code-flag/2.0.1: + resolution: {integrity: sha512-+COnWHlS/h02FMxoZWxNlZW3Y8M0cQQpmx3aNCbG7xkyMyCKsMLg9EmRvYHHIbxQCuF3JT0WWx5AySqlc7d+NA==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-fenced-code-marker/2.0.1: + resolution: {integrity: sha512-lujpjm04enn3ma6lITlttadld6eQ1OWAEcT3qZzvFHp+zPraC0yr0eXlvtDN/0UH8mrln/QmGiZp3i8IdbucZg==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-file-extension/1.0.5: + resolution: {integrity: sha512-oVQdf5vEomwHkfQ7R/mgmsWW2H/t9kSvnrxtVoNOHr+qnOEafKKDn+AFhioN2kqtjCZBAjSSrePs6xGKmXKDTw==} + dependencies: + unified-lint-rule: 1.0.6 + + /remark-lint-final-definition/2.1.0: + resolution: {integrity: sha512-83K7n2icOHPfBzbR5Mr1o7cu8gOjD8FwJkFx/ly+rW+8SHfjCj4D3WOFGQ1xVdmHjfomBDXXDSNo2oiacADVXQ==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-final-newline/1.0.5: + resolution: {integrity: sha512-rfLlW8+Fz2dqnaEgU4JwLA55CQF1T4mfSs/GwkkeUCGPenvEYwSkCN2KO2Gr1dy8qPoOdTFE1rSufLjmeTW5HA==} + dependencies: + unified-lint-rule: 1.0.6 + + /remark-lint-first-heading-level/2.0.1: + resolution: {integrity: sha512-XoK/eLfnz1VSA8QkfMbdbvlCqOwgw29MAWEGC4Cv0666nTcY9uWHlZ/SV/20YNmuEVdfCA+92v92mM486qcASQ==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-visit: 2.0.3 + + /remark-lint-hard-break-spaces/2.0.1: + resolution: {integrity: sha512-Qfn/BMQFamHhtbfLrL8Co/dbYJFLRL4PGVXZ5wumkUO5f9FkZC2RsV+MD9lisvGTkJK0ZEJrVVeaPbUIFM0OAw==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-heading-style/2.0.1: + resolution: {integrity: sha512-IrFLNs0M5Vbn9qg51AYhGUfzgLAcDOjh2hFGMz3mx664dV6zLcNZOPSdJBBJq3JQR4gKpoXcNwN1+FFaIATj+A==} + dependencies: + mdast-util-heading-style: 1.0.6 + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-visit: 2.0.3 + + /remark-lint-list-item-bullet-indent/3.0.0: + resolution: {integrity: sha512-X2rleWP8XReC4LXKF7Qi5vYiPJkA4Grx5zxsjHofFrVRz6j0PYOCuz7vsO+ZzMunFMfom6FODnscSWz4zouDVw==} + dependencies: + pluralize: 8.0.0 + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-visit: 2.0.3 + + /remark-lint-list-item-indent/2.0.1: + resolution: {integrity: sha512-4IKbA9GA14Q9PzKSQI6KEHU/UGO36CSQEjaDIhmb9UOhyhuzz4vWhnSIsxyI73n9nl9GGRAMNUSGzr4pQUFwTA==} + dependencies: + pluralize: 8.0.0 + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-no-auto-link-without-protocol/2.0.1: + resolution: {integrity: sha512-TFcXxzucsfBb/5uMqGF1rQA+WJJqm1ZlYQXyvJEXigEZ8EAxsxZGPb/gOQARHl/y0vymAuYxMTaChavPKaBqpQ==} + dependencies: + mdast-util-to-string: 1.1.0 + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-no-blockquote-without-marker/4.0.0: + resolution: {integrity: sha512-Y59fMqdygRVFLk1gpx2Qhhaw5IKOR9T38Wf7pjR07bEFBGUNfcoNVIFMd1TCJfCPQxUyJzzSqfZz/KT7KdUuiQ==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + vfile-location: 3.2.0 + + /remark-lint-no-consecutive-blank-lines/3.0.0: + resolution: {integrity: sha512-kmzLlOLrapBKEngwYFTdCZDmeOaze6adFPB7G0EdymD9V1mpAlnneINuOshRLEDKK5fAhXKiZXxdGIaMPkiXrA==} + dependencies: + pluralize: 8.0.0 + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-no-duplicate-definitions/2.0.1: + resolution: {integrity: sha512-XL22benJZB01m+aOse91nsu1IMFqeWJWme9QvoJuxIcBROO1BG1VoqLOkwNcawE/M/0CkvTo5rfx0eMlcnXOIw==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-stringify-position: 2.0.3 + unist-util-visit: 2.0.3 + + /remark-lint-no-emphasis-as-heading/2.0.1: + resolution: {integrity: sha512-z86+yWtVivtuGIxIC4g9RuATbgZgOgyLcnaleonJ7/HdGTYssjJNyqCJweaWSLoaI0akBQdDwmtJahW5iuX3/g==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-visit: 2.0.3 + + /remark-lint-no-file-name-articles/1.0.5: + resolution: {integrity: sha512-AQk5eTb3s3TAPPjiglZgqlQj4ycao+gPs8/XkdN1VCPUtewW0GgwoQe7YEuBKayJ6ioN8dGP37Kg/P/PlKaRQA==} + dependencies: + unified-lint-rule: 1.0.6 + + /remark-lint-no-file-name-consecutive-dashes/1.0.5: + resolution: {integrity: sha512-Mg2IDsi790/dSdAzwnBnsMYdZm3qC2QgGwqOWcr0TPABJhhjC3p8r5fX4MNMTXI5It7B7bW9+ImmCeLOZiXkLg==} + dependencies: + unified-lint-rule: 1.0.6 + + /remark-lint-no-file-name-irregular-characters/1.0.5: + resolution: {integrity: sha512-Oe5i99qNUKc2bxmiH421o5B/kqlf1dfjAxpHNLhi2X2dXE91zRGavrlRM/4f4oR0N9Bqb3qB9JZPyMPWrzu9XA==} + dependencies: + unified-lint-rule: 1.0.6 + + /remark-lint-no-file-name-mixed-case/1.0.5: + resolution: {integrity: sha512-ilrUCbHZin/ENwr8c3SC2chgkFsizXjBQIB/oZ7gnm1IkCkZPiMyXZAHdpwC/DjbrpGxfMYh9JmIHao4giS5+A==} + dependencies: + unified-lint-rule: 1.0.6 + + /remark-lint-no-file-name-outer-dashes/1.0.6: + resolution: {integrity: sha512-rT8CmcIlenegS0Yst4maYXdZfqIjBOiRUY8j/KJkORF5tKH+3O1/S07025qPGmcRihzK3w4yO0K8rgkKQw0b9w==} + dependencies: + unified-lint-rule: 1.0.6 + + /remark-lint-no-heading-content-indent/3.0.0: + resolution: {integrity: sha512-yULDoVSIqKylLDfW6mVUbrHlyEWUSFtVFiKc+/BA412xDIhm8HZLUnP+FsuBC0OzbIZ+bO9Txy52WtO3LGnK1A==} + dependencies: + mdast-util-heading-style: 1.0.6 + pluralize: 8.0.0 + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-no-heading-indent/3.0.0: + resolution: {integrity: sha512-b8ImhLv2AnRDxtYUODplzsl/7IwQ+lqRmD1bwbZgSerEP9MLaULW3SjH37EyA6z+8rCDjvEyppKKU6zec0TCjg==} + dependencies: + pluralize: 8.0.0 + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-no-heading-punctuation/2.0.1: + resolution: {integrity: sha512-lY/eF6GbMeGu4cSuxfGHyvaQQBIq/6T/o+HvAR5UfxSTxmxZFwbZneAI2lbeR1zPcqOU87NsZ5ZZzWVwdLpPBw==} + dependencies: + mdast-util-to-string: 1.1.0 + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-visit: 2.0.3 + + /remark-lint-no-inline-padding/3.0.0: + resolution: {integrity: sha512-3s9uW3Yux9RFC0xV81MQX3bsYs+UY7nPnRuMxeIxgcVwxQ4E/mTJd9QjXUwBhU9kdPtJ5AalngdmOW2Tgar8Cg==} + dependencies: + mdast-util-to-string: 1.1.0 + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-visit: 2.0.3 + + /remark-lint-no-literal-urls/2.0.1: + resolution: {integrity: sha512-IDdKtWOMuKVQIlb1CnsgBoyoTcXU3LppelDFAIZePbRPySVHklTtuK57kacgU5grc7gPM04bZV96eliGrRU7Iw==} + dependencies: + mdast-util-to-string: 1.1.0 + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-no-missing-blank-lines/2.0.1: + resolution: {integrity: sha512-gM46JM8NMFj5PG8pkxOQ0AvkRMEX1lD7UO9b/eqUgYQ6OiJaCG8dInogCd++MVSUDpMMf4FF9dksRM/AOiFgIQ==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-no-multiple-toplevel-headings/2.0.1: + resolution: {integrity: sha512-VKSItR6c+u3OsE5pUiSmNusERNyQS9Nnji26ezoQ1uvy06k3RypIjmzQqJ/hCkSiF+hoyC3ibtrrGT8gorzCmQ==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-stringify-position: 2.0.3 + unist-util-visit: 2.0.3 + + /remark-lint-no-shell-dollars/2.0.2: + resolution: {integrity: sha512-zhkHZOuyaD3r/TUUkkVqW0OxsR9fnSrAnHIF63nfJoAAUezPOu8D1NBsni6rX8H2DqGbPYkoeWrNsTwiKP0yow==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-visit: 2.0.3 + + /remark-lint-no-shortcut-reference-image/2.0.1: + resolution: {integrity: sha512-2jcZBdnN6ecP7u87gkOVFrvICLXIU5OsdWbo160FvS/2v3qqqwF2e/n/e7D9Jd+KTq1mR1gEVVuTqkWWuh3cig==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-visit: 2.0.3 + + /remark-lint-no-shortcut-reference-link/2.0.1: + resolution: {integrity: sha512-pTZbslG412rrwwGQkIboA8wpBvcjmGFmvugIA+UQR+GfFysKtJ5OZMPGJ98/9CYWjw9Z5m0/EktplZ5TjFjqwA==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-visit: 2.0.3 + + /remark-lint-no-table-indentation/3.0.0: + resolution: {integrity: sha512-+l7GovI6T+3LhnTtz/SmSRyOb6Fxy6tmaObKHrwb/GAebI/4MhFS1LVo3vbiP/RpPYtyQoFbbuXI55hqBG4ibQ==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + vfile-location: 3.2.0 + + /remark-lint-no-tabs/2.0.1: + resolution: {integrity: sha512-Fy5fMKNA8AsfhRtxyxBnHlGMpDDfns9VSSYv00RiC96qwRD82VhDRM3tYWZRBBxE+j71t6g47x9o/poGC7PThQ==} + dependencies: + unified-lint-rule: 1.0.6 + vfile-location: 3.2.0 + + /remark-lint-no-undefined-references/3.0.0: + resolution: {integrity: sha512-0hzaJS9GuzSQVOeeNdJr/s66LRQOzp618xuOQPYWHcJdd+SCaRTyWbjMrTM/cCI5L1sYjgurp410NkIBQ32Vqg==} + dependencies: + collapse-white-space: 1.0.6 + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + vfile-location: 3.2.0 + + /remark-lint-no-unused-definitions/2.0.1: + resolution: {integrity: sha512-+BMc0BOjc364SvKYLkspmxDch8OaKPbnUGgQBvK0Bmlwy42baR4C9zhwAWBxm0SBy5Z4AyM4G4jKpLXPH40Oxg==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-visit: 2.0.3 + + /remark-lint-ordered-list-marker-style/2.0.1: + resolution: {integrity: sha512-Cnpw1Dn9CHn+wBjlyf4qhPciiJroFOEGmyfX008sQ8uGoPZsoBVIJx76usnHklojSONbpjEDcJCjnOvfAcWW1A==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-ordered-list-marker-value/2.0.1: + resolution: {integrity: sha512-blt9rS7OKxZ2NW8tqojELeyNEwPhhTJGVa+YpUkdEH+KnrdcD7Nzhnj6zfLWOx6jFNZk3jpq5nvLFAPteHaNKg==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-rule-style/2.0.1: + resolution: {integrity: sha512-hz4Ff9UdlYmtO6Czz99WJavCjqCer7Cav4VopXt+yVIikObw96G5bAuLYcVS7hvMUGqC9ZuM02/Y/iq9n8pkAg==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-strong-marker/2.0.1: + resolution: {integrity: sha512-8X2IsW1jZ5FmW9PLfQjkL0OVy/J3xdXLcZrG1GTeQKQ91BrPFyEZqUM2oM6Y4S6LGtxWer+neZkPZNroZoRPBQ==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-table-cell-padding/3.0.0: + resolution: {integrity: sha512-sEKrbyFZPZpxI39R8/r+CwUrin9YtyRwVn0SQkNQEZWZcIpylK+bvoKIldvLIXQPob+ZxklL0GPVRzotQMwuWQ==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-table-pipe-alignment/2.0.1: + resolution: {integrity: sha512-O89U7bp0ja6uQkT2uQrNB76GaPvFabrHiUGhqEUnld21yEdyj7rgS57kn84lZNSuuvN1Oor6bDyCwWQGzzpoOQ==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-table-pipes/3.0.0: + resolution: {integrity: sha512-QPokSazEdl0Y8ayUV9UB0Ggn3Jos/RAQwIo0z1KDGnJlGDiF80Jc6iU9RgDNUOjlpQffSLIfSVxH5VVYF/K3uQ==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint-unordered-list-marker-style/2.0.1: + resolution: {integrity: sha512-8KIDJNDtgbymEvl3LkrXgdxPMTOndcux3BHhNGB2lU4UnxSpYeHsxcDgirbgU6dqCAfQfvMjPvfYk19QTF9WZA==} + dependencies: + unified-lint-rule: 1.0.6 + unist-util-generated: 1.1.6 + unist-util-position: 3.1.0 + unist-util-visit: 2.0.3 + + /remark-lint/8.0.0: + resolution: {integrity: sha512-ESI8qJQ/TIRjABDnqoFsTiZntu+FRifZ5fJ77yX63eIDijl/arvmDvT+tAf75/Nm5BFL4R2JFUtkHRGVjzYUsg==} + dependencies: + remark-message-control: 6.0.0 + + /remark-message-control/6.0.0: + resolution: {integrity: sha512-k9bt7BYc3G7YBdmeAhvd3VavrPa/XlKWR3CyHjr4sLO9xJyly8WHHT3Sp+8HPR8lEUv+/sZaffL7IjMLV0f6BA==} + dependencies: + mdast-comment-marker: 1.1.2 + unified-message-control: 3.0.3 + + /remark-parse/10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + dependencies: + '@types/mdast': 3.0.13 + mdast-util-from-markdown: 1.3.1 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /remark-parse/9.0.0: + resolution: {integrity: sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==} + dependencies: + mdast-util-from-markdown: 0.8.5 + transitivePeerDependencies: + - supports-color + + /remark-preset-github/4.0.4: + resolution: {integrity: sha512-BTdQejtrqK9mEG9pNlJd/VBCLdFzSN+9DW+Fd9Wq6emUp2jkXvFYL+DDYvinJGKTSYN/Lsq1wW5RGo+ssZMyPQ==} + engines: {node: '>=14'} + dependencies: + remark-comment-config: 6.0.0 + remark-contributors: 4.0.1 + remark-gfm: 1.0.0 + remark-heading-gap: 4.0.0 + remark-license: 5.2.0 + remark-lint-blockquote-indentation: 2.0.1 + remark-lint-checkbox-character-style: 3.0.0 + remark-lint-checkbox-content-indent: 3.0.0 + remark-lint-code-block-style: 2.0.1 + remark-lint-definition-case: 2.0.1 + remark-lint-definition-spacing: 2.0.1 + remark-lint-emphasis-marker: 2.0.1 + remark-lint-fenced-code-flag: 2.0.1 + remark-lint-fenced-code-marker: 2.0.1 + remark-lint-file-extension: 1.0.5 + remark-lint-final-definition: 2.1.0 + remark-lint-first-heading-level: 2.0.1 + remark-lint-heading-style: 2.0.1 + remark-lint-list-item-indent: 2.0.1 + remark-lint-no-consecutive-blank-lines: 3.0.0 + remark-lint-no-duplicate-definitions: 2.0.1 + remark-lint-no-emphasis-as-heading: 2.0.1 + remark-lint-no-file-name-articles: 1.0.5 + remark-lint-no-file-name-consecutive-dashes: 1.0.5 + remark-lint-no-file-name-irregular-characters: 1.0.5 + remark-lint-no-file-name-mixed-case: 1.0.5 + remark-lint-no-file-name-outer-dashes: 1.0.6 + remark-lint-no-heading-content-indent: 3.0.0 + remark-lint-no-heading-indent: 3.0.0 + remark-lint-no-heading-punctuation: 2.0.1 + remark-lint-no-missing-blank-lines: 2.0.1 + remark-lint-no-multiple-toplevel-headings: 2.0.1 + remark-lint-no-shell-dollars: 2.0.2 + remark-lint-no-table-indentation: 3.0.0 + remark-lint-no-tabs: 2.0.1 + remark-lint-ordered-list-marker-value: 2.0.1 + remark-lint-rule-style: 2.0.1 + remark-lint-strong-marker: 2.0.1 + remark-lint-table-cell-padding: 3.0.0 + remark-lint-table-pipe-alignment: 2.0.1 + remark-lint-table-pipes: 3.0.0 + remark-lint-unordered-list-marker-style: 2.0.1 + remark-preset-lint-recommended: 5.0.0 + remark-retext: 4.0.0 + remark-toc: 7.2.0 + retext-english: 3.0.4 + retext-preset-github: 0.0.6 + unified: 9.2.2 + transitivePeerDependencies: + - supports-color + + /remark-preset-lint-recommended/5.0.0: + resolution: {integrity: sha512-uu+Ab8JCwMMaKvvB0LOWTWtM3uAvJbKQM/oyWCEJqj7lUVNTKZS575Ro5rKM3Dx7kQjjR1iw0e99bpAYTc5xNA==} + dependencies: + remark-lint: 8.0.0 + remark-lint-final-newline: 1.0.5 + remark-lint-hard-break-spaces: 2.0.1 + remark-lint-list-item-bullet-indent: 3.0.0 + remark-lint-list-item-indent: 2.0.1 + remark-lint-no-auto-link-without-protocol: 2.0.1 + remark-lint-no-blockquote-without-marker: 4.0.0 + remark-lint-no-duplicate-definitions: 2.0.1 + remark-lint-no-heading-content-indent: 3.0.0 + remark-lint-no-inline-padding: 3.0.0 + remark-lint-no-literal-urls: 2.0.1 + remark-lint-no-shortcut-reference-image: 2.0.1 + remark-lint-no-shortcut-reference-link: 2.0.1 + remark-lint-no-undefined-references: 3.0.0 + remark-lint-no-unused-definitions: 2.0.1 + remark-lint-ordered-list-marker-style: 2.0.1 + + /remark-rehype/8.1.0: + resolution: {integrity: sha512-EbCu9kHgAxKmW1yEYjx3QafMyGY3q8noUbNUI5xyKbaFP89wbhDrKxyIQNukNYthzjNHZu6J7hwFg7hRm1svYA==} + dependencies: + mdast-util-to-hast: 10.2.0 + dev: false + + /remark-retext/4.0.0: + resolution: {integrity: sha512-cYCchalpf25bTtfXF24ribYvqytPKq0TiEhqQDBHvVEEsApebwruPWP1cTcvTFBidmpXyqzycm+y8ng7Kmvc8Q==} + dependencies: + mdast-util-to-nlcst: 4.0.1 + + /remark-slug/6.1.0: + resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==} + dependencies: + github-slugger: 1.5.0 + mdast-util-to-string: 1.1.0 + unist-util-visit: 2.0.3 + dev: false + + /remark-stringify/10.0.3: + resolution: {integrity: sha512-koyOzCMYoUHudypbj4XpnAKFbkddRMYZHwghnxd7ue5210WzGw6kOBwauJTRUMq16jsovXx8dYNvSSWP89kZ3A==} + dependencies: + '@types/mdast': 3.0.13 + mdast-util-to-markdown: 1.5.0 + unified: 10.1.2 + dev: true + + /remark-stringify/9.0.1: + resolution: {integrity: sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==} + dependencies: + mdast-util-to-markdown: 0.6.5 + dev: true + + /remark-toc/7.2.0: + resolution: {integrity: sha512-ppHepvpbg7j5kPFmU5rzDC4k2GTcPDvWcxXyr/7BZzO1cBSPk0stKtEJdsgAyw2WHKPGxadcHIZRjb2/sHxjkg==} + dependencies: + '@types/unist': 2.0.8 + mdast-util-toc: 5.1.0 + + /remark/13.0.0: + resolution: {integrity: sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==} + dependencies: + remark-parse: 9.0.0 + remark-stringify: 9.0.1 + unified: 9.2.2 + transitivePeerDependencies: + - supports-color + dev: true + + /remark/14.0.3: + resolution: {integrity: sha512-bfmJW1dmR2LvaMJuAnE88pZP9DktIFYXazkTfOIKZzi3Knk9lT0roItIA24ydOucI3bV/g/tXBA6hzqq3FV9Ew==} + dependencies: + '@types/mdast': 3.0.13 + remark-parse: 10.0.2 + remark-stringify: 10.0.3 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /remove-bom-buffer/3.0.0: + resolution: {integrity: sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + is-utf8: 0.2.1 + dev: true + + /remove-bom-stream/1.2.0: + resolution: {integrity: sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==} + engines: {node: '>= 0.10'} + dependencies: + remove-bom-buffer: 3.0.0 + safe-buffer: 5.2.1 + through2: 2.0.5 + dev: true + + /remove-trailing-separator/1.1.0: + resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} + dev: true + + /repeat-element/1.1.4: + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} + engines: {node: '>=0.10.0'} + dev: true + + /repeat-string/1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + /repeating/2.0.1: + resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==} + engines: {node: '>=0.10.0'} + dependencies: + is-finite: 1.1.0 + dev: true + + /replace-ext/1.0.1: + resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==} + engines: {node: '>= 0.10'} + dev: true + + /replace-ext/2.0.0: + resolution: {integrity: sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==} + engines: {node: '>= 10'} + dev: true + + /replace-homedir/1.0.0: + resolution: {integrity: sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==} + engines: {node: '>= 0.10'} + dependencies: + homedir-polyfill: 1.0.3 + is-absolute: 1.0.0 + remove-trailing-separator: 1.1.0 + dev: true + + /replacestream/4.0.3: + resolution: {integrity: sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==} + dependencies: + escape-string-regexp: 1.0.5 + object-assign: 4.1.1 + readable-stream: 2.3.8 + dev: false + + /request-received/0.0.3: + resolution: {integrity: sha512-yj9C/+CkFIleI0XwEMkgj5KOfD9VzsI0Xbb/e/x1mvhwPN3/lt/wkH9AomV5MyBdZDhOkbjIIfj5ilc3MkhTvg==} + engines: {node: '>=6.4.0'} + dev: false + + /request/2.88.2: + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} + engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + dependencies: + aws-sign2: 0.7.0 + aws4: 1.12.0 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.5 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.3 + safe-buffer: 5.2.1 + tough-cookie: 2.5.0 + tunnel-agent: 0.6.0 + uuid: 3.4.0 + dev: false + + /require-directory/2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + /require-from-string/2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + + /require-main-filename/1.0.1: + resolution: {integrity: sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==} + dev: true + + /require-main-filename/2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + + /requireindex/1.2.0: + resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} + engines: {node: '>=0.10.5'} + dev: true + + /requires-port/1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: false + + /requizzle/0.2.4: + resolution: {integrity: sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==} + dependencies: + lodash: 4.17.21 + dev: false + + /reserved-email-addresses-list/2.0.13: + resolution: {integrity: sha512-0k2vkbriVpkvoI9BKigbl5FhdyQdZt8lF6uPPGXmEcAARdDH3sa+AIjMyidN9ipekw72vlxvlWBe6z9kJIO4MA==} + engines: {node: '>=8.3'} + dev: false + + /reserved-words/0.1.2: + resolution: {integrity: sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw==} + dev: true + + /resolve-alpn/1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + /resolve-cwd/3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + + /resolve-dir/1.0.1: + resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} + engines: {node: '>=0.10.0'} + dependencies: + expand-tilde: 2.0.2 + global-modules: 1.0.0 + dev: true + + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-from/5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve-global/1.0.0: + resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} + engines: {node: '>=8'} + dependencies: + global-dirs: 0.1.1 + dev: true + + /resolve-options/1.1.0: + resolution: {integrity: sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==} + engines: {node: '>= 0.10'} + dependencies: + value-or-function: 3.0.0 + dev: true + + /resolve-path/1.4.0: + resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} + engines: {node: '>= 0.8'} + dependencies: + http-errors: 1.6.3 + path-is-absolute: 1.0.1 + dev: false + + /resolve-url/0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + dev: true + + /resolve/1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + /resolve/2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + dependencies: + is-core-module: 2.13.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /response-time/2.3.2: + resolution: {integrity: sha512-MUIDaDQf+CVqflfTdQ5yam+aYCkXj1PY8fjlPDQ6ppxJlmgZb864pHtA750mayywNg8tx4rS7qH9JXd/OF+3gw==} + engines: {node: '>= 0.8.0'} + dependencies: + depd: 1.1.2 + on-headers: 1.0.2 + dev: false + + /responselike/1.0.2: + resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} + dependencies: + lowercase-keys: 1.0.1 + dev: true + + /responselike/2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + dependencies: + lowercase-keys: 2.0.0 + dev: false + + /responselike/3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + dependencies: + lowercase-keys: 3.0.0 + dev: true + + /restify-cors-middleware2/2.2.1_restify@11.1.0: + resolution: {integrity: sha512-j7Hvufd5dv699OeVuSk6YUH/HMga6a4A1zriGc6En/SDE3kzeDvQF82a3LMcVa+GaUfXxQa+TpVP8LRtcdIJWg==} + peerDependencies: + restify: 2.6.x - 11.x.x + dependencies: + assert-plus: 1.0.0 + restify: 11.1.0 + dev: false + + /restify-errors/8.0.2: + resolution: {integrity: sha512-UsXUVQo7M26xoQzeUcZQ0+H8L2t9DGzrXcAgR3WB/1vnbl+UdI4tZ1PqYsN+sS5WnqHKZ0Xy9w0CKf83bbrwYA==} + dependencies: + '@netflix/nerror': 1.1.3 + assert-plus: 1.0.0 + lodash: 4.17.21 + optionalDependencies: + safe-json-stringify: 1.2.0 + dev: false + + /restify-logger/2.0.1: + resolution: {integrity: sha512-6sLjJ9s9OX3Tk3c6tpUfUV8J/vM4ol0kDM0NCMAW/ucxiVGFBY1sVJCkOu3bppfgTEzj8EzDE6v0wPFn2LD3fQ==} + dependencies: + morgan: 1.10.0 + transitivePeerDependencies: + - supports-color + dev: false + + /restify/11.1.0: + resolution: {integrity: sha512-ng7uBlj4wpIpshhAjNNSd6JG5Eg32+zgync2gG8OlF4e2xzIflZo54GJ/qLs765OtQaVU+uJPcNOL5Atm2F/dg==} + engines: {node: '>=10.0.0'} + hasBin: true + dependencies: + assert-plus: 1.0.0 + csv: 6.3.5 + escape-regexp-component: 1.0.2 + ewma: 2.0.1 + find-my-way: 7.7.0 + formidable: 1.2.6 + http-signature: 1.3.6 + lodash: 4.17.21 + lru-cache: 7.18.3 + mime: 3.0.0 + negotiator: 0.6.3 + once: 1.4.0 + pidusage: 3.0.2 + pino: 8.16.0 + qs: 6.11.2 + restify-errors: 8.0.2 + semver: 7.5.4 + send: 0.18.0 + spdy: 4.0.2 + uuid: 9.0.1 + vasync: 2.2.1 + optionalDependencies: + dtrace-provider: 0.8.8 + transitivePeerDependencies: + - supports-color + dev: false + + /restore-cursor/3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /restore-cursor/4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /ret/0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + + /ret/0.2.2: + resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} + engines: {node: '>=4'} + dev: false + + /retext-contractions/3.0.0: + resolution: {integrity: sha512-Wn95agseXHTsoXvhavuTcnwUEb9TbL7QtnYkHeFMh8L53jdQbbooLX68cbpKyaaPbxYiomrgJpu7eB3arcr2rw==} + dependencies: + nlcst-is-literal: 1.2.2 + nlcst-to-string: 2.0.4 + unist-util-visit: 1.4.1 + + /retext-diacritics/2.0.0: + resolution: {integrity: sha512-wr3mqJ9whlIG/q6vP601qR+/C7AMgc7O60kebs9kvN/HtTX7CpvFsKF68+yw86drMOMVCBJP8JB1Qlnj8CkY5A==} + dependencies: + match-casing: 1.0.3 + nlcst-search: 1.5.1 + nlcst-to-string: 2.0.4 + quotation: 1.1.3 + unist-util-position: 3.1.0 + + /retext-english/3.0.4: + resolution: {integrity: sha512-yr1PgaBDde+25aJXrnt3p1jvT8FVLVat2Bx8XeAWX13KXo8OT+3nWGU3HWxM4YFJvmfqvJYJZG2d7xxaO774gw==} + dependencies: + parse-english: 4.2.0 + unherit: 1.1.3 + + /retext-indefinite-article/1.1.7: + resolution: {integrity: sha512-pqvEfEHL8uoeonbEjk8+d/hmyA3ozIeNTl4t3uurMcBpoIqN3+nbuMCFQrfDy2wjaKZ40KsLmEi+Zjv7m1ejLQ==} + dependencies: + format: 0.2.2 + nlcst-to-string: 2.0.4 + number-to-words: 1.2.4 + unist-util-is: 3.0.0 + unist-util-visit: 1.4.1 + + /retext-preset-github/0.0.6: + resolution: {integrity: sha512-6YGaTBK7YJBYTrHOeorIqJUtm72/y1rWV0zKB8ba1Kb0gs57YigLaWjuKnRzULSmhP1i1uXUx2xcsEh6lwgNvw==} + dependencies: + retext-contractions: 3.0.0 + retext-diacritics: 2.0.0 + retext-indefinite-article: 1.1.7 + retext-quotes: 3.0.0 + retext-redundant-acronyms: 2.0.0 + retext-repeated-words: 2.0.0 + retext-sentence-spacing: 3.0.0 + + /retext-quotes/3.0.0: + resolution: {integrity: sha512-2htggeOFsrorhXrQvb4BI1O/r7CGVQZx/TysAT7wlVMsRUTZooiIGkBcLrcySa4sbqjsVgg1RjMy8K5O+gCQlg==} + dependencies: + nlcst-to-string: 2.0.4 + unist-util-is: 3.0.0 + unist-util-visit: 1.4.1 + + /retext-redundant-acronyms/2.0.0: + resolution: {integrity: sha512-9E62yXkDKYItNZO+lT4Pp0rAP8e/H7ppjYP681L0fk74xyItoE6okl0BMNVOa0W4XidLoGX2uWdlwWpCUeqQiw==} + dependencies: + nlcst-normalize: 2.1.5 + nlcst-search: 1.5.1 + nlcst-to-string: 2.0.4 + pluralize: 8.0.0 + quotation: 1.1.3 + unist-util-find-after: 2.0.4 + unist-util-position: 3.1.0 + + /retext-repeated-words/2.0.0: + resolution: {integrity: sha512-CGqM88ViAKtSgdWGObTU974AdmfxyiyB19MvuQTBBW3crWYIS7p21m0sJH/pCnp11gVa0YOU+vqdNaSvRiLTFA==} + dependencies: + nlcst-to-string: 2.0.4 + unist-util-is: 3.0.0 + unist-util-visit: 1.4.1 + + /retext-sentence-spacing/3.0.0: + resolution: {integrity: sha512-UWltTXZNh6kBwJJc0js3nOmbqze3LqhJg68jaRErNIPZQHtZ5hMn7h7f8kVY5OrbEL9XiY88m5DRPbFz16eTkQ==} + dependencies: + nlcst-to-string: 2.0.4 + unist-util-is: 3.0.0 + unist-util-visit: 1.4.1 + + /retry-request/5.0.2: + resolution: {integrity: sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==} + engines: {node: '>=12'} + dependencies: + debug: 4.3.4 + extend: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /retry/0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + /retry/0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + dev: false + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + /rev-hash/2.0.0: + resolution: {integrity: sha512-U6EkYZI87C3B5KS46HAEy+g+rtueIdfF9Zb6XBlGe3R/RaF3V8drN7nRFm7/swHOK1zQLGvIYwQ4Q6WDAAlynw==} + engines: {node: '>=4'} + dev: true + + /rev-hash/3.0.0: + resolution: {integrity: sha512-s+87HfEKAu95TaTxnbCobn0/BkbzR23LHSwVdYvr8mn5+PPjzy+hTWyh92b5oaLgig9TKPe5d6ZcubsVBtUrZg==} + engines: {node: '>=8'} + dev: false + + /rev-path/2.0.0: + resolution: {integrity: sha512-G5R2L9gYu9kEuqPfIFgO9gO+OhBWOAT83HyauOQmGHO6y9Fsa4acv+XsmNhNDrod0HDh1/VxJRmsffThzeHJlQ==} + engines: {node: '>=4'} + dependencies: + modify-filename: 1.1.0 + dev: true + + /reversepoint/0.2.1: + resolution: {integrity: sha512-MFA06BYS9ZXFApJBMeDa8VTxypfDNzbJ6Sp1CoT8mlsxXbB6zhVJa1f24WFEPDGcF4akN+dpTe7gfs9htHYFWw==} + dev: true + + /rfdc/1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + + /rimraf/2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rimraf/2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + + /ripemd160/2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + dev: true + + /router/1.3.8: + resolution: {integrity: sha512-461UFH44NtSfIlS83PUg2N7OZo86BC/kB3dY77gJdsODsBhhw7+2uE0tzTINxrY9CahCUVk1VhpWCA5i1yoIEg==} + engines: {node: '>= 0.8'} + dependencies: + array-flatten: 3.0.0 + debug: 2.6.9 + methods: 1.1.2 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + setprototypeof: 1.2.0 + utils-merge: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /run-applescript/3.2.0: + resolution: {integrity: sha512-Ep0RsvAjnRcBX1p5vogbaBdAGu/8j/ewpvGqnQYunnLd9SM0vWcPJewPKNnWFggf0hF0pwIgwV5XK7qQ7UZ8Qg==} + engines: {node: '>=4'} + dependencies: + execa: 0.10.0 + dev: false + + /run-async/2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + + /rx/2.3.24: + resolution: {integrity: sha512-Ue4ZB7Dzbn2I9sIj8ws536nOP2S53uypyCkCz9q0vlYD5Kn6/pu4dE+wt2ZfFzd9m73hiYKnnCb1OyKqc+MRkg==} + dev: true + + /rxjs/6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + dependencies: + tslib: 1.14.1 + dev: true + + /sade/1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: true + + /safe-array-concat/1.0.1: + resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + /safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + /safe-identifier/0.4.2: + resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} + dev: false + + /safe-json-parse/1.0.1: + resolution: {integrity: sha512-o0JmTu17WGUaUOHa1l0FPGXKBfijbxK6qoHzlkihsDXxzBHvJcA7zgviKR92Xs841rX9pK16unfphLq0/KqX7A==} + dev: true + + /safe-json-stringify/1.2.0: + resolution: {integrity: sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==} + requiresBuild: true + dev: false + optional: true + + /safe-regex-test/1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-regex: 1.1.4 + dev: true + + /safe-regex/1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + dependencies: + ret: 0.1.15 + dev: true + + /safe-regex/2.1.1: + resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} + dependencies: + regexp-tree: 0.1.27 + dev: true + + /safe-regex2/2.0.0: + resolution: {integrity: sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==} + dependencies: + ret: 0.2.2 + dev: false + + /safe-stable-stringify/2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + dev: false + + /safe-timers/1.1.0: + resolution: {integrity: sha512-9aqY+v5eMvmRaluUEtdRThV1EjlSElzO7HuCj0sTW9xvp++8iJ9t/RWGNWV6/WHcUJLHpyT2SNf/apoKTU2EpA==} + dev: false + + /safer-buffer/2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + /sanitize-html/2.11.0: + resolution: {integrity: sha512-BG68EDHRaGKqlsNjJ2xUB7gpInPA8gVx/mvjO743hZaeMCZ2DwzW7xvsqZ+KNU4QKwj86HJ3uu2liISf2qBBUA==} + dependencies: + deepmerge: 4.3.1 + escape-string-regexp: 4.0.0 + htmlparser2: 8.0.2 + is-plain-object: 5.0.0 + parse-srcset: 1.0.2 + postcss: 8.4.31 + dev: false + + /saslprep/1.0.3: + resolution: {integrity: sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + sparse-bitfield: 3.0.3 + dev: false + optional: true + + /sass-graph/4.0.1: + resolution: {integrity: sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA==} + engines: {node: '>=12'} + hasBin: true + dependencies: + glob: 7.2.3 + lodash: 4.17.21 + scss-tokenizer: 0.4.3 + yargs: 17.7.2 + dev: true + + /sass/1.69.3: + resolution: {integrity: sha512-X99+a2iGdXkdWn1akFPs0ZmelUzyAQfvqYc2P/MPTrJRuIRoTffGzT9W9nFqG00S+c8hXzVmgxhUuHFdrwxkhQ==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + immutable: 4.3.4 + source-map-js: 1.0.2 + dev: true + + /sax/1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: true + optional: true + + /sax/1.3.0: + resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + dev: false + + /saxes/5.0.1: + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + engines: {node: '>=10'} + dependencies: + xmlchars: 2.2.0 + dev: false + + /scmp/2.1.0: + resolution: {integrity: sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q==} + dev: false + + /scss-tokenizer/0.4.3: + resolution: {integrity: sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw==} + dependencies: + js-base64: 2.6.4 + source-map: 0.7.4 + dev: true + + /search-string/3.1.0: + resolution: {integrity: sha512-yY3b0VlaXfKi2B//34PN5AFF+GQvwme6Kj4FjggmoSBOa7B8AHfS1nYZbsrYu+IyGeYOAkF8ywL9LN9dkrOo6g==} + dev: false + + /secure-json-parse/2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + dev: false + + /seek-bzip/1.0.6: + resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==} + hasBin: true + dependencies: + commander: 2.20.3 + dev: true + + /selderee/0.11.0: + resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} + dependencies: + parseley: 0.12.1 + dev: false + + /selderee/0.6.0: + resolution: {integrity: sha512-ibqWGV5aChDvfVdqNYuaJP/HnVBhlRGSRrlbttmlMpHcLuTqqbMH36QkSs9GEgj5M88JDYLI8eyP94JaQ8xRlg==} + dependencies: + parseley: 0.7.0 + dev: false + + /select-hose/2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + dev: false + + /select/1.1.2: + resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==} + dev: false + + /semver-diff/3.1.1: + resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + dev: true + + /semver-greatest-satisfied-range/1.1.0: + resolution: {integrity: sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==} + engines: {node: '>= 0.10'} + dependencies: + sver-compat: 1.5.0 + dev: true + + /semver-regex/2.0.0: + resolution: {integrity: sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==} + engines: {node: '>=6'} + dev: true + + /semver-truncate/1.1.2: + resolution: {integrity: sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w==} + engines: {node: '>=0.10.0'} + dependencies: + semver: 5.7.2 + dev: true + + /semver/5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + /semver/6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + /semver/7.0.0: + resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} + hasBin: true + dev: true + + /semver/7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + + /send/0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /sender-rewriting-scheme/1.0.0: + resolution: {integrity: sha512-MJL0/5kQBsMV/Qp/snNspf4NLggyst9Mk/93hFwQdry+NkEsCixGB8bp4vZcl0R+6sCSYlqZKcLGWIfm2/O9oA==} + dev: false + + /sensitive-fields/1.0.1: + resolution: {integrity: sha512-hGytH4oxZYaJwskUmnt6gJlk3WALnxZME/Tn/PMKrZmp64cC2LjJBOSAoXQmQZDJCrgtjGA1uNouiQpbuY+wOQ==} + engines: {node: '>=14'} + dev: false + + /seq-index/1.1.0: + resolution: {integrity: sha512-379HX67c4K5A5DOuw4BMEKsKX8vQ2y/Fqd5Gp6/iTjSm+zjCo7aJYYyQWo5o42wWximadEAKX7CS+j7SVZkbkg==} + engines: {node: '>=6'} + dev: false + + /serialize-error/7.0.1: + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + engines: {node: '>=10'} + dependencies: + type-fest: 0.13.1 + dev: true + + /set-blocking/2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + /set-function-name/2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.0 + dev: true + + /set-value/2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + dev: true + + /setimmediate/1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: true + + /setprototypeof/1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + dev: false + + /setprototypeof/1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false + + /sha.js/2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /sharp/0.32.6: + resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} + engines: {node: '>=14.15.0'} + requiresBuild: true + dependencies: + color: 4.2.3 + detect-libc: 2.0.2 + node-addon-api: 6.1.0 + prebuild-install: 7.1.1 + semver: 7.5.4 + simple-get: 4.0.1 + tar-fs: 3.0.4 + tunnel-agent: 0.6.0 + dev: false + + /shasum-object/1.0.0: + resolution: {integrity: sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==} + dependencies: + fast-safe-stringify: 2.1.1 + dev: true + + /shebang-command/1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + dependencies: + shebang-regex: 1.0.0 + + /shebang-command/2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + + /shebang-regex/1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + /shebang-regex/3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + /shell-quote/1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: true + + /side-channel/1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + object-inspect: 1.12.3 + + /sift/16.0.1: + resolution: {integrity: sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==} + dev: false + + /signal-exit/3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + /signal-exit/4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + /signale/1.4.0: + resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} + engines: {node: '>=6'} + dependencies: + chalk: 2.4.2 + figures: 2.0.0 + pkg-conf: 2.1.0 + dev: false + + /simple-concat/1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + /simple-get/4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + dev: false + + /simple-swizzle/0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + dependencies: + is-arrayish: 0.3.2 + dev: false + + /simple-update-notifier/1.1.0: + resolution: {integrity: sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==} + engines: {node: '>=8.10.0'} + dependencies: + semver: 7.0.0 + dev: true + + /sinon/15.1.2: + resolution: {integrity: sha512-uG1pU54Fis4EfYOPoEi13fmRHgZNg/u+3aReSEzHsN52Bpf+bMVfsBQS5MjouI+rTuG6UBIINlpuuO2Epr7SiA==} + dependencies: + '@sinonjs/commons': 3.0.0 + '@sinonjs/fake-timers': 10.3.0 + '@sinonjs/samsam': 8.0.0 + diff: 5.1.0 + nise: 5.1.4 + supports-color: 7.2.0 + dev: true + + /sitemap/7.1.1: + resolution: {integrity: sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==} + engines: {node: '>=12.0.0', npm: '>=5.6.0'} + hasBin: true + dependencies: + '@types/node': 17.0.45 + '@types/sax': 1.2.5 + arg: 5.0.2 + sax: 1.3.0 + dev: false + + /slang/0.3.0: + resolution: {integrity: sha512-kGj3TvxSDR1Enhig/aan5ucfWNDULTiWg3NrExUzO2ShXcYsm6k2oPxnav8GtslYvozxRAqL+E2O3P3QKtQYSg==} + dev: false + + /slash/2.0.0: + resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} + engines: {node: '>=6'} + dev: true + + /slash/3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + /slash/4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: true + + /slash/5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + dev: true + + /slice-ansi/2.1.0: + resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==} + engines: {node: '>=6'} + dependencies: + ansi-styles: 3.2.1 + astral-regex: 1.0.0 + is-fullwidth-code-point: 2.0.0 + dev: true + + /slice-ansi/4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /slice-ansi/5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + dev: true + + /sliced/1.0.1: + resolution: {integrity: sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA==} + + /slick/1.12.2: + resolution: {integrity: sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==} + dev: false + + /smart-buffer/4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + /smtp-server/3.13.0: + resolution: {integrity: sha512-thVFqpwrHIJ25rXjXA6RYFUO35el2O+X7WJ006qMVAyFs5Ss6XGPJASg7Fh1QvT28ADIv9hGGXmgR+kaSEikwQ==} + engines: {node: '>=12.0.0'} + dependencies: + base32.js: 0.1.0 + ipv6-normalize: 1.0.1 + nodemailer: 6.9.4 + dev: false + + /snapdragon-node/2.1.1: + resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 1.0.0 + isobject: 3.0.1 + snapdragon-util: 3.0.1 + dev: true + + /snapdragon-util/3.0.1: + resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /snapdragon/0.8.2: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} + dependencies: + base: 0.11.2 + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + map-cache: 0.2.2 + source-map: 0.5.7 + source-map-resolve: 0.5.3 + use: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /snappy/7.2.2: + resolution: {integrity: sha512-iADMq1kY0v3vJmGTuKcFWSXt15qYUz7wFkArOrsSg0IFfI3nJqIJvK2/ZbEIndg7erIJLtAVX2nSOqPz7DcwbA==} + engines: {node: '>= 10'} + optionalDependencies: + '@napi-rs/snappy-android-arm-eabi': 7.2.2 + '@napi-rs/snappy-android-arm64': 7.2.2 + '@napi-rs/snappy-darwin-arm64': 7.2.2 + '@napi-rs/snappy-darwin-x64': 7.2.2 + '@napi-rs/snappy-freebsd-x64': 7.2.2 + '@napi-rs/snappy-linux-arm-gnueabihf': 7.2.2 + '@napi-rs/snappy-linux-arm64-gnu': 7.2.2 + '@napi-rs/snappy-linux-arm64-musl': 7.2.2 + '@napi-rs/snappy-linux-x64-gnu': 7.2.2 + '@napi-rs/snappy-linux-x64-musl': 7.2.2 + '@napi-rs/snappy-win32-arm64-msvc': 7.2.2 + '@napi-rs/snappy-win32-ia32-msvc': 7.2.2 + '@napi-rs/snappy-win32-x64-msvc': 7.2.2 + dev: false + + /socks-proxy-agent/6.2.1: + resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} + engines: {node: '>= 10'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + socks: 2.7.1 + transitivePeerDependencies: + - supports-color + dev: true + + /socks-proxy-agent/7.0.0: + resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==} + engines: {node: '>= 10'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + socks: 2.7.1 + transitivePeerDependencies: + - supports-color + + /socks/2.7.1: + resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} + engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} + dependencies: + ip: 2.0.0 + smart-buffer: 4.2.0 + + /sonic-boom/3.7.0: + resolution: {integrity: sha512-IudtNvSqA/ObjN97tfgNmOKyDOs4dNcg4cUUsHDebqsgb8wGBBwb31LIgShNO8fye0dFI52X1+tFoKKI6Rq1Gg==} + dependencies: + atomic-sleep: 1.0.0 + dev: false + + /sort-keys-length/1.0.1: + resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} + engines: {node: '>=0.10.0'} + dependencies: + sort-keys: 1.1.2 + dev: true + + /sort-keys/1.1.2: + resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} + engines: {node: '>=0.10.0'} + dependencies: + is-plain-obj: 1.1.0 + dev: true + + /sort-keys/2.0.0: + resolution: {integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==} + engines: {node: '>=4'} + dependencies: + is-plain-obj: 1.1.0 + dev: true + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + /source-map-resolve/0.5.3: + resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.2 + resolve-url: 0.2.1 + source-map-url: 0.4.1 + urix: 0.1.0 + dev: true + + /source-map-resolve/0.6.0: + resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.2 + dev: true + + /source-map-support/0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map-url/0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated + dev: true + + /source-map/0.1.43: + resolution: {integrity: sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==} + engines: {node: '>=0.8.0'} + dependencies: + amdefine: 1.0.1 + dev: true + + /source-map/0.4.4: + resolution: {integrity: sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==} + engines: {node: '>=0.8.0'} + dependencies: + amdefine: 1.0.1 + dev: true + + /source-map/0.5.6: + resolution: {integrity: sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==} + engines: {node: '>=0.10.0'} + dev: false + + /source-map/0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + /source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + /source-map/0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: true + + /space-separated-tokens/1.1.5: + resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} + dev: false + + /spamscanner/5.1.5: + resolution: {integrity: sha512-7m+ZEKF/+LMp13QzVhMPKllrlbbDbwZI1u3UGIZb7Rif5poIdWJDypEeV9y/iUS2e3NNmTuYdi8d1a1nB+FGEA==} + engines: {node: '>=14'} + dependencies: + '@ladjs/naivebayes': 0.1.0 + '@stdlib/nlp-expand-contractions': 0.0.8 + array-join-conjunction: 1.0.0 + bitcoin-regex: 2.0.0 + chinese-tokenizer: 2.4.0 + clamscan: 2.1.2 + credit-card-regex: 3.0.0 + crypto-random-string: 3.3.1 + currency-codes: 2.1.0 + currency-symbol-map: 5.1.0 + email-regex-safe: 1.0.2 + emoji-patterns: 14.0.1 + escape-string-regexp: 4.0.0 + file-extension: 4.0.5 + file-type: 16.5.4 + floating-point-regex: 0.1.0 + franc: 5.0.0 + gemoji: 6.1.0 + hasha: 5.2.2 + hexa-color-regex: 1.0.0 + i18n-locales: 0.0.5 + iconv: 3.0.1 + into-stream: 6.0.0 + ip-regex: 4.3.0 + is-buffer: 2.0.5 + is-stream: 2.0.1 + is-string-and-not-blank: 0.0.2 + is-valid-path: 0.1.1 + mac-regex: 1.0.0 + macos-version: 5.2.1 + mailparser: 3.6.5 + memoizee: 0.4.15 + mime-types: 2.1.35 + ms: 2.1.3 + natural: 5.2.4 + newline-remove: 1.0.2 + node-html-parser: 4.1.5 + node-snowball: 0.6.0 + normalize-url: 5.3.1 + parse-domain: 5.0.0 + phone-regex: 2.1.0 + punycode: 2.3.0 + re2: 1.20.3 + sanitize-html: 2.11.0 + stopword: 2.0.8 + striptags: 3.2.0 + superagent: 7.1.6 + trim-leading-whitespace: 0.1.1 + universalify: 2.0.0 + url-regex-safe: 3.0.0_re2@1.20.3 + validator: 13.11.0 + which: 2.0.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /sparkles/1.0.1: + resolution: {integrity: sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==} + engines: {node: '>= 0.10'} + dev: true + + /sparse-bitfield/3.0.3: + resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} + dependencies: + memory-pager: 1.5.0 + dev: false + + /spawn-command-with-kill/1.0.2: + resolution: {integrity: sha512-EPzhF/ZO19xzZ1RCyrNorAal5o5FoZoXqHeybQm4vyfMmNbOU5cvfKQsTuspcBVilL5QDmybYpwkj9/GgaEd8Q==} + dependencies: + ps-tree: 1.2.0 + spawn-command: 0.0.2-1 + dev: true + + /spawn-command/0.0.2-1: + resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} + dev: true + + /spawn-wrap/2.0.0: + resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} + engines: {node: '>=8'} + dependencies: + foreground-child: 2.0.0 + is-windows: 1.0.2 + make-dir: 3.1.0 + rimraf: 3.0.2 + signal-exit: 3.0.7 + which: 2.0.2 + dev: true + + /spdx-correct/3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.16 + + /spdx-exceptions/2.3.0: + resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + + /spdx-expression-parse/3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.3.0 + spdx-license-ids: 3.0.16 + + /spdx-license-ids/3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + + /spdx-license-list/6.7.0: + resolution: {integrity: sha512-NFqavuJxNsHdwSy/0PjmUpcc76XwlmHQRPjVVtE62qmSLhKJUnzSvJCkU9nrY6TsChfGU1xqGePriBkNtNRMiA==} + engines: {node: '>=8'} + + /spdy-transport/3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + dependencies: + debug: 4.3.4 + detect-node: 2.1.0 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 3.6.2 + wbuf: 1.7.3 + transitivePeerDependencies: + - supports-color + dev: false + + /spdy/4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + dependencies: + debug: 4.3.4 + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /speakeasy/2.0.0: + resolution: {integrity: sha512-lW2A2s5LKi8rwu77ewisuUOtlCydF/hmQSOJjpTqTj1gZLkNgTaYnyvfxy2WBr4T/h+9c4g8HIITfj83OkFQFw==} + engines: {node: '>= 0.10.0'} + dependencies: + base32.js: 0.0.1 + dev: false + + /speakingurl/14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + dev: false + + /spinkit/2.0.1: + resolution: {integrity: sha512-oYBGY0GV1H1dX+ZdKnB6JVsYC1w/Xl20H111eb+WSS8nUYmlHgGb4y5buFSkzzceEeYYh5kMhXoAmoTpiQauiA==} + dev: false + + /split-lines/2.1.0: + resolution: {integrity: sha512-8dv+1zKgTpfTkOy8XZLFyWrfxO0NV/bj/3EaQ+hBrBxGv2DwiroljPjU8NlCr+59nLnsVm9WYT7lXKwe4TC6bw==} + engines: {node: '>=6'} + dev: false + + /split-string/3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + dev: true + + /split/0.3.3: + resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} + dependencies: + through: 2.3.8 + dev: true + + /split/1.0.1: + resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} + dependencies: + through: 2.3.8 + dev: false + + /split2/3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + dependencies: + readable-stream: 3.6.2 + dev: true + + /split2/4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + dev: false + + /sprintf-js/1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: true + + /sprintf-js/1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + dev: true + + /squeak/1.3.0: + resolution: {integrity: sha512-YQL1ulInM+ev8nXX7vfXsCsDh6IqXlrremc1hzi77776BtpWgYJUMto3UM05GSAaGzJgWekszjoKDrVNB5XG+A==} + engines: {node: '>=0.10.0'} + dependencies: + chalk: 1.1.3 + console-stream: 0.1.1 + lpad-align: 1.1.2 + dev: true + optional: true + + /srs.js/0.1.0: + resolution: {integrity: sha512-4KAl/FUDqHm4En4cwtNKHSXCztmqkEstGkFs0yofQ5NkC6zK8C3cSuIFmK/aswsCfx+IBlM1uwYFuYE7UT80Rw==} + dev: false + + /sshpk/1.17.0: + resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + dev: false + + /ssri/10.0.5: + resolution: {integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + minipass: 7.0.4 + dev: false + + /ssri/8.0.1: + resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} + engines: {node: '>= 8'} + dependencies: + minipass: 3.3.6 + dev: true + + /ssri/9.0.1: + resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + minipass: 3.3.6 + dev: true + + /stable/0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: true + + /stack-generator/2.0.10: + resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} + dependencies: + stackframe: 1.3.4 + dev: false + + /stack-trace/0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + dev: true + + /stack-utils/2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 2.0.0 + dev: true + + /stackframe/1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + dev: false + + /stacktrace-gps/3.1.2: + resolution: {integrity: sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==} + dependencies: + source-map: 0.5.6 + stackframe: 1.3.4 + dev: false + + /stacktrace-js/2.0.2: + resolution: {integrity: sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==} + dependencies: + error-stack-parser: 2.1.4 + stack-generator: 2.0.10 + stacktrace-gps: 3.1.2 + dev: false + + /standard-as-callback/2.1.0: + resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} + + /starts-with/1.0.2: + resolution: {integrity: sha512-QUw5X+IMTGDm1nrdowEdDaA0MNiUmRlQFwpTTXmhuPKQc+7b0h8fOHtlt1zZqcEK5x1Fsitrobo7KEusc+d1rg==} + dev: true + + /static-extend/0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + dev: true + + /statuses/1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + dev: false + + /statuses/2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false + + /stdout-stream/1.4.1: + resolution: {integrity: sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==} + dependencies: + readable-stream: 2.3.8 + dev: true + + /stopword/1.0.11: + resolution: {integrity: sha512-rMBuk91/PTdV7GpVIwlZRLGcmZ9OMbTM+KXJN19oKIkgns+EhTVEzXfb4q8/v4ExuoGxNSBSHmuzt+DUijuQqQ==} + dev: false + + /stopword/2.0.8: + resolution: {integrity: sha512-btlEC2vEuhCuvshz99hSGsY8GzaP5qzDPQm56j6rR/R38p8xdsOXgU5a6tIgvU/4hcCta1Vlo/2FVXA9m0f8XA==} + dev: false + + /stream-browserify/2.0.2: + resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + dev: true + + /stream-browserify/3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /stream-combiner/0.0.4: + resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} + dependencies: + duplexer: 0.1.2 + dev: true + + /stream-combiner/0.2.2: + resolution: {integrity: sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==} + dependencies: + duplexer: 0.1.2 + through: 2.3.8 + + /stream-combiner2/1.1.1: + resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} + dependencies: + duplexer2: 0.1.4 + readable-stream: 2.3.8 + dev: true + + /stream-events/1.0.5: + resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} + dependencies: + stubs: 3.0.0 + dev: false + + /stream-exhaust/1.0.2: + resolution: {integrity: sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==} + dev: true + + /stream-http/2.8.3: + resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==} + dependencies: + builtin-status-codes: 3.0.0 + inherits: 2.0.4 + readable-stream: 2.3.8 + to-arraybuffer: 1.0.1 + xtend: 4.0.2 + dev: true + + /stream-http/3.2.0: + resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} + dependencies: + builtin-status-codes: 3.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + xtend: 4.0.2 + dev: true + + /stream-shift/1.0.1: + resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} + + /stream-splicer/1.3.2: + resolution: {integrity: sha512-nmUMEbdm/sZYqe9dZs7mqJvTYpunsDbIWI5FiBCMc/hMVd6vwzy+ITmo7C3gcLYqrn+uQ1w+EJwooWvJ997JAA==} + dependencies: + indexof: 0.0.1 + inherits: 2.0.4 + isarray: 0.0.1 + readable-stream: 1.1.14 + readable-wrap: 1.0.0 + through2: 1.1.1 + dev: true + + /stream-splicer/2.0.1: + resolution: {integrity: sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + dev: true + + /stream-transform/3.2.10: + resolution: {integrity: sha512-Yu+x7zcWbWdyB0Td8dFzHt2JEyD6694CNq2lqh1rbuEBVxPtjb/GZ7xDnZcdYiU5E/RtufM54ClSEOzZDeWguA==} + dev: false + + /streamfilter/3.0.0: + resolution: {integrity: sha512-kvKNfXCmUyC8lAXSSHCIXBUlo/lhsLcCU/OmzACZYpRUdtKIH68xYhm/+HI15jFJYtNJGYtCgn2wmIiExY1VwA==} + engines: {node: '>=8.12.0'} + dependencies: + readable-stream: 3.6.2 + dev: true + + /streaming-json-stringify/3.1.0: + resolution: {integrity: sha512-axtfs3BDxAsrZ9swD163FBrXZ8dhJJp6kUI6C97TvUZG9RHKfbg9nFbXqEheFNOb3IYMEt2ag9F62sWLFUZ4ug==} + dependencies: + json-stringify-safe: 5.0.1 + readable-stream: 2.3.8 + dev: false + + /streamsearch/1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: false + + /streamx/2.15.1: + resolution: {integrity: sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==} + dependencies: + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + dev: false + + /strict-uri-encode/1.1.0: + resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} + engines: {node: '>=0.10.0'} + dev: true + + /string-argv/0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + dev: true + + /string-template/0.2.1: + resolution: {integrity: sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==} + dev: true + + /string-width/1.0.2: + resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} + engines: {node: '>=0.10.0'} + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + strip-ansi: 3.0.1 + dev: true + + /string-width/3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} + engines: {node: '>=6'} + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.0 + dev: true + + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + /string-width/5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + /string.prototype.codepointat/0.2.1: + resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} + dev: false + + /string.prototype.matchall/4.0.10: + resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + regexp.prototype.flags: 1.5.1 + set-function-name: 2.0.1 + side-channel: 1.0.4 + dev: true + + /string.prototype.padend/3.1.5: + resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + dev: true + + /string.prototype.trim/1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + dev: true + + /string.prototype.trimend/1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + dev: true + + /string.prototype.trimstart/1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.1 + es-abstract: 1.22.2 + dev: true + + /string_decoder/0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + + /string_decoder/1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + + /stringify-entities/3.1.0: + resolution: {integrity: sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==} + dependencies: + character-entities-html4: 1.1.4 + character-entities-legacy: 1.1.4 + xtend: 4.0.2 + dev: false + + /strip-ansi/3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + dependencies: + ansi-regex: 2.1.1 + + /strip-ansi/5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + dependencies: + ansi-regex: 4.1.1 + dev: true + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-ansi/7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + + /strip-bom-buf/1.0.0: + resolution: {integrity: sha512-1sUIL1jck0T1mhOLP2c696BIznzT525Lkub+n4jjMHjhjhoAQA6Ye659DxdlZBr0aLDMQoTxKIpnlqxgtwjsuQ==} + engines: {node: '>=4'} + dependencies: + is-utf8: 0.2.1 + dev: true + + /strip-bom-stream/2.0.0: + resolution: {integrity: sha512-yH0+mD8oahBZWnY43vxs4pSinn8SMKAdml/EOGBewoe1Y0Eitd0h2Mg3ZRiXruUW6L4P+lvZiEgbh0NgUGia1w==} + engines: {node: '>=0.10.0'} + dependencies: + first-chunk-stream: 2.0.0 + strip-bom: 2.0.0 + dev: true + + /strip-bom-string/1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + dev: true + + /strip-bom/2.0.0: + resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} + engines: {node: '>=0.10.0'} + dependencies: + is-utf8: 0.2.1 + dev: true + + /strip-bom/3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + /strip-bom/4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + dev: true + + /strip-dirs/2.1.0: + resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==} + dependencies: + is-natural-number: 4.0.1 + dev: true + + /strip-eof/1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} + + /strip-final-newline/2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-final-newline/3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /strip-indent/1.0.1: + resolution: {integrity: sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + get-stdin: 4.0.1 + dev: true + + /strip-indent/3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + dependencies: + min-indent: 1.0.1 + dev: true + + /strip-indent/4.0.0: + resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + engines: {node: '>=12'} + dependencies: + min-indent: 1.0.1 + dev: true + + /strip-json-comments/2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + /strip-json-comments/3.1.0: + resolution: {integrity: sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==} + engines: {node: '>=8'} + dev: false + + /strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + /strip-outer/1.0.1: + resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==} + engines: {node: '>=0.10.0'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /stripe/10.17.0: + resolution: {integrity: sha512-JHV2KoL+nMQRXu3m9ervCZZvi4DDCJfzHUE6CmtJxR9TmizyYfrVuhGvnsZLLnheby9Qrnf4Hq6iOEcejGwnGQ==} + engines: {node: ^8.1 || >=10.*} + dependencies: + '@types/node': 20.8.5 + qs: 6.11.2 + dev: false + + /striptags/3.2.0: + resolution: {integrity: sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==} + dev: false + + /strnum/1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + + /strtok3/6.3.0: + resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} + engines: {node: '>=10'} + dependencies: + '@tokenizer/token': 0.3.0 + peek-readable: 4.1.0 + dev: false + + /strtok3/7.0.0: + resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==} + engines: {node: '>=14.16'} + dependencies: + '@tokenizer/token': 0.3.0 + peek-readable: 5.0.0 + dev: true + + /stubs/3.0.0: + resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} + dev: false + + /style-search/0.1.0: + resolution: {integrity: sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==} + dev: true + + /style-to-object/0.3.0: + resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} + dependencies: + inline-style-parser: 0.1.1 + dev: false + + /stylehacks/6.0.0_postcss@8.4.31: + resolution: {integrity: sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.1 + postcss: 8.4.31 + postcss-selector-parser: 6.0.13 + dev: true + + /stylelint-config-recommended-scss/12.0.0_gvnhvhfdmzdb2esu35vebkauaa: + resolution: {integrity: sha512-5Bb2mlGy6WLa30oNeKpZvavv2lowJUsUJO25+OA68GFTemlwd1zbFsL7q0bReKipOSU3sG47hKneZ6Nd+ctrFA==} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^15.5.0 + peerDependenciesMeta: + postcss: + optional: true + dependencies: + postcss: 8.4.31 + postcss-scss: 4.0.9_postcss@8.4.31 + stylelint: 15.10.3 + stylelint-config-recommended: 12.0.0_stylelint@15.10.3 + stylelint-scss: 5.2.1_stylelint@15.10.3 + dev: true + + /stylelint-config-recommended/12.0.0_stylelint@15.10.3: + resolution: {integrity: sha512-x6x8QNARrGO2sG6iURkzqL+Dp+4bJorPMMRNPScdvaUK8PsynriOcMW7AFDKqkWAS5wbue/u8fUT/4ynzcmqdQ==} + peerDependencies: + stylelint: ^15.5.0 + dependencies: + stylelint: 15.10.3 + dev: true + + /stylelint-scss/5.2.1_stylelint@15.10.3: + resolution: {integrity: sha512-ZoTJUM85/qqpQHfEppjW/St//8s6p9Qsg8deWlYlr56F9iUgC9vXeIDQvH4odkRRJLTLFQzYMALSOFCQ3MDkgw==} + peerDependencies: + stylelint: ^14.5.1 || ^15.0.0 + dependencies: + known-css-properties: 0.28.0 + postcss-media-query-parser: 0.2.3 + postcss-resolve-nested-selector: 0.1.1 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + stylelint: 15.10.3 + dev: true + + /stylelint/15.10.3: + resolution: {integrity: sha512-aBQMMxYvFzJJwkmg+BUUg3YfPyeuCuKo2f+LOw7yYbU8AZMblibwzp9OV4srHVeQldxvSFdz0/Xu8blq2AesiA==} + engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true + dependencies: + '@csstools/css-parser-algorithms': 2.3.2_qabfbasg4cggam7o7issvon7wi + '@csstools/css-tokenizer': 2.2.1 + '@csstools/media-query-list-parser': 2.1.5_vhcwb4dquzanhfkhxuqink5gke + '@csstools/selector-specificity': 3.0.0_c3vcbepomgmxc74cgtawpgpkyi + balanced-match: 2.0.0 + colord: 2.9.3 + cosmiconfig: 8.3.6 + css-functions-list: 3.2.0 + css-tree: 2.3.1 + debug: 4.3.4 + fast-glob: 3.3.1 + fastest-levenshtein: 1.0.16 + file-entry-cache: 6.0.1 + global-modules: 2.0.0 + globby: 11.1.0 + globjoin: 0.1.4 + html-tags: 3.3.1 + ignore: 5.2.4 + import-lazy: 4.0.0 + imurmurhash: 0.1.4 + is-plain-object: 5.0.0 + known-css-properties: 0.28.0 + mathml-tag-names: 2.1.3 + meow: 10.1.5 + micromatch: 4.0.5 + normalize-path: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.31 + postcss-resolve-nested-selector: 0.1.1 + postcss-safe-parser: 6.0.0_postcss@8.4.31 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + resolve-from: 5.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + style-search: 0.1.0 + supports-hyperlinks: 3.0.0 + svg-tags: 1.0.0 + table: 6.8.1 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /subarg/1.0.0: + resolution: {integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==} + dependencies: + minimist: 1.2.8 + dev: true + + /superagent/7.1.6: + resolution: {integrity: sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g==} + engines: {node: '>=6.4.0 <13 || >=14'} + deprecated: Please downgrade to v7.1.5 if you need IE/ActiveXObject support OR upgrade to v8.0.0 as we no longer support IE and published an incorrect patch version (see https://github.com/visionmedia/superagent/issues/1731) + dependencies: + component-emitter: 1.3.0 + cookiejar: 2.1.4 + debug: 4.3.4 + fast-safe-stringify: 2.1.1 + form-data: 4.0.0 + formidable: 2.1.2 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.11.2 + readable-stream: 3.6.2 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: false + + /superagent/8.1.2: + resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==} + engines: {node: '>=6.4.0 <13 || >=14'} + dependencies: + component-emitter: 1.3.0 + cookiejar: 2.1.4 + debug: 4.3.4 + fast-safe-stringify: 2.1.1 + form-data: 4.0.0 + formidable: 2.1.2 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.11.2 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + + /supertap/3.0.1: + resolution: {integrity: sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + indent-string: 5.0.0 + js-yaml: 3.14.1 + serialize-error: 7.0.1 + strip-ansi: 7.1.0 + dev: true + + /supertest/6.3.3: + resolution: {integrity: sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==} + engines: {node: '>=6.4.0'} + dependencies: + methods: 1.1.2 + superagent: 8.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /supports-color/2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + + /supports-color/3.2.3: + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} + engines: {node: '>=0.8.0'} + dependencies: + has-flag: 1.0.0 + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + + /supports-color/6.1.0: + resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==} + engines: {node: '>=6'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + + /supports-color/9.4.0: + resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} + engines: {node: '>=12'} + dev: true + + /supports-hyperlinks/2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: true + + /supports-hyperlinks/3.0.0: + resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==} + engines: {node: '>=14.18'} + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + dev: true + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + /sver-compat/1.5.0: + resolution: {integrity: sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==} + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.3 + dev: true + + /svg-tags/1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + dev: true + + /svg.draggable.js/2.2.2: + resolution: {integrity: sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.easing.js/2.0.0: + resolution: {integrity: sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.filter.js/2.0.2: + resolution: {integrity: sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.js/2.7.1: + resolution: {integrity: sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==} + dev: false + + /svg.pathmorphing.js/0.1.3: + resolution: {integrity: sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.resize.js/1.4.3: + resolution: {integrity: sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + svg.select.js: 2.1.2 + dev: false + + /svg.select.js/2.1.2: + resolution: {integrity: sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.select.js/3.0.1: + resolution: {integrity: sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svgo/1.3.2: + resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} + engines: {node: '>=4.0.0'} + deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. + hasBin: true + dependencies: + chalk: 2.4.2 + coa: 2.0.2 + css-select: 2.1.0 + css-select-base-adapter: 0.1.1 + css-tree: 1.0.0-alpha.37 + csso: 4.2.0 + js-yaml: 3.14.1 + mkdirp: 0.5.6 + object.values: 1.1.7 + sax: 1.2.4 + stable: 0.1.8 + unquote: 1.1.1 + util.promisify: 1.0.1 + dev: true + optional: true + + /svgo/3.0.2: + resolution: {integrity: sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.1.0 + css-tree: 2.3.1 + csso: 5.0.5 + picocolors: 1.0.0 + dev: true + + /sweetalert2/8.19.0: + resolution: {integrity: sha512-nFL++N3bitkEkd487Tv4i5ZxusmnoAAXHjtk7lp603Opxb8wlvVnz3hqa7qiIw6QFL04JC810E6qVQNf8s0vYQ==} + dev: false + + /sweetalert2/8.19.1: + resolution: {integrity: sha512-EOeDLj31k1X948R6B8sMG5EhU3egbMRBNZs/cog0egIdLZ6E0R0elZrcbwiGhV50IPHO39vDUNCRmzxqwJhRag==} + dev: false + + /sylvester/0.0.12: + resolution: {integrity: sha512-SzRP5LQ6Ts2G5NyAa/jg16s8e3R7rfdFjizy1zeoecYWw+nGL+YA1xZvW/+iJmidBGSdLkuvdwTYEyJEb+EiUw==} + engines: {node: '>=0.2.6'} + dev: false + + /symbol-tree/3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: false + + /syntax-error/1.4.0: + resolution: {integrity: sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==} + dependencies: + acorn-node: 1.8.2 + dev: true + + /table/5.4.6: + resolution: {integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==} + engines: {node: '>=6.0.0'} + dependencies: + ajv: 6.12.6 + lodash: 4.17.21 + slice-ansi: 2.1.0 + string-width: 3.1.0 + dev: true + + /table/6.8.1: + resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} + engines: {node: '>=10.0.0'} + dependencies: + ajv: 8.12.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /tangerine/1.5.4_undici@5.26.3: + resolution: {integrity: sha512-LwEkY4hrW3Aax6DXKHHc7MNHcHNp997I6w5R3gIeNnIIm+dNy6GLMewEgkaZ70R4sp2w/IahGYqEuN6GUq5bOw==} + engines: {node: '>=16'} + peerDependencies: + undici: '*' + peerDependenciesMeta: + undici: + optional: true + dependencies: + '@ungap/structured-clone': 1.2.0 + auto-bind: 4.0.0 + dns-packet: 5.6.1 + dohdec: 5.0.3 + get-stream: 6.0.1 + hostile: 1.3.3 + ipaddr.js: 2.1.0 + merge-options: 3.0.4 + p-map: 4.0.0 + p-timeout: 4.1.0 + p-wait-for: 3.2.0 + port-numbers: 6.0.1 + private-ip: 3.0.1 + punycode: 2.3.0 + semver: 7.5.4 + undici: 5.26.3 + dev: false + + /tapable/0.1.10: + resolution: {integrity: sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==} + engines: {node: '>=0.6'} + dev: true + + /tar-fs/2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: false + + /tar-fs/3.0.4: + resolution: {integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==} + dependencies: + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 3.1.6 + dev: false + + /tar-stream/1.6.2: + resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} + engines: {node: '>= 0.8.0'} + dependencies: + bl: 1.2.3 + buffer-alloc: 1.2.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + readable-stream: 2.3.8 + to-buffer: 1.1.1 + xtend: 4.0.2 + dev: true + + /tar-stream/2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + + /tar-stream/3.1.6: + resolution: {integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==} + dependencies: + b4a: 1.6.4 + fast-fifo: 1.3.2 + streamx: 2.15.1 + dev: false + + /tar/6.2.0: + resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + engines: {node: '>=10'} + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + /tdigest/0.1.2: + resolution: {integrity: sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==} + dependencies: + bintrees: 1.0.2 + dev: false + + /teeny-request/8.0.3: + resolution: {integrity: sha512-jJZpA5He2y52yUhA7pyAGZlgQpcB+xLjcN0eUFxr9c8hP/H7uOXbBNVo/O0C/xVfJLJs680jvkFgVJEEvk9+ww==} + engines: {node: '>=12'} + dependencies: + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + node-fetch: 2.7.0 + stream-events: 1.0.5 + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /temp-dir/1.0.0: + resolution: {integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==} + engines: {node: '>=4'} + dev: true + + /temp-dir/3.0.0: + resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} + engines: {node: '>=14.16'} + dev: true + + /temp-write/2.1.0: + resolution: {integrity: sha512-/Du/JQStxYULERoqLIBzuGhNHQtmNmuxoSmv/Le2AStskf4TFQ/GGMvGXCMPEcbVFnkaO6jy3jhxaoH4CEI62w==} + engines: {node: '>=0.10.0'} + dependencies: + graceful-fs: 4.2.11 + mkdirp: 0.5.6 + os-tmpdir: 1.0.2 + pify: 2.3.0 + pinkie-promise: 2.0.1 + uuid: 2.0.3 + dev: true + + /tempfile/2.0.0: + resolution: {integrity: sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==} + engines: {node: '>=4'} + dependencies: + temp-dir: 1.0.0 + uuid: 3.4.0 + dev: true + + /term-size/2.2.1: + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + engines: {node: '>=8'} + dev: true + + /terser/5.21.0: + resolution: {integrity: sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.5 + acorn: 8.10.0 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: true + + /test-exclude/6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: true + + /text-extensions/1.9.0: + resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} + engines: {node: '>=0.10'} + dev: true + + /text-table/0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /text-to-svg/3.1.5: + resolution: {integrity: sha512-mbeGhMz9MAFaGaZGE8n4Mh/iQV/UkVnYJXhXFrv0eWkcNTgflhpHR2a8nr2ci3NU4FekIHJYKh0N0qdc6yUpfA==} + hasBin: true + dependencies: + commander: 2.20.3 + opentype.js: 0.11.0 + dev: false + + /textextensions/3.3.0: + resolution: {integrity: sha512-mk82dS8eRABNbeVJrEiN5/UMSCliINAuz8mkUwH4SwslkNP//gbEzlWNS5au0z5Dpx40SQxzqZevZkn+WYJ9Dw==} + engines: {node: '>=8'} + dev: false + + /thenby/1.3.4: + resolution: {integrity: sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==} + dev: true + + /thenify-all/1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + dependencies: + thenify: 3.3.1 + dev: false + + /thenify/3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + dependencies: + any-promise: 1.3.0 + dev: false + + /thirty-two/1.0.2: + resolution: {integrity: sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==} + engines: {node: '>=0.2.6'} + dev: false + + /thread-stream/2.4.1: + resolution: {integrity: sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==} + dependencies: + real-require: 0.2.0 + dev: false + + /through/2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + /through2-concurrent/2.0.0: + resolution: {integrity: sha512-R5/jLkfMvdmDD+seLwN7vB+mhbqzWop5fAjx5IX8/yQq7VhBhzDmhXgaHAOnhnWkCpRMM7gToYHycB0CS/pd+A==} + dependencies: + through2: 2.0.5 + dev: true + + /through2-filter/3.0.0: + resolution: {integrity: sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==} + dependencies: + through2: 2.0.5 + xtend: 4.0.2 + dev: true + + /through2/0.4.2: + resolution: {integrity: sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==} + dependencies: + readable-stream: 1.0.34 + xtend: 2.1.2 + dev: false + + /through2/0.5.1: + resolution: {integrity: sha512-zexCrAOTbjkBCXGyozn7hhS3aEaqdrc59mAD2E3dKYzV1vFuEGQ1hEDJN2oQMQFwy4he2zyLqPZV+AlfS8ZWJA==} + dependencies: + readable-stream: 1.0.34 + xtend: 3.0.0 + dev: true + + /through2/1.1.1: + resolution: {integrity: sha512-zEbpaeSMHxczpTzO1KkMHjBC1enTA68ojeaZGG4toqdASpb9t4xUZaYFBq2/9OHo5nTGFVSYd4c910OR+6wxbQ==} + dependencies: + readable-stream: 1.1.14 + xtend: 4.0.2 + dev: true + + /through2/2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + dev: true + + /through2/3.0.2: + resolution: {integrity: sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + + /through2/4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + dependencies: + readable-stream: 3.6.2 + dev: true + + /time-stamp/1.1.0: + resolution: {integrity: sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==} + engines: {node: '>=0.10.0'} + dev: true + + /time-zone/1.0.0: + resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} + engines: {node: '>=4'} + dev: true + + /timed-out/4.0.1: + resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} + engines: {node: '>=0.10.0'} + dev: true + + /timers-browserify/1.4.2: + resolution: {integrity: sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q==} + engines: {node: '>=0.6.0'} + dependencies: + process: 0.11.10 + dev: true + + /timers-browserify/2.0.12: + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} + engines: {node: '>=0.6.0'} + dependencies: + setimmediate: 1.0.5 + dev: true + + /timers-ext/0.1.7: + resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} + dependencies: + es5-ext: 0.10.62 + next-tick: 1.1.0 + + /tiny-emitter/2.1.0: + resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==} + dev: false + + /tiny-inflate/1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + dev: false + + /tiny-lr/1.1.1: + resolution: {integrity: sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==} + dependencies: + body: 5.1.0 + debug: 3.2.7 + faye-websocket: 0.10.0 + livereload-js: 2.4.0 + object-assign: 4.1.1 + qs: 6.11.2 + transitivePeerDependencies: + - supports-color + dev: true + + /titleize/2.1.0: + resolution: {integrity: sha512-m+apkYlfiQTKLW+sI4vqUkwMEzfgEUEYSqljx1voUE3Wz/z1ZsxyzSxvH2X8uKVrOp7QkByWt0rA6+gvhCKy6g==} + engines: {node: '>=6'} + dev: false + + /tlds/1.240.0: + resolution: {integrity: sha512-1OYJQenswGZSOdRw7Bql5Qu7uf75b+F3HFBXbqnG/ifHa0fev1XcG+3pJf3pA/KC6RtHQzfKgIf1vkMlMG7mtQ==} + hasBin: true + dev: false + + /tlds/1.242.0: + resolution: {integrity: sha512-aP3dXawgmbfU94mA32CJGHmJUE1E58HCB1KmlKRhBNtqBL27mSQcAEmcaMaQ1Za9kIVvOdbxJD3U5ycDy7nJ3w==} + hasBin: true + dev: false + + /tldts-core/6.0.16: + resolution: {integrity: sha512-/ypKV6FdiDpXnVEUmPy9s5xfoSAyNPvj1r6V/3FqQBWi0ay3asObLX4Hn8eLwkHB0+VEr2bneu3CnX4uT3fO0w==} + dev: false + + /tldts/6.0.16: + resolution: {integrity: sha512-TkEq38COU640mzOKPk4D1oH3FFVvwEtMaKIfw/+F/umVsy7ONWu8PPQH0c11qJ/Jq/zbcQGprXGsT8GcaDSmJg==} + hasBin: true + dependencies: + tldts-core: 6.0.16 + dev: false + + /tmp/0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + dependencies: + os-tmpdir: 1.0.2 + dev: true + + /tmp/0.2.1: + resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} + engines: {node: '>=8.17.0'} + dependencies: + rimraf: 3.0.2 + dev: false + + /to-absolute-glob/2.0.2: + resolution: {integrity: sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==} + engines: {node: '>=0.10.0'} + dependencies: + is-absolute: 1.0.0 + is-negated-glob: 1.0.0 + dev: true + + /to-arraybuffer/1.0.1: + resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==} + dev: true + + /to-buffer/1.1.1: + resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} + dev: true + + /to-fast-properties/1.0.3: + resolution: {integrity: sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==} + engines: {node: '>=0.10.0'} + dev: true + + /to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + /to-object-path/0.3.0: + resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /to-readable-stream/1.0.0: + resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} + engines: {node: '>=6'} + dev: true + + /to-regex-range/2.1.1: + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + repeat-string: 1.6.1 + dev: true + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /to-regex/3.0.2: + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 2.0.2 + extend-shallow: 3.0.2 + regex-not: 1.0.2 + safe-regex: 1.1.0 + dev: true + + /to-through/2.0.0: + resolution: {integrity: sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==} + engines: {node: '>= 0.10'} + dependencies: + through2: 2.0.5 + dev: true + + /to-utf8/0.0.1: + resolution: {integrity: sha512-zks18/TWT1iHO3v0vFp5qLKOG27m67ycq/Y7a7cTiRuUNlc4gf3HGnkRgMv0NyhnfTamtkYBJl+YeD1/j07gBQ==} + dev: false + + /to-vfile/6.1.0: + resolution: {integrity: sha512-BxX8EkCxOAZe+D/ToHdDsJcVI4HqQfmw0tCkp31zf3dNP/XWIAjU4CmeuSwsSoOzOTqHPOL0KUzyZqJplkD0Qw==} + dependencies: + is-buffer: 2.0.5 + vfile: 4.2.1 + + /to-vfile/7.2.4: + resolution: {integrity: sha512-2eQ+rJ2qGbyw3senPI0qjuM7aut8IYXK6AEoOWb+fJx/mQYzviTckm1wDjq91QYHAPBTYzmdJXxMFA6Mk14mdw==} + dependencies: + is-buffer: 2.0.5 + vfile: 5.3.7 + dev: true + + /toidentifier/1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false + + /token-stream/1.0.0: + resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==} + dev: false + + /token-types/4.2.1: + resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} + engines: {node: '>=10'} + dependencies: + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + dev: false + + /token-types/5.0.1: + resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} + engines: {node: '>=14.16'} + dependencies: + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + dev: true + + /toml/3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + dev: false + + /toposort/2.0.2: + resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} + dev: false + + /touch/3.1.0: + resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} + hasBin: true + dependencies: + nopt: 1.0.10 + dev: true + + /tough-cookie/2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} + dependencies: + psl: 1.9.0 + punycode: 2.3.0 + dev: false + + /tough-cookie/4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + engines: {node: '>=6'} + dependencies: + psl: 1.9.0 + punycode: 2.3.0 + universalify: 0.2.0 + url-parse: 1.5.10 + dev: false + + /tr46/0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: false + + /tr46/2.1.0: + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} + dependencies: + punycode: 2.3.0 + dev: false + + /tr46/3.0.0: + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} + dependencies: + punycode: 2.3.0 + dev: false + + /tree-kill/1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true + + /trigram-utils/1.0.3: + resolution: {integrity: sha512-UAhS1Ll21FtClVIzIN0I/SmGnJ+D08BOxX7Dl1penV8raC0ksf2dJkhNI6kU1Mj3uT86Bul12iMvxXquXSYSng==} + dependencies: + collapse-white-space: 1.0.6 + n-gram: 1.1.2 + trim: 0.0.1 + dev: false + + /trim-leading-whitespace/0.1.1: + resolution: {integrity: sha512-5E1J8nXFB7ObsCRMAmfcJftZQCUPY/xR85dW+tTM7yb061M7S4oZx+RA6dR1SxrXojL1nyjhkTNiE1ge6UqLzQ==} + dependencies: + through2: 0.4.2 + dev: false + + /trim-newlines/1.0.0: + resolution: {integrity: sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==} + engines: {node: '>=0.10.0'} + dev: true + + /trim-newlines/3.0.1: + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + engines: {node: '>=8'} + dev: true + + /trim-newlines/4.1.1: + resolution: {integrity: sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==} + engines: {node: '>=12'} + dev: true + + /trim-repeated/1.0.0: + resolution: {integrity: sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==} + engines: {node: '>=0.10.0'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /trim/0.0.1: + resolution: {integrity: sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==} + dev: false + + /trough/1.0.5: + resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} + + /trough/2.1.0: + resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} + dev: true + + /true-case-path/2.2.1: + resolution: {integrity: sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==} + dev: true + + /ts-mdast/1.0.0: + resolution: {integrity: sha512-FmT5GbMU629/ty64741v7TdO8jm5xW09okr2VNExkLuRk5ngjKIDdn/woTB8lDtcgCMRS8lUNubImen0MkdF6g==} + engines: {node: '>=10.0.0'} + dependencies: + '@types/mdast': 3.0.13 + '@types/unist': 2.0.8 + dev: false + + /ts-node/10.9.1_v6somhgbdgtqfeo32plv4xl6zq: + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.5.1 + acorn: 8.10.0 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.2.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /tsconfig-paths/3.14.2: + resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + /tslib/2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false + + /tsscmp/1.0.6: + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} + engines: {node: '>=0.6.x'} + dev: false + + /tsse/1.1.6: + resolution: {integrity: sha512-DxL05+CPR7NwsmFWLEe/lRvTH2zo0//7rlYLPCUlDWE+4XEfMXhObJh+mm5vwA9pXBGSzmmnT9zCl596XKCtfA==} + engines: {node: '>=4'} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /tsutils/3.21.0_typescript@3.9.10: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 3.9.10 + dev: true + + /tsutils/3.21.0_typescript@4.9.5: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.9.5 + dev: true + + /tty-browserify/0.0.0: + resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==} + dev: true + + /tty-browserify/0.0.1: + resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} + dev: true + + /tunnel-agent/0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + dependencies: + safe-buffer: 5.2.1 + + /tweetnacl/0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + dev: false + + /tweetnacl/1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + dev: false + + /twilio/4.18.1: + resolution: {integrity: sha512-cz9jfz7uGCYBIkJ+WYrLhffQnOk+oluLBTdCTHQEG6TI4agSWWA4WaYVBV5ImoICrTbY0vNmThw8pmgWfYdAiw==} + engines: {node: '>=14.0'} + dependencies: + axios: 0.26.1 + dayjs: 1.11.10 + https-proxy-agent: 5.0.1 + jsonwebtoken: 9.0.2 + qs: 6.11.2 + scmp: 2.1.0 + url-parse: 1.5.10 + xmlbuilder: 13.0.2 + transitivePeerDependencies: + - debug + - supports-color + dev: false + + /type-check/0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + + /type-check/0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-detect/4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + + /type-fest/0.11.0: + resolution: {integrity: sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==} + engines: {node: '>=8'} + dev: true + + /type-fest/0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + dev: true + + /type-fest/0.18.1: + resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} + engines: {node: '>=10'} + dev: true + + /type-fest/0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-fest/0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + + /type-fest/0.4.1: + resolution: {integrity: sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==} + engines: {node: '>=6'} + dev: true + + /type-fest/0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + /type-fest/0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + /type-fest/1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + /type-fest/2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + dev: true + + /type-fest/3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + dev: true + + /type-is/1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + dev: false + + /type/1.2.0: + resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} + + /type/2.7.2: + resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + + /typed-array-buffer/1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-length/1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-byte-offset/1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + dev: true + + /typed-array-length/1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.12 + dev: true + + /typedarray-to-buffer/3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + dependencies: + is-typedarray: 1.0.0 + dev: true + + /typedarray/0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: true + + /typescript/3.9.10: + resolution: {integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /typescript/4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + dev: true + + /typescript/5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /typpy/2.3.11: + resolution: {integrity: sha512-Jh/fykZSaxeKO0ceMAs6agki9T5TNA9kiIR6fzKbvafKpIw8UlNlHhzuqKyi5lfJJ5VojJOx9tooIbyy7vHV/g==} + dependencies: + function.name: 1.0.13 + dev: false + + /uc.micro/1.0.6: + resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + dev: false + + /uglify-js/3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + dev: false + + /uid-safe/2.1.5: + resolution: {integrity: sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==} + engines: {node: '>= 0.8'} + dependencies: + random-bytes: 1.0.0 + dev: false + + /uid2/0.0.4: + resolution: {integrity: sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==} + dev: false + + /uid2/1.0.0: + resolution: {integrity: sha512-+I6aJUv63YAcY9n4mQreLUt0d4lvwkkopDNmpomkAUz0fAkEMV9pRWxN0EjhW1YfRhcuyHg2v3mwddCDW1+LFQ==} + engines: {node: '>= 4.0.0'} + dev: false + + /umd/3.0.3: + resolution: {integrity: sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==} + hasBin: true + dev: true + + /unassert/2.0.2: + resolution: {integrity: sha512-P6OOg/aRdQmWH+b0g+T4U+9MgL+DG7w6oQPG+N3F2IMuvvd1WfZ5alT/Rjik2lMFVyhfACUxF7PGP1VCwSHlQA==} + dependencies: + estraverse: 5.3.0 + dev: true + + /unbox-primitive/1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /unbzip2-stream/1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + dependencies: + buffer: 5.7.1 + through: 2.3.8 + dev: true + + /unc-path-regex/0.1.2: + resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} + engines: {node: '>=0.10.0'} + dev: true + + /uncaught/0.0.5: + resolution: {integrity: sha512-n+zX0nG31heVfnuQ2MCh2dcz8E5N2YwJrt2Ax1B/jwNs9u5ClRUx5qDc2WvLOBxAznY0+9apwXyjHsCQkHQ6dg==} + dev: false + + /undeclared-identifiers/1.1.3: + resolution: {integrity: sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==} + hasBin: true + dependencies: + acorn-node: 1.8.2 + dash-ast: 1.0.0 + get-assigned-identifiers: 1.2.0 + simple-concat: 1.0.1 + xtend: 4.0.2 + dev: true + + /undefsafe/2.0.5: + resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + dev: true + + /underscore.deep/0.5.3_underscore@1.13.6: + resolution: {integrity: sha512-4OuSOlFNkiVFVc3khkeG112Pdu1gbitMj7t9B9ENb61uFmN70Jq7Iluhi3oflcSgexkKfDdJ5XAJET2gEq6ikA==} + engines: {node: '>=0.10.x'} + peerDependencies: + underscore: 1.x + dependencies: + underscore: 1.13.6 + dev: false + + /underscore/1.13.6: + resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==} + dev: false + + /undertaker-registry/1.0.1: + resolution: {integrity: sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==} + engines: {node: '>= 0.10'} + dev: true + + /undertaker/1.3.0: + resolution: {integrity: sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==} + engines: {node: '>= 0.10'} + dependencies: + arr-flatten: 1.1.0 + arr-map: 2.0.2 + bach: 1.2.0 + collection-map: 1.0.0 + es6-weak-map: 2.0.3 + fast-levenshtein: 1.1.4 + last-run: 1.1.1 + object.defaults: 1.1.0 + object.reduce: 1.0.1 + undertaker-registry: 1.0.1 + dev: true + + /undici-types/5.25.3: + resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==} + + /undici/5.23.0: + resolution: {integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==} + engines: {node: '>=14.0'} + dependencies: + busboy: 1.6.0 + dev: false + + /undici/5.25.4: + resolution: {integrity: sha512-450yJxT29qKMf3aoudzFpIciqpx6Pji3hEWaXqXmanbXF58LTAGCKxcJjxMXWu3iG+Mudgo3ZUfDB6YDFd/dAw==} + engines: {node: '>=14.0'} + dependencies: + '@fastify/busboy': 2.0.0 + dev: false + + /undici/5.26.3: + resolution: {integrity: sha512-H7n2zmKEWgOllKkIUkLvFmsJQj062lSm3uA4EYApG8gLuiOM0/go9bIoC3HVaSnfg4xunowDE2i9p8drkXuvDw==} + engines: {node: '>=14.0'} + dependencies: + '@fastify/busboy': 2.0.0 + dev: false + + /unherit/1.1.3: + resolution: {integrity: sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==} + dependencies: + inherits: 2.0.4 + xtend: 4.0.2 + + /unicode-canonical-property-names-ecmascript/2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: true + + /unicode-match-property-ecmascript/2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: true + + /unicode-match-property-value-ecmascript/2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + dev: true + + /unicode-property-aliases-ecmascript/2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: true + + /unified-args/10.0.0: + resolution: {integrity: sha512-PqsqxwkXpGSLiMkbjNnKU33Ffm6gso6rAvz1TlBGzMBx3gpx7ewIhViBX8HEWmy0v7pebA5PM6RkRWWaYmtfYw==} + dependencies: + '@types/text-table': 0.2.3 + camelcase: 7.0.1 + chalk: 5.3.0 + chokidar: 3.5.3 + fault: 2.0.1 + json5: 2.2.3 + minimist: 1.2.8 + text-table: 0.2.0 + unified-engine: 10.1.0 + transitivePeerDependencies: + - supports-color + dev: true + + /unified-engine-gulp/8.2.0: + resolution: {integrity: sha512-cM3Wzb125KhR2qFIF8iE4v04j7IolH1UJFTB2T8k3xp1AFrvkPFFD+OTXHfmudscMcaGfFdZYCGXqqSXACYjaw==} + dependencies: + convert-vinyl-to-vfile: 3.0.0 + plugin-error: 1.0.1 + through2: 3.0.2 + unified-engine: 8.2.0 + vinyl: 2.2.1 + transitivePeerDependencies: + - supports-color + dev: true + + /unified-engine/10.1.0: + resolution: {integrity: sha512-5+JDIs4hqKfHnJcVCxTid1yBoI/++FfF/1PFdSMpaftZZZY+qg2JFruRbf7PaIwa9KgLotXQV3gSjtY0IdcFGQ==} + dependencies: + '@types/concat-stream': 2.0.0 + '@types/debug': 4.1.9 + '@types/is-empty': 1.2.1 + '@types/node': 18.18.5 + '@types/unist': 2.0.8 + concat-stream: 2.0.0 + debug: 4.3.4 + fault: 2.0.1 + glob: 8.1.0 + ignore: 5.2.4 + is-buffer: 2.0.5 + is-empty: 1.2.0 + is-plain-obj: 4.1.0 + load-plugin: 5.1.0 + parse-json: 6.0.2 + to-vfile: 7.2.4 + trough: 2.1.0 + unist-util-inspect: 7.0.2 + vfile-message: 3.1.4 + vfile-reporter: 7.0.5 + vfile-statistics: 2.0.1 + yaml: 2.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + /unified-engine/8.2.0: + resolution: {integrity: sha512-ZlMm62ejrf+tJHdyOjQfljszngQjRor95q2XZMGk6rpJUYi7ZIHY/EXEhOcj9PZkMKKdLIM+dqL4s0ceyk9wbA==} + dependencies: + concat-stream: 2.0.0 + debug: 4.3.4 + fault: 1.0.4 + figures: 3.2.0 + glob: 7.2.3 + ignore: 5.2.4 + is-buffer: 2.0.5 + is-empty: 1.2.0 + is-plain-obj: 2.1.0 + js-yaml: 3.14.1 + load-plugin: 3.0.0 + parse-json: 5.2.0 + to-vfile: 6.1.0 + trough: 1.0.5 + unist-util-inspect: 5.0.1 + vfile-reporter: 6.0.2 + vfile-statistics: 1.1.4 + transitivePeerDependencies: + - supports-color + dev: true + + /unified-lint-rule/1.0.6: + resolution: {integrity: sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==} + dependencies: + wrapped: 1.0.1 + + /unified-message-control/3.0.3: + resolution: {integrity: sha512-oY5z2n8ugjpNHXOmcgrw0pQeJzavHS0VjPBP21tOcm7rc2C+5Q+kW9j5+gqtf8vfW/8sabbsK5+P+9QPwwEHDA==} + dependencies: + unist-util-visit: 2.0.3 + vfile-location: 3.2.0 + + /unified/10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + dependencies: + '@types/unist': 2.0.8 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.1.0 + trough: 2.1.0 + vfile: 5.3.7 + dev: true + + /unified/9.2.1: + resolution: {integrity: sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==} + dependencies: + '@types/unist': 2.0.8 + bail: 1.0.5 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 2.1.0 + trough: 1.0.5 + vfile: 4.2.1 + dev: false + + /unified/9.2.2: + resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==} + dependencies: + '@types/unist': 2.0.8 + bail: 1.0.5 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 2.1.0 + trough: 1.0.5 + vfile: 4.2.1 + + /union-value/1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + dev: true + + /unique-filename/1.1.1: + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} + dependencies: + unique-slug: 2.0.2 + dev: true + + /unique-filename/2.0.1: + resolution: {integrity: sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + unique-slug: 3.0.0 + dev: true + + /unique-filename/3.0.0: + resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + unique-slug: 4.0.0 + dev: false + + /unique-slug/2.0.2: + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} + dependencies: + imurmurhash: 0.1.4 + dev: true + + /unique-slug/3.0.0: + resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + imurmurhash: 0.1.4 + dev: true + + /unique-slug/4.0.0: + resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + imurmurhash: 0.1.4 + dev: false + + /unique-stream/2.3.1: + resolution: {integrity: sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==} + dependencies: + json-stable-stringify-without-jsonify: 1.0.1 + through2-filter: 3.0.0 + dev: true + + /unique-string/2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + dependencies: + crypto-random-string: 2.0.0 + dev: true + + /unist-builder/1.0.4: + resolution: {integrity: sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg==} + dependencies: + object-assign: 4.1.1 + + /unist-builder/2.0.3: + resolution: {integrity: sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==} + dev: false + + /unist-util-find-after/2.0.4: + resolution: {integrity: sha512-zo0ShIr+E/aU9xSK7JC9Kb+WP9seTFCuqVYdo5+HJSjN009XMfhiA1FIExEKzdDP1UsgvKGleGlB/pSdTSqZww==} + dependencies: + unist-util-is: 3.0.0 + + /unist-util-generated/1.1.6: + resolution: {integrity: sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==} + + /unist-util-inspect/5.0.1: + resolution: {integrity: sha512-fPNWewS593JSmg49HbnE86BJKuBi1/nMWhDSccBvbARfxezEuJV85EaARR9/VplveiwCoLm2kWq+DhP8TBaDpw==} + dependencies: + is-empty: 1.2.0 + dev: true + + /unist-util-inspect/7.0.2: + resolution: {integrity: sha512-Op0XnmHUl6C2zo/yJCwhXQSm/SmW22eDZdWP2qdf4WpGrgO1ZxFodq+5zFyeRGasFjJotAnLgfuD1jkcKqiH1Q==} + dependencies: + '@types/unist': 2.0.8 + dev: true + + /unist-util-is/3.0.0: + resolution: {integrity: sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==} + + /unist-util-is/4.1.0: + resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} + + /unist-util-is/5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + dependencies: + '@types/unist': 2.0.8 + dev: true + + /unist-util-modify-children/2.0.0: + resolution: {integrity: sha512-HGrj7JQo9DwZt8XFsX8UD4gGqOsIlCih9opG6Y+N11XqkBGKzHo8cvDi+MfQQgiZ7zXRUiQREYHhjOBHERTMdg==} + dependencies: + array-iterate: 1.1.4 + + /unist-util-position/3.1.0: + resolution: {integrity: sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==} + + /unist-util-stringify-position/2.0.3: + resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} + dependencies: + '@types/unist': 2.0.8 + + /unist-util-stringify-position/3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + dependencies: + '@types/unist': 2.0.8 + dev: true + + /unist-util-visit-children/1.1.4: + resolution: {integrity: sha512-sA/nXwYRCQVRwZU2/tQWUqJ9JSFM1X3x7JIOsIgSzrFHcfVt6NkzDtKzyxg2cZWkCwGF9CO8x4QNZRJRMK8FeQ==} + + /unist-util-visit-parents/2.1.2: + resolution: {integrity: sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==} + dependencies: + unist-util-is: 3.0.0 + + /unist-util-visit-parents/3.1.1: + resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} + dependencies: + '@types/unist': 2.0.8 + unist-util-is: 4.1.0 + + /unist-util-visit-parents/5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + dependencies: + '@types/unist': 2.0.8 + unist-util-is: 5.2.1 + dev: true + + /unist-util-visit/1.4.1: + resolution: {integrity: sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==} + dependencies: + unist-util-visit-parents: 2.1.2 + + /unist-util-visit/2.0.3: + resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} + dependencies: + '@types/unist': 2.0.8 + unist-util-is: 4.1.0 + unist-util-visit-parents: 3.1.1 + + /unist-util-visit/4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + dependencies: + '@types/unist': 2.0.8 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + dev: true + + /universal-user-agent/6.0.0: + resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==} + dev: false + + /universalify/0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + dev: false + + /universalify/2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + + /unix-crypt-td-js/1.1.4: + resolution: {integrity: sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==} + dev: false + + /unixcrypt/1.2.0: + resolution: {integrity: sha512-RgTalpk7sWhnYJu7TKS8k2tmBNkMTghUnvv5VvsKbAy8wjdqvFWnyDs/vx8BdPnX8CZwdwIGMS3q0YmwGTG7HA==} + engines: {node: '>=14.0.0'} + dev: false + + /unpipe/1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: false + + /unquote/1.1.1: + resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==} + dev: true + optional: true + + /unset-value/1.0.0: + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} + engines: {node: '>=0.10.0'} + dependencies: + has-value: 0.3.1 + isobject: 3.0.1 + dev: true + + /unset-value/2.0.1: + resolution: {integrity: sha512-2hvrBfjUE00PkqN+q0XP6yRAOGrR06uSiUoIQGZkc7GxvQ9H7v8quUPNtZjMg4uux69i8HWpIjLPUKwCuRGyNg==} + engines: {node: '>=10'} + dependencies: + has-value: 2.0.2 + isobject: 4.0.0 + dev: false + + /upath/1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + dev: true + + /update-browserslist-db/1.0.13_browserslist@4.22.1: + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.1 + escalade: 3.1.1 + picocolors: 1.0.0 + + /update-notifier/4.1.3: + resolution: {integrity: sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==} + engines: {node: '>=8'} + dependencies: + boxen: 4.2.0 + chalk: 3.0.0 + configstore: 5.0.1 + has-yarn: 2.1.0 + import-lazy: 2.1.0 + is-ci: 2.0.0 + is-installed-globally: 0.3.2 + is-npm: 4.0.0 + is-yarn-global: 0.3.0 + latest-version: 5.1.0 + pupa: 2.1.1 + semver-diff: 3.1.1 + xdg-basedir: 4.0.0 + dev: true + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.0 + + /urix/0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated + dev: true + + /url-or-path/2.1.0: + resolution: {integrity: sha512-dsBD6GbytSMj9YDb3jVzSRENwFh50oUORnWBeSHfo0Lnwv2KMm/J4npyGy1P9rivUPsUGLjTA53XqAFqpe0nww==} + dev: true + + /url-parse-lax/1.0.0: + resolution: {integrity: sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==} + engines: {node: '>=0.10.0'} + dependencies: + prepend-http: 1.0.4 + dev: true + + /url-parse-lax/3.0.0: + resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} + engines: {node: '>=4'} + dependencies: + prepend-http: 2.0.0 + dev: true + + /url-parse/1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: false + + /url-regex-safe/3.0.0_re2@1.20.3: + resolution: {integrity: sha512-+2U40NrcmtWFVjuxXVt9bGRw6c7/MgkGKN9xIfPrT/2RX0LTkkae6CCEDp93xqUN0UKm/rr821QnHd2dHQmN3A==} + engines: {node: '>= 10.12.0'} + peerDependencies: + re2: ^1.17.2 + peerDependenciesMeta: + re2: + optional: true + dependencies: + ip-regex: 4.3.0 + re2: 1.20.3 + tlds: 1.242.0 + dev: false + + /url-regex-safe/4.0.0_re2@1.20.3: + resolution: {integrity: sha512-BrnFCWKNFrFnRzKD66NtJqQepfJrUHNPvPxE5y5NSAhXBb4OlobQjt7907Jm4ItPiXaeX+dDWMkcnOd4jR9N8A==} + engines: {node: '>= 14'} + peerDependencies: + re2: ^1.20.1 + peerDependenciesMeta: + re2: + optional: true + dependencies: + ip-regex: 4.3.0 + re2: 1.20.3 + tlds: 1.242.0 + dev: false + + /url-to-options/1.0.1: + resolution: {integrity: sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==} + engines: {node: '>= 4'} + dev: true + + /url/0.11.3: + resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} + dependencies: + punycode: 1.4.1 + qs: 6.11.2 + dev: true + + /use/3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} + dev: true + + /util-deprecate/1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + /util.promisify/1.0.1: + resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.22.2 + has-symbols: 1.0.3 + object.getownpropertydescriptors: 2.1.7 + dev: true + optional: true + + /util/0.10.4: + resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} + dependencies: + inherits: 2.0.3 + dev: true + + /util/0.11.1: + resolution: {integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==} + dependencies: + inherits: 2.0.3 + dev: true + + /util/0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.12 + which-typed-array: 1.1.11 + dev: true + + /utils-merge/1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: false + + /uuid/2.0.3: + resolution: {integrity: sha512-FULf7fayPdpASncVy4DLh3xydlXEJJpvIELjYjNeQWYUZ9pclcpvCZSr2gkmN2FrrGcI7G/cJsIEwk5/8vfXpg==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + dev: true + + /uuid/3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + + /uuid/8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + /uuid/9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + dev: false + + /uvu/0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + dequal: 2.0.3 + diff: 5.1.0 + kleur: 4.1.5 + sade: 1.8.1 + dev: true + + /v8-compile-cache-lib/3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /v8-compile-cache/2.4.0: + resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} + dev: true + + /v8flags/3.2.0: + resolution: {integrity: sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==} + engines: {node: '>= 0.10'} + dependencies: + homedir-polyfill: 1.0.3 + dev: true + + /valid-data-url/3.0.1: + resolution: {integrity: sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==} + engines: {node: '>=10'} + dev: false + + /validate-npm-package-license/3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + /validator/12.2.0: + resolution: {integrity: sha512-jJfE/DW6tIK1Ek8nCfNFqt8Wb3nzMoAbocBF6/Icgg1ZFSBpObdnwVY2jQj6qUqzhx5jc71fpvBWyLGO7Xl+nQ==} + engines: {node: '>= 0.10'} + dev: false + + /validator/13.11.0: + resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} + engines: {node: '>= 0.10'} + dev: false + + /value-or-function/3.0.0: + resolution: {integrity: sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==} + engines: {node: '>= 0.10'} + dev: true + + /vary/1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: false + + /vasync/2.2.1: + resolution: {integrity: sha512-Hq72JaTpcTFdWiNA4Y22Amej2GH3BFmBaKPPlDZ4/oC8HNn2ISHLkFrJU4Ds8R3jcUi7oo5Y9jcMHKjES+N9wQ==} + engines: {'0': node >=0.6.0} + dependencies: + verror: 1.10.0 + dev: false + + /verror/1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.4.1 + dev: false + + /vfile-find-up/6.1.0: + resolution: {integrity: sha512-plN64Ff/wLPvKC8ucTzyB97cgV7SdIcFL74HLCSmI/79FqOI1WACbNM4noKrJa+dZRgN6Gwp4BQElm/yBDqC3w==} + dependencies: + to-vfile: 7.2.4 + vfile: 5.3.7 + dev: true + + /vfile-location/3.2.0: + resolution: {integrity: sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==} + + /vfile-message/2.0.4: + resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} + dependencies: + '@types/unist': 2.0.8 + unist-util-stringify-position: 2.0.3 + + /vfile-message/3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + dependencies: + '@types/unist': 2.0.8 + unist-util-stringify-position: 3.0.3 + dev: true + + /vfile-reporter/6.0.2: + resolution: {integrity: sha512-GN2bH2gs4eLnw/4jPSgfBjo+XCuvnX9elHICJZjVD4+NM0nsUrMTvdjGY5Sc/XG69XVTgLwj7hknQVc6M9FukA==} + dependencies: + repeat-string: 1.6.1 + string-width: 4.2.3 + supports-color: 6.1.0 + unist-util-stringify-position: 2.0.3 + vfile-sort: 2.2.2 + vfile-statistics: 1.1.4 + dev: true + + /vfile-reporter/7.0.5: + resolution: {integrity: sha512-NdWWXkv6gcd7AZMvDomlQbK3MqFWL1RlGzMn++/O2TI+68+nqxCPTvLugdOtfSzXmjh+xUyhp07HhlrbJjT+mw==} + dependencies: + '@types/supports-color': 8.1.1 + string-width: 5.1.2 + supports-color: 9.4.0 + unist-util-stringify-position: 3.0.3 + vfile: 5.3.7 + vfile-message: 3.1.4 + vfile-sort: 3.0.1 + vfile-statistics: 2.0.1 + dev: true + + /vfile-sort/2.2.2: + resolution: {integrity: sha512-tAyUqD2R1l/7Rn7ixdGkhXLD3zsg+XLAeUDUhXearjfIcpL1Hcsj5hHpCoy/gvfK/Ws61+e972fm0F7up7hfYA==} + dev: true + + /vfile-sort/3.0.1: + resolution: {integrity: sha512-1os1733XY6y0D5x0ugqSeaVJm9lYgj0j5qdcZQFyxlZOSy1jYarL77lLyb5gK4Wqr1d5OxmuyflSO3zKyFnTFw==} + dependencies: + vfile: 5.3.7 + vfile-message: 3.1.4 + dev: true + + /vfile-statistics/1.1.4: + resolution: {integrity: sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA==} + dev: true + + /vfile-statistics/2.0.1: + resolution: {integrity: sha512-W6dkECZmP32EG/l+dp2jCLdYzmnDBIw6jwiLZSER81oR5AHRcVqL+k3Z+pfH1R73le6ayDkJRMk0sutj1bMVeg==} + dependencies: + vfile: 5.3.7 + vfile-message: 3.1.4 + dev: true + + /vfile/4.2.1: + resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} + dependencies: + '@types/unist': 2.0.8 + is-buffer: 2.0.5 + unist-util-stringify-position: 2.0.3 + vfile-message: 2.0.4 + + /vfile/5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + dependencies: + '@types/unist': 2.0.8 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + dev: true + + /vinyl-file/3.0.0: + resolution: {integrity: sha512-BoJDj+ca3D9xOuPEM6RWVtWQtvEPQiQYn82LvdxhLWplfQsBzBqtgK0yhCP0s1BNTi6dH9BO+dzybvyQIacifg==} + engines: {node: '>=4'} + dependencies: + graceful-fs: 4.2.11 + pify: 2.3.0 + strip-bom-buf: 1.0.0 + strip-bom-stream: 2.0.0 + vinyl: 2.2.1 + dev: true + + /vinyl-fs/3.0.3: + resolution: {integrity: sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==} + engines: {node: '>= 0.10'} + dependencies: + fs-mkdirp-stream: 1.0.0 + glob-stream: 6.1.0 + graceful-fs: 4.2.11 + is-valid-glob: 1.0.0 + lazystream: 1.0.1 + lead: 1.0.0 + object.assign: 4.1.4 + pumpify: 1.5.1 + readable-stream: 2.3.8 + remove-bom-buffer: 3.0.0 + remove-bom-stream: 1.2.0 + resolve-options: 1.1.0 + through2: 2.0.5 + to-through: 2.0.0 + value-or-function: 3.0.0 + vinyl: 2.2.1 + vinyl-sourcemap: 1.1.0 + dev: true + + /vinyl-sourcemap/1.1.0: + resolution: {integrity: sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==} + engines: {node: '>= 0.10'} + dependencies: + append-buffer: 1.0.2 + convert-source-map: 1.9.0 + graceful-fs: 4.2.11 + normalize-path: 2.1.1 + now-and-later: 2.0.1 + remove-bom-buffer: 3.0.0 + vinyl: 2.2.1 + dev: true + + /vinyl-sourcemaps-apply/0.2.1: + resolution: {integrity: sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==} + dependencies: + source-map: 0.5.7 + dev: true + + /vinyl/2.2.1: + resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==} + engines: {node: '>= 0.10'} + dependencies: + clone: 2.1.2 + clone-buffer: 1.0.0 + clone-stats: 1.0.0 + cloneable-readable: 1.1.3 + remove-trailing-separator: 1.1.0 + replace-ext: 1.0.1 + dev: true + + /vm-browserify/1.1.2: + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + dev: true + + /void-elements/2.0.1: + resolution: {integrity: sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==} + engines: {node: '>=0.10.0'} + dev: true + + /void-elements/3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + dev: false + + /w3c-hr-time/1.0.2: + resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + deprecated: Use your platform's native performance.now() and performance.timeOrigin. + dependencies: + browser-process-hrtime: 1.0.0 + dev: false + + /w3c-xmlserializer/2.0.0: + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + engines: {node: '>=10'} + dependencies: + xml-name-validator: 3.0.0 + dev: false + + /walk-up-path/3.0.1: + resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==} + dev: true + + /wbuf/1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + dependencies: + minimalistic-assert: 1.0.1 + dev: false + + /web-namespaces/1.1.4: + resolution: {integrity: sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==} + dev: false + + /web-resource-inliner/6.0.1: + resolution: {integrity: sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==} + engines: {node: '>=10.0.0'} + dependencies: + ansi-colors: 4.1.3 + escape-goat: 3.0.0 + htmlparser2: 5.0.1 + mime: 2.6.0 + node-fetch: 2.7.0 + valid-data-url: 3.0.1 + transitivePeerDependencies: + - encoding + dev: false + + /webcrypto-core/1.7.7: + resolution: {integrity: sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g==} + dependencies: + '@peculiar/asn1-schema': 2.3.6 + '@peculiar/json-schema': 1.1.12 + asn1js: 3.0.5 + pvtsutils: 1.3.5 + tslib: 2.6.2 + dev: false + + /webidl-conversions/3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: false + + /webidl-conversions/5.0.0: + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + engines: {node: '>=8'} + dev: false + + /webidl-conversions/6.1.0: + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} + dev: false + + /webidl-conversions/7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + dev: false + + /websocket-driver/0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + dependencies: + http-parser-js: 0.5.8 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + dev: true + + /websocket-extensions/0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + dev: true + + /well-known-symbols/2.0.0: + resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} + engines: {node: '>=6'} + dev: true + + /whatwg-encoding/1.0.5: + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + dependencies: + iconv-lite: 0.4.24 + dev: false + + /whatwg-mimetype/2.3.0: + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + dev: false + + /whatwg-url/11.0.0: + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} + dependencies: + tr46: 3.0.0 + webidl-conversions: 7.0.0 + dev: false + + /whatwg-url/5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: false + + /whatwg-url/8.7.0: + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} + dependencies: + lodash: 4.17.21 + tr46: 2.1.0 + webidl-conversions: 6.1.0 + dev: false + + /which-boxed-primitive/1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-module/1.0.0: + resolution: {integrity: sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==} + dev: true + + /which-module/2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + + /which-typed-array/1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + + /which/1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + + /wide-align/1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + dependencies: + string-width: 4.2.3 + + /widest-line/3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + dependencies: + string-width: 4.2.3 + dev: true + + /wild-config/1.7.1: + resolution: {integrity: sha512-auQZIY+hhXQ6cOe2muWWWedoDSu4CUz7f8/D8hz196e4Ojkzjv9pXlZaxN/aD0paFVAvTZdKm94eWakOVj2WpQ==} + dependencies: + deep-extend: 0.6.0 + glob: 8.0.3 + minimist: 1.2.6 + toml: 3.0.0 + dev: false + + /wildduck/1.40.9: + resolution: {integrity: sha512-Udq5nXeJM6W8c0LTKhIhRLfhu9XdPnrtHrWP8LMUNayb/kvOO4ZFeZwQ3ci5I7J6DAsXeFEo/DvZ30S+3bd0HA==} + engines: {node: '>=16.0.0'} + dependencies: + '@fidm/x509': 1.2.1 + '@opensearch-project/opensearch': 2.4.0 + '@phc/pbkdf2': 1.1.14 + '@postalsys/vmc': 1.0.6 + '@root/acme': 3.1.0 + '@root/csr': 0.8.1 + accesscontrol: 2.2.1 + axios: 1.5.1 + base32.js: 0.1.0 + bcryptjs: 2.4.3 + bson: 6.1.0 + bullmq: 4.12.2 + fido2-lib: 3.4.1 + gelf: 2.0.1 + generate-password: 1.7.0 + hash-wasm: 4.9.0 + he: 1.2.0 + html-to-text: 9.0.5 + humanname: 0.2.2 + iconv-lite: 0.6.3 + ioredfour: 1.2.0-ioredis-07 + ioredis: 5.3.2 + ipaddr.js: 2.1.0 + isemail: 3.2.0 + joi: 17.11.0 + js-yaml: 4.1.0 + key-fingerprint: 1.1.0 + libbase64: 1.2.1 + libmime: 5.2.1 + libqp: 2.0.1 + logic-query-parser: 0.0.5 + mailauth: 4.5.2 + mailsplit: 5.4.0 + mobileconfig: 2.4.0 + mongo-cursor-pagination: 8.1.3 + mongodb: 4.17.0 + mongodb-extended-json: 1.11.1 + msgpack5: 6.0.2 + node-forge: 1.3.1 + node-html-parser: 6.1.10 + nodemailer: 6.9.6 + npmlog: 7.0.1 + openpgp: 5.10.2 + pem-jwk: 2.0.0 + punycode: 2.3.0 + pwnedpasswords: 1.0.6 + qrcode: 1.5.3 + restify: 11.1.0 + restify-cors-middleware2: 2.2.1_restify@11.1.0 + restify-errors: 8.0.2 + restify-logger: 2.0.1 + search-string: 3.1.0 + seq-index: 1.1.0 + smtp-server: 3.13.0 + speakeasy: 2.0.0 + undici: 5.25.4 + unix-crypt-td-js: 1.1.4 + unixcrypt: 1.2.0 + uuid: 9.0.1 + wild-config: 1.7.1 + yargs: 17.7.2 + zone-mta: 3.6.11 + transitivePeerDependencies: + - aws-crt + - debug + - supports-color + dev: false + + /with/7.0.2: + resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==} + engines: {node: '>= 10.0.0'} + dependencies: + '@babel/parser': 7.23.0 + '@babel/types': 7.23.0 + assert-never: 1.2.1 + babel-walk: 3.0.0-canary-5 + dev: false + + /wkhtmltopdf/0.4.0: + resolution: {integrity: sha512-PXvsPehsmP1HeUDPx5qofitc+TJ0+Gb4Xn11iPJnHrLgXwyzRUzn9/b2t+soE+fwBMqUPs4Wchd0CRW+52MkNQ==} + engines: {node: '>=0.6'} + dependencies: + is-stream: 1.1.0 + slang: 0.3.0 + dev: false + + /word-wrap/1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + /wordnet-db/3.1.14: + resolution: {integrity: sha512-zVyFsvE+mq9MCmwXUWHIcpfbrHHClZWZiVOzKSxNJruIcFn2RbY55zkhiAMMxM8zCVSmtNiViq8FsAZSFpMYag==} + engines: {node: '>=0.6.0'} + dev: false + + /wordwrap/1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + dev: false + + /wrap-ansi/2.1.0: + resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==} + engines: {node: '>=0.10.0'} + dependencies: + string-width: 1.0.2 + strip-ansi: 3.0.1 + dev: true + + /wrap-ansi/5.1.0: + resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} + engines: {node: '>=6'} + dependencies: + ansi-styles: 3.2.1 + string-width: 3.1.0 + strip-ansi: 5.2.0 + dev: true + + /wrap-ansi/6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + /wrap-ansi/8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + /wrapped/1.0.1: + resolution: {integrity: sha512-ZTKuqiTu3WXtL72UKCCnQLRax2IScKH7oQ+mvjbpvNE+NJxIWIemDqqM2GxNr4N16NCjOYpIgpin5pStM7kM5g==} + dependencies: + co: 3.1.0 + sliced: 1.0.1 + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + /write-file-atomic/3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + dev: true + + /write-file-atomic/5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + dev: true + + /write/1.0.3: + resolution: {integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==} + engines: {node: '>=4'} + dependencies: + mkdirp: 0.5.6 + dev: true + + /ws/7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + + /x-xss-protection/1.3.0: + resolution: {integrity: sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg==} + engines: {node: '>=4.0.0'} + dev: false + + /xdg-basedir/4.0.0: + resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} + engines: {node: '>=8'} + dev: true + + /xml-name-validator/3.0.0: + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + dev: false + + /xml/1.0.1: + resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} + dev: false + + /xmlbuilder/13.0.2: + resolution: {integrity: sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==} + engines: {node: '>=6.0'} + dev: false + + /xmlbuilder/9.0.7: + resolution: {integrity: sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==} + engines: {node: '>=4.0'} + dev: false + + /xmlchars/2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: false + + /xmlcreate/2.0.4: + resolution: {integrity: sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==} + dev: false + + /xmldom/0.5.0: + resolution: {integrity: sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA==} + engines: {node: '>=10.0.0'} + dev: false + + /xo/0.32.1: + resolution: {integrity: sha512-L43ROY2opNW7yp7byEAibBSk0jYvMuC4yUUrphkqegqU76Bxp5Rc+Gcl62lK1f5zuRrlY0IwMypIfY4EPSzMfQ==} + engines: {node: '>=10.18'} + hasBin: true + peerDependencies: + webpack: '>=1.11.0' + peerDependenciesMeta: + webpack: + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 3.10.1_kxujzhw6vbtdri44htsqryf25e + '@typescript-eslint/parser': 3.10.1_2de3j2mqba4wgeuiaqz2k7syrm + arrify: 2.0.1 + cosmiconfig: 6.0.0 + debug: 4.3.4 + eslint: 7.32.0 + eslint-config-prettier: 6.15.0_eslint@7.32.0 + eslint-config-xo: 0.30.0_eslint@7.32.0 + eslint-config-xo-typescript: 0.31.0_34xjnqsmiyuesb5kdsccjw74za + eslint-formatter-pretty: 3.0.1 + eslint-import-resolver-webpack: 0.12.2_fkfqfehjtk7sk2efaqbgxsuasa + eslint-plugin-ava: 10.5.0_eslint@7.32.0 + eslint-plugin-eslint-comments: 3.2.0_eslint@7.32.0 + eslint-plugin-import: 2.26.0_3drlt33blcu46hm625odp62gvi + eslint-plugin-no-use-extend-native: 0.5.0 + eslint-plugin-node: 11.1.0_eslint@7.32.0 + eslint-plugin-prettier: 3.4.1_tt5ulu3b2qnnqmfipa72rfkewa + eslint-plugin-promise: 4.3.1 + eslint-plugin-unicorn: 20.1.0_eslint@7.32.0 + find-cache-dir: 3.3.2 + find-up: 4.1.0 + fs-extra: 9.1.0 + get-stdin: 8.0.0 + globby: 9.2.0 + has-flag: 4.0.0 + imurmurhash: 0.1.4 + is-path-inside: 3.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + json5: 2.2.3 + lodash: 4.17.21 + meow: 7.1.1 + micromatch: 4.0.5 + open-editor: 2.0.1 + p-reduce: 2.1.0 + path-exists: 4.0.0 + prettier: 2.0.4 + resolve-cwd: 3.0.0 + resolve-from: 5.0.0 + semver: 7.5.4 + slash: 3.0.0 + to-absolute-glob: 2.0.2 + typescript: 3.9.10 + update-notifier: 4.1.3 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - supports-color + dev: true + + /xo/0.53.1: + resolution: {integrity: sha512-/2R8SPehv1UhiIqJ9uSvrAjslcoygICNsUlEb/Zf2V6rMtr7YCoggc6hlt6b/kbncpR989Roqt6AvEO779dFxw==} + engines: {node: '>=14.16'} + hasBin: true + peerDependencies: + webpack: '>=1.11.0' + peerDependenciesMeta: + webpack: + optional: true + dependencies: + '@eslint/eslintrc': 1.4.1 + '@typescript-eslint/eslint-plugin': 5.62.0_tv6iquvmznxcojjmmfwa2noq2a + '@typescript-eslint/parser': 5.62.0_tbtvr3a5zwdiktqy4vlmx63mqq + arrify: 3.0.0 + cosmiconfig: 7.1.0 + define-lazy-prop: 3.0.0 + eslint: 8.39.0 + eslint-config-prettier: 8.10.0_eslint@8.39.0 + eslint-config-xo: 0.43.1_eslint@8.39.0 + eslint-config-xo-typescript: 0.55.1_j6kuwa4zcmwmqm3puagi6f2ey4 + eslint-formatter-pretty: 4.1.0 + eslint-import-resolver-webpack: 0.13.7_fkfqfehjtk7sk2efaqbgxsuasa + eslint-plugin-ava: 13.2.0_eslint@8.39.0 + eslint-plugin-eslint-comments: 3.2.0_eslint@8.39.0 + eslint-plugin-import: 2.26.0_y5plzmilioovo3zlgjas7uzrue + eslint-plugin-n: 15.7.0_eslint@8.39.0 + eslint-plugin-no-use-extend-native: 0.5.0 + eslint-plugin-prettier: 4.2.1_hfsgfd6gjeak6ing3g5l6vc624 + eslint-plugin-unicorn: 44.0.2_eslint@8.39.0 + esm-utils: 4.1.2 + find-cache-dir: 4.0.0 + find-up: 6.3.0 + get-stdin: 9.0.0 + globby: 13.2.2 + imurmurhash: 0.1.4 + json-stable-stringify-without-jsonify: 1.0.1 + json5: 2.2.3 + lodash-es: 4.17.21 + meow: 11.0.0 + micromatch: 4.0.5 + open-editor: 4.1.1 + prettier: 2.8.8 + semver: 7.5.4 + slash: 5.1.0 + to-absolute-glob: 2.0.2 + typescript: 4.9.5 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - supports-color + dev: true + bundledDependencies: + - '@typescript-eslint/eslint-plugin' + - '@typescript-eslint/parser' + - eslint-config-xo-typescript + + /xregexp/4.0.0: + resolution: {integrity: sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==} + dev: false + + /xtend/2.1.2: + resolution: {integrity: sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==} + engines: {node: '>=0.4'} + dependencies: + object-keys: 0.4.0 + dev: false + + /xtend/3.0.0: + resolution: {integrity: sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==} + engines: {node: '>=0.4'} + dev: true + + /xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + /y18n/3.2.2: + resolution: {integrity: sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==} + dev: true + + /y18n/4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + /yallist/2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + + /yallist/3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + /yaml/1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: true + + /yaml/2.3.1: + resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} + engines: {node: '>= 14'} + dev: true + + /yaml/2.3.2: + resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} + engines: {node: '>= 14'} + dev: true + + /yargs-parser/15.0.3: + resolution: {integrity: sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + + /yargs-parser/18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + + /yargs-parser/20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: true + + /yargs-parser/21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + /yargs-parser/5.0.1: + resolution: {integrity: sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==} + dependencies: + camelcase: 3.0.0 + object.assign: 4.1.4 + dev: true + + /yargs/14.2.0: + resolution: {integrity: sha512-/is78VKbKs70bVZH7w4YaZea6xcJWOAwkhbR0CFuZBmYtfTYF0xjGJF43AYd8g2Uii1yJwmS5GR2vBmrc32sbg==} + dependencies: + cliui: 5.0.0 + decamelize: 1.2.0 + find-up: 3.0.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 3.1.0 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 15.0.3 + dev: true + + /yargs/15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + + /yargs/17.7.1: + resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + dev: false + + /yargs/17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + /yargs/7.1.2: + resolution: {integrity: sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==} + dependencies: + camelcase: 3.0.0 + cliui: 3.2.0 + decamelize: 1.2.0 + get-caller-file: 1.0.3 + os-locale: 1.4.0 + read-pkg-up: 1.0.1 + require-directory: 2.1.1 + require-main-filename: 1.0.1 + set-blocking: 2.0.0 + string-width: 1.0.2 + which-module: 1.0.0 + y18n: 3.2.2 + yargs-parser: 5.0.1 + dev: true + + /yauzl/2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + /ylru/1.3.2: + resolution: {integrity: sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==} + engines: {node: '>= 4.0.0'} + dev: false + + /yn/3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + /yocto-queue/1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true + + /yup/0.32.9: + resolution: {integrity: sha512-Ci1qN+i2H0XpY7syDQ0k5zKQ/DoxO0LzPg8PAR/X4Mpj6DqaeCoIYEEjDJwhArh3Fa7GWbQQVDZKeXYlSH4JMg==} + engines: {node: '>=10'} + dependencies: + '@babel/runtime': 7.23.2 + '@types/lodash': 4.14.199 + lodash: 4.17.21 + lodash-es: 4.17.21 + nanoclone: 0.2.1 + property-expr: 2.0.5 + toposort: 2.0.2 + dev: false + + /zone-mta/3.6.11: + resolution: {integrity: sha512-qcJriWtJwRyBk+Dr8DIi9Bl9p4uWrfLSmXR0fqltcKlMt2zIKZjpBMDC994iY4twRfAWb7HVmRiQ1fFG8yc8zA==} + engines: {node: '>=16.0.0'} + hasBin: true + dependencies: + base32.js: 0.1.0 + crc-32: 1.2.2 + dnscache: 1.0.2 + gelf: 2.0.1 + ioredis: 5.3.2 + isemail: 3.2.0 + js-yaml: 4.1.0 + libmime: 5.2.1 + mailsplit: 5.4.0 + minimist: 1.2.8 + mongodb: 4.17.0 + msgpack-js: 0.3.0 + mx-connect: 1.4.4 + nodemailer: 6.9.5 + npmlog: 7.0.1 + prom-client: 14.2.0 + punycode: 2.3.0 + request: 2.88.2 + restify: 11.1.0 + seq-index: 1.1.0 + smtp-server: 3.13.0 + srs.js: 0.1.0 + uuid: 9.0.1 + wild-config: 1.7.1 + transitivePeerDependencies: + - aws-crt + - supports-color + dev: false + + /zone-mta/3.6.13: + resolution: {integrity: sha512-we+vhQeXw1S7CzerErqHy9nj8XxTzV08/KCvFeORabe74wGRdQSZs7Y0RmQBpuyODQSO2nbeCY4uVyCKvJSYaQ==} + engines: {node: '>=16.0.0'} + hasBin: true + dependencies: + base32.js: 0.1.0 + crc-32: 1.2.2 + dnscache: 1.0.2 + gelf: 2.0.1 + ioredis: 5.3.2 + isemail: 3.2.0 + js-yaml: 4.1.0 + libmime: 5.2.1 + mailsplit: 5.4.0 + minimist: 1.2.8 + mongodb: 4.17.0 + msgpack-js: 0.3.0 + mx-connect: 1.4.4 + nodemailer: 6.9.6 + npmlog: 7.0.1 + prom-client: 15.0.0 + punycode: 2.3.0 + request: 2.88.2 + restify: 11.1.0 + seq-index: 1.1.0 + smtp-server: 3.13.0 + srs.js: 0.1.0 + uuid: 9.0.1 + wild-config: 1.7.1 + transitivePeerDependencies: + - aws-crt + - supports-color + dev: false + + /zwitch/1.0.5: + resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} + + /zwitch/2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + dev: true + + /zxcvbn/4.4.2: + resolution: {integrity: sha512-Bq0B+ixT/DMyG8kgX2xWcI5jUvCwqrMxSFam7m0lAf78nf04hv6lNCsyLYdyYTrCVMqNDY/206K7eExYCeSyUQ==} + dev: false diff --git a/proxy.js b/proxy.js index 726e2ff14b..8135c7a12c 100644 --- a/proxy.js +++ b/proxy.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/routes/api/index.js b/routes/api/index.js index 13bbe70ee4..7894310dac 100644 --- a/routes/api/index.js +++ b/routes/api/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Router = require('@koa/router'); const v1 = require('./v1'); diff --git a/routes/api/v1/index.js b/routes/api/v1/index.js index 9caa154fd3..e81af320c8 100644 --- a/routes/api/v1/index.js +++ b/routes/api/v1/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Router = require('@koa/router'); const bodyParser = require('koa-bodyparser'); const paginate = require('koa-ctx-paginate'); diff --git a/routes/index.js b/routes/index.js index 4c634deec5..d6f5db0980 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const web = require('./web'); const api = require('./api'); diff --git a/routes/web/admin.js b/routes/web/admin.js index a1ed2aedc7..3253c0f6bc 100644 --- a/routes/web/admin.js +++ b/routes/web/admin.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Router = require('@koa/router'); const paginate = require('koa-ctx-paginate'); diff --git a/routes/web/auth.js b/routes/web/auth.js index 3be680d99f..055551c654 100644 --- a/routes/web/auth.js +++ b/routes/web/auth.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Boom = require('@hapi/boom'); const Router = require('@koa/router'); const isSANB = require('is-string-and-not-blank'); diff --git a/routes/web/index.js b/routes/web/index.js index 43e8d0f3a0..40e2736308 100644 --- a/routes/web/index.js +++ b/routes/web/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const path = require('node:path'); const Router = require('@koa/router'); diff --git a/routes/web/my-account.js b/routes/web/my-account.js index 1f5cc06d6c..f19cd05c03 100644 --- a/routes/web/my-account.js +++ b/routes/web/my-account.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Router = require('@koa/router'); const paginate = require('koa-ctx-paginate'); const render = require('koa-views-render'); diff --git a/routes/web/otp.js b/routes/web/otp.js index 0f467c5548..2a111cbdb5 100644 --- a/routes/web/otp.js +++ b/routes/web/otp.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const Router = require('@koa/router'); const render = require('koa-views-render'); diff --git a/scripts/check-dup-payer-id.js b/scripts/check-dup-payer-id.js index 4da3dc4d48..571789fdf1 100644 --- a/scripts/check-dup-payer-id.js +++ b/scripts/check-dup-payer-id.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/scripts/import-csv.js b/scripts/import-csv.js index 027390c3eb..835db5488b 100644 --- a/scripts/import-csv.js +++ b/scripts/import-csv.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/scripts/import-domains.js b/scripts/import-domains.js index 6978dca4ca..6777124bef 100644 --- a/scripts/import-domains.js +++ b/scripts/import-domains.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/scripts/send-email.js b/scripts/send-email.js index 0633e002e0..8a73f9cb22 100644 --- a/scripts/send-email.js +++ b/scripts/send-email.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const process = require('node:process'); const nodemailer = require('nodemailer'); diff --git a/scripts/set-active-pypl-subscription-ids.js b/scripts/set-active-pypl-subscription-ids.js index d59f6e3b47..352da1a308 100644 --- a/scripts/set-active-pypl-subscription-ids.js +++ b/scripts/set-active-pypl-subscription-ids.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/scripts/unban-users.js b/scripts/unban-users.js index 8c6b9d0e21..eef211a853 100644 --- a/scripts/unban-users.js +++ b/scripts/unban-users.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const process = require('process'); const { parentPort } = require('worker_threads'); diff --git a/smtp-bree.js b/smtp-bree.js index e64eb336fe..629820f81e 100644 --- a/smtp-bree.js +++ b/smtp-bree.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + // eslint-disable-next-line import/no-unassigned-import require('#config/env'); diff --git a/smtp-server.js b/smtp-server.js index 2d6dab70df..9d950e6508 100644 --- a/smtp-server.js +++ b/smtp-server.js @@ -1,710 +1,25 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const fs = require('node:fs'); -const punycode = require('node:punycode'); const RateLimiter = require('async-ratelimiter'); -const _ = require('lodash'); const bytes = require('bytes'); -const getStream = require('get-stream'); -const isFQDN = require('is-fqdn'); -const isSANB = require('is-string-and-not-blank'); const ms = require('ms'); -const noReplyList = require('reserved-email-addresses-list/no-reply-list.json'); const pify = require('pify'); -const safeStringify = require('fast-safe-stringify'); -const splitLines = require('split-lines'); const { SMTPServer } = require('smtp-server'); -const { boolean } = require('boolean'); -const { convert } = require('html-to-text'); -const { isEmail } = require('validator'); -const Aliases = require('#models/aliases'); -const Domains = require('#models/domains'); -const Emails = require('#models/emails'); -const Users = require('#models/users'); const config = require('#config'); -const createSession = require('#helpers/create-session'); const createTangerine = require('#helpers/create-tangerine'); const env = require('#config/env'); -const getErrorCode = require('#helpers/get-error-code'); -const i18n = require('#helpers/i18n'); -const isCodeBug = require('#helpers/is-code-bug'); const logger = require('#helpers/logger'); -const parseRootDomain = require('#helpers/parse-root-domain'); -const SMTPError = require('#helpers/smtp-error'); +const onAuth = require('#helpers/on-auth'); +const smtp = require('#helpers/smtp'); -const NO_REPLY_USERNAMES = new Set(noReplyList); const MAX_BYTES = bytes(env.SMTP_MESSAGE_MAX_SIZE); -class ServerShutdownError extends Error { - // NOTE: smtp-server does not have an affixed "." in the server shutdown message - constructor(message = 'Server shutting down', ...args) { - super(message, ...args); - Error.captureStackTrace(this, ServerShutdownError); - this.responseCode = 421; - } -} - -function validateDomain(domain) { - if (domain.is_global) - throw new Error(i18n.translate('EMAIL_SMTP_GLOBAL_NOT_PERMITTED', 'en')); - - // - // NOTE: if the domain is suspended then the state is "pending" not queued - // - // if (_.isDate(domain.smtp_suspended_sent_at)) - // throw new Error('Domain is suspended from outbound SMTP access'); - - if (!domain.has_smtp) { - if (!_.isDate(domain.smtp_verified_at)) - throw new SMTPError( - `Domain is not configured for outbound SMTP, go to ${config.urls.web}/my-account/domains/${domain.name}/verify-smtp and click "Verify"`, - { - responseCode: 535, - ignoreHook: true - } - ); - - throw new SMTPError( - `Domain is pending admin approval for outbound SMTP access, please check your inbox and provide us with requested information or contact us at ${config.supportEmail}`, - { - responseCode: 535, - ignoreHook: true - } - ); - } - - // - // validate that at least one paying, non-banned admin on >= same plan without expiration - // - const validPlans = - domain.plan === 'team' ? ['team'] : ['team', 'enhanced_protection']; - - if ( - !domain.members.some( - (m) => - !m.user[config.userFields.isBanned] && - m.user[config.userFields.hasVerifiedEmail] && - validPlans.includes(m.user.plan) && - new Date(m.user[config.userFields.planExpiresAt]).getTime() >= - Date.now() && - m.group === 'admin' - ) - ) - throw new Error(i18n.translate('PAST_DUE_OR_INVALID_ADMIN', 'en')); -} - -function validateAlias(alias) { - // alias must not have banned user - if (alias.user[config.userFields.isBanned]) - throw new Error('Alias user is banned'); - - // - // it is bad practice to send outbound email from a no-reply or unmonitored mailbox - // (consider using "Reply-To" header with a "no-reply" address) - // - const string = alias.name.replace(/[^\da-z]/g, ''); - if (NO_REPLY_USERNAMES.has(string)) - throw new Error( - 'You cannot use a "no-reply" username to send outbound mail (it is bad practice to send from an unmonitored mailbox).' - ); - - // alias must be enabled - if (!alias.is_enabled) throw new Error('Alias is disabled'); - - // alias must not be catch-all - if (alias.name === '*') throw new Error('Alias cannot be a catch-all'); - - // alias cannot be regex - if (alias.name.startsWith('/')) throw new Error('Alias cannot be a regex'); -} - -// this is sourced from FE original codebase -function refineAndLogError(err, session) { - // handle programmer mistakes - // (don't re-check if we already checked) - if (typeof err.isCodeBug !== 'boolean') { - err.isCodeBug = isCodeBug(err); - if (err.isCodeBug) { - logger.fatal(err, { session }); - err.responseCode = 421; - } - } - - // if it was HTTP error and no `responseCode` set then try to parse it - // into a SMTP-friendly format for error handling - err.responseCode = getErrorCode(err); - - // rewrite message to keep the underlying code issue private to end users - // (this also prevents double logger invocation for code bugs) - if (err.isCodeBug) { - err.message = - 'An internal server error has occurred, please try again later.'; - } else { - logger.error(err, { session }); - } - - // - // TODO: we should also mirror this to FE MX source - // - // NOTE: this was inspired from `koa-better-error-handler` response for API endpoints - // (and it is used because some errors are translated with HTML tags, e.g. notranslate) - // - err.message = convert(err.message, { - wordwrap: false, - selectors: [ - { - selector: 'a', - options: { - hideLinkHrefIfSameAsText: true, - baseUrl: env.ERROR_HANDLER_BASE_URL || '' - } - }, - { selector: 'img', format: 'skip' } - ], - linkBrackets: false - }); - - // - // replace linebreaks - // - // (otherwise you will get DATA command failed if this is RCPT TO command if you have multiple linebreaks) - // - const lines = splitLines(err.message); - - // - // NOTE: we join lines together by ";", then split, then make unique, then join again - // - // set the new message - err.message = _.uniq(lines.join('; ').split('; ')) - .join('; ') - .split(';;') - .join(';'); - - return err; -} - -// -// NOTE: we can merge SMTP/FE codebase in future and simply check if auth disabled -// then this will act as a forwarding server only (MTA) -// -async function onData(stream, _session, fn) { - if (this.server._closeTimeout) - return setImmediate(() => fn(new ServerShutdownError())); - - // store clone of session since it gets modified/destroyed - const session = JSON.parse(safeStringify(_session)); - - logger.debug('DATA', { session }); - - try { - // we have to consume the stream - const raw = await getStream.buffer(stream, { - maxBuffer: MAX_BYTES - }); - - // - // NOTE: we don't share the full alias and domain object - // in between onAuth and onData because there could - // be a time gap between the SMTP commands are sent - // (we want the most real-time information) - // - // ensure that user is authenticated - if ( - typeof session.user !== 'object' || - typeof session.user.alias_id !== 'string' || - typeof session.user.domain_id !== 'string' - ) - throw new SMTPError(authRequiredMessage, { - responseCode: 530 - }); - - // shorthand variables for alias and domain - const [alias, domain] = await Promise.all([ - Aliases.findOne({ id: session.user.alias_id }) - .populate( - 'user', - `id ${config.userFields.isBanned} ${config.userFields.smtpLimit}` - ) - .lean() - .exec(), - Domains.findOne({ id: session.user.domain_id, plan: { $ne: 'free' } }) - .populate( - 'members.user', - `id plan ${config.userFields.isBanned} ${config.userFields.hasVerifiedEmail} ${config.userFields.planExpiresAt}` - ) - .lean() - .exec() - ]); - - if (!domain) - throw new Error( - 'Domain does not exist with current TXT verification record' - ); - - // validate domain - validateDomain(domain); - - // alias must exist - if (!alias) throw new Error('Alias does not exist'); - - // validate alias - validateAlias(alias); - - // TODO: document storage of outbound SMTP email in FAQ/Privacy - // (it will be retained for 30d after + enable 30d expiry) - // TODO: document suspension process in Terms of Use - // (e.g. after 30d unpaid access, API access restrictions, etc) - // TODO: suspend domains with has_smtp that have past due balance - - // prepare envelope - const envelope = {}; - - if ( - isEmail(session?.envelope?.mailFrom?.address, { ignore_max_length: true }) - ) - envelope.from = session.envelope.mailFrom.address; - - if ( - Array.isArray(session?.envelope?.rcptTo) && - session.envelope.rcptTo.length > 0 - ) { - const to = []; - for (const rcpt of session.envelope.rcptTo) { - if (isEmail(rcpt.address, { ignore_max_length: true })) to.push(rcpt); - } - - if (to.length > 0) envelope.to = to; - } - - // if any of the domain admins are admins then don't rate limit - const adminExists = await Users.exists({ - _id: { - $in: domain.members - .filter((m) => m.group === 'admin') - .map((m) => - typeof m.user === 'object' && typeof m.user._id === 'object' - ? m.user._id - : m.user - ) - }, - group: 'admin' - }); - - if (!adminExists) { - // rate limit to X emails per day by domain id then denylist - { - const limit = await this.rateLimiter.get({ - id: domain.id, - max: - alias.user[config.userFields.smtpLimit] || config.smtpLimitMessages - }); - - // return 550 error code - if (!limit.remaining) - throw new SMTPError('Rate limit exceeded', { ignoreHook: true }); - } - - // rate limit to X emails per day by alias user id then denylist - { - const limit = await this.rateLimiter.get({ - id: alias.user.id, - max: - alias.user[config.userFields.smtpLimit] || config.smtpLimitMessages - }); - - // return 550 error code - if (!limit.remaining) - throw new SMTPError('Rate limit exceeded', { ignoreHook: true }); - } - } - - // queue the email - const email = await Emails.queue({ - message: { - envelope, - raw - }, - alias, - domain, - user: alias.user, - date: new Date(session.arrivalDate) - }); - - // TODO: implement credit system - - logger.info('email created', { - session: { - ...session, - ...createSession(email) - }, - user: email.user, - email: email._id, - domains: [email.domain], - ignore_hook: false - }); - - setImmediate(fn); - } catch (err) { - setImmediate(() => fn(refineAndLogError(err, session))); - } -} - -async function onConnect(session, fn) { - logger.debug('CONNECT', { session }); - - if (this.server._closeTimeout) - return setImmediate(() => fn(new ServerShutdownError())); - - // this is used for setting Date header if missing on SMTP submission - session.arrivalDate = new Date(); - - // lookup the client hostname - try { - const [clientHostname] = await this.resolver.reverse(session.remoteAddress); - if (isFQDN(clientHostname)) { - // do we need this still (?) - let domain = clientHostname.toLowerCase().trim(); - try { - domain = punycode.toASCII(domain); - } catch { - // ignore punycode conversion errors - } - - session.resolvedClientHostname = domain; - } - } catch (err) { - // - // NOTE: the native Node.js DNS module would throw an error previously - // - // - if (env.NODE_ENV !== 'test') logger.debug(err); - } - - try { - // get root domain if available - let rootDomain; - if (session.resolvedClientHostname) - rootDomain = parseRootDomain(session.resolvedClientHostname); - - // check if allowlisted - const result = await this.client.get( - `allowlist:${rootDomain || session.remoteAddress}` - ); - - if (!boolean(result)) { - // - // prevent connections from backscatter, silent ban, and denylist - // - const arr = [ - `backscatter:${session.remoteAddress}`, - `denylist:${session.remoteAddress}`, - `silent:${session.remoteAddress}` - ]; - - if (rootDomain) - arr.push( - `backscatter:${rootDomain}`, - `denylist:${rootDomain}`, - `silent:${rootDomain}` - ); - - const results = await this.client.mget(arr); - if (results.some((result) => boolean(result))) { - throw new SMTPError( - `The ${rootDomain ? 'domain' : 'IP'} ${ - rootDomain || session.remoteAddress - } is denylisted by ${ - config.urls.web - }. To request removal, you must visit ${config.urls.web}/denylist?q=${ - rootDomain || session.remoteAddress - }.`, - { ignoreHook: true } - ); - } - } - - setImmediate(fn); - } catch (err) { - setImmediate(() => fn(refineAndLogError(err, session))); - } -} - -// eslint-disable-next-line complexity -async function onAuth(auth, session, fn) { - logger.debug('AUTH', { auth, session }); - - if (this.server._closeTimeout) - return setImmediate(() => fn(new ServerShutdownError())); - - // TODO: credit system + domain billing rules (assigned billing manager -> person who gets credits deducted) - // TODO: salt/hash/deprecate legacy API token + remove from API docs page - // TODO: replace usage of config.recordPrefix with config.paidPrefix and config.freePrefix - - // - // TODO: add support for domain-wide tokens (right now it's only alias-specific) - // `auth.username` must be an alias that exists in the system - // `auth.password` must be domain-wide or alias-specific generated token - // (password visible only once to user upon creation) - // - try { - // username must be a valid email address - if ( - typeof auth.username !== 'string' || - !isSANB(auth.username) || - !isEmail(auth.username.trim()) || - // - auth.username === 'my_user' || - // - auth.username === 'REPLACE-WITH-YOUR-ALIAS@YOURDOMAIN.COM' - ) - throw new SMTPError( - `Invalid username, please enter a valid email address (e.g. "alias@example.com"); use one of your domain's aliases at ${config.urls.web}/my-account/domains`, - { - responseCode: 535, - ignoreHook: true - } - ); - - let [name, domainName] = auth.username.trim().toLowerCase().split('@'); - - domainName = punycode.toUnicode(domainName); - - // password must be a 24 character long generated string - if ( - typeof auth.password !== 'string' || - !isSANB(auth.password) || - auth.password.length > 128 || - // - auth.password === 'my_password' || - // - auth.password === 'REPLACE-WITH-YOUR-GENERATED-PASSWORD' - ) - throw new SMTPError( - `Invalid password, please try again or go to ${config.urls.web}/my-account/domains/${domainName}/aliases and click "Generate Password"`, - { - responseCode: 535, - ignoreHook: true - } - ); - - const verifications = []; - try { - const records = await this.resolver.resolveTxt(domainName); - for (const record_ of records) { - const record = record_.join('').trim(); // join chunks together - if (record.startsWith(config.paidPrefix)) - verifications.push(record.replace(config.paidPrefix, '').trim()); - } - } catch (err) { - logger.error(err, { session }); - } - - if (verifications.length === 0) - throw new SMTPError( - `Domain is missing TXT verification record, go to ${config.urls.web}/my-account/domains/${domainName} and click "Verify"`, - { - responseCode: 535, - ignoreHook: true - } - ); - - if (verifications.length > 1) - throw new SMTPError( - `Domain has more than one TXT verification record, go to ${config.urls.web}/my-account/domains/${domainName} and click "Verify"`, - { - responseCode: 535, - ignoreHook: true - } - ); - - const domain = await Domains.findOne({ - name: domainName, - verification_record: verifications[0], - plan: { $ne: 'free' } - }) - .populate( - 'members.user', - `id plan ${config.userFields.isBanned} ${config.userFields.hasVerifiedEmail} ${config.userFields.planExpiresAt}` - ) - .lean() - .exec(); - - if (!domain) - throw new SMTPError( - `Domain does not exist with current TXT verification record, go to ${config.urls.web}/my-account/domains/${domainName} and click "Verify"`, - { responseCode: 535, ignore: true } - ); - - // validate domain - validateDomain(domain); - - const alias = await Aliases.findOne({ - name, - domain: domain._id - }) - .populate( - 'user', - `id ${config.userFields.isBanned} ${config.userFields.smtpLimit}` - ) - .select('+tokens.hash +tokens.salt') - .lean() - .exec(); - - if (!alias) - throw new SMTPError( - `Alias does not exist, go to ${config.urls.web}/my-account/domains/${domain.name} and add the alias of "${name}"`, - { responseCode: 535, ignore: true } - ); - - // validate alias - validateAlias(alias); - - // validate the `auth.password` provided - if (!Array.isArray(alias.tokens) || alias.tokens.length === 0) - throw new SMTPError( - `Alias does not have any SMTP generated passwords yet, go to ${config.urls.web}/my-account/domains/${domain.name}/aliases and click "Generate Password"`, - { - responseCode: 535, - ignoreHook: true - } - ); - - // - // only rate limit if the domain has_smtp - // - if ( - domain.has_smtp && - // do not rate limit IP addresses corresponding to our servers - (!session.resolvedClientHostname || - parseRootDomain(session.resolvedClientHostname) !== env.WEB_HOST) - ) { - // rate limit to X failed attempts per day by IP address - const limit = await this.rateLimiter.get({ - id: session.remoteAddress, - max: config.smtpLimitAuth, - duration: config.smtpLimitAuthDuration - }); - - // return 550 error code - if (!limit.remaining) - throw new SMTPError( - `You have exceeded the maximum number of failed authentication attempts. Please try again later or contact us at ${config.supportEmail}` - // { ignoreHook: true } - ); - } - - // ensure that the token is valid - const isValid = await Aliases.isValidPassword( - alias.tokens, - auth.password.trim() - ); - - if (!isValid) - throw new SMTPError( - `Invalid password, please try again or go to ${config.urls.web}/my-account/domains/${domainName}/aliases and click "Generate Password"`, - { - responseCode: 535 - // ignoreHook: true - } - ); - - // Clear authentication limit for this IP address (in the background) - this.client - .del(`${this.rateLimiter.namespace}:${session.remoteAddress}`) - .then() - .catch((err) => this.config.logger.fatal(err)); - - // this response object sets `session.user` to have `domain` and `alias` - // - setImmediate(() => - fn(null, { user: { alias_id: alias.id, domain_id: domain.id } }) - ); - } catch (err) { - logger.err(err, { session }); - - // - // NOTE: we should actually share error message if it was not a code bug - // (otherwise it won't be intuitive to users if they're late on payment) - // - // - setImmediate(() => fn(refineAndLogError(err, session))); - } -} - -function onMailFrom(address, session, fn) { - logger.debug('MAIL FROM', { address, session }); - - if (this.server._closeTimeout) - return setImmediate(() => fn(new ServerShutdownError())); - - // validate email address - if ( - typeof address === 'object' && - isSANB(address.address) && - !isEmail(address.address, { ignore_max_length: true }) - ) - return setImmediate(() => - fn( - refineAndLogError( - new SMTPError('Address is not a valid RFC 5321 email address', { - responseCode: 553, - ignoreHook: true - }), - session - ) - ) - ); - - setImmediate(fn); -} - -function onRcptTo(address, session, fn) { - logger.debug('RCPT TO', { address, session }); - - if (this.server._closeTimeout) - return setImmediate(() => fn(new ServerShutdownError())); - - // - if ( - session.envelope.rcptTo && - session.envelope.rcptTo.length >= config.maxRecipients - ) - return setImmediate(() => - fn( - refineAndLogError( - new SMTPError('Too many recipients', { - responseCode: 452, - ignoreHook: true - }) - ), - session - ) - ); - - // validate email address - if ( - typeof address === 'object' && - isSANB(address.address) && - !isEmail(address.address, { ignore_max_length: true }) - ) - return setImmediate(() => - fn( - refineAndLogError( - new SMTPError('Address is not a valid RFC 5321 email address', { - responseCode: 553, - ignoreHook: true - }) - ), - session - ) - ); - - setImmediate(fn); -} - -// -const authRequiredMessage = 'Authentication is required'; - class SMTP { // // NOTE: we port forward 25, 587, and 2525 -> 2587 (and 2587 is itself available) @@ -732,17 +47,17 @@ class SMTP { // TODO: this.server = new SMTPServer({ // - authRequiredMessage, + authRequiredMessage: config.authRequiredMessage, // // most of these options mirror the FE forwarding server options // size: MAX_BYTES, - onData: onData.bind(this), - onConnect: onConnect.bind(this), + onData: smtp.onData.bind(this), + onConnect: smtp.onConnect.bind(this), onAuth: onAuth.bind(this), - onMailFrom: onMailFrom.bind(this), - onRcptTo: onRcptTo.bind(this), + onMailFrom: smtp.onMailFrom.bind(this), + onRcptTo: smtp.onRcptTo.bind(this), // NOTE: we don't need to set a value for maxClients // since we have rate limiting enabled by IP // maxClients: Infinity, // default is Infinity @@ -752,7 +67,7 @@ class SMTP { closeTimeout: ms('30s'), // disableReverseLookup: true, - logger: false, + logger: config.env === 'production' ? false : logger, disabledCommands: secure ? ['STARTTLS'] : [], secure, @@ -760,7 +75,8 @@ class SMTP { authMethods: ['PLAIN', 'LOGIN'], // XOAUTH2, CRAM-MD5 // just in case smtp-server changes default and patch semver bump (unlikely but safeguard) - allowInsecureAuth: false, + allowInsecureAuth: + config.env === 'production' ? false : env.SMTP_ALLOW_INSECURE_AUTH, authOptional: false, // keys diff --git a/smtp.js b/smtp.js index 9de42559d1..39fa612d9f 100644 --- a/smtp.js +++ b/smtp.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const process = require('node:process'); // eslint-disable-next-line import/no-unassigned-import diff --git a/test/api/v1.js b/test/api/v1.js index 241450b62d..30ebe9c9fa 100644 --- a/test/api/v1.js +++ b/test/api/v1.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const { Buffer } = require('node:buffer'); const { Writable } = require('node:stream'); diff --git a/test/config/utilities.js b/test/config/utilities.js index 98022240cc..5478beba32 100644 --- a/test/config/utilities.js +++ b/test/config/utilities.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const test = require('ava'); const { json, emoji } = require('#config/utilities'); diff --git a/test/helpers.js b/test/helpers.js index 1f829f3d01..52b09b0f79 100644 --- a/test/helpers.js +++ b/test/helpers.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const test = require('ava'); const Redis = require('ioredis-mock'); diff --git a/test/imap/index.js b/test/imap/index.js new file mode 100644 index 0000000000..93686611ae --- /dev/null +++ b/test/imap/index.js @@ -0,0 +1,982 @@ +// +// NOTE: This file is licensed under the GPLv3 license, see `IMAP-LICENSE`. +// +// Source code was created with inspiration from WildDuck at . +// WildDuck Mail Agent is licensed under the European Union Public License 1.2 or later. +// +// +// Thank you to Andris Reinman, the author of WildDuck, Nodemailer, and many other OSS projects. +// Please consider sponsoring their efforts as we do on GitHub at . +// + +const { Buffer } = require('node:buffer'); +const { createHash } = require('node:crypto'); + +// +// NOTE: wait command not supported by `ioredis-mock` +// const Redis = require('ioredis-mock'); +// +const Redis = require('@ladjs/redis'); +const dayjs = require('dayjs-with-plugins'); +const getPort = require('get-port'); +const ip = require('ip'); +const ms = require('ms'); +const pWaitFor = require('p-wait-for'); +const splitLines = require('split-lines'); +const test = require('ava'); +const { ImapFlow } = require('imapflow'); +const { factory } = require('factory-girl'); + +const utils = require('../utils'); +const IMAP = require('../../imap-server'); + +const Aliases = require('#models/aliases'); +const Mailboxes = require('#models/mailboxes'); +const Messages = require('#models/messages'); +const config = require('#config'); +const logger = require('#helpers/logger'); + +const IP_ADDRESS = ip.address(); +const client = new Redis(); +const subscriber = new Redis(); +const tls = { rejectUnauthorized: false }; + +test.before(utils.setupMongoose); +test.before(utils.defineUserFactory); +test.before(utils.defineDomainFactory); +test.before(utils.definePaymentFactory); +test.before(utils.defineAliasFactory); +test.before(async () => { + await client.flushall(); +}); +test.after.always(utils.teardownMongoose); +test.beforeEach(async (t) => { + const secure = false; + t.context.secure = secure; + const imap = new IMAP({ client, subscriber }, secure); + const port = await getPort(); + t.context.port = port; + t.context.server = await imap.listen(port); + t.context.imap = imap; + + const user = await factory.create('user', { + plan: 'enhanced_protection', + [config.userFields.planSetAt]: dayjs().startOf('day').toDate() + }); + + await factory.create('payment', { + user: user._id, + amount: 300, + invoice_at: dayjs().startOf('day').toDate(), + method: 'free_beta_program', + duration: ms('30d'), + plan: user.plan, + kind: 'one-time' + }); + + t.context.user = await user.save(); + + const domain = await factory.create('domain', { + members: [{ user: user._id, group: 'admin' }], + plan: user.plan, + resolver: imap.resolver, + has_smtp: true + }); + + t.context.domain = domain; + + const alias = await factory.create('alias', { + user: user._id, + domain: domain._id, + recipients: [user.email] + }); + + const pass = await alias.createToken(); + t.context.pass = pass; + t.context.alias = await alias.save(); + + // spoof dns records + const map = new Map(); + map.set( + `txt:${domain.name}`, + imap.resolver.spoofPacket( + domain.name, + 'TXT', + [`${config.paidPrefix}${domain.verification_record}`], + true + ) + ); + + // store spoofed dns cache + await imap.resolver.options.cache.mset(map); + + const imapFlow = new ImapFlow({ + host: IP_ADDRESS, + port, + secure, + logger, + tls, + auth: { + user: `${alias.name}@${domain.name}`, + pass + } + }); + + await imapFlow.connect(); + + t.context.imapFlow = imapFlow; + + // create inbox + await t.context.imapFlow.mailboxCreate('INBOX'); + const mailbox = await Mailboxes.findOne({ + alias: alias._id, + path: 'INBOX' + }); + t.is(mailbox.specialUse, '\\Inbox'); + t.is(mailbox.uidNext, 1); +}); + +test.afterEach(async (t) => { + await t.context.imapFlow.logout(); + await t.context.imap.close(); +}); + +test('onAppend', async (t) => { + const { imapFlow, alias, domain } = t.context; + + // + // `mailboxCreate(path)` whereas `path` is parsed by `normalizePath` function + // + // + await imapFlow.mailboxCreate('append'); + + let mailbox = await Mailboxes.findOne({ + alias: alias._id, + path: 'append' + }) + .lean() + .exec(); + + const raw = ` +Content-Type: multipart/mixed; boundary="------------cWFvDSey27tFG0hVYLqp9hs9" +MIME-Version: 1.0 +To: ${alias.name}@${domain.name} +From: ${alias.name}@${domain.name} +Subject: test + +This is a multi-part message in MIME format. +--------------cWFvDSey27tFG0hVYLqp9hs9 +Content-Type: text/plain; charset=UTF-8; format=flowed +Content-Transfer-Encoding: 7bit + +test + +--------------cWFvDSey27tFG0hVYLqp9hs9 +Content-Type: text/plain; charset=UTF-8; name="example.txt" +Content-Disposition: attachment; filename="example.txt" +Content-Transfer-Encoding: base64 + +ZXhhbXBsZQo= + +--------------cWFvDSey27tFG0hVYLqp9hs9--`.trim(); + + const append = await imapFlow.append( + 'append', + Buffer.from(raw), + ['\\Seen'], + new Date() + ); + + // + t.is(append.destination, 'append'); + t.is(append.uid, 1); + t.is(append.uidValidity, BigInt(mailbox.uidValidity)); + + mailbox = await Mailboxes.findById(mailbox._id).lean().exec(); + + t.is(mailbox.uidNext, 2); +}); + +test('onCreate', async (t) => { + const mailbox = await t.context.imapFlow.mailboxCreate('beep'); + t.deepEqual(mailbox, { + path: 'beep', + created: true + }); +}); + +test('onFetch', async (t) => { + const client = new ImapFlow({ + host: IP_ADDRESS, + port: t.context.port, + secure: t.context.secure, + logger, + tls, + auth: { + user: `${t.context.alias.name}@${t.context.domain.name}`, + pass: t.context.pass + } + }); + await client.connect(); + + // create mailbox folder + const mbox = await client.mailboxCreate(['INBOX', 'fetch', 'child']); + t.is(mbox.path, 'INBOX/fetch/child'); + const mailbox = await Mailboxes.findOne({ + alias: t.context.alias._id, + path: 'INBOX/fetch/child' + }); + t.true(typeof mailbox === 'object'); + t.is(mailbox.path, 'INBOX/fetch/child'); + + // + // write a bunch of messages to the mailbox (with and without attachments) + // + for (let i = 0; i < 100; i++) { + const raw = ` +Message-ID: +Date: ${new Date().toISOString()} +MIME-Version: 1.0 +Content-Language: en-US +To: ${t.context.alias.name}@${t.context.domain.name} +From: ${t.context.alias.name}@${t.context.domain.name} +Subject: test-${i} +Content-Type: text/plain; charset=UTF-8; format=flowed +Content-Transfer-Encoding: 7bit + +test +`.trim(); + + // eslint-disable-next-line no-await-in-loop + await client.append('INBOX/fetch/child', Buffer.from(raw), [], new Date()); + } + + for (let i = 0; i < 100; i++) { + const raw = ` +Content-Type: multipart/mixed; boundary="------------cWFvDSey27tFG0hVYLqp9hs9" +MIME-Version: 1.0 +To: ${t.context.alias.name}@${t.context.domain.name} +From: ${t.context.alias.name}@${t.context.domain.name} +Subject: test-${i} + +This is a multi-part message in MIME format. +--------------cWFvDSey27tFG0hVYLqp9hs9 +Content-Type: text/plain; charset=UTF-8; format=flowed +Content-Transfer-Encoding: 7bit + +test-${i} + +--------------cWFvDSey27tFG0hVYLqp9hs9 +Content-Type: text/plain; charset=UTF-8; name="example.txt" +Content-Disposition: attachment; filename="example.txt" +Content-Transfer-Encoding: base64 + +ZXhhbXBsZQo= + +--------------cWFvDSey27tFG0hVYLqp9hs9--`.trim(); + + // eslint-disable-next-line no-await-in-loop + await client.append('INBOX/fetch/child', Buffer.from(raw), [], new Date()); + } + + const lock = await client.getMailboxLock('INBOX/fetch/child'); + + try { + // fetchOne + // `exists` is the largest seq number available in mailbox + const message = await client.fetchOne(client.mailbox.exists, { + source: true + }); + + const msg = await Messages.findOne({ + mailbox: mailbox._id, + alias: t.context.alias._id, + uid: message.uid + }) + .lean() + .exec(); + t.is( + message.source.toString(), + splitLines(msg.raw.toString()).join('\r\n') + ); + + // fetch + // uid is always included, envelope strings are in unicode + for await (const message of client.fetch('1:*', { envelope: true })) { + // NOTE: since emailId not working (should be message.id from db) + t.is( + message.id, + createHash('md5') + .update( + [ + mailbox.path, + mailbox.uidValidity.toString(), + message.uid.toString() + ].join(':') + ) + .digest('hex') + ); + } + + // fetch (with search) + for await (const message of client.fetch( + { + or: [{ to: `${t.context.alias.name}@${t.context.domain.name}` }] + }, + { envelope: true, uid: true }, + { uid: true } + )) { + // NOTE: since emailId not working (should be message.id from db) + t.is( + message.id, + createHash('md5') + .update( + [ + mailbox.path, + mailbox.uidValidity.toString(), + message.uid.toString() + ].join(':') + ) + .digest('hex') + ); + } + } finally { + lock.release(); + } + + // cleanup + await client.logout(); +}); + +test('onSubscribe', async (t) => { + await t.context.imapFlow.mailboxCreate('subscribe'); + const z = await t.context.imapFlow.mailboxSubscribe('subscribe'); + t.is(z, true); + const f = await t.context.imapFlow.mailboxSubscribe('subscribeFail'); + t.is(f, false); +}); + +test('onUnsubscribe', async (t) => { + await t.context.imapFlow.mailboxCreate('unsubscribe'); + t.is(await t.context.imapFlow.mailboxSubscribe('unsubscribe'), true); + t.is(await t.context.imapFlow.mailboxUnsubscribe('unsubscribe'), true); + t.is(await t.context.imapFlow.mailboxUnsubscribe('unsubscribe'), true); +}); + +test('onGetQuotaRoot', async (t) => { + // creates unique user/domain/alias for quota + // (otherwise would interfere with other tests) + const user = await factory.create('user', { + plan: 'enhanced_protection', + [config.userFields.planSetAt]: dayjs().startOf('day').toDate() + }); + + await factory.create('payment', { + user: user._id, + amount: 300, + invoice_at: dayjs().startOf('day').toDate(), + method: 'free_beta_program', + duration: ms('30d'), + plan: user.plan, + kind: 'one-time' + }); + + await user.save(); + + const domain = await factory.create('domain', { + members: [{ user: user._id, group: 'admin' }], + plan: user.plan, + resolver: t.context.imap.resolver, + has_smtp: true + }); + + const alias = await factory.create('alias', { + user: user._id, + domain: domain._id, + recipients: [user.email] + }); + + const pass = await alias.createToken(); + await alias.save(); + + // spoof dns records + const map = new Map(); + map.set( + `txt:${domain.name}`, + t.context.imap.resolver.spoofPacket( + domain.name, + 'TXT', + [`${config.paidPrefix}${domain.verification_record}`], + true + ) + ); + + // store spoofed dns cache + await t.context.imap.resolver.options.cache.mset(map); + + const imapFlow = new ImapFlow({ + host: IP_ADDRESS, + port: t.context.port, + secure: t.context.secure, + logger, + tls, + auth: { + user: `${alias.name}@${domain.name}`, + pass + } + }); + + await imapFlow.connect(); + + await imapFlow.mailboxCreate('boopboop'); + + { + const quota = await imapFlow.getQuota('boopboop'); + t.deepEqual(quota, { + path: 'boopboop', + storage: { + usage: 0, + limit: config.maxQuotaPerAlias, + status: '0%' + } + }); + } + + t.is(await imapFlow.getQuota('beepdoesnotexist'), false); + + // add a message to ensure quota used + const raw = ` +Content-Type: multipart/mixed; boundary="------------cWFvDSey27tFG0hVYLqp9hs9" +MIME-Version: 1.0 +To: ${alias.name}@${domain.name} +From: ${alias.name}@${domain.name} +Subject: test + +This is a multi-part message in MIME format. +--------------cWFvDSey27tFG0hVYLqp9hs9 +Content-Type: text/plain; charset=UTF-8; format=flowed +Content-Transfer-Encoding: 7bit + +test + +--------------cWFvDSey27tFG0hVYLqp9hs9 +Content-Type: text/plain; charset=UTF-8; name="example.txt" +Content-Disposition: attachment; filename="example.txt" +Content-Transfer-Encoding: base64 + +ZXhhbXBsZQo= + +--------------cWFvDSey27tFG0hVYLqp9hs9--`.trim(); + + const append = await imapFlow.append( + 'boopboop', + Buffer.from(raw), + ['\\Seen'], + new Date() + ); + + const mailbox = await Mailboxes.findOne({ + alias: alias._id, + path: append.destination + }); + + t.is(mailbox.path, append.destination); + + { + const message = await Messages.findOne({ + alias: alias._id, + mailbox: mailbox._id, + uid: append.uid + }) + .lean() + .exec(); + const storageUsed = await Aliases.getStorageUsed(alias); + t.is(storageUsed, 604); + const quota = await imapFlow.getQuota('boopboop'); + t.deepEqual(quota, { + path: 'boopboop', + storage: { + // message size is rounded to nearest 1024 bytes + usage: Math.ceil(message.size / 1024) * 1024, + limit: config.maxQuotaPerAlias, + status: '0%' + } + }); + } +}); + +test('onGetQuota', async (t) => { + const quota = await t.context.imapFlow.getQuota(); + t.deepEqual(quota, { + path: 'INBOX', + storage: { + usage: 0, + limit: config.maxQuotaPerAlias, + status: '0%' + } + }); +}); + +test('onCopy', async (t) => { + // create a bunch of messages in copy folder + await t.context.imapFlow.mailboxCreate('copy'); + for (let i = 0; i < 10; i++) { + const raw = ` +Date: ${new Date().toISOString()} +MIME-Version: 1.0 +Content-Language: en-US +To: ${t.context.alias.name}@${t.context.domain.name} +From: ${t.context.alias.name}@${t.context.domain.name} +Subject: test-${i} +Content-Type: text/plain; charset=UTF-8; format=flowed +Content-Transfer-Encoding: 7bit + +test +`.trim(); + + // eslint-disable-next-line no-await-in-loop + await t.context.imapFlow.append('copy', Buffer.from(raw), [], new Date()); + } + + // connect to mailbox + await t.context.imapFlow.mailboxOpen('copy'); + + // attempt to copy messages to "backup" folder + // when it doesn't yet exist results in a fail (false) + t.is(await t.context.imapFlow.messageCopy('1:*', 'backup'), false); + + // copy all messages to a mailbox called "Backup" (must exist) + await t.context.imapFlow.mailboxCreate('backup'); + const result = await t.context.imapFlow.messageCopy('1:*', 'backup'); + t.is(result.path, 'copy'); + t.is(result.destination, 'backup'); + t.is(result.uidMap.size, 10); +}); + +// delete removes an entire mailbox +test('onDelete', async (t) => { + const err = await t.throwsAsync(t.context.imapFlow.mailboxDelete('BOOPBAZ')); + t.is(err.message, 'Command failed'); + t.regex(err.response, /NO \[NONEXISTENT] DELETE completed/); + t.is(err.responseStatus, 'NO'); + t.is(err.responseText, 'DELETE completed'); + t.is(err.serverResponseCode, 'NONEXISTENT'); + await t.context.imapFlow.mailboxCreate('WUHWOH'); + const info = await t.context.imapFlow.mailboxDelete('WUHWOH'); + t.is(info.path, 'WUHWOH'); +}); + +// expunge deletes messages +test('onExpunge', async (t) => { + await t.context.imapFlow.mailboxCreate('expunge'); + + const raw = ` +Content-Type: multipart/mixed; boundary="------------cWFvDSey27tFG0hVYLqp9hs9" +MIME-Version: 1.0 +To: ${t.context.alias.name}@${t.context.domain.name} +From: ${t.context.alias.name}@${t.context.domain.name} +Subject: test + +This is a multi-part message in MIME format. +--------------cWFvDSey27tFG0hVYLqp9hs9 +Content-Type: text/plain; charset=UTF-8; format=flowed +Content-Transfer-Encoding: 7bit + +test + +--------------cWFvDSey27tFG0hVYLqp9hs9 +Content-Type: text/plain; charset=UTF-8; name="example.txt" +Content-Disposition: attachment; filename="example.txt" +Content-Transfer-Encoding: base64 + +ZXhhbXBsZQo= + +--------------cWFvDSey27tFG0hVYLqp9hs9--`.trim(); + + await t.context.imapFlow.append( + 'expunge', + Buffer.from(raw), + ['\\Seen'], + new Date() + ); + + const mailbox = await Mailboxes.findOne({ + alias: t.context.alias._id, + path: 'expunge' + }); + + t.is(mailbox.path, 'expunge'); + + // note that a message won't get marked as deleted + // since it has to have a Deleted flag at first + const uids = await Messages.distinct('uid', { + mailbox: mailbox._id, + alias: t.context.alias._id, + undeleted: true + }); + + t.is(uids.length, 1); + + await t.context.imapFlow.mailboxOpen('expunge'); + + t.true( + await t.context.imapFlow.messageFlagsAdd( + uids, + ['\\Deleted'], + // + { uid: true } + ) + ); + + let data; + t.context.imapFlow.on('expunge', (_data) => { + data = _data; + }); + + t.true(await t.context.imapFlow.messageDelete({ all: true })); + + if (!data) await pWaitFor(() => Boolean(data), { timeout: ms('5s') }); + + t.is(data.path, 'expunge'); + t.is(data.vanished, false); + t.is(data.seq, 1); +}); + +// NOTE: onLsub is taken care of by onSubscribe and unSubscribe +// test('onLsub', async (t) => {}); + +test('onMove', async (t) => { + // create a bunch of messages in move folder + await t.context.imapFlow.mailboxCreate('move'); + for (let i = 0; i < 10; i++) { + const raw = ` +Date: ${new Date().toISOString()} +MIME-Version: 1.0 +Content-Language: en-US +To: ${t.context.alias.name}@${t.context.domain.name} +From: ${t.context.alias.name}@${t.context.domain.name} +Subject: test-${i} +Content-Type: text/plain; charset=UTF-8; format=flowed +Content-Transfer-Encoding: 7bit + +test +`.trim(); + + // eslint-disable-next-line no-await-in-loop + await t.context.imapFlow.append('move', Buffer.from(raw), [], new Date()); + } + + // connect to mailbox + await t.context.imapFlow.mailboxOpen('move'); + + // attempt to move messages to "was-moved" folder + // when it doesn't yet exist results in a fail (false) + t.is(await t.context.imapFlow.messageMove('1:*', 'was-moved'), false); + + // move all messages to a mailbox called "was-moved" (ust exist) + await t.context.imapFlow.mailboxCreate('was-moved'); + const result = await t.context.imapFlow.messageMove('1:*', 'was-moved'); + t.is(result.path, 'move'); + t.is(result.destination, 'was-moved'); + t.is(result.uidMap.size, 10); +}); + +test('onOpen', async (t) => { + await t.context.imapFlow.mailboxCreate('opened'); + const result = await t.context.imapFlow.mailboxOpen('opened'); + t.is(result.path, 'opened'); +}); + +test('onRename', async (t) => { + await t.context.imapFlow.mailboxCreate(['parent', 'child']); + const info = await t.context.imapFlow.mailboxRename( + 'parent/child', + 'important' + ); + t.is(info.path, 'parent/child'); + t.is(info.newPath, 'important'); +}); + +test('onSearch', async (t) => { + await t.context.imapFlow.mailboxCreate('searchwoowoo'); + + // create a bunch of seen and unseen messages + for (let i = 0; i < 10; i++) { + const raw = ` +Date: ${new Date().toISOString()} +MIME-Version: 1.0 +Content-Language: en-US +To: ${t.context.alias.name}@${t.context.domain.name} +From: Linus <${t.context.alias.name}@${t.context.domain.name}> +Subject: Beep Baz Boop unseen-test-${i} +Content-Type: text/plain; charset=UTF-8; format=flowed +Content-Transfer-Encoding: 7bit + +test Snap Ya Ya Ya +`.trim(); + + // eslint-disable-next-line no-await-in-loop + await t.context.imapFlow.append( + 'searchwoowoo', + Buffer.from(raw), + [], + new Date() + ); + } + + for (let i = 0; i < 10; i++) { + const raw = ` +Date: ${new Date().toISOString()} +MIME-Version: 1.0 +Content-Language: en-US +To: ${t.context.alias.name}@${t.context.domain.name} +From: ${t.context.alias.name}@${t.context.domain.name} +Subject: seen-test-${i} +Content-Type: text/plain; charset=UTF-8; format=flowed +Content-Transfer-Encoding: 7bit + +test +`.trim(); + + // eslint-disable-next-line no-await-in-loop + await t.context.imapFlow.append( + 'searchwoowoo', + Buffer.from(raw), + ['\\Seen'], + new Date() + ); + } + + await t.context.imapFlow.mailboxOpen('searchwoowoo'); + + // find all unseen messages + const list1 = await t.context.imapFlow.search({ seen: true }); + // use OR modifier (array of 2 or more search queries) + const list2 = await t.context.imapFlow.search({ + seen: false, + or: [{ flagged: true }, { from: 'linus' }] + }); + t.is(list1.length, 10); + t.is(list2.length, 10); + t.notDeepEqual(list1, list2); + + // + // iterate over all possible search params for maximum coverage + // (we can further refine this in the future) + // + + // booleans + for (const key of [ + 'answered', + 'deleted', + 'draft', + 'flagged', + 'seen', + 'all', + 'new', + 'old', + 'recent' + ]) { + // eslint-disable-next-line no-await-in-loop + await t.context.imapFlow.search({ [key]: false }); + // eslint-disable-next-line no-await-in-loop + await t.context.imapFlow.search({ [key]: true }); + } + + // strings (e.g. $text search) + for (const key of [ + 'to', + 'from', + 'cc', + 'bcc', + 'body', + 'subject', + 'keyword', + 'unKeyword' + ]) { + // eslint-disable-next-line no-await-in-loop + await t.context.imapFlow.search({ [key]: 'test' }); + } + + // size + for (const key of ['larger', 'smaller']) { + // eslint-disable-next-line no-await-in-loop + await t.context.imapFlow.search({ [key]: 100 }); + } + + // dates + for (const key of [ + 'before', + 'on', + 'since', + 'sentBefore', + 'sentOn', + 'sentSince' + ]) { + // eslint-disable-next-line no-await-in-loop + await t.context.imapFlow.search({ [key]: new Date(Date.now() + 10000) }); + } +}); + +test('onStatus', async (t) => { + await t.context.imapFlow.mailboxCreate('yoyo'); + + // create a bunch of seen and unseen messages + for (let i = 0; i < 10; i++) { + const raw = ` +Date: ${new Date().toISOString()} +MIME-Version: 1.0 +Content-Language: en-US +To: ${t.context.alias.name}@${t.context.domain.name} +From: ${t.context.alias.name}@${t.context.domain.name} +Subject: unseen-test-${i} +Content-Type: text/plain; charset=UTF-8; format=flowed +Content-Transfer-Encoding: 7bit + +test +`.trim(); + + // eslint-disable-next-line no-await-in-loop + await t.context.imapFlow.append('yoyo', Buffer.from(raw), [], new Date()); + } + + for (let i = 0; i < 10; i++) { + const raw = ` +Date: ${new Date().toISOString()} +MIME-Version: 1.0 +Content-Language: en-US +To: ${t.context.alias.name}@${t.context.domain.name} +From: ${t.context.alias.name}@${t.context.domain.name} +Subject: seen-test-${i} +Content-Type: text/plain; charset=UTF-8; format=flowed +Content-Transfer-Encoding: 7bit + +test +`.trim(); + + // eslint-disable-next-line no-await-in-loop + await t.context.imapFlow.append( + 'yoyo', + Buffer.from(raw), + ['\\Seen'], + new Date() + ); + } + + await t.context.imapFlow.mailboxOpen('yoyo'); + const status = await t.context.imapFlow.status('yoyo', { + messages: true, + unseen: true + }); + t.is(status.path, 'yoyo'); + t.is(status.messages, 20); + t.is(status.unseen, 10); +}); + +test('message flags set', async (t) => { + await t.context.imapFlow.mailboxCreate('flag-set'); + + const raw = ` +Content-Type: multipart/mixed; boundary="------------cWFvDSey27tFG0hVYLqp9hs9" +MIME-Version: 1.0 +To: ${t.context.alias.name}@${t.context.domain.name} +From: ${t.context.alias.name}@${t.context.domain.name} +Subject: test + +This is a multi-part message in MIME format. +--------------cWFvDSey27tFG0hVYLqp9hs9 +Content-Type: text/plain; charset=UTF-8; format=flowed +Content-Transfer-Encoding: 7bit + +test + +--------------cWFvDSey27tFG0hVYLqp9hs9 +Content-Type: text/plain; charset=UTF-8; name="example.txt" +Content-Disposition: attachment; filename="example.txt" +Content-Transfer-Encoding: base64 + +ZXhhbXBsZQo= + +--------------cWFvDSey27tFG0hVYLqp9hs9--`.trim(); + + await t.context.imapFlow.append( + 'flag-set', + Buffer.from(raw), + ['\\Seen', '\\Flagged', '\\Draft'], + new Date() + ); + + await t.context.imapFlow.mailboxOpen('flag-set'); + + t.true( + await t.context.imapFlow.messageFlagsSet({ all: true }, ['\\Deleted']) + ); + + const mailbox = await Mailboxes.findOne({ + path: 'flag-set', + alias: t.context.alias._id + }); + + t.is(mailbox.path, 'flag-set'); + + const message = await Messages.findOne({ + mailbox: mailbox._id, + alias: t.context.alias._id + }); + + t.deepEqual(message.flags, ['\\Deleted']); +}); + +test('message flags remove', async (t) => { + await t.context.imapFlow.mailboxCreate('flag-remove'); + + const raw = ` +Content-Type: multipart/mixed; boundary="------------cWFvDSey27tFG0hVYLqp9hs9" +MIME-Version: 1.0 +To: ${t.context.alias.name}@${t.context.domain.name} +From: ${t.context.alias.name}@${t.context.domain.name} +Subject: test + +This is a multi-part message in MIME format. +--------------cWFvDSey27tFG0hVYLqp9hs9 +Content-Type: text/plain; charset=UTF-8; format=flowed +Content-Transfer-Encoding: 7bit + +test + +--------------cWFvDSey27tFG0hVYLqp9hs9 +Content-Type: text/plain; charset=UTF-8; name="example.txt" +Content-Disposition: attachment; filename="example.txt" +Content-Transfer-Encoding: base64 + +ZXhhbXBsZQo= + +--------------cWFvDSey27tFG0hVYLqp9hs9--`.trim(); + + await t.context.imapFlow.append( + 'flag-remove', + Buffer.from(raw), + ['\\Seen', '\\Flagged', '\\Draft'], + new Date() + ); + + await t.context.imapFlow.mailboxOpen('flag-remove'); + + t.true( + await t.context.imapFlow.messageFlagsRemove({ all: true }, ['\\Flagged']) + ); + + const mailbox = await Mailboxes.findOne({ + path: 'flag-remove', + alias: t.context.alias._id + }); + + t.is(mailbox.path, 'flag-remove'); + + const message = await Messages.findOne({ + mailbox: mailbox._id, + alias: t.context.alias._id + }); + + t.deepEqual(message.flags, ['\\Seen', '\\Draft']); +}); diff --git a/test/smtp/index.js b/test/smtp/index.js index 0b7707980c..d7a5753c5e 100644 --- a/test/smtp/index.js +++ b/test/smtp/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const util = require('node:util'); const { Buffer } = require('node:buffer'); const { Writable } = require('node:stream'); diff --git a/test/utils.js b/test/utils.js index d5821bd1ae..b1f6591cde 100644 --- a/test/utils.js +++ b/test/utils.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const API = require('@ladjs/api'); const Redis = require('ioredis-mock'); const Web = require('@ladjs/web'); diff --git a/test/web/auth.js b/test/web/auth.js index f7d2b6e1bb..c81d51882e 100644 --- a/test/web/auth.js +++ b/test/web/auth.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const util = require('util'); const cryptoRandomString = require('crypto-random-string'); diff --git a/test/web/index.js b/test/web/index.js index 4c087ee5bf..6f07728de0 100644 --- a/test/web/index.js +++ b/test/web/index.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const test = require('ava'); const utils = require('../utils'); diff --git a/test/web/otp.js b/test/web/otp.js index 62feb08141..1d855a4a21 100644 --- a/test/web/otp.js +++ b/test/web/otp.js @@ -1,3 +1,8 @@ +/** + * Copyright (c) Forward Email LLC + * SPDX-License-Identifier: BUSL-1.1 + */ + const crypto = require('crypto'); const test = require('ava'); diff --git a/test/web/snapshots/index.js.md b/test/web/snapshots/index.js.md index a36c30352d..fbdee9477f 100644 --- a/test/web/snapshots/index.js.md +++ b/test/web/snapshots/index.js.md @@ -17,14 +17,14 @@ Generated by [AVA](https://avajs.dev). "logo": "https://forwardemail.net/img/social.png",␊ "sameAs": ["https://en.wikipedia.org/wiki/Forward_Email"]␊ }␊ -

Free, private, and secure email for custom domains.

For 6 years and counting, we are the go-to email service for hundreds of thousands of creators, developers, and businesses. Send and receive email as you@yourdomain.com.

Try for free
Learn more
Happy users
dhh
DHHVerified
@dhh
Congrats for fully launching Forward Email – a forwarding service␊ for email that doesn't keep logs or store emails, and which works with ARC to ensure␊ signed forwards don't trip email filters 👏. I'm a happy user! ❤️
Creator of Ruby on Rails, Founder & CTO at Basecamp & HEY
abhinemani
abhi nemaniVerified
@abhinemani
Have now switched email forwarding from MailGun to ForwardEmail.net␊ . Simple and painless (and free!). Just some DNS changes, and it just works. Thanks
Government Technology Advisor, Sacramento and Los Angeles
andrewe
Andrew Escobar (Andres)Verified
@andrewe
This is so dope. Thank you. forwardemail.net
Fintech Explorer and Open Finance Advocate
stigi
Ullrich Schäfer
@stigi
Thanks so much for forwardemail.net␊ ! It solves a real problem for our little org!
Mobile Lead at Pitch, Formerly at Facebook and Soundcloud
andregce
Andre Goncalves
@andregce
So they made this cool app that forwards email from your own domain to your Gmail inbox. There is even a catch all option, so sales@, support@, etc all goes to your own inbox. Check it out! It's free! forwardemail.net
Computer Engineer, Software Developer
philcockfield
Phil
@philcockfield
Thanks for your forwardemail.net␊ - . What you've done is a beautiful thing! Your FAQ just smacks of integrity, and is just the thing I need.
hypersheet, db.team

Unlimited email aliases

Open-source

Unlike other services, we do not store logs (with the exception of errors and outbound SMTP) and are 100% open-source. We're the only service that never stores nor writes to disk any emails – it's all done in-memory.

Features

Privacy-focused

We created this service because you have a right to privacy. Existing services did not respect it. We use robust encryption with TLS, do not store SMTP logs (with the exception of errors and outbound SMTP), and do not write your emails to disk storage.

Regain your privacy Regain your privacy

Disposable Addresses

Create a specific or an anonymous email address that forwards to you. You can even assign it a label and enable or disable it at any time to keep your inbox tidy. Your actual email address is never exposed.

Disposable addresses Disposable addresses

Multiple Recipients and Wildcards

You can forward a single address to multiple, and even use wildcard addresses – also known as catch-all's. Managing your company's inboxes has never been easier.

Start forwarding now Start forwarding now

"Send mail as" with Gmail and Outlook

You'll never have to leave your inbox to send out emails as if they're from your company. Send and reply-to messages as if they're from you@company.com directly from you@gmail.com or you@outlook.com.

Configure your inbox Configure your inbox

Enterprise-grade

We are email security and deliverability experts.

  • Protection against phishing, malware, viruses, and spam.
  • Industry standard checks for DMARC, SPF, DKIM, SRS, ARC, and MTA-STS.
  • SOC 2 Type 2 compliant bare metal servers from Vultr and Digital Ocean.
  • Unlike other services, we use 100% open-source software.
  • Backscatter prevention, denylists, and rate limiting.
  • Global load balancers and application-level DNS over HTTPS ("DoH").
` + ` ## returns Spanish homepage @@ -56,14 +56,14 @@ Generated by [AVA](https://avajs.dev). "logo": "https://forwardemail.net/img/social.png",␊ "sameAs": ["https://en.wikipedia.org/wiki/Forward_Email"]␊ }␊ -

Correo electrónico gratuito, privado y seguro para dominios personalizados.

Durante 6 años y contando, somos el servicio de correo electrónico de referencia para cientos de miles de creadores, desarrolladores y empresas. Envía y recibe correos electrónicos como you@yourdomain.com .

Prueba gratis
Aprende más
Usuarios felices
dhh
DHHVerified
@dhh
Congrats for fully launching Forward Email – a forwarding service␊ for email that doesn't keep logs or store emails, and which works with ARC to ensure␊ signed forwards don't trip email filters 👏. I'm a happy user! ❤️
Creator of Ruby on Rails, Founder & CTO at Basecamp & HEY
abhinemani
abhi nemaniVerified
@abhinemani
Have now switched email forwarding from MailGun to ForwardEmail.net␊ . Simple and painless (and free!). Just some DNS changes, and it just works. Thanks
Government Technology Advisor, Sacramento and Los Angeles
andrewe
Andrew Escobar (Andres)Verified
@andrewe
This is so dope. Thank you. forwardemail.net
Fintech Explorer and Open Finance Advocate
stigi
Ullrich Schäfer
@stigi
Thanks so much for forwardemail.net␊ ! It solves a real problem for our little org!
Mobile Lead at Pitch, Formerly at Facebook and Soundcloud
andregce
Andre Goncalves
@andregce
So they made this cool app that forwards email from your own domain to your Gmail inbox. There is even a catch all option, so sales@, support@, etc all goes to your own inbox. Check it out! It's free! forwardemail.net
Computer Engineer, Software Developer
philcockfield
Phil
@philcockfield
Thanks for your forwardemail.net␊ - . What you've done is a beautiful thing! Your FAQ just smacks of integrity, and is just the thing I need.
hypersheet, db.team

Alias de correo electrónico ilimitados

Fuente abierta

A diferencia de otros servicios, no almacenamos registros (con la excepción de errores y SMTP saliente ) y somos 100% de código abierto . Somos el único servicio que nunca almacena ni escribe en el disco ningún correo electrónico: todo se hace en la memoria.

Características

Centrado en la privacidad

Creamos este servicio porque usted tiene derecho a la privacidad. Los servicios existentes no lo respetaban. Utilizamos cifrado sólido con TLS, no almacenamos registros SMTP (con la excepción de errores y SMTP saliente) y no escribimos sus correos electrónicos en el almacenamiento del disco.

Recupera tu privacidad Recupera tu privacidad

Direcciones desechables

Cree una dirección de correo electrónico específica o anónima que le reenvíe. Incluso puede asignarle una etiqueta y habilitarla o deshabilitarla en cualquier momento para mantener su bandeja de entrada ordenada. Su dirección de correo electrónico real nunca se expone.

Direcciones desechables Direcciones desechables

Múltiples destinatarios y comodines

Puede reenviar una sola dirección a múltiples, e incluso usar direcciones comodín – También conocido como "todo en uno". Administrar las bandejas de entrada de su empresa nunca ha sido tan fácil.

Comience a reenviar ahora Comience a reenviar ahora

"Enviar correo como" con Gmail y Outlook

Nunca tendrás que salir de tu bandeja de entrada para enviar correos electrónicos como si fueran de tu empresa. Envíe y responda mensajes como si fueran de usted@empresa.com directamente desde usted@gmail.com o usted@outlook.com.

Configura tu bandeja de entrada Configura tu bandeja de entrada

Grado empresarial

Somos expertos en seguridad de correo electrónico y capacidad de entrega.

  • Protección contra phishing, malware, virus y spam.
  • Verificaciones estándar de la industria para DMARC, SPF, DKIM, SRS, ARC y MTA-STS.
  • Servidores bare metal compatibles con SOC 2 Tipo 2 de Vultr y Digital Ocean.
  • A diferencia de otros servicios, utilizamos software 100% de código abierto.
  • Prevención de retrodispersión, listas de denegación y limitación de velocidad.
  • Equilibradores de carga globales y DNS a nivel de aplicación sobre HTTPS ("DoH").
` + ` ## returns English ToS @@ -95,7 +95,7 @@ Generated by [AVA](https://avajs.dev). "logo": "https://forwardemail.net/img/social.png",␊ "sameAs": ["https://en.wikipedia.org/wiki/Forward_Email"]␊ }␊ -